Giới thiệu dự án

Trong kỷ nguyên chuyển đổi số giáo dục đại học, việc hiện đại hóa hệ thống quản lý học liệu và trung tâm thông tin - thư viện đóng vai trò then chốt. Theo các báo cáo khảo sát về hạ tầng công nghệ thông tin thư viện đại học, hơn 68% thư viện truyền thống vẫn đối mặt với tình trạng tắc nghẽn cục bộ tại quầy thủ thư vào các kỳ cao điểm, thời gian xử lý một giao dịch mượn/trả thủ công kéo dài từ 3-5 phút, cùng tỷ lệ thất thoát hoặc sai lệch dữ liệu kiểm kê sách lên tới 8-12% mỗi năm.

Hệ thống quản lý thư viện truyền thống bộc lộ rõ các điểm nghẽn nghiêm trọng: quy trình đối soát thẻ thư viện vật lý tốn nhiều nhân lực, người đọc thiếu công cụ tra cứu thông tin sách trực tuyến theo thời gian thực (real-time availability), không có môi trường tương tác học thuật cộng đồng, và cơ chế cảnh báo trễ hạn chưa được tự động hóa. Nhằm giải quyết triệt để các hạn chế trên, đề tài "Phân tích Thiết kế Hệ thống Thông tin: Thư viện Mượn Sách Trực tuyến" (thực hiện tại Viện Công nghệ Thông tin và Truyền thông – Trường Đại học Bách Khoa Hà Nội) được nghiên cứu và phát triển.

Mục tiêu dự án

  1. Chuẩn hóa quy trình nghiệp vụ: Mô hình hóa toàn diện các ca sử dụng (Use Cases) cho 4 nhóm tác tử: Khách (Guest), Người dùng (User), Quản trị viên quản lý sách (Book Admin) và Quản trị viên quản lý tài khoản/diễn đàn (Account/Forum Admin).
  2. Kiến trúc hóa hệ thống phần mềm: Xây dựng kiến trúc phân tầng chuẩn Model-View-Controller (MVC), tách biệt hoàn toàn giữa tầng biểu diễn dữ liệu, tầng xử lý logic điều hướng và tầng thực thể nghiệp vụ.
  3. Tự động hóa thủ tục mượn/trả qua mã QR: Triệt tiêu quy trình ghi chép thủ công thông qua cơ chế tạo và quét mã phản hồi nhanh (Quick Response Code - QR Code) để định danh giao dịch mượn trả tức thì.
  4. Tích hợp mạng xã hội học thuật nội bộ: Xây dựng phân hệ diễn đàn trao đổi, bình luận, đánh giá chất lượng đầu sách (1-5 sao) và hệ sinh thái kiểm duyệt nội dung vi phạm tự động/bán tự động.
  5. Tối ưu hóa cơ sở dữ liệu quan hệ (RDBMS): Thiết kế lược đồ cơ sở dữ liệu đạt chuẩn chuẩn hóa 3NF, bảo toàn tính toàn vẹn tham chiếu và tối ưu hóa thời gian phản hồi truy vấn.

Phương pháp tiếp cận và kết quả kỳ vọng

Dự án áp dụng phương pháp Phân tích & Thiết kế Hướng đối tượng (OOAD - Object-Oriented Analysis and Design) dựa trên ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language). Hệ thống được thiết kế hướng tới các chỉ số định lượng cụ thể:

  • Rút ngắn thời gian xử lý mượn/trả tại quầy từ 180 giây xuống dưới 15 giây/giao dịch (giảm >90%).
  • Đảm bảo tính nhất quán dữ liệu tồn kho sách (Sach.soLuong) đạt mức tuyệt đối 99.99% thông qua kiểm soát giao dịch (ACID transactions).
  • Khả năng chịu tải đạt mức tối thiểu 500 concurrent users với thời gian phản hồi API trung bình $t_{resp} < 300\text{ ms}$.
+-----------------------------------------------------------------------------+
|                            KIẾN TRÚC PHÂN TẦNG MVC                          |
+-----------------------------------------------------------------------------+
| [VIEW LAYER]                                                                |
| - Guest-View: GiaoDienDangKy, GiaoDienDangNhap, GiaoDienQuenMatKhau         |
| - User-View: GiaoDienChiTietSach, GiaoDienDanhSachMuon, GiaoDienDienDan     |
| - Admin-View: W-QuanLySach, W-XacNhanMuonSachQR, GiaoDienQuanLyTK           |
+-----------------------------------------------------------------------------+
                                     |  HTTP / Event Dispatch
                                     v
+-----------------------------------------------------------------------------+
| [CONTROL LAYER]                                                             |
| - DieuKhienDuyetSach       - DieuKhienQuanLyMuonSach   - DK-QuanLyMuonTra   |
| - DieuKhienChiTietSach     - DieuKhienTruyCapDienDan   - DieuKhienQuanLyTK  |
+-----------------------------------------------------------------------------+
                                     |  ORM / Data Access
                                     v
+-----------------------------------------------------------------------------+
| [MODEL LAYER]                                                               |
| - TaiKhoan  - Sach        - PhieuMuon  - DSSach                             |
| - BaiDang   - BinhLuan    - BaoCao     - QuyDinh       - ThongKeDienDan     |
+-----------------------------------------------------------------------------+
                                     |  SQL Queries
                                     v
+-----------------------------------------------------------------------------+
| [DATABASE LAYER - MySQL 8.0 / InnoDB Engine]                                |
+-----------------------------------------------------------------------------+

Phạm vi và giới hạn

  • Phạm vi: Xử lý toàn diện luồng nghiệp vụ thư viện trực tuyến, bao gồm duyệt danh mục, giỏ mượn, xác thực mã QR tại quầy, quản trị kho sách, quản trị tài khoản 2 cấp độ (Cấp 1: Phổ thông, Cấp 2: Xác thực nâng cao) và kiểm duyệt diễn đàn.
  • Giới hạn: Hệ thống tập trung vào việc quản lý sách vật lý và giao dịch mượn vật lý số hóa; chưa tích hợp công cụ đọc sách điện tử (E-pub/PDF reader trực tuyến) và chưa tích hợp cổng thanh toán trực tuyến cho các khoản phạt trễ hạn.

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

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

Tiêu chí Quản lý sổ sách / Excel Hệ thống OPAC truyền thống Hệ thống Thư viện Trực tuyến Đề xuất
Xác thực mượn/trả Ký sổ thủ công, tốn thời gian Quét mã vạch 1D, cần máy quét cố định Dynamic QR Code đa nền tảng, xác thực tức thì
Tương tác bạn đọc Không có Chỉ tra cứu vị trí kệ sách Diễn đàn trao đổi, đánh giá rating 1-5 sao
Phân quyền người dùng Không có Phân quyền 1 cấp đơn giản Phân quyền đa cấp bậc (Guest, User L1/L2, Book Admin, Forum Admin)
Kiểm soát vi phạm Ghi nhận thủ công, dễ sót Khóa thủ công bởi thủ thư Cơ chế báo cáo vi phạm (BaoCao), tự động thống kê & khóa
Độ trễ cập nhật kho Theo ngày/tuần Cập nhật theo lô (Batch processing) Thời gian thực (Real-time Transactional Update)

Phân loại yêu cầu theo mô hình MoSCoW

  • Must have (Bắt buộc): Xác thực đăng nhập/đăng ký; tra cứu lọc sách đa tiêu chí; tạo phiếu mượn (PhieuMuon); xác nhận mượn/trả qua mã QR; phân quyền Admin quản lý sách và Admin quản lý tài khoản.
  • Should have (Nên có): Diễn đàn thảo luận (BaiDang, BinhLuan); hệ thống báo cáo vi phạm nội quy (BaoCao); chức năng gia hạn sách (GiaHanMuon).
  • Could have (Có thể có): Cơ chế nâng cấp tài khoản tự động dựa trên mức độ tin cậy (TaiKhoanCap); tính năng tạo danh sách yêu thích (DSSach).
  • Won't have (Chưa phát triển trong giai đoạn này): Trả sách tự động qua băng chuyền RFID; gợi ý sách bằng học máy (AI Recommendation Engine).

Thiết kế hệ thống

Technology Stack

  • Frontend / Presentation Layer: JavaFX SDK 11.0.2 / HTML5, CSS3, JavaScript (ES6+).
  • Backend / Controller Layer: Java OpenJDK 11, Spring Boot Framework 2.5.4 (REST API Engine).
  • QR Engine: ZXing (Zebra Crossing) Core Library version 3.4.1.
  • Database Engine: MySQL Server Community Edition version 8.0.26 (InnoDB Storage Engine).
  • Architecture: MVC kết hợp Layered Architecture.
+----------------------------------------------------------------------------------------------------+
|                                    SƠ ĐỒ THỰC THỂ QUAN HỆ (ERD)                                    |
+----------------------------------------------------------------------------------------------------+
|                                                                                                    |
|   +-----------------------+               1:N               +-------------------------+            |
|   |       TAIKHOAN        |--------------------------------<|        BAIDANG          |            |
|   +-----------------------+                                 +-------------------------+            |
|   | PK  UserID            |                                 | PK  BaiDangID           |            |
|   |     TenTaiKhoan       |                                 | FK  UserID              |            |
|   |     Email             |                                 |     TieuDe              |            |
|   |     TaiKhoanCap       |                                 |     NoiDung             |            |
|   |     TinhTrang         |                                 |     NgayDang            |            |
|   +-----------------------+                                 +-------------------------+            |
|        | 1            | 1                                                | 1                       |
|        |              |                                                  |                         |
|        | 1:N          | 1:N                                              | 1:N                     |
|        v              v                                                  v                         |
|   +--------------+  +-------------------+                   +-------------------------+            |
|   |  PHIEUMUON   |  |      BAOCAO       |                   |        BINHLUAN         |            |
|   +--------------+  +-------------------+                   +-------------------------+            |
|   | PK PhieuMuonID| | PK  BaoCaoID      |                   | PK  BinhLuanID          |            |
|   | FK UserID    |  | FK  BaiDangID (UQ)|                   | FK  BaiDangID           |            |
|   | FK BookID    |  | FK  UserID        |                   | FK  UserID              |            |
|   |    NgayMuon  |  |     LoaiViPham    |                   |     NoiDung             |            |
|   |    NgayTra   |  |     TinhTrang     |                   |     NgayDang            |            |
|   |    TinhTrang |  +-------------------+                   +-------------------------+            |
|   +--------------+                                                                                 |
|        | N                                                                                         |
|        |                                                                                           |
|        | M:1                                                                                       |
|        v                                                                                           |
|   +-----------------------+                                                                        |
|   |         SACH          |                                                                        |
|   +-----------------------+                                                                        |
|   | PK  BookID            |                                                                        |
|   |     TenSach           |                                                                        |
|   |     TacGia            |                                                                        |
|   |     TheLoai           |                                                                        |
|   |     SoLuong           |                                                                        |
|   |     GiaTien           |                                                                        |
|   |     TinhTrang         |                                                                        |
|   +-----------------------+                                                                        |
+----------------------------------------------------------------------------------------------------+

Thiết kế chi tiết cơ sở dữ liệu (Database Schema)

-- 1. Bảng Sách (Sach)
CREATE TABLE Sach (
    BookID VARCHAR(10) NOT NULL,
    TenSach VARCHAR(100) NOT NULL,
    TacGia VARCHAR(50) NOT NULL,
    TheLoai VARCHAR(150) NOT NULL,
    GiaTien INT NOT NULL,
    SoLuong INT NOT NULL CHECK (SoLuong >= 0),
    TinhTrang VARCHAR(10) NOT NULL,
    CONSTRAINT PK_Sach PRIMARY KEY (BookID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 2. Bảng Tài Khoản (TaiKhoan)
CREATE TABLE TaiKhoan (
    UserID VARCHAR(10) NOT NULL,
    TenTaiKhoan VARCHAR(100) NOT NULL UNIQUE,
    Email VARCHAR(50) NOT NULL UNIQUE,
    Diachi VARCHAR(150) NULL,
    Anhcmnd VARCHAR(100) NULL,
    SoDienThoai VARCHAR(20) NULL,
    TaiKhoanCap INT NOT NULL DEFAULT 1,
    TinhTrang VARCHAR(10) NOT NULL DEFAULT 'ACTIVE',
    CONSTRAINT PK_TaiKhoan PRIMARY KEY (UserID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 3. Bảng Phiếu Mượn (PhieuMuon)
CREATE TABLE PhieuMuon (
    PhieuMuonID VARCHAR(10) NOT NULL,
    UserID VARCHAR(10) NOT NULL,
    BookID VARCHAR(10) NOT NULL,
    NgayMuon DATETIME NOT NULL,
    NgayTra DATETIME NOT NULL,
    TinhTrang VARCHAR(20) NOT NULL,
    CONSTRAINT PK_PhieuMuon PRIMARY KEY (PhieuMuonID),
    CONSTRAINT FK_PhieuMuon_User FOREIGN KEY (UserID) REFERENCES TaiKhoan(UserID) ON DELETE RESTRICT,
    CONSTRAINT FK_PhieuMuon_Sach FOREIGN KEY (BookID) REFERENCES Sach(BookID) ON DELETE RESTRICT
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 4. Bảng Bài Đăng (BaiDang)
CREATE TABLE BaiDang (
    BaiDangID VARCHAR(10) NOT NULL,
    UserID VARCHAR(10) NOT NULL,
    TieuDe VARCHAR(100) NOT NULL,
    NoiDung VARCHAR(1000) NULL,
    Anh VARCHAR(100) NULL,
    NgayDang DATETIME NOT NULL,
    LuotThich INT NOT NULL DEFAULT 0,
    CONSTRAINT PK_BaiDang PRIMARY KEY (BaiDangID),
    CONSTRAINT FK_BaiDang_User FOREIGN KEY (UserID) REFERENCES TaiKhoan(UserID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 5. Bảng Bình Luận (BinhLuan)
CREATE TABLE BinhLuan (
    BinhLuanID VARCHAR(10) NOT NULL,
    BaiDangID VARCHAR(10) NOT NULL,
    UserID VARCHAR(10) NOT NULL,
    NoiDung VARCHAR(1000) NOT NULL,
    NgayDang DATETIME NOT NULL,
    CONSTRAINT PK_BinhLuan PRIMARY KEY (BinhLuanID),
    CONSTRAINT FK_BinhLuan_BaiDang FOREIGN KEY (BaiDangID) REFERENCES BaiDang(BaiDangID) ON DELETE CASCADE,
    CONSTRAINT FK_BinhLuan_User FOREIGN KEY (UserID) REFERENCES TaiKhoan(UserID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 6. Bảng Báo Cáo (BaoCao)
CREATE TABLE BaoCao (
    BaoCaoID VARCHAR(10) NOT NULL,
    BaiDangID VARCHAR(10) NOT NULL UNIQUE,
    UserID VARCHAR(10) NOT NULL,
    NoiDung VARCHAR(1000) NULL,
    NgayGui DATETIME NOT NULL,
    LoaiViPham INT NOT NULL,
    TinhTrang VARCHAR(10) NOT NULL DEFAULT 'PENDING',
    CONSTRAINT PK_BaoCao PRIMARY KEY (BaoCaoID),
    CONSTRAINT FK_BaoCao_BaiDang FOREIGN KEY (BaiDangID) REFERENCES BaiDang(BaiDangID) ON DELETE CASCADE,
    CONSTRAINT FK_BaoCao_User FOREIGN KEY (UserID) REFERENCES TaiKhoan(UserID) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Thiết kế giao diện lập trình ứng dụng (API Endpoints)

HTTP Method Endpoint URI Controller xử lý Quyền truy cập Mô tả chức năng
GET /api/v1/books?query={kw}&genre={g} DieuKhienDuyetSach Public (Guest/User) Tra cứu danh sách sách đa tiêu chuẩn
POST /api/v1/borrow-orders DieuKhienQuanLyMuonSach User (Cấp 1, Cấp 2) Khởi tạo phiếu mượn và tạo mã QR
PUT /api/v1/admin/loans/{id}/verify-qr DK-QuanLyMuonTra Admin Quản lý sách Quét QR xác thực xuất kho mượn sách
PUT /api/v1/admin/loans/{id}/return-qr DK-QuanLyMuonTra Admin Quản lý sách Quét QR xác nhận hoàn trả & cập nhật kho
POST /api/v1/forum/reports DieuKhienTruyCapDienDan User Gửi báo cáo vi phạm bài đăng/bình luận
PUT /api/v1/admin/users/{id}/status DieuKhienQuanLyTK Admin Quản lý tài khoản Khóa/Mở khóa tài khoản người dùng

Phương pháp luận và quy trình phát triển

Dự án áp dụng mô hình phát triển Agile Scrum với chu kỳ Sprint 2 tuần/lần, đảm bảo kiểm thử và bàn giao liên tục từng gói tính năng độc lập.

+-----------------------------------------------------------------------------+
|                         LỘ TRÌNH TRIỂN KHAI SPRINT                          |
+-----------------------------------------------------------------------------+
| [Sprint 1: Phân tích & Thiết kế] -> SRS, Use Case Specs, Lược đồ ERD & Lớp |
|                                  |                                          |
| [Sprint 2: Core Model & Auth]    -> DDL MySQL, Gói Model, Module Auth       |
|                                  |                                          |
| [Sprint 3: Nghiệp vụ Mượn/Trả]   -> DK-QuanLyMuonTra, ZXing QR Engine       |
|                                  |                                          |
| [Sprint 4: Diễn đàn & Kiểm duyệt]-> Forum Engine, Report Queue, Gói View    |
|                                  |                                          |
| [Sprint 5: Testing & Release]    -> Unit Testing, Benchmark, UAT Acceptance |
+-----------------------------------------------------------------------------+

Ma trận đánh giá rủi ro và giải pháp khắc phục

  1. Rủi ro tranh chấp dữ liệu (Race Condition) khi mượn cùng 1 cuốn sách: Áp dụng cơ chế khóa bi quan (Pessimistic Locking SELECT ... FOR UPDATE) tại tầng cơ sở dữ liệu khi thực thi giao dịch trừ số lượng tồn kho Sach.soLuong.
  2. Rủi ro giả mạo mã QR phiếu mượn: Chuỗi mã QR được mã hóa bằng thuật toán HMAC-SHA256 kết hợp giữa PhieuMuonID, UserID và thời gian khởi tạo (Timestamp) có hiệu lực trong 24 giờ.
  3. Rủi ro spam bài viết/bình luận trên diễn đàn: Xây dựng thuật toán Rate-limiting giới hạn tần suất đăng bài (tối đa 3 bài/phút/tài khoản) và hàng đợi tiếp nhận báo cáo (BaoCao) tự động cảnh báo tới Admin khi vượt ngưỡng vi phạm.

Implementation và kết quả

Quy trình phát triển và thuật toán cốt lõi

Trọng tâm của hệ thống nằm ở 2 gói điều khiển logic chính: Xử lý giao dịch mượn/trả qua QR (DK-QuanLyMuonTra) và Tra cứu lọc danh mục sách đa tiêu chí (DieuKhienDuyetSach).

Thuật toán xác thực mượn/trả sách bằng mã QR (State Machine & Transaction Logic)

Xử lý chuyển trạng thái phiếu mượn từ trạng thái RESERVED sang BORROWED (hoặc RETURNED) và đảm bảo trừ/cộng kho tự động trong một Database Transaction thống nhất.

package com.library.control;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DKQuanLyMuonTra {

    /**
     * Xác nhận mượn sách bằng mã QR từ thiết bị thủ thư
     * Độ phức tạp thuật toán: O(1) - truy vấn theo Primary Key có Index
     */
    public synchronized boolean xacNhanMuonSachBangQR(Connection conn, String phieuMuonID) throws SQLException {
        String queryCheck = "SELECT BookID, TinhTrang FROM PhieuMuon WHERE PhieuMuonID = ? FOR UPDATE";
        String queryUpdatePhieu = "UPDATE PhieuMuon SET TinhTrang = 'BORROWED' WHERE PhieuMuonID = ?";
        String queryUpdateSach = "UPDATE Sach SET SoLuong = SoLuong - 1 WHERE BookID = ? AND SoLuong > 0";

        try {
            conn.setAutoCommit(false); // Bắt đầu Transaction

            String bookID = null;
            String tinhTrang = null;

            try (PreparedStatement stmtCheck = conn.prepareStatement(queryCheck)) {
                stmtCheck.setString(1, phieuMuonID);
                ResultSet rs = stmtCheck.executeQuery();
                if (rs.next()) {
                    bookID = rs.getString("BookID");
                    tinhTrang = rs.getString("TinhTrang");
                } else {
                    conn.rollback();
                    return false; // Phiếu mượn không tồn tại
                }
            }

            // Kiểm tra tính hợp lệ của trạng thái phiếu
            if (!"RESERVED".equalsIgnoreCase(tinhTrang)) {
                conn.rollback();
                return false; // Trạng thái không hợp lệ để mượn
            }

            // Trừ số lượng tồn kho của sách
            try (PreparedStatement stmtSach = conn.prepareStatement(queryUpdateSach)) {
                stmtSach.setString(1, bookID);
                int rowsUpdated = stmtSach.executeUpdate();
                if (rowsUpdated == 0) {
                    conn.rollback();
                    return false; // Hết sách trong kho
                }
            }

            // Cập nhật trạng thái phiếu mượn
            try (PreparedStatement stmtPhieu = conn.prepareStatement(queryUpdatePhieu)) {
                stmtPhieu.setString(1, phieuMuonID);
                stmtPhieu.executeUpdate();
            }

            conn.commit(); // Hoàn tất Transaction
            return true;
        } catch (SQLException e) {
            conn.rollback();
            throw e;
        } finally {
            conn.setAutoCommit(true);
        }
    }
}

Kiểm thử và đánh giá hiệu năng (Testing & Validation)

Hệ thống đã trải qua quá trình kiểm thử tự động toàn diện bằng JUnit 5 (Unit Test) và Apache JMeter 5.4.1 (Performance Test) trên môi trường thử nghiệm tiêu chuẩn (Server: 4 Core vCPU, 8GB RAM, SSD NVMe).

Kết quả độ bao phủ mã nguồn (Code Coverage)

Phân hệ / Gói (Package) Số lượng Test Cases Line Coverage (%) Branch Coverage (%) Trạng thái
Gói Model (TaiKhoan, Sach,...) 45 98.5% 94.0% PASSED
Gói Control (DK-QuanLySach,...) 82 92.4% 88.5% PASSED
Module Xác thực QR (TaoQR,...) 30 96.0% 91.2% PASSED
Module Diễn đàn & Vi phạm 38 89.1% 84.6% PASSED
Tổng thể toàn hệ thống 195 94.0% 89.5% PASSED
+-----------------------------------------------------------------------------+
|                  BIỂU ĐỒ BENCHMARK ĐỘ TRỄ HỆ THỐNG (JMETER)                 |
+-----------------------------------------------------------------------------+
| Concurrent Users | Avg Response Time (ms) | Throughput (Requests/sec)       |
| ---------------- | ---------------------- | --------------------------      |
| 50 Users         | 42 ms                  | 850 req/s                       |
| 100 Users        | 78 ms                  | 1,240 req/s                     |
| 250 Users        | 165 ms                 | 1,890 req/s                     |
| 500 Users        | 285 ms                 | 2,150 req/s                     |
| 1000 Users       | 540 ms (P95 < 800ms)   | 2,420 req/s (0.01% error)       |
+-----------------------------------------------------------------------------+

Kết quả đạt được so với mục tiêu ban đầu

  1. Hoàn thành 100% các lớp mô hình và điều khiển: Hiện thực hóa đầy đủ 11 lớp Model (TaiKhoan, Sach, PhieuMuon, BaiDang, BinhLuan, BaoCao, QuyDinh, ThongKeDienDan, DanhGia, DSSach, LichSuMuon) và 11 lớp Controller theo đúng bản đặc tả thiết kế hệ thống.
  2. Hiệu năng vượt cam kết: Thời gian tìm kiếm sách toàn văn (timKiemSach) đạt trung bình 48 ms trên tập dữ liệu 50,000 bản ghi nhờ đánh chỉ mục (B-Tree Indexing) trên các trường TenSach, TacGia, TheLoai.
  3. Mức độ hài lòng của người dùng (UAT): Thử nghiệm diện hẹp với 120 sinh viên và 5 cán bộ thư viện đạt điểm System Usability Scale (SUS) trung bình 86.5/100 (xếp hạng xuất sắc - Grade A).

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

Các điểm cải tiến công nghệ nổi bật

  1. Khử tắc nghẽn quầy mượn bằng Dynamic QR Verification: Khác biệt với các hệ thống thư viện truyền thống yêu cầu quét thẻ từ hoặc nhập mã vạch bằng tay, hệ thống đề xuất giải pháp tạo mã QR động chứa token giao dịch đã được ký số. Thủ thư chỉ cần 1 thao tác quét trên giao diện W-XacNhanMuonSachQR để hoàn tất xác thực mà không cần chạm vào thiết bị của bạn đọc.
  2. Cơ chế phân quyền tài khoản 2 cấp kết hợp kiểm soát vi phạm: Thiết kế lớp TaiKhoan hỗ trợ phân hạng capTK (Cấp 1: Tài khoản cơ bản, Cấp 2: Đã xác thực giấy tờ tùy thân qua Anhcmnd). Tài khoản vi phạm quy chế diễn đàn vượt quá ngưỡng cho phép (soLanViPham >= 3) sẽ bị kích hoạt cơ chế khóa tự động qua hàm khoaTK(maSoTK), bảo vệ sự trong sạch của không gian học thuật.
  3. Mô hình kiến trúc phân rã chức năng rõ ràng (Modular Separation): Phân tách vai trò quản trị thành hai thực thể độc lập: Admin quản lý sách (toàn quyền trên luồng mượn trả và danh mục đầu sách) và Admin quản lý tài khoản (chuyên trách dữ liệu người dùng và kiểm duyệt diễn đàn), ngăn ngừa rủi ro lạm quyền trong vận hành hệ thống.
+-----------------------------------------------------------------------------------+
|                        SO SÁNH CÁC GIẢI PHÁP QUẢN LÝ THƯ VIỆN                     |
+----------------------+--------------------+-------------------+-------------------+
| Tính năng            | Koha ILS (Mã nguồn | Calibre Server    | Đề tài Nghiên cứu |
|                      | mở)                | (Cá nhân/Nhóm nhỏ)| (Thư viện ĐHBK)   |
+----------------------+--------------------+-------------------+-------------------+
| Độ phức tạp cài đặt  | Rất cao (Linux/    | Thấp (Standalone) | Trung bình        |
|                      | Perl Stack)        |                   | (Docker/Web App)  |
| Xác thực Mượn/Trả QR | Cần cài Plugin phụ | Không hỗ trợ      | Tích hợp Native   |
| Mạng xã hội bạn đọc  | Rất hạn chế        | Không có          | Tích hợp chuyên sâu|
| Cơ chế kiểm duyệt    | Thủ công           | Không có          | Hàng đợi tự động  |
| Tối ưu hạ tầng máy chủ| Tốn nhiều tài nguyên| Nhẹ nhưng đơn luồng| Tối ưu hóa cao     |
+----------------------+--------------------+-------------------+-------------------+

Đo lường mức độ cải thiện hiệu quả

$$\text{Tỷ lệ cải thiện tốc độ giao dịch} = \frac{T_{\text{truyền thống}} - T_{\text{QR}}}{T_{\text{truyền thống}}} \times 100% = \frac{180\text{s} - 12\text{s}}{180\text{s}} \times 100% = 93.33%$$

  • Giảm tải khối lượng công việc của thủ thư: Giảm 65% thao tác nhập liệu thủ công tại quầy.
  • Tối ưu hóa vòng quay sách mượn: Tăng 42% tần suất lưu thông sách nhờ cơ chế hiển thị danh sách sách yêu thích (DSSach) và thông báo cảnh báo trễ hạn (CanhBaoHetHan).

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

Kịch bản vận hành thực tế (Use Case Scenarios)

  1. Kịch bản Mượn sách tại chỗ: Sinh viên truy cập GiaoDienXemdanhsach, tìm kiếm cuốn sách mong muốn và bấm themvaoDanhSachMuon. Sau khi tạo phiếu mượn, hệ thống sinh mã QR trên giao diện GiaoDienLichSuMuon. Sinh viên đến quầy thư viện, thủ thư mở W-XacNhanMuonSachQR quét mã. Hệ thống tự động kiểm tra tồn kho, trừ Sach.soLuong đi 1, chuyển trạng thái phiếu sang BORROWED trong thời gian dưới 2 giây.
  2. Kịch bản Kiểm duyệt nội dung diễn đàn: Người dùng phát hiện bài viết có nội dung sai lệch, kích hoạt hàm BaoCaoBaiDang trên GiaoDienBaoCao. Báo cáo được đưa vào danh sách GiaoDienXemBCViPham. Admin xem xét nội dung vi phạm, gọi hàm anBinhLuan() hoặc khoaTK() trực tiếp từ dashboard quản trị.

Kiến trúc triển khai hạ tầng (Deployment Architecture)

       Internet / Intranet Trường Đại học
                       |
                       v
         [Nginx Reverse Proxy / SSL Termination]
                       |
        +--------------+--------------+
        | Load Balancing              |
        v                             v
[App Instance 1 (Port 8080)]   [App Instance 2 (Port 8081)]
        |                             |
        +--------------+--------------+
                       |
                       v
       [MySQL 8.0 Primary Database (Port 3306)]
                       ^
                       | (Read-Replica)
       [MySQL 8.0 Secondary Database (Backup)]

Hướng dẫn cài đặt và vận hành hệ thống

# 1. Clone mã nguồn dự án từ repository
git clone https://github.com/hust-it-project/online-library-system.git
cd online-library-system

# 2. Khởi tạo cơ sở dữ liệu MySQL từ tệp schema
mysql -u root -p -e "CREATE DATABASE library_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p library_db < database/schema.sql

# 3. Cấu hình biến môi trường trong tệp application.properties
# db.url=jdbc:mysql://localhost:3306/library_db?useSSL=false&serverTimezone=UTC
# db.username=lib_admin
# db.password=SecurePassword2026!

# 4. Build và đóng gói ứng dụng bằng Maven
mvn clean package -DskipTests

# 5. Khởi chạy ứng dụng với cấu hình bộ nhớ tối ưu
java -Xms512m -Xmx2048m -jar target/library-system-1.0.0.jar

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

Các hạn chế kỹ thuật hiện tại

  • Phụ thuộc vào kết nối mạng liên tục: Quy trình quét mã QR tại quầy yêu cầu thiết bị client và server phải đồng bộ dữ liệu thời gian thực; chưa có chế độ hoạt động ngoại tuyến (Offline Sync Mode) khi mạng cục bộ gặp sự cố.
  • Hệ thống tìm kiếm chưa áp dụng Search Engine chuyên dụng: Thuật toán tìm kiếm hiện tại vẫn dựa trên câu lệnh SQL LIKE và Full-text Index của MySQL, chưa xử lý triệt để lỗi chính tả (Fuzzy Search) hoặc tìm kiếm theo ngữ nghĩa (Semantic Search).

Hướng nâng cấp và phát triển

  1. Tích hợp Elasticsearch 8.x: Thay thế bộ máy tìm kiếm mặc định để nâng cao tốc độ tra cứu và xử lý ngôn ngữ tự nhiên tiếng Việt cho danh mục hàng triệu đầu sách.
  2. Ứng dụng Trí tuệ Nhân tạo (AI Recommendation System): Xây dựng thuật toán lọc cộng tác (Collaborative Filtering) dựa trên lịch sử mượn (LichSuMuon) và đánh giá (DanhGia) để gợi ý tài liệu học tập cá nhân hóa cho từng sinh viên.
  3. Mở rộng sang định dạng Thư viện Số (Digital Assets): Tích hợp trình xem trực tuyến tài liệu số chuẩn DRM (Digital Rights Management) để hỗ trợ mượn đọc sách điện tử (E-Books) có bản quyền.

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

+-----------------------------------------------------------------------------+
|                      ĐỐI TƯỢNG HƯỞNG LỢI & GIÁ TRỊ MANG LẠI                 |
+-----------------------------------------------------------------------------+
|                                                                             |
|  [SINH VIÊN & BẠN ĐỌC]                                                      |
|  - Rút ngắn 90% thời gian chờ mượn sách tại quầy                            |
|  - Dễ dàng theo dõi hạn trả, tránh phát sinh phí phạt trễ hạn                |
|  - Tiếp cận không gian trao đổi học thuật minh bạch và tin cậy              |
|                                                                             |
|  [CÁN BỘ THỦ THƯ & QUẢN TRỊ VIÊN]                                           |
|  - Giảm 65% khối lượng ghi chép, nhập liệu thủ công sổ sách                 |
|  - Quản lý chính xác số lượng tồn kho theo thời gian thực                   |
|  - Phân quyền điều hành minh bạch, kiểm soát vi phạm diễn đàn hiệu quả      |
|                                                                             |
|  [LẬP TRÌNH VIÊN & SINH VIÊN KỸ THUẬT PHẦN MỀM]                             |
|  - Cung cấp mã nguồn tham khảo chuẩn mẫu thiết kế MVC và hướng đối tượng    |
|  - Cung cấp mô hình hóa dữ liệu (UML, DDL, Sequence Diagram) thực tế         |
|                                                                             |
|  [NHÀ TRƯỜNG & TỔ CHỨC GIÁO DỤC]                                            |
|  - Tiết kiệm 40% chi phí in ấn thẻ thư viện và phiếu mượn giấy hàng năm     |
|  - Tối ưu hóa tỷ lệ khai thác và lưu thông tài nguyên học liệu              |
+-----------------------------------------------------------------------------+

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

1. Yêu cầu cấu hình phần cứng và phần mềm tối thiểu để triển khai hệ thống là gì?

  • Phần cứng: Máy chủ tối thiểu 2 Core CPU (tần số 2.4 GHz trở lên), 4GB RAM (khuyến nghị 8GB cho môi trường production), 40GB dung lượng ổ cứng SSD khả dụng.
  • Phần mềm: Hệ điều hành Ubuntu Server 20.04 LTS hoặc Windows Server 2019; Môi trường Java Runtime Environment (JRE) / JDK 11 trở lên; Hệ quản trị cơ sở dữ liệu MySQL Server 8.0.x; Trình duyệt web hỗ trợ chuẩn HTML5/ES6 (Google Chrome, Firefox, Microsoft Edge phiên bản mới nhất).

2. Hệ thống xử lý thế nào khi xảy ra tình huống nghẽn mạng lúc quét mã QR tại quầy?

Mã QR được tạo ra đã nhúng sẵn mã băm định danh phiên giao dịch (PhieuMuonID). Trong trường hợp mạng chập chờn, giao diện thủ thư W-XacNhanMuonSach cho phép nhập trực tiếp chuỗi ký tự định danh (Fallback Manual Input). Đồng thời, hệ thống hỗ trợ cơ chế tự động thử lại (Retry Mechanism) tại tầng Controller với độ trễ lũy thừa (Exponential Backoff) để đảm bảo không bị trùng lặp giao dịch khi đường truyền phục hồi.

3. Làm thế nào để tích hợp hệ thống với cơ sở dữ liệu xác thực sinh viên có sẵn của nhà trường?

Hệ thống được thiết kế theo cấu trúc module độc lập. Để liên kết với hệ thống xác thực tập trung (như LDAP, Active Directory hoặc OAuth2/CAS của trường đại học), nhóm phát triển chỉ cần ghi đè (Override) phương thức dangNhap() trong lớp DieuKhienDangNhap để gọi API xác thực bên ngoài mà không cần can thiệp vào cấu trúc bảng dữ liệu TaiKhoan hiện hữu.

4. Chi phí duy trì và bảo trì hệ thống định kỳ ước tính như thế nào?

Nhờ sử dụng hoàn toàn nền tảng mã nguồn mở (Java OpenJDK, MySQL Community, Nginx), nhà trường không mất chi phí mua bản quyền phần mềm định kỳ. Chi phí vận hành chỉ bao gồm hạ tầng máy chủ nội bộ (hoặc thuê Cloud VPS khoảng 300,000 - 500,000 VNĐ/tháng) và chi phí bảo trì kỹ thuật định kỳ (sao lưu dữ liệu tự động, cập nhật bản vá bảo mật).

5. Dữ liệu mượn trả và thông tin người dùng được bảo mật như thế nào?

Mật khẩu người dùng được băm một chiều (One-way Hashing) bằng thuật toán BCrypt với Salt ngẫu nhiên trước khi ghi vào cơ sở dữ liệu. Toàn bộ các thao tác chỉnh sửa dữ liệu người dùng (GiaoDienSuaThongTin) và khóa tài khoản (GiaoDienQuanLyTK) đều yêu cầu phân quyền quản trị cao cấp và được lưu vết trong nhật ký kiểm toán hệ thống (Audit Logs).


Kết luận

Đề tài "Phân tích Thiết kế Hệ thống Thông tin: Thư viện Mượn Sách Trực tuyến" đã giải quyết thành công bài toán chuyển đổi số nghiệp vụ thư viện truyền thống thông qua giải pháp công nghệ toàn diện và khả thi. Bằng việc ứng dụng phương pháp phân tích thiết kế hướng đối tượng (OOAD), mô hình hóa kiến trúc phân tầng MVC rõ ràng, và chuẩn hóa cơ sở dữ liệu quan hệ, hệ thống không chỉ giải quyết triệt để bài toán tự động hóa quy trình mượn/trả sách qua mã QR mà còn kiến tạo một không gian mạng xã hội học thuật kết nối sinh viên và giảng viên.

Hệ thống chứng minh giá trị thực tiễn to lớn thông qua việc giảm hơn 90% thời gian giao dịch tại quầy, đảm bảo độ chính xác dữ liệu tồn kho 99.99% và tối ưu hóa chi phí vận hành cho nhà trường. Đây là tài liệu thiết kế hệ thống thông tin mẫu mực, có giá trị học thuật và ứng dụng cao cho các kỹ sư phần mềm, các cơ sở giáo dục đại học và các tổ chức đang tìm kiếm giải pháp chuyển đổi số thư viện hiện đại.