40
Bài 1: Bước 1: Tạo lớp danh sách package quanLySinhVien; import java.io.Serializable; import java.util.ArrayList; import java.util.List; public class DanhSach <T> implements Serializable{ /** * */ private static final long serialVersionUID = 1L; private List<T> ds; /** * Constructor: Khởi tạo danh sách các đối tượng kiểu T */ public DanhSach() { ds=new ArrayList<T>(); } /** * Thêm 1 đối tượng t thuộc kiểu T vào danh sách * @param t là đối tượng cần thêm vào danh sách

Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

Embed Size (px)

Citation preview

Page 1: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

Bài 1:

Bước 1: Tạo lớp danh sách

package quanLySinhVien;

import java.io.Serializable;

import java.util.ArrayList;

import java.util.List;

public class DanhSach <T> implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

private List<T> ds;

/**

* Constructor: Khởi tạo danh sách các đối tượng kiểu T

*/

public DanhSach() {

ds=new ArrayList<T>();

}

/**

* Thêm 1 đối tượng t thuộc kiểu T vào danh sách

* @param t là đối tượng cần thêm vào danh sách

* @return true nếu thêm thàng công -- không trùng mã số

* @return false nếu ngược lại

*/

public boolean them(T t) {

Page 2: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

if(ds.contains(t))

return false;

ds.add(t);

return true;

}

/**

* Xuất toàn bộ những phần tử trong List ra cửa sổ console

*/

public void xuat() {

for(T t: ds)

System.out.println(t);

}

/**

* Tìm kiếm thông tin khi biết khóa

* @param t -- chứa khóa cần tìm

* @return đối tượng kiểu T nếu tìm thấy

* @return null nếu ngược lại

*/

public T timKiem(T t) {

if(ds.contains(t))

return ds.get(ds.indexOf(t));

return null;

}

/**

* Xóa 1 đối tượng t thuộc kiểu T khi biết khóa

* @param t

* @return true nếu tồn tại

* @return false nếu không tồn tại

Page 3: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

*/

public boolean xoa(T t) {

return ds.remove(t);

}

/**

* Get danh sách các đối tượng kiểu T

* @return

*/

public List<T> getDs() {

return ds;

}

/**

* Cap nhat

* @param tOld

* @param tNew

* @return boolean

*/

public boolean capNhat(T tOld, T tNew) {

if(ds.contains(tOld) && ds.indexOf(tOld)==ds.indexOf(tNew)){

ds.remove(tOld);

ds.add(tNew);

return true;

}

return false;

}

}

Bước 2: Tạo lớp Lớp Học

package quanLySinhVien;

Page 4: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

import java.io.Serializable;

public class LopHoc implements Serializable, Comparable<LopHoc>{

/**

*

*/

private static final long serialVersionUID = 1L;

private String maLop, tenLop, chuyenNganh;

public LopHoc(String maLop, String tenLop, String chuyenNganh) {

super();

this.maLop = maLop;

this.tenLop = tenLop;

this.chuyenNganh = chuyenNganh;

}

public LopHoc(String maLop) {

this(maLop,"","");

}

public String getMaLop() {

return maLop;

}

public void setMaLop(String maLop) {

this.maLop = maLop;

}

Page 5: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public String getTenLop() {

return tenLop;

}

public void setTenLop(String tenLop) {

this.tenLop = tenLop;

}

public String getChuyenNganh() {

return chuyenNganh;

}

public void setChuyenNganh(String chuyenNganh) {

this.chuyenNganh = chuyenNganh;

}

@Override

public String toString() {

return String.format("%-10s %-25s %-15s", maLop,tenLop,chuyenNganh);

}

@Override

public boolean equals(Object obj) {

LopHoc lh=(LopHoc)obj;

return this.maLop.equalsIgnoreCase(lh.maLop);

}

@Override

Page 6: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public int compareTo(LopHoc o) {

return this.maLop.compareToIgnoreCase(o.maLop);

}

}

Bước 3: Tạo lớp Sinh Viên

package quanLySinhVien;

import java.io.Serializable;

public class SinhVien implements Serializable {

/**

*

*/

private static final long serialVersionUID = 1L;

protected String maSV, hoSV, tenSV;

protected int tuoi;

protected String maLop;

public SinhVien(String maSV, String hoSV, String tenSV, int tuoi,

String maLop) {

super();

this.maSV = maSV;

this.hoSV = hoSV;

this.tenSV = tenSV;

this.tuoi = tuoi;

this.maLop = maLop;

}

public SinhVien(String maSV) {

this(maSV,"","",0,"");

Page 7: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

public String getMaSV() {

return maSV;

}

public void setMaSV(String maSV) {

this.maSV = maSV;

}

public String getHoSV() {

return hoSV;

}

public void setHoSV(String hoSV) {

this.hoSV = hoSV;

}

public String getTenSV() {

return tenSV;

}

public void setTenSV(String tenSV) {

this.tenSV = tenSV;

}

public int getTuoi() {

return tuoi;

}

Page 8: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public void setTuoi(int tuoi) {

this.tuoi = tuoi;

}

public String getMaLop() {

return maLop;

}

public void setMaLop(String maLop) {

this.maLop = maLop;

}

@Override

public String toString() {

return String.format("%-10s %-20s %-5s %-10s", maSV,hoSV+" "+tenSV,tuoi,maLop);

}

@Override

public boolean equals(Object obj) {

SinhVien sv=(SinhVien)obj;

return this.maSV.equalsIgnoreCase(sv.maSV);

}

}

Bước 4: Tạo lớp Sinh Viên Niên Chế

package quanLySinhVien;

import java.io.Serializable;

Page 9: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public class SinhVienNienChe extends SinhVien implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

private int hocKy, nam;

public SinhVienNienChe(String maSV, String hoSV, String tenSV, int tuoi,

String maLop, int hocKy, int nam) {

super(maSV, hoSV, tenSV, tuoi, maLop);

this.hocKy = hocKy;

this.nam = nam;

}

public int getHocKy() {

return hocKy;

}

public void setHocKy(int hocKy) {

this.hocKy = hocKy;

}

public int getNam() {

return nam;

}

public void setNam(int nam) {

this.nam = nam;

Page 10: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

@Override

public String toString() {

return super.toString()+String.format("%-20s", "Nien hoc: "+hocKy+"-"+nam);

}

}

Bước 5: Tạo lớp kiểm thử

package quanLySinhVien;

import java.io.File;

import java.util.Collections;

import java.util.Comparator;

import java.util.Iterator;

import java.util.Map;

import java.util.Scanner;

import java.util.TreeMap;

public class KiemThu {

private static final String fileDSLop = "dbLH";

private static final String fileDSSV = "dbSV";

private static Scanner sc=new Scanner(System.in);

public static void main(String[] args) throws Exception{

DanhSach<LopHoc> dsLop=new DanhSach<LopHoc>();

if(new File(fileDSLop).exists())

dsLop=(DanhSach<LopHoc>)SaveLoadFile.load(fileDSLop);

DanhSach<SinhVien> dsSinhVien=new DanhSach<SinhVien>();

Page 11: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

if(new File(fileDSSV).exists())

dsSinhVien=(DanhSach<SinhVien>)SaveLoadFile.load(fileDSSV);

int chon=0;

boolean flag=true;

do{

System.out.println("1. Them lop hoc (khong trung ma lop).\n"+

"2. Xuat danh sach lop hoc.\n"+

"3. Tim lop hoc dua vao ma lop.\n"+

"4. Xoa lop hoc khi biet ma lop. Luu y: khi xoa 1 lop hoc, phai xoa toan bo sinh vien thuoc lop hoc do.\n"+

"5. Cap nhat thong tin lop hoc khi biet ma lop.\n"+

"6. Luu danh sach lop hoc.\n"+

"7. Them sinh vien (khong trung ma SV, ma lop phai ton tai).\n"+

"8. Xuat danh sach sinh vien.\n"+

"9. Tim sinh vien dua tren ma so.\n"+

"10. Xoa 1 sinh vien dua tren ma so.\n"+

"11. Cap nhat thong sinh vien dua tren ma so.\n"+

"12. Luu danh sach sinh vien.\n"+

"13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+

"14. Thong ke tong so sinh vien theo tung lop.");

chon=sc.nextInt();

switch (chon) {

case 1:

dsLop.them(nhapLop());

break;

case 2:

Page 12: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

dsLop.xuat();

break;

case 3:

sc.nextLine();

System.out.println("Nhap ma lop can tim: ");

String maLop=sc.nextLine();

LopHoc lh=dsLop.timKiem(new LopHoc(maLop));

if(lh!=null)

System.out.println(lh);

else

System.out.println("Không ton tai lop.");

break;

case 4:

sc.nextLine();

System.out.println("Nhập mã lớp cần xóa: ");

maLop=sc.nextLine();

boolean kq=dsLop.xoa(new LopHoc(maLop));

if(kq) //tương đương kq==true

{

System.out.printf("Xóa lớp %s thành công.\n",maLop);

Iterator<SinhVien> it=dsSinhVien.getDs().iterator();

while(it.hasNext()){

SinhVien sv=it.next();

if(sv.getMaLop().equalsIgnoreCase(maLop))

it.remove();

}

}

Page 13: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

else

System.out.println("Xóa không thành công.");

break;

case 5:

sc.nextLine();

System.out.println("Nhap ma lop can cap nhat: ");

maLop=sc.nextLine();

LopHoc lhOld=new LopHoc(maLop);

System.out.println("Nhap chuyen nganh moi cho lop nay: ");

String chuyenNganh=sc.nextLine();

LopHoc lhNew=lhOld;

lhNew.setChuyenNganh(chuyenNganh);

kq=dsLop.capNhat(lhOld, lhNew);

if(kq)

System.out.println("Cap nhat thanh cong.");

else

System.out.println("Cap nhat khong thanh cong.");

break;

case 6:

SaveLoadFile.save(dsLop, fileDSLop);

break;

case 7:

//Kiểm tra mã lớp có tồn tại không?

SinhVien sv=nhapSinhVien();

lh=dsLop.timKiem(new LopHoc(sv.getMaLop()));

if(lh!=null){

Page 14: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

if(dsSinhVien.them(sv))

System.out.println("Thêm thành công.");

else

System.out.println("Thêm không thành công. Trùng mã sv.");

}else

System.out.println("Thêm không thành công. Không tồn tại mã lớp");

break;

case 8:

dsSinhVien.xuat();

break;

case 12:

SaveLoadFile.save(dsSinhVien, fileDSSV);

break;

case 13:

Collections.sort(dsSinhVien.getDs(),new Comparator<SinhVien>() {

@Override

public int compare(SinhVien sv1, SinhVien sv2) {

int kq=sv1.getTenSV().compareToIgnoreCase(sv2.getTenSV());

return (kq==0) ? sv1.getHoSV().compareToIgnoreCase(sv2.getHoSV()) : kq;

}

});

break;

case 14:

//Key: LopHoc

Page 15: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

//Value: Số sinh viên

Map<LopHoc, Integer> thongKe=new TreeMap<LopHoc,Integer>();

for(SinhVien s: dsSinhVien.getDs()){

LopHoc l=dsLop.timKiem(new LopHoc(s.getMaLop()));

if(thongKe.containsKey(l))

thongKe.put(l, thongKe.get(l)+1);

else

thongKe.put(l, 1);

}

// System.out.println(thongKe);

//Xuất mỗi lớp trên 1 dòng

Iterator<LopHoc> itKey=thongKe.keySet().iterator();

Iterator<Integer> itValue=thongKe.values().iterator();

while(itKey.hasNext()){

System.out.print(itKey.next()+"\t"+itValue.next());

System.out.println();

}

break;

default:

flag=false;

break;

}

}while(flag);

}

private static SinhVien nhapSinhVien() {

Scanner sc=new Scanner(System.in);

Page 16: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

SinhVien sv=null;

System.out.println("Nhap ma sv: ");

String maSV=sc.nextLine();

System.out.println("Nhap ho sv: ");

String hoSV=sc.nextLine();

System.out.println("Nhap ten sv: ");

String tenSV=sc.nextLine();

System.out.println("Nhap tuoi: ");

int tuoi=sc.nextInt();

sc.nextLine();

System.out.println("Nhap ma lop: ");

String maLop=sc.nextLine();

System.out.println("\t1. Sinh vien nien che\n\t2. Sinh vien tin chi");

int chon=sc.nextInt();

switch (chon) {

case 1:

System.out.println("\tNhap hoc ky: ");

int hocKy=sc.nextInt();

System.out.println("\tNhap nam hoc: ");

int nam=sc.nextInt();

sv=new SinhVienNienChe(maSV, hoSV, tenSV, tuoi, maLop, hocKy, nam);

break;

case 2:

//Sinh viên tự làm

break;

}

return sv;

Page 17: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

private static LopHoc nhapLop() {

Scanner sc=new Scanner(System.in);

System.out.println("Nhap ma lop: ");

String maLop=sc.nextLine();

System.out.println("Nhap ten lop: ");

String tenLop=sc.nextLine();

System.out.println("Nhap chuyen nganh: ");

String chuyenNganh=sc.nextLine();

return new LopHoc(maLop, tenLop, chuyenNganh);

}

}

Bước 6: Tạo lớp SaveLoadFile

package quanLySinhVien;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class SaveLoadFile {

/**

* Lưu đối tượng obj vào tập tin có tên là fileName

* @param obj

* @param fileName

* @throws Exception

Page 18: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

*/

public static void save(Object obj, String fileName) throws Exception{

FileOutputStream fos=new FileOutputStream(fileName);

ObjectOutputStream oos=new ObjectOutputStream(fos);

oos.writeObject(obj);

oos.close();

}

/**

* Nạp lại đối tượng từ tập tin có tên là fileName

* @param fileName

* @return

* @throws Exception

*/

public static Object load(String fileName) throws Exception{

Object obj=null;

FileInputStream fis=new FileInputStream(fileName);

ObjectInputStream ois=new ObjectInputStream(fis);

obj=ois.readObject();

ois.close();

return obj;

}

}

Page 19: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

Bài 2: Bán vé nhà ga

Bước 1:

package bai03Chuong05Collections;

import java.io.Serializable;

import java.text.DecimalFormat;

public class KhachHang implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

private String cMND;

private String tenKH;

private String gaDen;

private double giaTien;

public KhachHang(String cMND) {

this(cMND,"","",0.0);

}

public KhachHang(String cMND, String tenKH, String gaDen, double giaTien) {

super();

this.cMND = cMND;

this.tenKH = tenKH;

this.gaDen = gaDen;

this.giaTien = giaTien;

Page 20: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

public String getcMND() {

return cMND;

}

public void setcMND(String cMND) {

this.cMND = cMND;

}

public String getTenKH() {

return tenKH;

}

public void setTenKH(String tenKH) {

this.tenKH = tenKH;

}

public String getGaDen() {

return gaDen;

}

public void setGaDen(String gaDen) {

this.gaDen = gaDen;

}

public double getGiaTien() {

return giaTien;

}

Page 21: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public void setGiaTien(double giaTien) {

this.giaTien = giaTien;

}

@Override

public String toString() {

DecimalFormat df=new DecimalFormat("#,##0 VND");

return String.format("%-10s %-15s %-15s %10s", cMND,tenKH,gaDen,df.format(giaTien));

}

@Override

public boolean equals(Object obj) {

KhachHang kh=(KhachHang)obj;

return this.cMND.equalsIgnoreCase(kh.cMND);

}

}

Bước 2:

package bai03Chuong05Collections;

import java.io.Serializable;

import java.util.LinkedList;

import java.util.Map;

import java.util.Queue;

import java.util.Scanner;

import java.util.Set;

import java.util.TreeMap;

import java.util.TreeSet;

Page 22: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

public class DanhSachKhachHang implements Serializable{

/**

*

*/

private static final long serialVersionUID = 1L;

private Queue<KhachHang> dsDoiVe;

private Queue<KhachHang> dsCoVe;

/**

* Khởi tạo danh sách

*/

public DanhSachKhachHang() {

dsDoiVe=new LinkedList<KhachHang>();

dsCoVe=new LinkedList<KhachHang>();

}

/**

* Thêm một khách hàng mới vào hàng đợi.

* Nếu Số CMND khách hàng đã có thì không tạo phần tử mới mà chỉ cập nhật lại ga và giá tiền đến.

* Ngược lại thêm khách hàng vào hàng đợi.

* @param khNew là khách hàng mới cần thêm vào hàng đợi.

*/

public void themKhachHangVaoHangDoi(KhachHang khNew) {

for(KhachHang kh: dsDoiVe){

if(kh.getcMND().equalsIgnoreCase(khNew.getcMND())){

kh.setGaDen(khNew.getGaDen());

Page 23: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

kh.setGiaTien(khNew.getGiaTien());

return;

}

}

dsDoiVe.add(khNew);

}

/**

* Hủy một khách hàng ra khỏi danh sách. (khách hàng không mua vé nữa)

* @param cMND là cMND khách hàng không muốn xếp hàng mua vé nữa.

* @return true nếu cMND tồn tại.

* @return false nếu ngược lại.

*/

public boolean huyKhachHang(String cMND) {

KhachHang kh=new KhachHang(cMND);

if(dsDoiVe.contains(kh)){

dsDoiVe.remove(kh);

return true;

}

return false;

}

/**

* Xuất danh sách khách hàng đợi vé

*/

public void hienThiDanhSachDoi() {

for(KhachHang kh : dsDoiVe)

System.out.println(kh);

}

Page 24: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

/**

* Bán vé cho khách hàng đợi

* @return true nếu bán thành công

* @return false nếu hết khách hàng trong hàng.

*/

public boolean banVe() {

if(dsDoiVe.size()>0){

KhachHang kh=dsDoiVe.poll();

dsCoVe.add(kh);

return true;

}

return false;

}

/**

* Xuất danh sách khách hàng đã có vé.

*/

public void hienThiDanhSachCoVe() {

for(KhachHang kh: dsCoVe)

System.out.println(kh);

}

/**

* Số khách hàng chờ vé.

* @return int

*/

public int soKhachChoVe() {

return dsDoiVe.size();

Page 25: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

/**

* Số khách hàng đã có vé.

* @return int

*/

public int soKhachDaCoVe() {

return dsCoVe.size();

}

/**

* Tổng tiền thu về từ việc bán vé cho khách hàng.

* @return double

*/

public double tongTien() {

double tong=0.0;

for(KhachHang kh: dsCoVe)

tong+=kh.getGiaTien();

return tong;

}

/**

* Danh sách các ga có khách hàng chờ mua vé.

* @return Set -- Danh sách tên ga (chỉ xuất hiện một lần)

*/

public Set<String> danhSachGaChoVe() {

Set<String> dsGa=new TreeSet<String>();

for(KhachHang kh: dsDoiVe)

dsGa.add(kh.getGaDen());

Page 26: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

return dsGa;

}

/**

* Thống kê số vé đã bán theo từng ga.

* @return Map -- ga và số vé tương ứng

*/

public Map<String, Integer> thongKeSoVeTungGa() {

Map<String, Integer> bangThongKe=new TreeMap<String, Integer>();

for(KhachHang kh:dsCoVe ){

String ga=kh.getGaDen();

if(bangThongKe.containsKey(ga))

bangThongKe.put(ga, bangThongKe.get(ga)+1);

else

bangThongKe.put(ga, 1);

}

return bangThongKe;

}

/**

* Nhập thông tin khách hàng từ bàn phím

* Nếu CMND đã tồn tại thì không cần nhập tên khách hàng.

* @return 1 KhachHang

*/

public KhachHang nhapKhachHang() {

@SuppressWarnings("resource")

Scanner sc=new Scanner(System.in);

System.out.println("Nhap CMND: ");

Page 27: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

String cMND=sc.nextLine();

KhachHang kh=new KhachHang(cMND);

String tenKH=null;

if(!dsDoiVe.contains(kh)){

System.out.println("Nhap ten Khach hang: ");

tenKH=sc.nextLine();

}else{

// tenKH=dsDoiVe.peek().getTenKH();

for(KhachHang k: dsDoiVe){

if(k.getcMND().equalsIgnoreCase(cMND)){

tenKH=k.getTenKH();

break;

}

}

}

System.out.println("Nhap ga den: ");

String gaDen=sc.nextLine();

System.out.println("Nhap gia tien: ");

double giaVe=sc.nextDouble();

return new KhachHang(cMND,tenKH,gaDen,giaVe);

}

/**

* Chỉ lưu danh sách khách hàng chờ nhận vé

* @param fileName là tập tin chứa danh sách khách hàng

*/

public void saveDsDoiVe(String fileName) {

SaveLoadFile.save(dsDoiVe, fileName);

Page 28: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

}

/**

* Nạp danh sách khách hàng đợi vé từ file

* @param fileName là tập tin chứa danh sách khách hàng đợi vé

*/

@SuppressWarnings("unchecked")

public void loadDsDoiVe(String fileName) {

dsDoiVe=(Queue<KhachHang>)SaveLoadFile.load(fileName);

}

}

Bước 3

package bai03Chuong05Collections;

import java.io.File;

import java.text.DecimalFormat;

import java.util.Map;

import java.util.Scanner;

public class ChuongTrinhQuanLyBanVe {

private static final String fileName = "dskhChoVe"; //File lưu danh sách khách hàng còn đợi vé.

private static Scanner sc=new Scanner(System.in);

public static void main(String[] args) {

int chon;

boolean flag=true;

DanhSachKhachHang dsKhachHang=new DanhSachKhachHang();

Page 29: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

if(new File(fileName).exists()) //Nếu dữ liệu đã có thì nạp lên

dsKhachHang.loadDsDoiVe(fileName);

// else //Ngược lại khởi tạo danh sách

// dsKhachHang=new DanhSachKhachHang();

do{

System.out.println("====Hệ thống menu==="+

"\n1. Thêm một khách hàng mới vào hàng đợi mua vé."+

"\n2. Bán một vé cho khách hàng. Chỉ bán cho người đăng ký trước."+

"\n3. Hiển thị danh sách khách hàng chờ vé."+

"\n4. Hủy một khách hàng ra khỏi danh sách. (khách hàng không mua vé nữa)."+

"\n5. Thống kê tình hình bán vé."+

"\n6. Lưu danh sách vào file."+

"\n7. Hiển thị danh sách các ga đang chờ mua vé."+

"\n8. Số vé đã bán tương ứng cho từng ga.");

chon=sc.nextInt();

switch (chon) {

case 1:

dsKhachHang.themKhachHangVaoHangDoi(dsKhachHang.nhapKhachHang());

break;

case 2:

if(!dsKhachHang.banVe())

System.out.println("Không còn khách hàng đợi mua vé.");

else

Page 30: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

System.out.println("Bán vé thành công.");

break;

case 3:

if(dsKhachHang.soKhachChoVe()==0)

System.out.println("Không còn khách hàng chờ vé.");

else

dsKhachHang.hienThiDanhSachDoi();

break;

case 4:

if(dsKhachHang.soKhachChoVe()!=0){

sc.nextLine();

System.out.println("Nhập số CMND khách hàng cần hủy: ");

String cMND=sc.nextLine();

if(!dsKhachHang.huyKhachHang(cMND))

System.out.println("Không tồn tại "+cMND);

}else

System.out.println("Không có khách chờ.");

break;

case 5:

DecimalFormat df=new DecimalFormat("#,##0 VND");

System.out.println("Số khách chờ nhận vé: "+dsKhachHang.soKhachChoVe());

System.out.println("Số khách đã nhận vé: "+dsKhachHang.soKhachDaCoVe());

System.out.println("Tổng tiền đã thu về trong ngày: "+df.format(dsKhachHang.tongTien()));

if(dsKhachHang.soKhachDaCoVe()!=0){

Page 31: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

System.out.println("Danh sách khách hàng đã có vé: ");

dsKhachHang.hienThiDanhSachCoVe();

}else

System.out.println("Chưa bán vé nào trong ngày hôm nay.");

break;

case 6:

dsKhachHang.saveDsDoiVe(fileName);

break;

case 7:

if(dsKhachHang.soKhachChoVe()!=0){

System.out.println("Danh sách ga chờ mua vé: ");

System.out.println(dsKhachHang.danhSachGaChoVe());

}else

System.out.println("Không còn khách chờ.");

break;

case 8:

Map<String, Integer> thongKe=dsKhachHang.thongKeSoVeTungGa();

if(thongKe.size()>0){

System.out.printf("%10s %15s\n","Tên ga","Số vé đã bán");

for(String tenGa : thongKe.keySet())

System.out.printf("%10s %15s\n",tenGa,thongKe.get(tenGa));

}

else

System.out.println("Chưa bán vé nào.");

break;

Page 32: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

default:

flag=false;

break;

}

}

while(flag);

}

}

Bước 4:

package bai03Chuong05Collections;

import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

public class SaveLoadFile {

/**

* Tuần tự hóa đối tượng vào file

* @param obj là đối tượng cần tuần tự hóa

* @param fileName là tên file chứa dữ liệu

*/

public static void save(Object obj, String fileName) {

try{

FileOutputStream fos=new FileOutputStream(fileName);

ObjectOutputStream oos=new ObjectOutputStream(fos);

oos.writeObject(obj);

oos.close();

}catch (Exception e) {

Page 33: Web viewLuu danh sach sinh vien.\n"+ "13. Phuong thuc sap xep theo ten sinh vien, neu trung ten sap xep theo ho sinh vien.\n"+ "14. Thong ke tong so sinh vien theo tung lop.");

e.printStackTrace();

}

}

/**

* Khôi phục đối tượng đã được tuần tự hóa từ file

* @param fileName là file chứa đối tượng đã được tuần tự hóa

* @return Object obj

*/

public static Object load(String fileName) {

Object obj=null;

try{

FileInputStream fis=new FileInputStream(fileName);

ObjectInputStream ois=new ObjectInputStream(fis);

obj=ois.readObject();

ois.close();

}catch (Exception e) {

e.printStackTrace();

}

return obj;

}

}