BÀI TẬP 2 – QUẢN LÝ TÀI LIỆU THƯ VIỆN
Mục tiêu
Xây dựng hệ thống quản lý tài liệu trong thư viện bao gồm: Sách, Tạp chí và Báo. Vận dụng các tính chất OOP trong Python như kế thừa, đa hình và bao đóng để tổ chức dữ liệu hiệu quả và dễ mở rộng.
Mô tả bài toán
Một thư viện lưu trữ nhiều loại tài liệu. Mỗi tài liệu đều có thông tin chung và một số thuộc tính riêng tùy theo loại tài liệu.
Các loại tài liệu:
- Sách (Book): Có tên tác giả và số trang.
- Tạp chí (Magazine): Có số phát hành và tháng phát hành.
- Báo (Newspaper): Có ngày phát hành.
Yêu cầu về thiết kế chương trình
1. Lớp TaiLieu
(lớp cha trừu tượng)
Thuộc tính:
ma_tai_lieu
(str): mã tài liệu duy nhấtten_nxb
(str): tên nhà xuất bảnso_ban_phat_hanh
(int): số bản phát hành
Phương thức:
hien_thi_thong_tin()
– (abstract method): dùng để hiển thị thông tin tài liệu
Gợi ý: Sử dụng module
abc
(from abc import ABC, abstractmethod
) để tạo lớp trừu tượng.
2. Các lớp con kế thừa từ TaiLieu
:
Lớp Sach
:
-
Thuộc tính riêng:
ten_tac_gia
(str)so_trang
(int)
-
Ghi đè
hien_thi_thong_tin()
Lớp TapChi
:
-
Thuộc tính riêng:
so_phat_hanh
(int)thang_phat_hanh
(int)
-
Ghi đè
hien_thi_thong_tin()
Lớp Bao
:
-
Thuộc tính riêng:
ngay_phat_hanh
(str hoặc datetime)
-
Ghi đè
hien_thi_thong_tin()
3. Lớp QuanLySach
Là lớp quản lý toàn bộ danh sách tài liệu trong thư viện.
Thuộc tính:
danh_sach_tai_lieu
– List chứa các đối tượng thuộcTaiLieu
hoặc lớp con
Phương thức:
them_tai_lieu(tailieu: TaiLieu)
– Thêm mới tài liệu vào danh sáchxoa_tai_lieu(ma_tai_lieu: str)
– Xoá tài liệu theo mã tài liệuhien_thi_tai_lieu()
– Hiển thị toàn bộ danh sách tài liệutim_kiem_theo_loai(loai: str)
– Tìm kiếm tài liệu theo loại: Sách, Tạp chí, Báo
Gợi ý: Dùng
isinstance()
để kiểm tra loại tài liệu.
Chương trình chính
Thiết kế chương trình giao diện dòng lệnh (console-based) có menu như sau:
- Thêm tài liệu mới (sách, tạp chí, báo)
- Hiển thị toàn bộ danh sách tài liệu
- Xóa tài liệu theo mã
- Tìm kiếm tài liệu theo loại
- Thoát
Yêu cầu áp dụng OOP
- Inheritance (Kế thừa):
Sach
,TapChi
,Bao
kế thừa từTaiLieu
- Polymorphism (Đa hình): Ghi đè phương thức
hien_thi_thong_tin()
ở từng lớp con - Encapsulation (Bao đóng): Các thuộc tính để ở chế độ private/protected nếu cần, truy cập qua phương thức
- Abstraction (Trừu tượng): Dùng
abstract class
vàabstract method
cho lớpTaiLieu
Mở rộng (tuỳ chọn)
- Lưu thông tin tài liệu ra file JSON hoặc CSV
- Sắp xếp tài liệu theo số bản phát hành hoặc tên nhà xuất bản
- Tìm kiếm tài liệu theo nhà xuất bản
Gợi ý triển khai
- Module
abc
để tạo lớp trừu tượng - Module
typing
để khai báo danh sách tài liệu - Module
datetime
nếu xử lý ngày tháng trongBao