Giới thiệu dự án

Trong bối cảnh chuyển đổi số giáo dục đại học, nhu cầu tiếp cận nguồn học liệu chuyên ngành chất lượng cao của sinh viên ngành Công nghệ Thông tin (CNTT) ngày càng gia tăng. Theo các khảo sát giáo dục đại học, hơn 85% sinh viên CNTT thường xuyên tìm kiếm tài liệu tham khảo, bài giảng, đề thi mẫu và mã nguồn từ các khóa trước để phục vụ học tập và nghiên cứu. Tuy nhiên, việc chia sẻ tài liệu hiện nay chủ yếu diễn ra phân tán qua mạng xã hội, các dịch vụ lưu trữ đám mây cá nhân hoặc diễn đàn không chính thống, dẫn đến tình trạng thất lạc dữ liệu, liên kết hỏng và đặc biệt là nguy cơ vi phạm quyền sở hữu trí tuệ.

Đề tài "Xây dựng Website chia sẻ tài liệu học tập cho sinh viên ngành CNTT, Trường Đại học Đồng Tháp" do sinh viên Dương Tấn Thành thực hiện dưới sự hướng dẫn của ThS. Huỳnh Lê Uyên Minh giải quyết trực tiếp bài toán quản lý và phân phối tri thức số nội bộ tại Khoa Sư phạm Toán - Tin.

                           [ KIẾN TRÚC TỔNG QUAN HỆ THỐNG ]
+-----------------------------------------------------------------------------+
|                                TRÌNH DUYỆT WEB                              |
|                    (HTML5 / CSS3 / JavaScript / jQuery / Ajax)              |
+-----------------------------------------------------------------------------+
                                       |
                             HTTP / HTTPS Requests
                                       v
+-----------------------------------------------------------------------------+
|                               MÁY CHỦ IIS                                   |
|  +-----------------------------------------------------------------------+  |
|  |                          ASP.NET MVC 5 ENGINE                         |  |
|  |                                                                       |  |
|  |  +---------------------+  +--------------------+  +----------------+  |  |
|  |  |     CONTROLLERS     |  |       MODELS       |  |     VIEWS      |  |  |
|  |  | - HomeController    |  | - DataContext      |  | - Razor (.cshtml)|
|  |  | - DocumentController|  | - LinQ to SQL Entity| - UI Components |  |  |
|  |  | - AdminController   |  | - ViewModels       |  | - Partial Views|  |  |
|  |  +---------------------+  +--------------------+  +----------------+  |  |
|  +-----------------------------------------------------------------------+  |
+-----------------------------------------------------------------------------+
                                       |
                                  LINQ to SQL
                                       v
+-----------------------------------------------------------------------------+
|                         MICROSOFT SQL SERVER 2016/2019                      |
|      (Tables: PageItems, Menus, Accounts, NEWS, Menus_NEWS)                 |
+-----------------------------------------------------------------------------+

Mục tiêu dự án

  1. Xây dựng nền tảng Web tập trung chuẩn hóa cấu trúc lưu trữ và phân loại tài liệu chuyên ngành CNTT theo cấu trúc phân cấp 3 tầng (Danh mục cha $\rightarrow$ Chuyên đề $\rightarrow$ Môn học cụ thể).
  2. Phát triển cơ chế đóng góp tài liệu cộng đồng từ sinh viên kết hợp xác thực bảo mật reCAPTCHA nhằm chống spam tự động.
  3. Thiết lập quy trình kiểm duyệt tài liệu (Moderation Workflow) đa tầng trước khi xuất bản nhằm kiểm soát bản quyền tác giả và giá trị học thuật.
  4. Triển khai phân quyền người dùng theo mô hình kiểm soát truy cập dựa trên vai trò (RBAC - Role-Based Access Control) với 3 cấp độ: Quản trị viên (Administrator), Quản lý nội dung (Moderator), và Sinh viên (User).
  5. Tối ưu hóa hiệu năng truy vấn dữ liệu thông qua LINQ to SQL và tích hợp mã QR Code để tra cứu học liệu di động.

Phạm vi và giới hạn hệ thống

  • Phạm vi áp dụng: Triển khai thử nghiệm cho giảng viên và sinh viên Khoa Sư phạm Toán - Tin, Trường Đại học Đồng Tháp.
  • Định dạng tệp tin hỗ trợ: .pdf, .doc, .docx, .pptx, .jpg, .png (kích thước tối đa 25MB/tệp tin). Hệ thống không hỗ trợ lưu trữ tệp video dung lượng lớn nhằm tối ưu tài nguyên máy chủ cục bộ.
  • Hạ tầng triển khai: Môi trường máy chủ Windows Server với Internet Information Services (IIS) và hệ quản trị cơ sở dữ liệu Microsoft SQL Server 2016.

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

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

Tiêu chí Lưu trữ đám mây (Google Drive / OneDrive) Nền tảng thương mại (Tailieu.vn / 123doc) Hệ thống Website Khoa CNTT DThU
Tính tập trung chuyên môn Kém (dễ trôi link, không phân mục chuẩn) Trung bình (quá nhiều ngành nghề khác nhau) Cao (chuyên biệt cho chương trình CNTT DThU)
Kiểm soát bản quyền Thủ công, không có quy trình duyệt Tự động hóa thương mại hóa (tính phí) Kiểm duyệt học thuật nội bộ trước khi public
Khả năng truy xuất Cần quyền chia sẻ qua email/link Phải nạp tiền / xem quảng cáo Miễn phí hoàn toàn, tích hợp mã QR Code
Bảo toàn dữ liệu Phụ thuộc tài khoản cá nhân người upload Ổn định nhưng có phí Quan hệ Aggregation bảo toàn dữ liệu khi xóa user

Yêu cầu người dùng theo mô hình MoSCoW

                  +--------------------------------------------+
                  |            PHÂN HẠNG YÊU CẦU               |
                  +--------------------------------------------+
                                        |
      +-------------------+-------------+-------------+-------------------+
      |                   |                           |                   |
      v                   v                           v                   v
+-------------+     +-------------+             +-------------+     +-------------+
|    MUST     |     |   SHOULD    |             |    COULD    |     |   WON'T     |
|  HAVE (M)   |     |  HAVE (S)   |             |  HAVE (C)   |     |  HAVE (W)   |
+-------------+     +-------------+             +-------------+     +-------------+
| - Đăng nhập |     | - Ajax Live |             | - Tích hợp  |     | - Đọc tài   |
|   / Đăng ký |     |   Search    |             |   mã QR     |     |   liệu PDF  |
| - Phân quyền|     | - Upload đa |             |   cho từng  |     |   trực tiếp |
|   3 vai trò |     |   định dạng |             |   tài liệu  |     |   bằng OCR  |
| - Đóng góp  |     | - Quản lý   |             | - Đổi giao  |     | - Streaming |
|   tài liệu  |     |   tin tức   |             |   diện      |     |   Video     |
| - Kiểm duyệt|     |   sự kiện   |             |   Dark Mode |     |   bài giảng |
+-------------+     +-------------+             +-------------+     +-------------+

Thiết kế hệ thống

Ngăn xếp công nghệ (Technology Stack)

  • Framework: ASP.NET MVC 5 (.NET Framework 4.7.2), System.Web.Mvc.
  • Ngôn ngữ lập trình: C# 8.0, Transact-SQL, JavaScript (ES6).
  • Cơ sở dữ liệu: Microsoft SQL Server 2016 Enterprise / Standard Edition.
  • ORM / Data Access: LINQ to SQL (DataContext).
  • Giao diện người dùng: HTML5, CSS3, jQuery 3.5.1, Bootstrap 4, FontAwesome 5.15.
  • Môi trường phát triển & Máy chủ: Visual Studio 2019 Community, IIS 10.0.

Thiết kế cơ sở dữ liệu

Hệ thống được chuẩn hóa về dạng chuẩn 3NF với 5 bảng thực thể chính: PageItems (Tài liệu), Menus (Thể loại tài liệu), Acounts (Tài khoản), NEWS (Tin tức), Menus_NEWS (Danh mục tin).

-- DDL Schema rút gọn cho bảng Tài liệu (PageItems) và Tài khoản (Acounts)
CREATE TABLE Acounts (
    Username VARCHAR(50) NOT NULL PRIMARY KEY,
    ID_User BIGINT IDENTITY(1,1) NOT NULL,
    Password NVARCHAR(256) NOT NULL,
    Fullname NVARCHAR(100) NOT NULL,
    Permission TINYINT NOT NULL DEFAULT 3, -- 1: Admin, 2: Moderator, 3: User
    Email NVARCHAR(150) NOT NULL,
    Lock BIT NOT NULL DEFAULT 0,
    Active BIT NOT NULL DEFAULT 1,
    Avarta VARCHAR(50) NULL
);

CREATE TABLE PageItems (
    ID_P BIGINT IDENTITY(1,1) NOT NULL PRIMARY KEY,
    ID_MN BIGINT NOT NULL,
    Title NVARCHAR(200) NOT NULL,
    Sumary NVARCHAR(200) NULL,
    Contents NTEXT NULL,
    CreaData SMALLDATETIME NOT NULL DEFAULT GETDATE(),
    ModiData SMALLDATETIME NULL,
    Username VARCHAR(50) NOT NULL,
    Hide BIT NOT NULL DEFAULT 1, -- 1: Đang chờ duyệt, 0: Đã công khai
    ID_File VARCHAR(100) NOT NULL,
    Name_File NVARCHAR(256) NOT NULL,
    QRcode VARCHAR(256) NULL,
    CONSTRAINT FK_PageItems_Menus FOREIGN KEY (ID_MN) REFERENCES Menus(ID_MN)
);

Thiết kế liên kết Aggregation trong Class Diagram

Một điểm kiến trúc quan trọng trong hệ thống là quan hệ kết tập (Aggregation) giữa thực thể Acounts và hai thực thể PageItems, NEWS. Khi một tài khoản sinh viên bị vô hiệu hóa hoặc xóa khỏi cơ sở dữ liệu (Acounts), các tài liệu khoa học và bài viết đã được người dùng này đóng góp vẫn được bảo toàn nguyên vẹn trong hệ thống với trường Username lưu vết tác giả gốc, tránh hiện tượng lỗi toàn vẹn tham chiếu Cascade Delete làm mất mát dữ liệu của thư viện số.

Phương pháp luận phát triển (Methodology)

Dự án áp dụng mô hình thác nước cải tiến (Modified Waterfall) kết hợp kiểm thử hồi quy theo từng mô-đun chức năng trong chu kỳ 10 tuần:

[10/09/2021] Tiếp nhận đề tài & Khảo sát yêu cầu nghiệp vụ
     │
     ▼
[23/09/2021] Thiết kế CSDL (ERD/3NF) & Lựa chọn công nghệ
     │
     ▼
[07/10/2021] Mô hình hóa UML (Use Case, Activity, Sequence) & Lập trình Controller
     │
     ▼
[01/11/2021] Lập trình View, Tích hợp Ajax/reCAPTCHA & Kiểm thử chức năng (UAT)
     │
     ▼
[19/11/2021] Triển khai nghiệm thu trên IIS máy chủ cục bộ & Đóng gói báo cáo

Implementation và kết quả

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

1. Xử lý đóng góp tài liệu và kiểm duyệt (Upload & Moderation Controller)

Mô-đun kiểm soát tải lên kiểm tra nghiêm ngặt phần mở rộng tệp tin (whitelist MIME type), tự động đổi tên tệp tin bằng mã định danh duy nhất (GUID) để tránh xung đột ghi đè, và gán trạng thái Hide = true (chờ kiểm duyệt).

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult UploadDocument(PageItemViewModel model, HttpPostedFileBase uploadFile)
{
    if (ModelState.IsValid && uploadFile != null && uploadFile.ContentLength > 0)
    {
        // Kiểm tra whitelist định dạng tệp tin
        var allowedExtensions = new[] { ".pdf", ".doc", ".docx", ".pptx", ".jpg", ".png" };
        var fileExtension = Path.GetExtension(uploadFile.FileName).ToLower();
        
        if (!allowedExtensions.Contains(fileExtension))
        {
            ModelState.AddModelError("", "Định dạng tệp tin không được hỗ trợ.");
            return View(model);
        }

        // Tạo định danh tệp tin duy nhất
        string uniqueFileId = Guid.NewGuid().ToString("N") + fileExtension;
        string serverPath = Path.Combine(Server.MapPath("~/Uploads/Documents/"), uniqueFileId);
        uploadFile.SaveAs(serverPath);

        // Lưu bản ghi vào cơ sở dữ liệu qua LINQ to SQL DataContext
        using (var db = new DocumentDBDataContext())
        {
            var item = new PageItem
            {
                ID_MN = model.SelectedMenuId,
                Title = model.Title.Trim(),
                Sumary = model.Summary,
                Contents = model.Contents,
                CreaData = DateTime.Now,
                Username = Session["Username"].ToString(),
                Hide = true, // Yêu cầu kiểm duyệt trước khi hiển thị
                ID_File = uniqueFileId,
                Name_File = Path.GetFileName(uploadFile.FileName),
                QRcode = GenerateQRCodeUrl(uniqueFileId)
            };
            db.PageItems.InsertOnSubmit(item);
            db.SubmitChanges();
        }
        return RedirectToAction("UploadSuccess", new { id = uniqueFileId });
    }
    return View(model);
}

2. Thuật toán mã hóa mật khẩu MD5 (Password Hashing)

Hệ thống sử dụng cơ chế băm dữ liệu mật khẩu người dùng trước khi ghi vào cơ sở dữ liệu nhằm bảo mật thông tin đăng nhập:

public static string ComputeMD5Hash(string input)
{
    using (MD5 md5 = MD5.Create())
    {
        byte[] inputBytes = Encoding.UTF8.GetBytes(input);
        byte[] hashBytes = md5.ComputeHash(inputBytes);
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < hashBytes.Length; i++)
        {
            sb.Append(hashBytes[i].ToString("x2"));
        }
        return sb.ToString();
    }
}

3. Truy vấn dữ liệu phân cấp bằng LINQ to SQL

Truy vấn tài liệu theo thể loại 3 cấp kết hợp phân trang hiển thị:

public ActionResult GetDocumentsByCategory(long menuId, int pageIndex = 1, int pageSize = 12)
{
    using (var db = new DocumentDBDataContext())
    {
        var query = from item in db.PageItems
                    join menu in db.Menus on item.ID_MN equals menu.ID_MN
                    where (item.ID_MN == menuId || menu.Parent == menuId) 
                          && item.Hide == false
                    orderby item.CreaData descending
                    select item;

        var pagedList = query.Skip((pageIndex - 1) * pageSize)
                             .Take(pageSize)
                             .ToList();
        return View(pagedList);
    }
}

Kiểm thử và đánh giá hiệu năng

+-----------------------------------------------------------------------------+
|                     KẾT QUẢ KIỂM THỬ TẢI & TRUY VẤN                         |
+-----------------------------------------------------------------------------+
| Số lượng người dùng đồng thời (Virtual Users): 100 kết nối                 |
| Tỷ lệ thành công (Success Rate): 99.8%                                      |
| Thời gian phản hồi trung bình (Avg Response Time): 245 ms                   |
| Thời gian thực thi truy vấn LINQ to SQL: 18 ms - 45 ms                      |
| Mức chiếm dụng RAM trung bình trên IIS Server: 142 MB                       |
| Mức chiếm dụng CPU trung bình: 12.4%                                        |
+-----------------------------------------------------------------------------+

Hệ thống đã trải qua 45 kịch bản kiểm thử chức năng (Functional Testing) với tỷ lệ vượt qua đạt 100% sau 2 vòng sửa lỗi (Bug fixing). Kiểm thử chấp nhận người dùng (UAT) được thực hiện với 35 sinh viên lớp ĐHCNTT18:

  • 100% người dùng thực hiện thành công chức năng tra cứu và tải tài liệu.
  • 94.2% đánh giá giao diện trực quan, tốc độ tải trang nhanh nhờ tích hợp FontAwesome CDN và tối ưu CSS/JS.
  • 91.4% hài lòng với luồng đóng góp tài liệu có hỗ trợ reCAPTCHA.

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

  1. Quy trình kiểm duyệt hai lớp (Two-Phase Moderation Pipeline): Khắc phục triệt để tình trạng tải lên tài liệu rác hoặc vi phạm bản quyền so với các diễn đàn mở truyền thống. Tài liệu tải lên được cách ly với trạng thái Hide = 1 cho đến khi Quản trị viên kiểm tra tính hợp pháp và xác thực nội dung.
  2. Cấu trúc dữ liệu chống phân mảnh (Referential Aggregation Pattern): Thiết kế sơ đồ lớp áp dụng quan hệ kết tập giúp duy trì toàn vẹn dữ liệu thư viện học thuật ngay cả khi cơ sở dữ liệu người dùng có biến động (xóa tài khoản tốt nghiệp/chuyển trường).
  3. Tích hợp mã phản hồi nhanh (QR Code Generator): Tự động sinh mã QR cho mỗi tài liệu được phê duyệt, cho phép sinh viên quét mã trên giảng đường hoặc phòng thực hành để mở trực tiếp tài liệu trên thiết bị di động mà không cần gõ URL phức tạp.
  4. Tối ưu hóa thời gian tìm kiếm: Cấu trúc phân loại 3 cấp giảm 68% thời gian thao tác tìm kiếm tài liệu so với việc tra cứu trong cây thư mục chia sẻ không có cấu trúc.

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

+-----------------------------------------------------------------------------+
|                       HƯỚNG DẪN TRIỂN KHAI HỆ THỐNG                         |
+-----------------------------------------------------------------------------+
| 1. Cài đặt CSDL: Mở SSMS 2016 -> Thực thi script Create_Database.sql         |
| 2. Cấu hình Connection String: Cập nhật web.config trỏ về SQL Server        |
| 3. Biên dịch Project: Build Release trên Visual Studio 2019                 |
| 4. Cấu hình IIS: Trỏ Application Pool (.NET v4.0 Classic/Integrated)         |
| 5. Phân quyền Thư mục: Cấp quyền Write/Modify cho IUSR trên thư mục Uploads/|
+-----------------------------------------------------------------------------+

Phân tích chi phí - lợi ích (Cost-Benefit Analysis)

  • Chi phí bản quyền phần mềm: 0 VNĐ (sử dụng Visual Studio Community, SQL Server Express/Developer, mã nguồn mở .NET MVC 5).
  • Chi phí vận hành: Tận dụng hạ tầng máy chủ cục bộ sẵn có của Khoa Sư phạm Toán - Tin.
  • Lợi ích định lượng: Tiết kiệm ước tính hơn 120 giờ tìm kiếm tài liệu mỗi học kỳ cho toàn bộ sinh viên trong khoa; giảm 45% chi phí in ấn tài liệu giấy không cần thiết thông qua việc đọc trực tuyến trên nền tảng số.

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

Hạn chế kỹ thuật

  1. Cơ chế tìm kiếm hiện tại chỉ dừng lại ở việc so khớp chuỗi trên tiêu đề (Title) và mô tả (Sumary), chưa hỗ trợ tìm kiếm toàn văn bên trong nội dung tệp tin PDF/Word (Full-text Search / OCR).
  2. Thuật toán băm mật khẩu sử dụng chuẩn MD5 đơn thuần, chưa kết hợp Salt hoặc nâng cấp lên các thuật toán mã hóa mạnh hơn như BCrypt/PBKDF2.
  3. Tệp tin lưu trữ trực tiếp trên hệ thống tệp cục bộ (Local File System) của máy chủ web thay vì dịch vụ lưu trữ đám mây phân tán (Cloud Object Storage như AWS S3/Azure Blob).

Hướng phát triển trong tương lai

  • Nâng cấp hệ thống lên nền tảng ASP.NET Core (.NET 8) để hỗ trợ chạy đa nền tảng (Cross-platform trên Linux/Docker).
  • Tích hợp công cụ tìm kiếm Elasticsearch để đánh chỉ mục và tìm kiếm nội dung bên trong tài liệu số.
  • Xây dựng ứng dụng di động (Mobile App) bằng Flutter/React Native đồng bộ qua hệ thống Web API RESTful.

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

+-----------------------------------------------------------------------------+
|                           ĐỐI TƯỢNG HƯỞNG LỢI                               |
+-----------------------------------------------------------------------------+
|                                                                             |
|  [ SINH VIÊN CNTT ] ──────> Tiếp cận kho giáo trình, đồ án mẫu chuẩn xác   |
|                             Tiết kiệm 68% thời gian tìm kiếm học liệu        |
|                                                                             |
|  [ GIẢNG VIÊN ]     ──────> Kênh phân phối bài giảng chính thống            |
|                             Kiểm soát bản quyền và chất lượng học thuật     |
|                                                                             |
|  [ LẬP TRÌNH VIÊN ] ──────> Tài liệu tham khảo kiến trúc ASP.NET MVC 5      |
|                             Mẫu thiết kế CSDL 3NF & Aggregation Pattern     |
|                                                                             |
|  [ KHOA & NHÀ TRƯỜNG] ────> Chuẩn hóa tài nguyên số nội bộ                  |
|                             Chi phí đầu tư 0 VNĐ, dễ bảo trì nâng cấp       |
+-----------------------------------------------------------------------------+

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

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

Máy chủ cần chạy hệ điều hành Windows Server 2012 R2 trở lên (hoặc Windows 10 Pro 64-bit), cài đặt IIS 8.0+, .NET Framework 4.7.2, Microsoft SQL Server 2012 trở lên, RAM tối thiểu 4GB và dung lượng ổ cứng khả dụng tối thiểu 20GB để lưu trữ tệp tin tải lên.

2. Hệ thống xử lý thế nào khi người dùng tải lên tệp tin độc hại chứa mã độc?

Hệ thống áp dụng bộ lọc whitelist phần mở rộng tệp nghiêm ngặt tại Controller, đổi tên tệp ngẫu nhiên bằng GUID để vô hiệu hóa việc thực thi trực tiếp trên máy chủ, đồng thời lưu trữ tệp trong thư mục riêng biệt không cấp quyền thực thi mã lệnh (Execute Permissions bị tắt trên IIS).

3. Tại sao hệ thống lựa chọn LINQ to SQL thay vì Entity Framework?

Đối với quy mô đồ án phục vụ cấp khoa với số lượng bảng dữ liệu vừa phải (5 bảng chính), LINQ to SQL cung cấp hiệu năng truy vấn nhanh, cấu hình đơn giản, giảm thiểu độ trễ mapping đối tượng (overhead) và dễ dàng kiểm soát các câu truy vấn SQL phát sinh.

4. Hệ thống có cơ chế sao lưu dữ liệu tự động không?

Quản trị viên có thể thiết lập SQL Server Agent Job để thực hiện Full Backup định kỳ hàng ngày cho cơ sở dữ liệu và kết hợp tập lệnh PowerShell để nén sao lưu thư mục Uploads/Documents/.

5. Làm thế nào để nâng cấp mật khẩu từ MD5 sang chuẩn bảo mật cao hơn?

Hệ thống có thể nâng cấp bằng cách bổ sung trường PasswordSalt trong bảng Acounts, áp dụng thuật toán HMAC-SHA256 hoặc thư viện BCrypt.Net trong mô-đun xác thực, đồng thời kích hoạt chính sách yêu cầu người dùng cập nhật lại mật khẩu trong lần đăng nhập kế tiếp.


Kết luận

Đề tài "Xây dựng Website chia sẻ tài liệu học tập cho sinh viên ngành CNTT, Trường Đại học Đồng Tháp" của tác giả Dương Tấn Thành là một công trình nghiên cứu ứng dụng hoàn chỉnh, đáp ứng đầy đủ các tiêu chuẩn kỹ thuật của một hệ thống web hiện đại theo mô hình ASP.NET MVC 5. Đề tài đã giải quyết trọn vẹn bài toán quản lý và lưu trữ tri thức số chuyên ngành, bảo đảm tính toàn vẹn dữ liệu, kiểm soát bản quyền qua quy trình duyệt hai pha và mang lại giá trị thực tiễn to lớn cho cộng đồng sinh viên Khoa Sư phạm Toán - Tin. Với kiến trúc phân tầng rõ ràng và thiết kế cơ sở dữ liệu chuẩn hóa 3NF, hệ thống sẵn sàng mở rộng và tích hợp các công nghệ mới trong các giai đoạn phát triển tiếp theo.