ĐẠI HỌC HẢI PHÒNG KHOA CÔNG NGHỆ THÔNG TIN -------- MÔN HỌC : Lập trình trực quan Đề tài: Quản lí tuyển sinh đại học Nhóm thành viên: Lớp: CNTT5.k22 Hoàng Văn Dũng Giảng viên bộ môn: Lê Văn Sang Nguyễn Văn Quang Bùi Minh Tuân LỜI CẢM ƠN Trước hết, em xin bày tỏ lòng biết ơn sâu sắc tới thầy người đã trực tiếp hướng dẫn và tận tình giúp đỡ em hoàn thành bài tập lớn này. Em xin chân thành cảm ơn sự giúp đỡ của toàn thể các giảng viên khoa công nghệ thông tin của trường Đại học Hải Phòng đã dạy dỗ em cả về kiến thức chuyên môn và tinh thần học tập độc lập, sáng tạo để em có được kiến thức thực hiện báo cáo của mình. Trong quá trình thực hiện báo cáo , mặc dù đã cố gắng hết sức song do thời gian và khả năng có hạn nên em không thể tránh khỏi những thiếu sót. Vì vậy, em rất mong nhận được sự thông cảm, chỉ bảo và giúp đỡ của các thầy giáo, cô giáo và các bạn.
Một lần nữa em xin chân thành cảm ơn! MỤC LỤC I. Phát biểu bài toán. Xác định các lớp của bài toán. Class ThiSinh kế thừa từ class Nguoi.
class GiamThi kế thừa từ class Người. Mô tả thuật toán thao tác. Chỉnh sửa thông tin thí sinh, nguyện vọng, giám thị. Hiện ra các thí sinh trúng tuyển, input: Mã ngành và điểm chuẩn ngành.
Sắp xếp các nguyện vọng trúng tuyển ngành theo điểm thi giảm dần. Hiện ra các giám thị có quê quán ở Hà Nội. Cài đặt bài toán. Kiểm thử lập bộ test.Phát biểu bài toán Hằng năm, Tuyển Sinh Đại Học là một vấn đề quan trọng mà nhiều người quan tâm, có hang ngàn thí sinh và vô số các ngành, các trường Đại học, Cao đẳng tuyển sinh.
Vậy làm thế nào để giải bài toán quản lý tuyển sinh Đại học, Cao đẳng. Đây là đề tài của nhóm chúng em, sẽ giải đáp trong những phần dưới đây Kỳ thi bao gồm 2 giai đoạn thi và dung kết quả thi để xét tuyển vào Đại học. Các đối tượng cần quản lý: Thí sinh: mỗi thí sinh gồm có Số báo danh(duy nhất), họ tên , giới tính, năm sinh, quê quán, điểm thi, điểm ưu tiên. Nguyện vọng: Một thí sinh có thể có nhiều nguyện vọng.
Mỗi nguyện vọng bao gồm: mã ngành, tên ngành, mã trường, khối xét tuyển, điểm thi ứng với nguyện vọng sau kỳ thi. Giám thị : Các giám thị được phân công coi thi, gồm mã giám thị(là duy nhất), đơn vị công tác, họ tên, giới tính, năm sinh, quê quán. Thí Sinh và Giám thị cùng có các thuộc tính như Họ tên, quê quán, năm sinh, giới tính nên được kế thừa từ lớp Người Tính kế thừa ArrayList<Nguoi> quản lý cả Thí Sinh và Người, khi nhập ta có thể nhập tùy theo Đối tượng Thí Sinh hoặc Người vào ArrayList này Tính đa hình II. Xác định các lớp của bài toán 1.
Class Nguoi Thuộc tính: String hoTen, queQuan, int namSinh, gioiTinh phương thức: Constructor: Hàm tạo có đối số và hàm tạo không đối số Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private Nhap: nhập thông tin các thuộc tính Hien: Hiện ra các thông tin 2. Class ThiSinh kế thừa từ class Nguoi Thuộc tính: String SBD, float diemUuTien, ArrayList<NguyenVong> nv, NguyenVong nguyenvonga Phương thức: Nhap: override nhap() ở class Nguoi Hien: override hien() ở class Nguoi, hiện thông tin thí sinh và các nguyện vọng của thí sinh nhapDSNguyenVong: nhập các nguyện vọng của thí sinh, gọi hàm nhapNguyenVong từ class NguyenVong hienDSNguyenVong: hiện danh sách các nguyện vọng đã nhập của thí sinh này, gọi hàm hienNguyenVong từ class NguyenVong hienThongTinTS: chỉ hiện thông tin Thí Sinh 3. class GiamThi kế thừa từ class Người Thuộc tính: String maGT, String donviCT Phương thức: Nhap: override phương thức nhap() ở class Nguoi, nhập thông tin giám thị Hien: override phương thức hien() ở class Nguoi, hiện thị thông tin giám thị 4. Class NguyenVong Thuộc tính: String maNganh, maTruong, khoiXT, int maNv, float diemThi Phương thức: nhapNguyenVong(): nhập thông tin nguyện vọng hienNguyenVong(): hiện thông tin nguyện vọng 5.
class QuanLy Thuộc tính: ArrayList<Nguoi> person ArrayList<ThiSinh> dsTrungTuyenNganh ArrayList<NguyenVong> nvTrungTuyen Phương thức: themDSNguoi(): thêm Người, có thể là Thí Sinh hoặc Giám Thị vào ArrayList<Nguoi> menuSuaDoi(): Menu hiện thị các chức năng sửa đổi ở SuaDoi() SuaDoi(): Thêm, Sửa, Xóa các thông tin như Thí Sinh, Nguyện Vọng, Giám Thị suaNguyenVong(): sửa Nguyện Vọng của thí sinh xoaNguyenVong(): xóa nguyện vọng theo mã nguyện vọng themNguyenVong(): thêm nguyện vọng cho thí sinh suaThiSinh(): sửa thông tin thí sinh và nhập lại xoaThiSinh(): xóa thí sinh theo số báo danh suaGiamThi(): sửa thông tin giám thị hienDSGiamThi(): hiển thị danh sách giám thị hienDS(): hiện danh sách gồm cả thí sinh và giám thị được lưu trong ArrayList<Nguoi> hienDSHoSothiSinh(): Hiện danh sách các hồ sơ tuyển sinh: bao gồm thông tin thí sinh và các nguyện vọng của từng thí sinh hienDSThiSinh(): hiện thông tin các thí sinh dự tuyển ghiFile(): ghi file ArrayList<Nguoi> đã được nhập docFile(): đọc file ArrayList<Nguoi> hienDSTrungTuyen: hiện thị danh sách thí sinh trúng tuyển ngành theo mã ngành và điểm chuẩn được nhập từ bàn phím hienDSTTNganh(): hiển thị danh sách trúng tuyển ngành trong ArrayList<ThiSinh> dsTrungTuyenNganh SapXepTheoDiem(): Sắp xếp các nguyện vọng của thí sinh đã trúng tuyển ngành theo điểm thi giảm dần, sử dụng Collections Sort trong ArrayList<NguyenVong> nvTrungTuyen III. Mô tả thuật toán thao tác 1. Chỉnh sửa thông tin thí sinh, nguyện vọng, giám thị Thuật toán: Nhập vào SBD/ maNV/ MaGT cần tìm để chỉnh sửa Dùng vòng lặp và câu lệnh so sánh, nếu từ khóa truyền vào trùng với dữ liệu đã có sẽ hiện thị ra để thao tác chỉnh sửa, không có sẽ không thông bảo gì Thêm: Nhập vào thông tin đối tượng mới Xóa: Trong ArrayList dùng phép remove Sửa : Nhập lại thông tin mới 2. Hiện ra các thí sinh trúng tuyển, input: Mã ngành và điểm chuẩn ngành Thuật toán: Trong ArrayList đã nhập, tìm kiếm và hiện ra những thí sinh có điểm chuẩn và mã ngành trùng với thông tin nhập vào.
Sắp xếp các nguyện vọng trúng tuyển ngành theo điểm thi giảm dần Thuật toán: Sử dụng Collections Sort trong ArrayList<nvTrungTuyen> Tạo class SapXepTheoDiemThi, với phương thức int compare( Nguyenvong a1, Nguyenvong a2) Đặt sub= a1.getDiemXT() Nếu sub < 0 return -1 Nếu sub > 0 return 1 Nếu sub =0 return 0 4. Hiện ra các giám thị có quê quán ở Hà Nội Thuật toán: Trong ArrayList<Nguoi>, lọc ra Người là Giám thị bằng phép instance of Sử dụng vòng lặp foreach, lấy quê quán của giám thị so sánh quê quán của giám thị với chuỗi “Ha Noi” bằng lệnh compareIgnoreCase Nếu giám thị quê quán ở Hà Nội sẽ hiện ra màn hình IV. Cài đặt bài toán 1. Class Nguoi package bt.quanlituyensinhdh; import java.Serializable; import java.Scanner; public class Nguoi implements Serializable{ private String hoTen, queQuan; private int namSinh, gioiTinh; public Nguoi() { } public Nguoi(String hoTen, String queQuan, int namSinh, int gioiTinh) { this.gioiTinh= gioiTinh; this.hoTen= hoTen; this.namSinh= namSinh; this.queQuan= queQuan; } public String getHoTen() { return hoTen; } public void setHoTen(String hoTen) { this.hoTen = hoTen; } public String getQueQuan() { return queQuan; } public void setQueQuan(String queQuan) { this.queQuan = queQuan; } public int getNamSinh() { return namSinh; } public void setNamSinh(int namSinh) { this.namSinh = namSinh; } public String getGioiTinh() { if(gioiTinh ==1) return "Nam"; else if(gioiTinh==0) return "Nữ"; else return null; } public void setGioiTinh(int gioiTinh) { this.gioiTinh = gioiTinh; } public void nhap() { Scanner sc= new Scanner(System.print("Họ tên: "); hoTen= sc.print("Quê quán: "); queQuan= sc.print("Năm sinh: "); namSinh= sc.nextInt(); do { System.print("Giới tính(nam: 1/ nữ: 0) "); gioiTinh= sc.
Class ThiSinh package bt.quanlituyensinhdh; import java.ArrayList; import java.Scanner; public class ThiSinh extends Nguoi{ private String SBD; public float diemUuTien; private ArrayList<NguyenVong> nv; NguyenVong nguyenvonga; public ThiSinh() { super(); } public ThiSinh(String SBD, float diemUuTien, ArrayList<NguyenVong> nv, String hoTen, String queQuan, int namSinh, int gioiTinh) { super(hoTen, queQuan, namSinh, gioiTinh); this.SBD = SBD; this.diemUuTien = diemUuTien; this.nv = nv; } public String getSBD() { return SBD; } public void setSBD(String SBD) { this.SBD = SBD; } public float getDiemUuTien() { return diemUuTien; } public void setDiemUuTien(float xx) { diemUuTien = xx; } public ArrayList<NguyenVong> getNv() { return nv; } public void setNv(ArrayList<NguyenVong> nv) { this.nv = nv; } public NguyenVong getNguyenvonga() { return nguyenvonga; } public void setNguyenvonga(NguyenVong nguyenvonga) { this.nguyenvonga = nguyenvonga; } @Override public void nhap() { Scanner sc= new Scanner(System.print("SBD: "); SBD = sc.print("Điểm ưu tiên: "); diemUuTien= sc.nextFloat(); setDiemUuTien(diemUuTien); nhapDSNguyenVong(); } public void nhapDSNguyenVong() { Scanner sc= new Scanner(System.print("Nhập số nguyện vọng cần thêm: "); int n = sc. Class NguyenVong package bt.quanlituyensinhdh; import java.Serializable; import java.Scanner; public class NguyenVong implements Serializable{ private String maNganh, maTruong, tenNganh, khoiXT; private float diemThi; private int maNv; public NguyenVong() { } public NguyenVong(int maNv, String maNganh, String maTruong, String tenNganh, String khoiXT, float diemThi) { this.maNv = maNv; this.maNganh = maNganh; this.maTruong = maTruong; this.tenNganh = tenNganh; this.khoiXT = khoiXT; this.diemThi = diemThi; } public int getMaNv() { return maNv; } public void setMaNv(int maNv) { this.maNv = maNv; } public String getMaNganh() { return maNganh; } public void setMaNganh(String maNganh) { this.maNganh = maNganh; } public String getMaTruong() { return maTruong; } public void setMaTruong(String maTruong) { this.maTruong = maTruong; } public String getTenNganh() { return tenNganh; } public void setTenNganh(String tenNganh) { this.tenNganh = tenNganh; } public String getKhoiXT() { return khoiXT; } public void setKhoiXT(String khoiXT) { this.khoiXT = khoiXT; } public float getDiemXetTuyen() { return diemThi; } public void nhapNguyenVong() { Scanner sc = new Scanner(System.print("Mã trường: "); maTruong = sc.print("Mã ngành: "); maNganh = sc.print("Tên ngành: "); tenNganh = sc.print("Khối xét tuyển: "); khoiXT = sc.print("Điểm thi: "); diemThi = sc. Class GiamThi package bt.quanlituyensinhdh; import java.Scanner; public class GiamThi extends Nguoi { private String maGT, donviCT; public GiamThi() { } public GiamThi(String maGT, String donviCT, String hoTen, String queQuan, int namSinh, int gioiTinh) { super(hoTen, queQuan, namSinh, gioiTinh); this.donviCT= donviCT; this.maGT= maGT; } public String getMaGT() { return maGT; } public void setMaGT(String maGT) { this.maGT = maGT; } public String getDonviCT() { return donviCT; } public void setDonviCT(String donviCT) { this.donviCT = donviCT; } @Override public void nhap() { super.nhap(); Scanner sc= new Scanner(System.print("Mã giám thị: "); maGT= sc.print("Đơn vị công tác: "); donviCT= sc. Class Sapxepdiemthi package bt.quanlituyensinhdh; import java.Comparator; public class SapXepTheoDiemThi implements Comparator<NguyenVong> { @Override public int compare(NguyenVong a1, NguyenVong a2) { float sub= a1.getDiemXetTuyen(); if(sub< 0) return -1; else if(sub ==0) return 0; else return 1; } } 6.
Class DSNguoi package bt.quanlituyensinhdh; import java.ArrayList; import java.Scanner; public class DSNguoi { ArrayList<Nguoi> person; public DSNguoi() { person = new ArrayList<>(); } public void themDSNguoi(Nguoi a) { Scanner sc = new Scanner(System.print("Nhập số lượng cần thêm: "); int n = sc. Sửa thông tin thí sinh"); System. Xóa thí sinh"); System. Sửa thông tin giám thị"); System.
Xóa giám thị"); System. Sửa nguyện vọng"); System. Thêm nguyện vọng"); System. Xóa nguyện vọng"); System.println("----------- Chọn số 0 để thoát ----------"); } public void SuaDoi() { Scanner sc = new Scanner(System.in); int n; do { menuSuaDoi(); System.nextInt(); switch (n) { case 1: { String sbd; System.nextLine(); sbd = sc.nextLine(); suaThiSinh(sbd); break; } case 2: { String sbd; System.nextLine(); sbd = sc.nextLine(); xoaThiSinh(sbd); break; } case 3: { String maGT; System.nextLine(); maGT = sc.nextLine(); suaGiamThi(maGT); break; } case 4: { String maGT; System.nextLine(); maGT = sc.nextLine(); xoaGiamThi(maGT); break; } case 5: { System.nextLine(); String sbd = sc.