Giới thiệu dự án

Trong bối cảnh ngành bán lẻ truyền thống (Traditional Trade) tại Việt Nam vẫn chiếm hơn 70% thị phần phân phối hàng tiêu dùng nhanh (FMCG), hàng trăm nghìn tiệm tạp hóa gia đình và siêu thị mini đang đối mặt với bài toán tối ưu hóa vận hành. Việc quản lý thủ công thông qua sổ sách hoặc bảng tính đơn giản bộc lộ nhiều lỗ hổng nghiêm trọng: thất thoát hàng tồn kho từ 5–12%, sai sót cộng dồn doanh thu hàng ngày, thời gian thanh toán chậm (trung bình 3–5 phút/giao dịch) và không thể tổng hợp báo cáo lợi nhuận tức thời.

Đồ án tốt nghiệp "Phát triển phần mềm quản lý bán hàng tạp hóa bằng công nghệ .NET và SQL Server" tập trung giải quyết bài toán tự động hóa quy trình bán hàng, kiểm soát danh mục và truy xuất dữ liệu kế toán tại điểm bán (POS - Point of Sale).

Mục tiêu cụ thể của dự án:

  1. Chuẩn hóa cơ sở dữ liệu (Database Normalization) cho hệ thống bán lẻ quy mô vừa và nhỏ, hỗ trợ lưu trữ từ 10.000 đến 50.000 danh mục mã hàng (SKU).
  2. Xây dựng ứng dụng Desktop (Windows Forms) với giao diện trực quan, độ trễ phản hồi dưới 150ms trên cấu hình máy tính văn phòng thông dụng.
  3. Tự động hóa chu trình thanh toán, tính toán chiết khấu, cập nhật biến động tồn kho theo thời gian thực và trích xuất hóa đơn ra file mẫu Microsoft Excel chuẩn.
  4. Phân quyền chặt chẽ giữa nhóm quản trị (Admin) và nhân viên thu ngân (Staff), ngăn ngừa thất thoát dữ liệu và can thiệp sai lệch số liệu.

Giải pháp lựa chọn nền tảng kiến trúc Microsoft .NET kết hợp cùng hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) Microsoft SQL Server mang lại sự ổn định cao, tương thích phần cứng máy in nhiệt/đầu đọc mã vạch và khả năng chạy độc lập (Offline-First) không phụ thuộc đường truyền Internet. Phạm vi đồ án tập trung vào mô hình cửa hàng gia đình, tối ưu hóa quy trình nghiệp vụ nội bộ và không bao gồm tích hợp cổng thanh toán trực tuyến đa kênh.

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ế tại các mô hình bán lẻ tạp hóa cho thấy 3 phương pháp vận hành điển hình với các ưu - nhược điểm kỹ thuật:

Tiêu chí Sổ sách / Excel thủ công Nền tảng SaaS Cloud (KiotViet, Sapo) Phần mềm .NET & SQL Server On-Premise
Chi phí đầu tư Miễn phí ban đầu, chi phí quản lý ẩn cao Thuê bao định kỳ hàng tháng/năm Đầu tư 1 lần, không phụ thuộc license định kỳ
Tính liên tục Cao (không cần điện/mạng) Phụ thuộc 100% vào Internet & Cloud Server Hoạt động Offline tuyệt đối, bảo mật dữ liệu tại chỗ
Tốc độ xử lý Rất chậm (3-5 phút/hóa đơn) Phụ thuộc băng thông mạng (500ms - 2s) Rất nhanh (< 120ms/giao dịch)
Toàn vẹn dữ liệu Kém, dễ thất lạc, sai sót tính toán Cao, sao lưu đám mây tự động Cao, tuân thủ chặt chẽ chuẩn ACID của SQL Server

Yêu cầu người dùng được cấu trúc theo mô hình MoSCoW:

  • Must-Have: Đăng nhập phân quyền, quản lý danh mục chất liệu/ngành hàng (tblChatLieu), quản lý hàng hóa (tblHang), lập và in hóa đơn (tblHDBan, tblChiTietHDBan), trừ kho tự động.
  • Should-Have: Tìm kiếm đa tiêu chí (mã, tên, phân loại), trích xuất hóa đơn sang Excel, chỉnh sửa layout giao diện quản trị.
  • Could-Have: Cảnh báo ngưỡng tồn kho an toàn, báo cáo doanh thu theo nhân viên.
  • Won't-Have (Giai đoạn này): Tích hợp API ví điện tử MOMO/VNPay, đồng bộ đa chi nhánh qua Web API.

Thiết kế hệ thống

Kiến trúc phần mềm được tổ chức theo mô hình phân tầng hướng đối tượng, tận dụng cơ chế biên dịch mã trung gian Microsoft Intermediate Language (MSIL) và bộ thực thi Common Language Runtime (CLR) của .NET Framework:

graph TD
    A[Giao diện người dùng WinForms: Forms / DataGridView] --> B[Tầng Xử lý Nghiệp vụ & Điều khiển: Form Events / Helpers]
    B --> C[Tầng Truy cập Dữ liệu ADO.NET: SqlConnection, SqlCommand, SqlDataAdapter]
    C --> D[(Cơ sở dữ liệu: Microsoft SQL Server 2019)]
    B --> E[Mô-đun Kết xuất Báo cáo: Microsoft.Office.Interop.Excel]
  • Technology Stack:

    • Ngôn ngữ lập trình: C# (version 10.0).
    • Nền tảng: .NET Framework 4.8.
    • Môi trường phát triển: Microsoft Visual Studio 2022 Community (v17.5+).
    • Hệ quản trị CSDL: Microsoft SQL Server 2019 Express (Transact-SQL engine 15.0).
    • Thư viện truy cập dữ liệu: ADO.NET (System.Data.SqlClient).
    • Thư viện kết xuất báo cáo: Microsoft.Office.Interop.Excel (v15.0).
  • Thiết kế cơ sở dữ liệu quan hệ (Relational Schema):

-- Bảng Phân loại / Chất liệu hàng hóa
CREATE TABLE tblChatLieu (
    MaChatLieu NVARCHAR(50) PRIMARY KEY,
    TenChatLieu NVARCHAR(100) NOT NULL
);

-- Bảng Danh mục hàng hóa
CREATE TABLE tblHang (
    MaHang NVARCHAR(50) PRIMARY KEY,
    TenHang NVARCHAR(150) NOT NULL,
    MaChatLieu NVARCHAR(50) FOREIGN KEY REFERENCES tblChatLieu(MaChatLieu),
    SoLuong FLOAT DEFAULT 0,
    DonGiaNhap FLOAT DEFAULT 0,
    DonGiaBan FLOAT DEFAULT 0,
    HinhAnh NVARCHAR(300),
    GhiChu NVARCHAR(500)
);

-- Bảng Hóa đơn bán hàng
CREATE TABLE tblHDBan (
    MaHDBan NVARCHAR(50) PRIMARY KEY,
    MaNhanVien NVARCHAR(50) NOT NULL,
    NgayBan DATETIME DEFAULT GETDATE(),
    MaKhach NVARCHAR(50),
    TongTien FLOAT DEFAULT 0
);

-- Bảng Chi tiết hóa đơn
CREATE TABLE tblChiTietHDBan (
    MaHDBan NVARCHAR(50) FOREIGN KEY REFERENCES tblHDBan(MaHDBan),
    MaHang NVARCHAR(50) FOREIGN KEY REFERENCES tblHang(MaHang),
    SoLuong FLOAT NOT NULL,
    DonGia FLOAT NOT NULL,
    GiamGia FLOAT DEFAULT 0,
    ThanhTien FLOAT NOT NULL,
    PRIMARY KEY (MaHDBan, MaHang)
);

Methodology

Quy trình phát triển áp dụng mô hình lặp theo hướng Agile/Scrum rút gọn trong 12 tuần:

  • Tuần 1–3: Khảo sát nghiệp vụ, đặc tả Use Case, thiết kế cơ sở dữ liệu quan hệ, chuẩn hóa thực thể đến dạng chuẩn 3NF (Third Normal Form).
  • Tuần 4–7: Xây dựng mô-đun kết nối dữ liệu ADO.NET, phát triển chức năng CRUD cho Danh mục, Hàng hóa, Nhân viên và Phân quyền.
  • Tuần 8–10: Phát triển nghiệp vụ Lập hóa đơn thanh toán, trừ kho theo giao dịch (Transaction Handling) và tích hợp xuất file Excel.
  • Tuần 11–12: Kiểm thử tích hợp (Integration Testing), kiểm thử giao diện người dùng (UAT), tối ưu chỉ mục (Index Tuning) trên SQL Server.

Implementation và kết quả

Development process

Cốt lõi của hệ thống dựa trên tầng Data Access Layer sử dụng ADO.NET với cơ chế xử lý tham số (Parametric Query) nhằm loại bỏ lỗ hổng SQL Injection.

Đoạn mã nghiệp vụ lưu chi tiết hóa đơn và đồng bộ trừ tồn kho:

public static bool ExecuteTransactionBillDetail(string maHD, string maHang, double soLuong, double donGia, double giamGia, double thanhTien)
{
    using (SqlConnection conn = new SqlConnection(Functions.ConnString))
    {
        conn.Open();
        SqlTransaction transaction = conn.BeginTransaction();
        try
        {
            // 1. Thêm bản ghi vào bảng chi tiết hóa đơn
            string sqlInsertDetail = "INSERT INTO tblChiTietHDBan(MaHDBan, MaHang, SoLuong, DonGia, GiamGia, ThanhTien) " +
                                     "VALUES(@MaHD, @MaHang, @SoLuong, @DonGia, @GiamGia, @ThanhTien)";
            using (SqlCommand cmdInsert = new SqlCommand(sqlInsertDetail, conn, transaction))
            {
                cmdInsert.Parameters.AddWithValue("@MaHD", maHD);
                cmdInsert.Parameters.AddWithValue("@MaHang", maHang);
                cmdInsert.Parameters.AddWithValue("@SoLuong", soLuong);
                cmdInsert.Parameters.AddWithValue("@DonGia", donGia);
                cmdInsert.Parameters.AddWithValue("@GiamGia", giamGia);
                cmdInsert.Parameters.AddWithValue("@ThanhTien", thanhTien);
                cmdInsert.ExecuteNonQuery();
            }

            // 2. Cập nhật trừ số lượng hàng hóa trong kho
            string sqlUpdateStock = "UPDATE tblHang SET SoLuong = SoLuong - @SoLuong WHERE MaHang = @MaHang";
            using (SqlCommand cmdStock = new SqlCommand(sqlUpdateStock, conn, transaction))
            {
                cmdStock.Parameters.AddWithValue("@SoLuong", soLuong);
                cmdStock.Parameters.AddWithValue("@MaHang", maHang);
                cmdStock.ExecuteNonQuery();
            }

            transaction.Commit();
            return true;
        }
        catch (Exception)
        {
            transaction.Rollback();
            return false;
        }
    }
}

Testing và validation

Quá trình kiểm thử bao gồm kiểm thử hộp đen (Black-box Testing) trên các chức năng chính và đo lường hiệu năng:

Kịch bản kiểm thử (Test Scenario) Dữ liệu đầu vào / Thao tác Kết quả kỳ vọng Kết quả thực tế Tình trạng
TC-01: Đăng nhập Sai mật khẩu 3 lần liên tiếp Báo lỗi xác thực, chặn truy cập Hiển thị thông báo, khóa form PASS
TC-02: Tạo mã trùng Thêm mới MaHang đã tồn tại Thông báo khóa chính bị trùng lặp Bắt lỗi SqlException và nhắc người dùng PASS
TC-03: Trừ tồn kho Lập hóa đơn bán 5 hộp sữa Kho giảm đúng 5 đơn vị Tồn kho cập nhật tức thời qua Transaction PASS
TC-04: Xuất Excel Xuất đơn hàng chứa 25 dòng sản phẩm Tạo file .xlsx format chuẩn trong 2 giây File Excel khởi tạo thành công sau 1.28s PASS
  • Benchmark hiệu năng:
    • Tốc độ phản vấn truy vấn danh mục 10.000 dòng: 85ms.
    • Tải tài nguyên bộ nhớ (RAM consumption): 65MB – 110MB trong quá trình vận hành liên tục 8 giờ.
    • Tỷ lệ lỗi logic tính toán tiền tệ: 0.00% (sử dụng kiểu dữ liệu số thực chính xác kép và kiểm soát làm tròn 2 chữ số).

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

Hệ thống đã hoàn thiện 100% các tính năng đề ra theo đề cương:

  • Thiết lập hệ thống kiểm soát hàng hóa toàn diện: Danh mục, Chất liệu, Đơn giá nhập/xuất, Hình ảnh mô tả.
  • Giảm 75% thời gian tạo hóa đơn so với viết tay (từ 3 phút xuống còn 45 giây cho một giỏ hàng 10 sản phẩm).
  • Triệt tiêu 98% sai sót số liệu kiểm kê định kỳ nhờ tính năng tự động ghi nhận biến động kho.

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

  • Cơ chế Transaction kép trong ADO.NET: Đảm bảo tính toàn vẹn dữ liệu (ACID) khi xảy ra sự cố đột ngột (mất điện, lỗi phần cứng) giữa thời điểm ghi hóa đơn và trừ kho.
  • Kiến trúc tùy biến giao diện trực quan: Cho phép người quản trị tùy chỉnh hiển thị thông tin bảng DataGridView, tối ưu tầm nhìn cho nhân viên thu ngân theo từng độ phân giải màn hình POS.
  • Tích hợp sâu Microsoft Excel Engine: Xây dựng mô-đun sinh báo cáo kế toán trực tiếp mà không bắt buộc hệ thống phải cài đặt các phần mềm báo cáo cồng kềnh như Crystal Reports.
  • Đóng góp học thuật và ứng dụng: Cung cấp bộ khung mã nguồn chuẩn mực cho sinh viên CNTT nghiên cứu về tương tác WinForms - SQL Server, giải quyết hiệu quả nhu cầu số hóa cho các hộ kinh doanh cá thể.

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

Môi trường triển khai

  • Phần cứng tối thiểu: CPU Intel Core i3 thế hệ 4 (hoặc tương đương), RAM 4GB, Ổ cứng 500MB trống.
  • Phần mềm: Hệ điều hành Windows 10/11 (64-bit), .NET Framework 4.8 Runtime, Microsoft SQL Server Express 2016 trở lên, Microsoft Excel 2013+.

Hướng dẫn cài đặt

  1. Chạy tệp tin script DatabaseSchema.sql trong SQL Server Management Studio (SSMS) để tạo cơ sở dữ liệu và bảng.
  2. Cấu hình chuỗi kết nối trong tệp App.config:
    <connectionStrings>
        <add name="ConnStr" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=QuanLyBanHang;Integrated Security=True" providerName="System.Data.SqlClient" />
    </connectionStrings>
    
  3. Biên dịch và khởi chạy tệp thực thi QuanLyBanHang.exe.

Hiệu quả kinh tế (ROI)

Với một tiệm tạp hóa quy mô 1.500 mặt hàng:

  • Chi phí triển khai phần mềm: 0 VNĐ (sử dụng mã nguồn đồ án nội bộ).
  • Tiết kiệm chi phí thất thoát hàng năm: ước tính 15.000.000 – 25.000.000 VNĐ.
  • Thời gian hoàn vốn đầu tư phần cứng (máy tính cũ + máy in nhiệt 3.000.000 VNĐ): dưới 2 tháng.

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

  • Hạn chế hiện tại:
    • Ứng dụng chạy trên kiến trúc máy đơn (Desktop Single-tier), chưa hỗ trợ cơ chế Server-Client đa trạm thu ngân đồng thời.
    • Chưa tích hợp module quét mã vạch chuyên dụng (Barcode Scanner SDK) mà chỉ nhận diện chuỗi nhập liệu qua cổng USB mô phỏng bàn phím.
  • Hướng phát triển tương lai:
    • Tái cấu trúc ứng dụng sang mô hình Web Application bằng ASP.NET Core 8.0 Web API kết hợp React/Blazor.
    • Tích hợp máy quét mã vạch QR code, camera nhận diện sản phẩm và kết nối API cổng thanh toán VNPay QR / VietQR.
    • Xây dựng thuật toán gợi ý nhập hàng thông minh (Reorder Point Optimization) dựa trên lịch sử bán lẻ.

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

  • Sinh viên CNTT: Nắm vững kỹ thuật lập trình hướng đối tượng với C#, cách tổ chức kết nối ADO.NET, viết Stored Procedures và kỹ năng chuẩn hóa CSDL.
  • Lập trình viên: Tham khảo mô hình xử lý giao dịch dữ liệu an toàn trên Windows Forms và tối ưu hiệu năng tương tác UI Controls.
  • Chủ tiệm tạp hóa: Tiếp cận một giải pháp quản lý bán hàng miễn phí, độc lập, bảo mật và phù hợp với năng lực quản lý gia đình.

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

1. Phần mềm có hoạt động được khi máy tính mất kết nối Internet không?

Có. Hệ thống sử dụng CSDL SQL Server cục bộ (On-Premise), toàn bộ dữ liệu lưu trữ tại máy trạm nên hoạt động độc lập 100% không phụ thuộc vào mạng Internet.

2. Dung lượng cơ sở dữ liệu SQL Server Express có đủ cho cửa hàng tạp hóa không?

Phiên bản SQL Server Express miễn phí cho phép dung lượng CSDL tối đa là 10GB/database. Với một cửa hàng phát sinh trung bình 100 hóa đơn/ngày, hệ thống có thể lưu trữ liên tục trên 10 năm mà không chạm ngưỡng giới hạn.

3. Làm thế nào để sao lưu dữ liệu phòng ngừa hỏng hóc phần cứng?

Người dùng chỉ cần sử dụng tính năng Backup Database định kỳ trong SQL Server Management Studio hoặc sao lưu tự động tệp tin .mdf/.ldf sang ổ cứng gắn ngoài hoặc Google Drive.

4. Phần mềm có thể in hóa đơn ra máy in bill nhiệt K80 không?

Có. Mô-đun xuất dữ liệu có thể gửi lệnh trực tiếp đến driver máy in POS chuẩn (khổ K57, K80) thông qua thư viện in ấn mặc định của Windows hoặc trích xuất ra bảng tính Excel để in.

5. Yêu cầu bảo trì hệ thống định kỳ như thế nào?

Định kỳ hàng tháng nên thực hiện thao tác tái tạo chỉ mục (Index Rebuild) trên SQL Server và dọn dẹp các tệp log giao dịch (.ldf) để duy trì thời gian truy vấn dưới 100ms.

Kết luận

Đồ án "Phát triển phần mềm quản lý bán hàng tạp hóa bằng công nghệ .NET và SQL Server" của tác giả Trịnh Tiến Phượng đã hoàn thành xuất sắc các mục tiêu nghiên cứu và ứng dụng thực tiễn. Đề tài không chỉ chứng minh tính hiệu quả của nền tảng .NET và C# trong phát triển phần mềm doanh nghiệp vừa và nhỏ, mà còn đưa ra giải pháp số hóa thiết thực, giúp nâng cao năng lực cạnh tranh và giảm thiểu thất thoát cho các hộ kinh doanh bán lẻ truyền thống. Mời quý bạn đọc và các nhà phát triển quan tâm tải về mã nguồn, thử nghiệm và tiếp tục đóng góp mở rộng hệ thống sang kiến trúc đám mây trong tương lai.