BÀI TẬP 3 – QUẢN LÝ THÍ SINH DỰ THI ĐẠI HỌC
Mục tiêu
Thiết kế hệ thống quản lý thí sinh thi đại học theo khối A, B, C, áp dụng lập trình hướng đối tượng (OOP) trong Python để tổ chức và xử lý dữ liệu một cách linh hoạt và mở rộng được.
Mô tả bài toán
Mỗi thí sinh dự thi đại học sẽ thuộc một trong các khối:
- Khối A: thi các môn Toán, Lý, Hóa
- Khối B: thi các môn Toán, Hóa, Sinh
- Khối C: thi các môn Văn, Sử, Địa
Mỗi thí sinh cần quản lý các thông tin chung như:
- Số báo danh
- Họ tên
- Địa chỉ
- Mức ưu tiên
Và thông tin riêng theo khối thi.
Yêu cầu thiết kế chương trình
1. Lớp ThiSinh
(Lớp trừu tượng)
Thuộc tính:
so_bao_danh
(str)ho_ten
(str)dia_chi
(str)muc_uu_tien
(int)
Phương thức:
hien_thi_thong_tin()
– abstract method, được ghi đè ở các lớp con
Gợi ý: Dùng module
abc
để tạo abstract base class
2. Các lớp con kế thừa từ ThiSinh
:
a. Lớp ThiSinhKhoiA
- Thuộc tính:
mon_thi = ["Toán", "Lý", "Hóa"]
- Ghi đè phương thức
hien_thi_thong_tin()
b. Lớp ThiSinhKhoiB
- Thuộc tính:
mon_thi = ["Toán", "Hóa", "Sinh"]
- Ghi đè phương thức
hien_thi_thong_tin()
c. Lớp ThiSinhKhoiC
- Thuộc tính:
mon_thi = ["Văn", "Sử", "Địa"]
- Ghi đè phương thức
hien_thi_thong_tin()
Các lớp con có thể ghi rõ tên khối hoặc dùng
self.__class__.__name__
để hiển thị khối.
3. Lớp TuyenSinh
Là lớp quản lý toàn bộ danh sách thí sinh.
Thuộc tính:
danh_sach_thi_sinh
: danh sách chứa các đối tượngThiSinh
hoặc lớp con
Phương thức:
them_thi_sinh(thi_sinh: ThiSinh)
– thêm mới thí sinh vào danh sáchhien_thi_tat_ca()
– hiển thị toàn bộ thông tin thí sinhtim_kiem_theo_sbd(so_bao_danh: str)
– tìm và hiển thị thí sinh theo số báo danhnhap_thi_sinh()
– cho phép người dùng nhập thông tin thí sinh qua bàn phím (chọn khối, nhập thông tin)menu()
– hiển thị menu tương tác người dùng (console)
Chức năng trong chương trình chính
Viết chương trình dòng lệnh với menu như sau:
- Thêm mới thí sinh (Khối A/B/C)
- Hiển thị toàn bộ thí sinh
- Tìm kiếm thí sinh theo số báo danh
- Thoát
Yêu cầu áp dụng OOP
- Abstraction (Trừu tượng): lớp
ThiSinh
là lớp trừu tượng - Inheritance (Kế thừa):
ThiSinhKhoiA/B/C
kế thừaThiSinh
- Polymorphism (Đa hình): ghi đè phương thức
hien_thi_thong_tin()
tùy theo khối - Encapsulation (Bao đóng): các thuộc tính sử dụng protected/private nếu cần
Gợi ý nâng cao (tùy chọn)
- Cho phép lưu danh sách thí sinh ra file JSON/CSV
- Thêm tính năng sắp xếp danh sách theo họ tên hoặc số báo danh
- Nhập điểm từng môn và tính tổng điểm dự thi
Mô hình class sơ bộ
ThiSinh (abstract)
├── ThiSinhKhoiA
├── ThiSinhKhoiB
└── ThiSinhKhoiC
TuyenSinh