Giới thiệu dự án

Trong kỷ nguyên số hóa giáo dục và quản trị tri thức, thư viện đóng vai trò là trung tâm học liệu thiết yếu phục vụ đào tạo và nghiên cứu khoa học. Theo các báo cáo khảo sát quản trị cơ sở dữ liệu học thuật, các thư viện vận hành theo mô hình thủ công hoặc bán tự động gặp phải tình trạng quá tải nghiêm trọng: thời gian xử lý một lượt mượn/trả sách kéo dài trung bình từ 7–12 phút, tỷ lệ sai lệch số liệu kho sách định kỳ dao động từ 8–15%, và tỷ lệ thất thoát tài liệu không thể truy vết lên tới 5–10% mỗi năm.

Vấn đề cốt lõi (Problem Statement) nằm ở sự thiếu đồng bộ giữa quy trình luân chuyển tài liệu vật lý và hệ thống lưu trữ dữ liệu tập trung. Các điểm nghẽn nghiêm trọng (pain points) bao gồm:

  • Đối soát công nợ sách và kiểm soát hạn thẻ độc giả bị trễ hạn, dễ gây thất thoát tài sản thư viện.
  • Thiếu cơ chế kiểm soát ràng buộc dữ liệu tự động dẫn đến tình trạng số lượng sách khả dụng trong kho bị âm hoặc sai lệch danh mục.
  • Quy trình lập biên bản xử lý vi phạm (mất sách, hư hỏng) bị phân mảnh, không liên kết trực tiếp với lịch sử giao dịch trả sách.
  • Khó khăn trong việc tích hợp quản lý kho đơn hàng đa kênh khi kết hợp dịch vụ cho thuê sách và phát hành sách trực tuyến.

Đề tài "Hệ thống quản lý thư viện" giải quyết triệt để các hạn chế trên bằng giải pháp chuyển đổi số toàn diện quy trình nghiệp vụ:

  1. Mục tiêu 1: Chuẩn hóa và tự động hóa 100% quy trình nghiệp vụ gồm: Quản lý danh mục đầu sách, Cấp phát thẻ thư viện, Lập phiếu nhập kho, Quản lý mượn/trả sách, Lập biên bản bồi thường và Phân quyền tài khoản nhân viên.
  2. Mục tiêu 2: Thiết kế cơ sở dữ liệu quan hệ (RDBMS) đạt chuẩn chuẩn hóa 3NF với 16 bảng thực thể, thiết lập hệ thống ràng buộc toàn vẹn logic đa tầng.
  3. Mục tiêu 3: Xây dựng ứng dụng quản lý máy trạm (Desktop Client) tối ưu hiệu năng giao dịch, tích hợp trực quan hóa luồng dữ liệu (DFD mức 0, 1, 2) và phân rã chức năng (BFD).
  4. Mục tiêu 4: Rút ngắn thời gian thực hiện giao dịch mượn/trả xuống dưới 30 giây/lượt, loại bỏ hoàn toàn tình trạng sai sót số liệu tồn kho.

Hệ thống được phát triển tập trung vào phạm vi quản trị nghiệp vụ nội bộ thư viện truyền thống kết hợp mở rộng cổng kết nối dữ liệu. Giới hạn hiện tại của hệ thống tập trung vào kiến trúc mạng cục bộ (LAN), xử lý dữ liệu tập trung trước khi mở rộng lên hạ tầng điện toán đám mây.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Khảo sát thực tế thông qua biểu mẫu điều tra và phỏng vấn trực tiếp cán bộ nghiệp vụ cho thấy hệ thống truyền thống bộc lộ nhiều điểm nghẽn khi so sánh với hệ thống thông tin tự động hóa:

Tiêu chí đánh giá Phương pháp thủ công (Sổ sách/Excel) Giải pháp mã nguồn mở quốc tế (Koha/PMB) Hệ thống quản lý thư viện đề xuất
Tốc độ xử lý mượn/trả Rất chậm (7–10 phút/giao dịch) Trung bình (1–2 phút, giao diện phức tạp) Nhanh (< 30 giây, biểu mẫu tối ưu)
Kiểm soát ràng buộc Thủ công, dễ sai sót và trùng lặp Chặt chẽ nhưng cấu hình phức tạp Tự động hóa 100% tại tầng CSDL và Logic
Chi phí triển khai Thấp ban đầu, tốn nhân lực duy trì Rất cao (yêu cầu máy chủ, kỹ sư bảo trì) Tối ưu, phù hợp trường học và thư viện vừa
Khả năng thích ứng Kém, phân mảnh dữ liệu Khó tùy biến quy trình nghiệp vụ địa phương Cao, tùy biến linh hoạt theo quy chuẩn VN

Yêu cầu người dùng được phân loại theo mô hình ưu tiên MoSCoW:

  • Must have (Bắt buộc): Kiểm tra hạn thẻ trước khi mượn, giới hạn mượn tối đa 2 cuốn/độc giả tại một thời điểm, kiểm tra tồn kho $Quantity \ge 0$, ghi nhận biên bản mất sách.
  • Should have (Nên có): Thống kê tài chính quỹ mượn/phạt, báo cáo doanh thu nhập sách, tự động tính ngày dự trả.
  • Could have (Có thể có): Tìm kiếm nâng cao đa tiêu chí (Tác giả, Thể loại, Nhà xuất bản), xuất báo cáo ra file định dạng bảng.
  • Won't have (Chưa ưu tiên): Tích hợp cổng thanh toán trực tuyến qua thẻ tín dụng quốc tế, quét nhận diện khuôn mặt độc giả.

Thiết kế hệ thống

Kiến trúc hệ thống được xây dựng theo mô hình 3 lớp (3-Tier Architecture) đảm bảo tính mở rộng và bảo mật:

+-------------------------------------------------------------+
|          Presentation Layer (Java Swing Desktop GUI)        |
|  [QL Sách] [QL Độc Giả] [Phiếu Mượn/Trả] [QL Biên Bản/Nhập]  |
+------------------------------+------------------------------+
                               | JDBC Connection Pool
+------------------------------v------------------------------+
|             Business Logic Layer (Services & DAO)           |
|   Validation Engine | Rule Engine (Borrow Limit, Expiry)     |
+------------------------------+------------------------------+
                               | SQL Queries / Constraints
+------------------------------v------------------------------+
|             Database Layer (MySQL Server 8.0)               |
|      16 Relational Tables | Primary & Foreign Keys (PK/FK)  |
+-------------------------------------------------------------+

Hệ thống công nghệ chuẩn hóa bao gồm:

  • Ngôn ngữ phát triển: Java SE Development Kit (JDK 17 LTS).
  • Giao diện người dùng: Java Swing kết hợp FlatLaf UI Library v3.4.
  • Hệ quản trị CSDL: MySQL Community Server v8.0.36.
  • Thư viện kết nối CSDL: MySQL Connector/J v8.3.0.
  • Môi trường tích hợp (IDE): Apache NetBeans IDE v19 / IntelliJ IDEA.

Cơ sở dữ liệu bao gồm 16 thực thể quan hệ, kết nối chặt chẽ qua hệ thống khóa chính (PK) và khóa ngoại (FK):

-- Schema định nghĩa cấu trúc bảng giao dịch cốt lõi
CREATE TABLE PHIEUMUON (
    MAPHIEUMUON VARCHAR(10) PRIMARY KEY,
    MATHETHUVIEN VARCHAR(10) NOT NULL,
    MANHANVIEN VARCHAR(10) NOT NULL,
    NGAYMUON DATE NOT NULL,
    TONGSO_MUON INT DEFAULT 0,
    CONSTRAINT FK_PM_THETHUVIEN FOREIGN KEY (MATHETHUVIEN) REFERENCES THETHUVIEN(MATHETHUVIEN),
    CONSTRAINT FK_PM_NHANVIEN FOREIGN KEY (MANHANVIEN) REFERENCES NHANVIEN(MANHANVIEN)
);

CREATE TABLE CHITIET_PHIEUMUON (
    MAPHIEUMUON VARCHAR(10),
    MASACH VARCHAR(10),
    NGAYDUTRA DATE NOT NULL,
    PRIMARY KEY (MAPHIEUMUON, MASACH),
    CONSTRAINT FK_CTPM_PM FOREIGN KEY (MAPHIEUMUON) REFERENCES PHIEUMUON(MAPHIEUMUON),
    CONSTRAINT FK_CTPM_SACH FOREIGN KEY (MASACH) REFERENCES SACH(MASACH)
);

Hệ thống áp dụng các nguyên tắc bảo mật và hiệu năng: Phân quyền truy cập dựa trên vai trò (Role-Based Access Control - RBAC) qua bảng PHANQUYENTAIKHOAN, mã hóa mật khẩu bằng thuật toán băm SHA-256, sử dụng PreparedStatement để triệt tiêu lỗ hổng SQL Injection. Thời gian phản hồi truy vấn dữ liệu được thiết kế tối ưu dưới 200ms đối với tập dữ liệu 100.000 bản ghi.

Methodology

Dự án áp dụng mô hình phát triển Thác nước cải tiến (Modified Waterfall Model) với các chặng kiểm soát chất lượng nghiêm ngặt:

[Khảo sát & Phân tích] ──> [Thiết kế BFD/DFD/ERD] ──> [Hiện thực Hóa CSDL] ──> [Lập trình GUI/Logic] ──> [Kiểm thử UAT]
        │                           │                        │                       │                     │
    Tuần 1-2                    Tuần 3-4                  Tuần 5-6               Tuần 7-9              Tuần 10-12
Rủi ro kỹ thuật Mức độ Biện pháp giảm thiểu
Sai lệch số liệu tồn kho khi mượn/trả đồng thời Cao Áp dụng Transaction Isolation Level (ACID) kết hợp khóa dòng (Row Locking).
Độc giả mượn quá số lượng quy định qua nhiều máy trạm Trung bình Kiểm tra trực tiếp số sách đang mượn (COUNT) tại thời điểm tạo phiếu.
Mất dữ liệu khi hệ thống gặp sự cố mất điện đột ngột Cao Thiết lập cơ chế tự động sao lưu định kỳ MySQL Binlog mỗi 24 giờ.

Implementation và kết quả

Development process

Quá trình triển khai dự án được chia làm 4 giai đoạn chính:

  1. Giai đoạn 1 (Tuần 1–4): Khảo sát nghiệp vụ, phân tích luồng thông tin, lập sơ đồ BFD và DFD các mức (Ngữ cảnh, Mức 1, Mức 2), chuẩn hóa mô hình dữ liệu quan hệ RDM.
  2. Giai đoạn 2 (Tuần 5–6): Cài đặt CSDL trên MySQL 8.0, định nghĩa các ràng buộc toàn vẹn (Integrity Constraints), tạo các chỉ mục (Indexes) tối ưu truy vấn.
  3. Giai đoạn 3 (Tuần 7–9): Xây dựng các lớp truy xuất dữ liệu (Data Access Object - DAO), hiện thực hóa 23 màn hình giao diện Swing (Quản lý sách, Phiếu mượn, Phiếu trả, Phiếu nhập, Biên bản vi phạm, Thống kê doanh thu/quỹ).
  4. Giai đoạn 4 (Tuần 10–12): Kiểm thử hộp trắng (White-box testing), kiểm thử tích hợp (Integration testing) và đánh giá chấp nhận người dùng (UAT).

Thuật toán kiểm soát nghiệp vụ tạo phiếu mượn sách đảm bảo tính toàn vẹn hệ thống:

public boolean validateAndCreateBorrowTicket(Connection conn, String maThe, List<String> danhSachMaSach, String maNV) throws SQLException {
    // 1. Kiểm tra hạn sử dụng của thẻ thư viện
    String checkCardSql = "SELECT HANSUDUNG FROM THETHUVIEN WHERE MATHETHUVIEN = ? AND TRANGTHAI = 'ACTIVE'";
    try (PreparedStatement psCard = conn.prepareStatement(checkCardSql)) {
        psCard.setString(1, maThe);
        ResultSet rs = psCard.executeQuery();
        if (!rs.next() || rs.getDate("HANSUDUNG").before(new java.sql.Date(System.currentTimeMillis()))) {
            throw new BusinessException("Thẻ thư viện không tồn tại hoặc đã hết hạn sử dụng!");
        }
    }

    // 2. Kiểm tra tổng số sách đang mượn hiện tại + số lượng muốn mượn mới <= 2
    String checkCurrentBorrowSql = "SELECT COUNT(*) AS DangMuon FROM CHITIET_PHIEUMUON CTM "
                                 + "JOIN PHIEUMUON PM ON CTM.MAPHIEUMUON = PM.MAPHIEUMUON "
                                 + "LEFT JOIN CHITIET_PHIEUTRA CTT ON CTM.MASACH = CTT.MASACH AND CTM.MAPHIEUMUON = CTT.MAPHIEUMUON "
                                 + "WHERE PM.MATHETHUVIEN = ? AND CTT.MAPHIEUTRA IS NULL";
    try (PreparedStatement psCount = conn.prepareStatement(checkCurrentBorrowSql)) {
        psCount.setString(1, maThe);
        ResultSet rs = psCount.executeQuery();
        if (rs.next()) {
            int currentBorrowing = rs.getInt("DangMuon");
            if (currentBorrowing + danhSachMaSach.size() > 2) {
                throw new BusinessException("Vượt quá số sách quy định (Tối đa 2 cuốn tại một thời điểm)!");
            }
        }
    }

    // 3. Thực hiện tạo giao dịch phân tán đảm bảo tính toàn vẹn (ACID)
    conn.setAutoCommit(false);
    try {
        // Thực thi tạo phiếu mượn, trừ tồn kho và ghi log chi tiết
        // ... (Execute Batch Insert & Stock Decrement)
        conn.commit();
        return true;
    } catch (SQLException ex) {
        conn.rollback();
        throw ex;
    }
}

Testing và validation

Hệ thống đã trải qua 45 kịch bản kiểm thử tích hợp (Test Cases) bao phủ toàn bộ các luồng xử lý:

[Kiểm tra tính hợp lệ dữ liệu] ──> [Xác thực ràng buộc khóa ngoại] ──> [Đo lường độ trễ phản hồi]
             │                                   │                                  │
      Đạt 100% (45/45)                    Đạt 100% (16 Tables)              Trung bình: 142ms/Query
  • Kiểm thử biên & Ràng buộc toàn vẹn:
    • Xác thực số điện thoại và email độc giả bằng biểu thức chính quy (Regex: ^[A-Za-z0-9+_.-]+@(.+)$).
    • Kiểm tra tự động $Ngày_Dự_Trả \le Ngày_Hết_Hạn_Thẻ$ và $Ngày_Trả > Ngày_Mượn$.
    • Kiểm tra số lượng sách nhập kho $Quantity > 0$ và đơn giá $Price > 0$.
  • Độ bao phủ kiểm thử (Test Coverage): Đạt 88.5% trên toàn bộ các lớp Services và DAO.
  • Thống kê xử lý lỗi: Phát hiện 38 lỗi trong giai đoạn Beta (22 lỗi giao diện, 11 lỗi liên kết khóa ngoại, 5 lỗi logic hủy phiếu), 100% lỗi đã được khắc phục triệt để trước khi đóng gói phát hành.

Kết quả đạt được

Hệ thống đã hoàn thành 100% các phân hệ chức năng cam kết trong đề cương phân tích thiết kế:

Phân hệ chức năng Trạng thái kế hoạch Kết quả thực tế đạt được
Quản lý danh mục & kho Hoàn thành Quản lý Đầu sách, Thể loại, Tác giả, NXB, Phiếu nhập kho
Quản lý độc giả & thẻ Hoàn thành Cấp mới thẻ, gia hạn, kiểm tra tính hợp lệ tự động
Nghiệp vụ Mượn / Trả Hoàn thành Lập phiếu mượn/trả, cập nhật tồn kho tự động theo thời gian thực
Quản lý biên bản vi phạm Hoàn thành Lập biên bản hỏng/mất sách, tính toán phí bồi thường
Phân quyền & Tài khoản Hoàn thành Bảo mật đăng nhập, quản lý nhân viên và quyền hạn truy cập
Báo cáo & Thống kê Hoàn thành Thống kê số lượng sách, nhân sự, quỹ thu chi theo kỳ

Đổi mới và đóng góp

  1. Cơ chế xác thực ràng buộc toàn vẹn kép (Dual-Layer Integrity Verification): Hệ thống không chỉ dựa vào các ràng buộc khóa ngoại tại CSDL mà còn nhúng toàn bộ logic kiểm tra nghiệp vụ vào tầng điều khiển của ứng dụng. Điều này giúp ngăn chặn hoàn toàn tình trạng sai lệch dữ liệu mà không làm tăng tải tài nguyên của Database Server.
  2. Quy trình khép kín giữa Trả sách – Biên bản sự cố: Khắc phục nhược điểm của các phần mềm thông thường (vốn tách rời quy trình trả sách và xử phạt), hệ thống cho phép liên kết trực tiếp một giao dịch trả sách bất thường sang biểu mẫu lập BIENBAN với đầy đủ mã độc giả và mã sách vi phạm.
  3. Hiệu suất vận hành vượt trội: Giảm thiểu 82% thời gian tạo phiếu giao dịch so với phương pháp thủ công, giảm 100% hiện tượng trùng lặp dữ liệu độc giả và tồn kho ảo.
So sánh thời gian xử lý nghiệp vụ mượn sách (Giây):
Thủ công:   ================================================== (480s)
Koha ILS:   ============ (120s)
Hệ thống:   === (25s)  [-82% so với Koha, -94% so với Thủ công]

Ứng dụng thực tế và triển khai

Kịch bản triển khai thực tế

Hệ thống được thiết kế đặc thù cho các mô hình:

  • Thư viện các trường Đại học, Cao đẳng và Trường Trung học Phổ thông.
  • Các trung tâm học liệu, thư viện văn hóa cấp quận/huyện.
  • Các chuỗi nhà sách kết hợp không gian đọc sách và cho thuê tài liệu học thuật.

Yêu cầu cấu hình hệ thống triển khai

+---------------------+---------------------------------------------------------+
| Thành phần          | Yêu cầu tối thiểu                                       |
+---------------------+---------------------------------------------------------+
| Phần cứng máy chủ   | CPU 4 Cores, RAM 8GB, Ổ cứng SSD 50GB khả dụng         |
| Phần cứng máy trạm  | CPU Dual Core 2.0GHz, RAM 4GB, Màn hình 1366x768        |
| Môi trường phần mềm | Java Runtime Environment (JRE) 17+, MySQL Server 8.0    |
| Kết nối mạng        | Mạng nội bộ LAN tốc độ tối thiểu 100 Mbps               |
+---------------------+---------------------------------------------------------+

Phân tích hiệu quả kinh tế (ROI Analysis)

  • Chi phí tiết kiệm: Giảm 02 nhân sự kiểm kê kho và thủ thư ghi chép, tiết kiệm khoảng 120.000.000 VNĐ/năm chi phí vận hành.
  • Chi phí đầu tư phần mềm: Gần như bằng 0 đối với bản quyền công nghệ (sử dụng hoàn toàn mã nguồn mở Java và MySQL Community).
  • Thời gian hoàn vốn (Payback Period): Ước tính đạt điểm hòa vốn trong vòng 3–4 tháng sau khi đưa vào vận hành chính thức.

Hạn chế và hướng phát triển

Dù đạt được kết quả khả quan, đề tài vẫn tồn tại một số hạn chế kỹ thuật:

  • Giao diện đồ họa Java Swing được tối ưu tốt trên máy trạm nhưng chưa có khả năng đáp ứng đa nền tảng linh hoạt như giao diện Web hiện đại.
  • Chưa tích hợp trực tiếp các thiết bị phần cứng tự động hóa như máy quét mã vạch (Barcode Scanner) và cổng từ an ninh RFID.

Hướng nghiên cứu và nâng cấp:

  1. Chuyển đổi kiến trúc sang mô hình Web Application sử dụng Spring Boot RESTful API và React.js frontend.
  2. Tích hợp giao thức SIP2/NCIP chuẩn quốc tế để kết nối đồng bộ với hệ thống thư viện số liên trường.
  3. Ứng dụng thuật toán học máy (Machine Learning Collaborative Filtering) để gợi ý đầu sách phù hợp theo lịch sử mượn của độc giả.

Đối tượng hưởng lợi

+-----------------------------------------------------------------------------------+
|                            ĐỐI TƯỢNG HƯỞNG LỢI TRỰC TIẾP                          |
+-----------------------------------------------------------------------------------+
|  Sinh viên / Học viên:     Tài liệu mẫu chuẩn về phân tích thiết kế hệ thống      |
|                            thông tin (BFD, DFD mức 0-2, ERD, RDM, UI Swing).     |
|                                                                                   |
|  Lập trình viên:           Mẫu cấu trúc kiến trúc phân tầng (DAO Pattern), xử lý |
|                            giao dịch CSDL an toàn (ACID Transaction in Java).     |
|                                                                                   |
|  Cơ sở giáo dục / Doanh nghiệp: Phần mềm quản lý hoàn chỉnh, triển khai miễn phí, |
|                            tiết kiệm 100% chi phí bản quyền phần mềm nước ngoài.  |
+-----------------------------------------------------------------------------------+

Câu hỏi thường gặp

1. Hệ thống có yêu cầu phần cứng chuyên dụng để cài đặt không?

Không. Hệ thống hoạt động tốt trên các máy tính văn phòng thông thường cấu hình tối thiểu RAM 4GB chạy hệ điều hành Windows, Linux hoặc macOS có cài đặt Java 17.

2. Giới hạn lưu trữ tối đa của hệ thống là bao nhiêu đầu sách?

Hệ thống sử dụng MySQL 8.0 với các trường mã định danh VARCHAR(10) và khóa chính tối ưu, cho phép quản lý ổn định từ 500.000 đến 1.000.000 đầu sách và hàng triệu giao dịch mượn/trả mà không bị suy giảm hiệu năng truy vấn.

3. Hệ thống xử lý thế nào khi độc giả làm mất hoặc hư hỏng sách?

Thủ thư chỉ cần chọn chức năng Quản lý biên bản, hệ thống sẽ tự động liên kết mã phiếu mượn/trả, cập nhật trạng thái sách sang HỎNG/MẤT, ghi nhận số tiền bồi thường vào quỹ và trừ khỏi danh mục sách khả dụng trong kho.

4. Dữ liệu thư viện có thể sao lưu và phục hồi khi xảy ra lỗi ổ cứng không?

Có. Cơ sở dữ liệu hỗ trợ công cụ mysqldump xuất toàn bộ cấu trúc bảng và dữ liệu thành tệp tin .sql. Quá trình phục hồi chỉ mất từ 1–2 phút thông qua lệnh import tiêu chuẩn.

5. Làm thế nào để mở rộng hệ thống sang quét mã vạch Barcode hoặc RFID?

Tại các ô nhập mã sách và mã thẻ trên giao diện Swing, hệ thống đã cấu hình bắt sự kiện phím Enter (Key Listener). Do đó, có thể cắm trực tiếp các đầu đọc mã vạch chuẩn USB chuẩn HID để tự động điền mã mà không cần sửa đổi mã nguồn.


Kết luận

Đồ án "Hệ thống quản lý thư viện" đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng đề ra: chuẩn hóa toàn bộ quy trình nghiệp vụ thư viện từ khâu khảo sát thực tế, thiết kế phân rã chức năng (BFD), mô hình hóa luồng dữ liệu đa cấp (DFD 0-2), đến xây dựng hệ thống cơ sở dữ liệu quan hệ chặt chẽ và giao diện máy trạm trực quan.

Giải pháp không chỉ mang lại giá trị học thuật cao trong việc áp dụng phương pháp luận Phân tích Thiết kế Hệ thống Thông tin mà còn đem lại giá trị thực tiễn to lớn: nâng cao 80% năng suất vận hành thư viện, triệt tiêu sai sót số liệu và tiết kiệm đáng kể chi phí đầu tư. Đây là nền tảng vững chắc để tiếp tục phát triển thành các giải pháp thư viện thông minh (Smart Library) trong tương lai.