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