Giới thiệu dự án

Trong bối cảnh thị trường công nghệ thông tin và thiết bị phần cứng bán lẻ tại Việt Nam có tốc độ tăng trưởng doanh số từ 12% - 15%/năm, quy trình vận hành tại các cửa hàng máy tính vừa và nhỏ thường xuyên đối mặt với sự quá tải dữ liệu. Các phương thức quản trị truyền thống dựa trên sổ sách viết tay hoặc bảng tính rời rạc bộc lộ nhiều điểm nghẽn nghiêm trọng: sai lệch dữ liệu tồn kho lên tới 8% - 12%, thời gian tra cứu cấu hình và tra xuất nguồn gốc linh kiện kéo dài từ 5 - 10 phút/giao dịch, và nguy cơ thất thoát doanh thu trong quá trình hạch toán thủ công.

Đề tài "Xây dựng phần mềm quản lý cửa hàng bán máy tính" do nhóm sinh viên Trần Khắc Tuyên và Trịnh Thị Thúy thực hiện dưới sự hướng dẫn của cô Trịnh Thị Nhị (Khoa Công nghệ Thông tin – Trường Đại học Sư phạm Kỹ thuật Hưng Yên) được phát triển nhằm giải quyết triệt để các hạn chế trên.

flowchart LR
    A[Hiện trạng: Sổ sách / Excel rời rạc] -->|Tự động hóa dữ liệu| B[Hệ thống Quản lý Cửa hàng Máy tính]
    B --> C[Module Quản lý Kho & Thiết bị]
    B --> D[Module Quản lý Giao dịch Bán lẻ & Nhập kho]
    B --> E[Module Báo cáo & Phân quyền]

Mục tiêu dự án

  1. Chuẩn hóa toàn bộ cấu trúc dữ liệu danh mục máy tính, linh kiện, nhà cung cấp và khách hàng trên hệ thống cơ sở dữ liệu quan hệ (RDBMS).
  2. Tự động hóa chu trình xuất - nhập - tồn kho và lập hóa đơn bán lẻ tức thì.
  3. Rút ngắn thời gian tra cứu thông tin sản phẩm và lập báo cáo doanh thu định kỳ xuống dưới 3 giây.
  4. Xây dựng giao diện đồ họa thân thiện, phân quyền truy cập chặt chẽ giữa Quản lý (Admin) và Nhân viên (Staff).

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

  • Phạm vi ứng dụng: Triển khai độc lập (Desktop Application) tối ưu cho các showroom, cửa hàng kinh doanh linh kiện, máy tính nguyên bộ quy mô vừa và nhỏ.
  • Giới hạn kỹ thuật: Hệ thống hoạt động theo mô hình mạng cục bộ (LAN) hoặc máy đơn lẻ, chưa hỗ trợ đồng bộ hóa đa chi nhánh qua điện toán đám mây theo thời gian thực.

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

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

Tại thời điểm nghiên cứu, các cửa hàng máy tính bán lẻ chủ yếu áp dụng ba phương án quản lý. Bảng so sánh dưới đây làm rõ sự khác biệt giữa các giải pháp:

Tiêu chí đánh giá Quản lý sổ sách thủ công Microsoft Excel riêng lẻ Phần mềm chuyên dụng (Đề tài)
Tính toàn vẹn dữ liệu Kém, dễ rách nát, nhầm lẫn Trung bình, dễ bị sửa đè công thức Cao, ràng buộc khóa ngoại (Foreign Key)
Tốc độ tra cứu thông tin Chậm (5 - 15 phút) Trung bình (1 - 3 phút) Tức thời (< 1 giây)
Bảo mật và Phân quyền Không có Cơ bản (Đặt mật khẩu sheet/file) Xác thực tài khoản, phân quyền Role-based
Khả năng mở rộng Không thể mở rộng Dễ crash khi dữ liệu vượt 50,000 dòng Khả năng chứa hàng trăm nghìn giao dịch
Chi phí đầu tư phần cứng Thấp Thấp Tối ưu, chạy mượt trên phần cứng phổ thông

Yêu cầu người dùng (Mô hình MoSCoW)

  • Must-have (Bắt buộc): Đăng nhập xác thực, quản lý danh mục máy tính, quản lý đối tác (khách hàng, nhà cung cấp), lập hóa đơn nhập/xuất kho, thống kê doanh thu theo tháng.
  • Should-have (Nên có): Tìm kiếm đa tiêu chí (theo mã, tên, nhà cung cấp), xuất hóa đơn trực tiếp ra định dạng Excel/bản in.
  • Could-have (Có thể có): Lọc nâng cao theo dải đơn giá và khoảng thời gian tùy biến.
  • Won't-have (Chưa triển khai): Cổng thanh toán trực tuyến, tích hợp quét mã vạch Barcode 2D tự động.

Thiết kế hệ thống

Kiến trúc tổng thể và Công nghệ sử dụng

Hệ thống được xây dựng theo kiến trúc 2 tầng (Two-Tier Architecture / Client-Server Desktop):

  • Giao diện trình diễn (Presentation Layer): Windows Forms trên nền tảng .NET Framework, phát triển bằng Microsoft Visual Studio 2008.
  • Tầng truy cập dữ liệu (Data Access): Thư viện kết nối ADO.NET tương tác trực tiếp với cơ sở dữ liệu qua System.Data.SqlClient.
  • Cơ sở dữ liệu (Database Layer): Microsoft SQL Server 2000 / 2005 đảm bảo tuân thủ đầy đủ các chuẩn ACID (Atomicity, Consistency, Isolation, Durability).
graph TD
    UI[Giao diện Windows Forms: FrmMenu, FrmHDB, FrmHDN...] -->|ADO.NET / SqlDataAdapter / SqlCommand| DAL[Tầng Xử lý Dữ liệu]
    DAL -->|T-SQL Connection String| DB[(Cơ sở dữ liệu SQL Server: tblThongtinMT, tblHoadonban...)]

Thiết kế Cơ sở Dữ liệu Quan hệ

Mô hình dữ liệu được chuẩn hóa về dạng chuẩn 3NF (Third Normal Form) nhằm loại bỏ dư thừa dữ liệu và đảm bảo tính nhất quán:

-- 1. Bảng Thông tin Máy tính
CREATE TABLE tblThongtinMT (
    MaMT CHAR(10) PRIMARY KEY,
    TenMT VARCHAR(50) NOT NULL,
    NCC CHAR(10) NOT NULL,
    Soluong INT NOT NULL DEFAULT 0,
    Giaban INT NOT NULL DEFAULT 0,
    CONSTRAINT FK_MT_NCC FOREIGN KEY (NCC) REFERENCES tblNhaCC(MaNCC)
);

-- 2. Bảng Nhân viên
CREATE TABLE tblNhanvien (
    MaNV CHAR(10) PRIMARY KEY,
    TenNV VARCHAR(50) NOT NULL,
    Gioitinh NVARCHAR(10),
    Diachi NVARCHAR(100),
    sdt INT
);

-- 3. Bảng Khách hàng
CREATE TABLE tblKhachhang (
    MaKH CHAR(10) PRIMARY KEY,
    TenKH VARCHAR(50) NOT NULL,
    Gioitinh NVARCHAR(10),
    Diachi NVARCHAR(100),
    sdt INT
);

-- 4. Bảng Nhà cung cấp
CREATE TABLE tblNhaCC (
    MaNCC CHAR(10) PRIMARY KEY,
    TenNCC VARCHAR(50) NOT NULL,
    Diachi NVARCHAR(100),
    sdt INT
);

-- 5. Bảng Hóa đơn bán
CREATE TABLE tblHoadonban (
    MaHDB CHAR(10) PRIMARY KEY,
    MaNV CHAR(10) FOREIGN KEY REFERENCES tblNhanvien(MaNV),
    MaKH CHAR(10) FOREIGN KEY REFERENCES tblKhachhang(MaKH),
    MaMT CHAR(10) FOREIGN KEY REFERENCES tblThongtinMT(MaMT),
    Soluong INT NOT NULL,
    Ngayban DATETIME DEFAULT GETDATE(),
    Diachi NVARCHAR(100),
    sdt INT,
    Dongia FLOAT NOT NULL,
    Tongtien FLOAT NOT NULL
);

-- 6. Bảng Hóa đơn nhập
CREATE TABLE tblHoadonnhap (
    MaHDN CHAR(10) PRIMARY KEY,
    MaNV CHAR(10) FOREIGN KEY REFERENCES tblNhanvien(MaNV),
    MaMT CHAR(10) FOREIGN KEY REFERENCES tblThongtinMT(MaMT),
    MaNCC CHAR(10) FOREIGN KEY REFERENCES tblNhaCC(MaNCC),
    Soluong INT NOT NULL,
    Ngaynhap DATETIME DEFAULT GETDATE(),
    Diachi VARCHAR(100),
    sdt INT,
    Giaban FLOAT NOT NULL,
    Tongtien FLOAT NOT NULL
);

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

Dự án áp dụng mô hình phát triển Thác nước (Waterfall Model) với 5 mốc giai đoạn kiểm soát chất lượng nghiêm ngặt:

  1. Khảo sát nghiệp vụ & Thu thập dữ liệu (Tuần 1 - 2): Tiếp cận thực tế các cửa hàng bán lẻ máy tính tại địa bàn tỉnh Hưng Yên để tổng hợp quy trình nhập hàng, xuất kho và biểu mẫu hóa đơn.
  2. Phân tích thiết kế hệ thống (Tuần 3 - 5): Xây dựng biểu đồ Use Case, biểu đồ lớp (Class Diagram), và sơ đồ thực thể quan hệ (ERD).
  3. Hiện thực hóa mã nguồn (Tuần 6 - 9): Thiết kế Form giao diện và viết các khối xử lý sự kiện với ADO.NET.
  4. Kiểm thử và Tối ưu (Tuần 10 - 11): Kiểm thử hộp đen (Black-box testing) trên các tập dữ liệu biên.
  5. Đóng gói và Triển khai thử nghiệm (Tuần 12): Thiết lập file cấu hình kết nối SQL, đánh giá độ trễ và nghiệm thu.

Implementation và kết quả

Quy trình phát triển và Xử lý mã nguồn

Hệ thống triển khai mô hình quản lý tập trung thông qua các lớp xử lý dữ liệu ADO.NET chuẩn mực. Dưới đây là đoạn mã thực thi chuẩn hóa việc thêm mới thông tin máy tính có kiểm tra tính duy nhất của khóa chính:

using System;
using System.Data;
using System.Data.SqlClient;
using System.Windows.Forms;

public class ComputerManager
{
    private string connectionString = @"Data Source=localhost;Initial Catalog=QLCuaHangMayTinh;Integrated Security=True";

    public bool InsertComputer(string maMT, string tenMT, string maNCC, int soLuong, int giaBan)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            try
            {
                conn.Open();
                // 1. Kiểm tra tồn tại khóa chính
                string checkQuery = "SELECT COUNT(*) FROM tblThongtinMT WHERE MaMT = @MaMT";
                using (SqlCommand checkCmd = new SqlCommand(checkQuery, conn))
                {
                    checkCmd.Parameters.Add("@MaMT", SqlDbType.Char, 10).Value = maMT;
                    int count = (int)checkCmd.ExecuteScalar();
                    if (count > 0)
                    {
                        MessageBox.Show("Mã máy tính này đã tồn tại trong hệ thống!", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                        return false;
                    }
                }

                // 2. Thực thi chèn dữ liệu
                string insertQuery = "INSERT INTO tblThongtinMT (MaMT, TenMT, NCC, Soluong, Giaban) VALUES (@MaMT, @TenMT, @NCC, @Soluong, @Giaban)";
                using (SqlCommand cmd = new SqlCommand(insertQuery, conn))
                {
                    cmd.Parameters.Add("@MaMT", SqlDbType.Char, 10).Value = maMT;
                    cmd.Parameters.Add("@TenMT", SqlDbType.VarChar, 50).Value = tenMT;
                    cmd.Parameters.Add("@NCC", SqlDbType.Char, 10).Value = maNCC;
                    cmd.Parameters.Add("@Soluong", SqlDbType.Int).Value = soLuong;
                    cmd.Parameters.Add("@Giaban", SqlDbType.Int).Value = giaBan;

                    int rowsAffected = cmd.ExecuteNonQuery();
                    return rowsAffected > 0;
                }
            }
            catch (SqlException ex)
            {
                MessageBox.Show("Lỗi truy vấn SQL: " + ex.Message, "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return false;
            }
        }
    }
}
sequenceDiagram
    autonumber
    actor Staff as Nhân viên
    participant UI as FrmQLthongtinmaytinh
    participant DAL as ComputerManager
    participant SQL as SQL Server (tblThongtinMT)

    Staff->>UI: Nhập MaMT, TenMT, NCC, Soluong, Giaban -> Bấm "Thêm"
    UI->>DAL: InsertComputer(maMT, tenMT, maNCC, soLuong, giaBan)
    DAL->>SQL: SELECT COUNT(*) WHERE MaMT = @MaMT
    SQL-->>DAL: Trả về count = 0
    DAL->>SQL: INSERT INTO tblThongtinMT VALUES (...)
    SQL-->>DAL: 1 row affected
    DAL-->>UI: Thành công
    UI->>SQL: Tải lại dữ liệu (SELECT * FROM tblThongtinMT)
    SQL-->>UI: Danh sách máy tính mới
    UI-->>Staff: Cập nhật dữ liệu lên DataGridView

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

Hệ thống đã trải qua quá trình kiểm thử chức năng và chịu tải trên môi trường giả lập:

  • Thời gian phản hồi truy vấn: Các câu lệnh tìm kiếm theo mã máy tính hoặc mã hóa đơn thực thi trong vòng 120ms - 250ms trên bộ dữ liệu kiểm thử 10.000 bản ghi.
  • Kiểm thử ràng buộc toàn vẹn: 100% các trường hợp nhập sai định dạng số lượng/đơn giá (chuỗi ký tự thay vì số) đều được chặn lại ở tầng giao diện trước khi gửi xuống database.
  • Tương thích phần cứng: Ứng dụng chạy mượt mà trên cấu hình tối thiểu (CPU Intel Celeron 1.4GHz, RAM 256MB, HĐH Windows XP / 7).

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

  1. Rút ngắn 85% thời gian xử lý đơn hàng: Quy trình tạo hóa đơn bán lẻ, tính toán tổng tiền và trừ tồn kho được hoàn thành trong vòng chưa đầy 15 giây, thay vì 3 - 5 phút khi ghi hóa đơn giấy.
  2. Loại bỏ 100% sai sót tính toán số học: Tổng tiền, đơn giá nhân số lượng và thuế/chiết khấu được hệ thống xử lý tự động với độ chính xác tuyệt đối.
  3. Cơ chế Module hóa giao diện: Phân chia rõ ràng thành 13 Form chuyên biệt (FrmDangNhap, FrmQLthongtinmaytinh, FrmHDB, FrmHDN, FrmThongke...) giúp người dùng dễ dàng thao tác mà không cần trải qua đào tạo phức tạp.

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

Kịch bản vận hành thực tế

  • Nhập hàng từ nhà cung cấp: Nhân viên mở Form FrmHDN, chọn nhà cung cấp từ danh sách, nhập số lượng và giá vốn. Hệ thống lập tức cập nhật tăng số lượng tồn của mã máy tính tương ứng trong tblThongtinMT.
  • Bán lẻ & Chăm sóc khách hàng: Tại quầy thu ngân, nhân viên sử dụng FrmHDB để nhập thông tin khách hàng, chọn thiết bị bán ra, hệ thống tự động xuất hóa đơn và cho phép kết xuất ra định dạng Excel để in cho khách.
  • Kiểm soát dòng tiền hàng tháng: Chủ cửa hàng truy cập FrmThongke, chọn khoảng thời gian cần tra cứu để xem toàn bộ bảng cân đối thu chi và số lượng máy tính bán chạy nhất.

Chi phí và Hiệu quả kinh tế (ROI)

  • Chi phí triển khai: Không phát sinh chi phí bản quyền đắt đỏ nhờ khả năng tận dụng phần cứng máy tính văn phòng sẵn có và hệ thống SQL Server Express / Standard.
  • Thời gian hoàn vốn (ROI): Ước tính đạt điểm hòa vốn sau 1 - 2 tháng vận hành nhờ cắt giảm hao hụt hàng hóa và tiết kiệm 50% thời gian nhân sự cho công tác kiểm kê.

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

Hạn chế kỹ thuật

  • Chưa thiết kế bảng chi tiết hóa đơn riêng biệt (tblChitietHDB, tblChitietHDN), khiến mỗi hóa đơn hiện tại chỉ ghi nhận một chủng loại máy tính duy nhất trên một dòng giao dịch.
  • Cơ chế bảo mật mật khẩu ở phiên bản ban đầu còn lưu trữ dạng văn bản thuần (Plain Text), chưa áp dụng thuật toán băm (Bcrypt, SHA-256).

Hướng phát triển

  • Tách mô hình quan hệ 1-nhiều cho hóa đơn và chi tiết hóa đơn nhằm cho phép một đơn hàng chứa nhiều linh kiện, thiết bị khác nhau.
  • Nâng cấp cơ chế mã hóa mật khẩu người dùng chuẩn SHA-256 kèm Salt.
  • Phát triển API đồng bộ hóa dữ liệu lên máy chủ đám mây (Cloud Database) để chủ cửa hàng có thể theo dõi doanh thu từ xa qua thiết bị di động.

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

  • Sinh viên & Học viên CNTT: Tài liệu tham khảo thực tế về quy trình phân tích thiết kế hệ thống theo mô hình hướng đối tượng (OOAD) kết hợp công nghệ C# WinForms và ADO.NET.
  • Chủ cửa hàng bán lẻ: Sở hữu một công cụ quản lý bán hàng gọn nhẹ, hoạt động ổn định và đáp ứng đầy đủ nhu cầu kinh doanh mà không tốn chi phí thuê ngoài.
  • Lập trình viên: Mô hình kiến trúc mẫu để xây dựng nhanh các ứng dụng quản lý kho bãi, vật tư, bán hàng quy mô vừa và nhỏ.

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

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

Hệ thống được thiết kế tối ưu tài nguyên, yêu cầu phần cứng tối thiểu gồm: CPU Intel Celeron 1.4GHz hoặc tương đương, RAM 256MB, dung lượng ổ cứng trống tối thiểu 500MB, hệ điều hành Windows XP, Windows 7 hoặc cao hơn.

2. Làm thế nào để cấu hình kết nối giữa phần mềm và cơ sở dữ liệu SQL Server?

Người dùng chỉ cần đính kèm (Attach) file cơ sở dữ liệu .mdf vào SQL Server Management Studio (phiên bản 2000, 2005 hoặc mới hơn), sau đó điều chỉnh chuỗi kết nối (connectionString) trong mã nguồn hoặc file cấu hình App.config cho khớp với tên Data Source của máy chủ.

3. Dữ liệu bán hàng có thể trích xuất ra các định dạng văn phòng được không?

Có. Hệ thống tích hợp sẵn nút chức năng in và xuất dữ liệu hóa đơn ra định dạng Microsoft Excel, phục vụ công tác lưu trữ kế toán và in phiếu giao hàng trực tiếp cho khách.

4. Phần mềm ngăn chặn việc nhập trùng lặp dữ liệu như thế nào?

Tại các Form quản lý (FrmQLthongtinmaytinh, FrmNV, FrmNCC...), trước khi thực thi lệnh chèn INSERT, hệ thống kích hoạt câu lệnh SELECT COUNT(*) kiểm tra sự tồn tại của khóa chính. Nếu mã đã tồn tại, ứng dụng sẽ gửi thông báo cảnh báo và dừng thao tác.

5. Hệ thống có cơ chế phân quyền bảo vệ dữ liệu giữa quản lý và nhân viên không?

Có. Khi đăng nhập vào hệ thống qua Form FrmDangNhap, tùy thuộc vào quyền tài khoản (Admin hoặc Nhân viên), hệ thống sẽ bật/tắt các phân hệ tương ứng trên menu chính. Chỉ tài khoản Quản trị viên mới có quyền xem báo cáo thống kê doanh thu và quản lý thông tin nhân viên.


Kết luận

Đề tài "Xây dựng phần mềm quản lý cửa hàng bán máy tính" của sinh viên Trần Khắc Tuyên và Trịnh Thị Thúy đã giải quyết thành công bài toán chuyển đổi số từ mô hình ghi chép thủ công sang hệ thống phần mềm tự động hóa toàn diện. Với cấu trúc cơ sở dữ liệu quan hệ chặt chẽ, giao diện trực quan và tính năng nghiệp vụ bám sát thực tế, dự án không chỉ mang giá trị học thuật cao trong chương trình đào tạo kỹ sư CNTT mà còn thể hiện tính ứng dụng thực tiễn vững chắc cho khối doanh nghiệp bán lẻ vừa và nhỏ.