================================================================
HỆ THỐNG QUẢN LÝ THƯ VIỆN - WINFORMS
Danh sách chức năng hiện có & còn thiếu
================================================================
------------------------------------------------------------
I. CHỨC NĂNG ĐÃ CÓ (đã implement)
------------------------------------------------------------
[TAB 1 - MƯỢN SÁCH]
✔ Tìm độc giả theo ID
✔ Hiển thị thông tin độc giả (tên, loại, số thẻ, trạng thái)
✔ Nhập mã vạch sách để mượn
✔ Xác nhận mượn sách (gọi LoanService.CheckOutAsync)
✔ Kiểm tra tự động: thẻ hết hạn, bị khóa, đang có sách quá hạn,
vượt giới hạn số sách mượn đồng thời
✔ Tính ngày hạn trả tự động theo loại độc giả (từ MemberTypePolicyConfig)
✔ Hiển thị danh sách sách đang mượn của độc giả
[TAB 2 - TRẢ SÁCH]
✔ Nhập / quét mã vạch sách cần trả
✔ Xác nhận trả sách (gọi LoanService.CheckInAsync)
✔ Tính tiền phạt quá hạn tự động (số ngày x đơn giá theo loại độc giả)
✔ Áp trần tiền phạt tối đa theo chính sách
✔ Hiển thị kết quả: đúng hạn hoặc số tiền phạt
✔ Tự động kích hoạt hàng đợi đặt chỗ khi sách được trả
[TAB 3 - DANH SÁCH SÁCH]
✔ Tìm kiếm theo: tên sách, tác giả, ISBN, nhà xuất bản
✔ Hiển thị bảng sách với: tên, tác giả, ISBN, NXB, năm XB,
thể loại, vị trí kệ, tổng bản, số bản còn sẵn, kỹ thuật số
✔ Tải lại danh sách
[TAB 4 - ĐỘC GIẢ]
✔ Tìm kiếm theo: họ tên, email, số thẻ
✔ Hiển thị bảng độc giả với: tên, loại, email, SĐT,
số thẻ, hạn thẻ, trạng thái, số sách đang mượn, tiền phạt chưa trả
✔ Click vào hàng để xem chi tiết độc giả
[HỆ THỐNG - BACKEND]
✔ Business rules đầy đủ trong LoanService (checkout/checkin/renew)
✔ Chính sách mượn theo loại độc giả (Student/Teacher/External/VIP)
✔ Quản lý hàng đợi đặt chỗ (Reservation queue)
✔ Ghi log thông báo (email/SMS stub)
✔ Database SQLite tự động tạo khi khởi động
✔ Soft delete (xóa mềm)
------------------------------------------------------------
II. CHỨC NĂNG CÒN THIẾU (chưa implement trong WinForms)
------------------------------------------------------------
[XÁC THỰC & PHÂN QUYỀN]
✘ Màn hình Đăng nhập / Đăng xuất
✘ Phân quyền: Admin / Thủ thư / Độc giả
✘ Đổi mật khẩu
✘ Khóa màn hình sau thời gian không hoạt động
[QUẢN LÝ SÁCH]
✘ Thêm sách mới
✘ Sửa thông tin sách
✘ Xóa / ẩn sách
✘ Quản lý bản sao (BookCopy): thêm, đánh barcode, đổi trạng thái
✘ Quản lý danh mục (Category)
✘ Gia hạn sách (Renew) - UI chưa có (backend đã có)
[QUẢN LÝ ĐỘC GIẢ]
✘ Thêm độc giả mới
✘ Sửa thông tin độc giả
✘ Khóa / mở khóa tài khoản độc giả
✘ Cấp thẻ thư viện mới
✘ Gia hạn thẻ
✘ Báo mất thẻ
✘ Xem lịch sử mượn trả của từng độc giả
[QUẢN LÝ PHẠT]
✘ Danh sách các khoản phạt chưa thanh toán
✘ Thu tiền phạt (đánh dấu đã thanh toán)
✘ Xóa / giảm tiền phạt (waive)
✘ Lịch sử thanh toán
[ĐẶT CHỖ / GIA HẠN]
✘ UI đặt chỗ sách (Reservation) cho độc giả
✘ Danh sách hàng đợi đặt chỗ
✘ Hủy đặt chỗ
✘ UI gia hạn sách (Renew) cho thủ thư
[BÁO CÁO & THỐNG KÊ]
✘ Tổng quan dashboard (số sách, độc giả, đang mượn, quá hạn)
✘ Danh sách sách đang mượn / quá hạn
✘ Báo cáo tiền phạt (đã thu / chưa thu)
✘ Top sách được mượn nhiều nhất
✘ Thống kê theo khoảng thời gian
✘ Xuất báo cáo ra Excel / PDF
[CẤU HÌNH HỆ THỐNG]
✘ Chỉnh sửa chính sách mượn sách theo loại độc giả
(số ngày, số cuốn tối đa, mức phạt, số lần gia hạn)
✘ Quản lý tài khoản nhân viên
[TIỆN ÍCH]
✘ Quét barcode bằng camera / máy quét
✘ In phiếu mượn / trả
✘ Tìm kiếm nâng cao (lọc nhiều điều kiện)
✘ Thông báo sách sắp đến hạn
------------------------------------------------------------
III. ĐỀ XUẤT ƯU TIÊN BỔ SUNG TIẾP THEO
------------------------------------------------------------
Mức 1 (Cần thiết nhất):
→ Login / Logout với phân quyền Admin / Thủ thư
→ Thêm / Sửa Sách và Bản sao sách
→ Thêm / Sửa Độc giả + Cấp thẻ
→ Thu tiền phạt
Mức 2 (Quan trọng):
→ Dashboard tổng quan
→ Danh sách sách quá hạn
→ Gia hạn sách (UI)
→ Lịch sử mượn trả
Mức 3 (Nâng cao):
→ Báo cáo & xuất Excel
→ Cấu hình chính sách
→ In phiếu
================================================================
XEM THÊM ==> Hướng dẫn cài đặt chi tiết
HƯỚNG DẪN CÀI ĐẶT
# HƯỚNG DẪN CHẠY DỰ ÁN QUẢN LÝ THƯ VIỆN
## YÊU CẦU HỆ THỐNG
| Phần mềm | Phiên bản | Link tải |
|----------|-----------|----------|
| .NET SDK | 8.0 trở lên | https://dotnet.microsoft.com/download/dotnet/8.0 |
| Windows | 10 / 11 | — |
| Visual Studio (tuỳ chọn) | 2022 | https://visualstudio.microsoft.com |
Kiểm tra .NET đã cài chưa:
```
dotnet --version
```
Kết quả mong muốn: `8.0.x`
---
## CẤU TRÚC DỰ ÁN
```
quan-ly-thu-vien/
├── LibraryManagement/
│ ├── LibraryManagement.sln ← File solution
│ ├── LibraryManagement.Domain/ ← Entities, Enums, Interfaces
│ ├── LibraryManagement.Application/ ← Services, DTOs
│ ├── LibraryManagement.Infrastructure/ ← EF Core, SQLite, Seeder
│ ├── LibraryManagement.WinForms/ ← Ứng dụng WinForms (CHẠY CÁI NÀY)
│ └── LibraryManagement.API/ ← REST API (tuỳ chọn)
└── HUONG_DAN_CHAY_DU_AN.md
```
---
## CÁCH CHẠY NHANH (ứng dụng WinForms)
### Bước 1 — Mở terminal tại thư mục solution
```cmd
cd "C:\Users\huand\Documents\topcode\quan-ly-thu-vien\LibraryManagement"
```
### Bước 2 — Khôi phục NuGet packages
```cmd
dotnet restore LibraryManagement.sln
```
### Bước 3 — Build toàn bộ solution
```cmd
dotnet build LibraryManagement.sln
```
Kết quả mong muốn: `Build succeeded. 0 Error(s)`
### Bước 4 — Chạy ứng dụng WinForms
```cmd
dotnet run --project LibraryManagement.WinForms
```
Lần đầu chạy, ứng dụng sẽ **tự động**:
- Tạo file database `library.db` (SQLite)
- Chạy migration tạo bảng
- Seed dữ liệu mẫu (sách, độc giả, chính sách)
- Tạo file `staff.json` chứa tài khoản nhân viên
---
## TÀI KHOẢN ĐĂNG NHẬP MẶC ĐỊNH
| Tên đăng nhập | Mật khẩu | Vai trò |
|---------------|-----------|-----------|
| `admin` | `admin123` | Admin |
| `thuhu` | `thuhu123` | Thủ thư |
| `thuhu2` | `thuhu2123`| Thủ thư |
> **Lưu ý:** Sau lần đầu chạy, tài khoản được lưu trong file `staff.json`
> cùng thư mục với `library.db`. Admin có thể thêm/sửa/xóa tài khoản
> ngay trong ứng dụng (menu **Tài Khoản Nhân Viên**).
---
## CÁC FILE DỮ LIỆU ĐƯỢC TẠO TỰ ĐỘNG
Sau khi chạy lần đầu, các file này xuất hiện trong thư mục:
`LibraryManagement.WinForms\bin\Debug\net8.0-windows\`
| File | Mô tả |
|------|-------|
| `library.db` | Database SQLite — toàn bộ dữ liệu thư viện |
| `staff.json` | Danh sách tài khoản nhân viên |
---
## CHẠY BẰNG VISUAL STUDIO 2022
1. Mở file `LibraryManagement\LibraryManagement.sln`
2. Trong **Solution Explorer**, chuột phải vào `LibraryManagement.WinForms`
3. Chọn **Set as Startup Project**
4. Nhấn **F5** (Debug) hoặc **Ctrl+F5** (Chạy không debug)
---
## CHẠY REST API (tuỳ chọn)
```cmd
dotnet run --project LibraryManagement.API
```
Sau đó mở trình duyệt tại: `http://localhost:5000`
---
## CHỨC NĂNG CHÍNH CỦA ỨNG DỤNG
### Nghiệp vụ mượn/trả
- **Mượn Sách** — Tìm độc giả → Quét barcode → Xác nhận → In phiếu mượn
- **Trả Sách** — Quét barcode → Tự tính phạt nếu quá hạn → In phiếu trả
- **Gia Hạn** — Tìm độc giả → Chọn sách → Gia hạn (kiểm tra giới hạn và đặt chỗ)
- **Sách Đang Mượn** — Xem toàn bộ, lọc theo quá hạn
- **Đặt Chỗ** — Đặt chỗ sách đang được mượn, hủy đặt chỗ
### Quản lý danh mục
- **Quản Lý Sách** — Thêm, sửa, tìm kiếm sách
- **Bản Sao Sách** — Quản lý từng bản (barcode, trạng thái)
- **Danh Mục** — Thêm/sửa thể loại sách
- **Độc Giả** — Thêm, sửa, khóa/mở tài khoản độc giả
### Tài chính
- **Tiền Phạt** — Xem danh sách, thu tiền, miễn/giảm phạt
- **Báo Cáo Phạt** — Thống kê theo khoảng thời gian, xuất CSV
### Báo cáo & thống kê
- **Báo Cáo Quá Hạn** — Danh sách sách quá hạn, xuất CSV
- **Lịch Sử Mượn Trả** — Tra cứu theo tên/ID/barcode
- **Top Sách Mượn Nhiều** — Xếp hạng sách, xuất CSV
- **Sắp Đến Hạn** — Cảnh báo sách sắp hết hạn trả (tuỳ chỉnh số ngày)
### Cấu hình hệ thống
- **Chính Sách Mượn** — Chỉnh số ngày, số sách tối đa, mức phạt theo loại độc giả
- **Tài Khoản Nhân Viên** — Thêm/sửa/xóa tài khoản, đặt lại mật khẩu (Admin)
---
## XỬ LÝ LỖI THƯỜNG GẶP
### Lỗi: "dotnet không được nhận dạng"
- Cài .NET 8 SDK từ link ở trên
- Khởi động lại terminal sau khi cài
### Lỗi: "Unable to open database"
- Đảm bảo thư mục `bin\Debug\net8.0-windows\` có quyền ghi
- Chạy terminal với quyền Administrator
### Lỗi build: "Package not found"
- Chạy lại `dotnet restore LibraryManagement.sln`
- Kiểm tra kết nối internet
### Database bị hỏng / muốn reset dữ liệu
- Xóa file `library.db` trong `bin\Debug\net8.0-windows\`
- Chạy lại ứng dụng — sẽ tạo và seed lại từ đầu
### Quên mật khẩu admin
- Xóa file `staff.json` trong `bin\Debug\net8.0-windows\`
- Chạy lại ứng dụng — sẽ tạo lại tài khoản mặc định
---
## THÔNG TIN KỸ THUẬT
| Mục | Chi tiết |
|-----|----------|
| Framework | .NET 8, Windows Forms |
| Database | SQLite (qua Entity Framework Core 8) |
| Kiến trúc | Clean Architecture (Domain / Application / Infrastructure / UI) |
| Auth | SHA-256 hash, lưu trong `staff.json` |
| Migration | EF Core Migrations (tự chạy khi khởi động) |
| Dữ liệu mẫu | Tự seed lần đầu (sách, độc giả, chính sách 4 loại thẻ) |
Nguồn: Topcode.vn