---
# System prepended metadata

title: Bài tập AP (2)

---


---

### Đề 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.

---
