--- ### Đề Bài: Quản Lý Thư Viện Sách #### Mục tiêu: Phát triển một ứng dụng console trong C# để quản lý thư viện sách, tập trung vào việc sử dụng abstract class, override method, interface, và generic. #### Yêu cầu cụ thể: 1. **Abstract Class `Item`** - **Fields**: `ID` (kiểu int), `Title` (kiểu string). - **Constructor**: Nhận hai tham số `id` và `title` để khởi tạo. - **Getter/Setter**: - `ID`: Trong setter, bắt ngoại lệ nếu `ID` <= 0. - `Title`: Trong setter, bắt ngoại lệ nếu `Title` rỗng. - **Abstract Methods**: - `Display()`: Phương thức trừu tượng để hiển thị thông tin. - `Input()`: Phương thức trừu tượng để nhập thông tin từ console. 2. **Class `Book` và `Magazine`** - **Thuộc tính đặc thù**: Thêm các thuộc tính riêng cho mỗi class (ví dụ: `Author` cho `Book`, `IssueNumber` cho `Magazine`). - **Constructors**: Sử dụng constructor của lớp cha và thiết lập các thuộc tính riêng. - **Override Methods**: Override các phương thức `Display()` và `Input()` từ lớp cha. 3. **Interface `IManageable`** - **Methods**: Các phương thức `AddItem()`, `RemoveItem()`, và `FindItem()`. 4. **Generic Class `Library<T>`** - **Implementation**: Implement interface `IManageable`. - **Chức năng thêm**: Sắp xếp (ví dụ: theo `Title` hoặc `ID`) và phân trang cho danh sách sách. 5. **Console Application** - **Giao diện người dùng**: Menu cho việc thêm, xóa, hiển thị, tìm kiếm, sắp xếp, và phân trang sách. - **Xử lý đầu vào**: Cung cấp giao diện để người dùng có thể dễ dàng thực hiện các chức năng trên. #### Mục tiêu học tập: - Hiểu sâu về abstract class, inheritance, interface, và generic trong C#. - Nắm vững cách xử lý ngoại lệ. - Cải thiện kỹ năng xây dựng giao diện người dùng trong môi trường console. ---