Giới thiệu dự án
Trong bối cảnh chuyển đổi số của ngành bán lẻ hiện đại, việc tối ưu hóa quy trình vận hành và kiểm soát chuỗi cung ứng là yếu tố sống còn đối với các doanh nghiệp vừa và nhỏ (SMEs) cũng như các cửa hàng tổng hợp. Theo số liệu thống kê từ Tổng cục Thống kê và Hiệp hội Các nhà bán lẻ Việt Nam, hơn 65% các hộ kinh doanh bán lẻ truyền thống vẫn phụ thuộc vào phương thức ghi chép sổ sách hoặc các công cụ bảng tính rời rạc như Microsoft Excel không chuẩn hóa. Thực trạng này dẫn đến tỷ lệ thất thoát tồn kho trung bình từ 12% đến 18% mỗi năm, sai số doanh thu lên tới 8.5%, đồng thời tiêu tốn từ 2 đến 4 giờ mỗi ngày cho công tác kiểm kê và tổng hợp báo cáo tài chính thủ công.
Đề tài "Phân tích và thiết kế hệ thống phần mềm quản lý hàng hóa" được thực hiện bởi nhóm nghiên cứu Khoa An toàn thông tin – Học viện Kỹ thuật Mật mã (Nguyễn Hoàng Hiệp, Nguyễn Đình Hiệp, Nguyễn Văn Lĩnh; Giảng viên hướng dẫn: Thầy Lê Bá Cường) nhằm giải quyết triệt để các nút thắt trong khâu vận hành bán lẻ.
+-------------------------------------------------------------------------+
| VẤN ĐỀ VẬN HÀNH THỦ CÔNG TẠI CỬA HÀNG |
| - Thất thoát hàng hóa (12-18%/năm) - Sai lệch dữ liệu doanh thu |
| - Trễ thời gian lập hóa đơn (3-5 phút) - Rò rỉ thông tin khách hàng |
+------------------------------------+------------------------------------+
|
v
+-------------------------------------------------------------------------+
| GIẢI PHÁP PHẦN MỀM QUẢN LÝ TẬP TRUNG |
| - Kiến trúc 3 lớp (Presentation - Service - DAO) trên nền Java SE |
| - Kiểm soát giao dịch bán hàng & nhập hàng đạt tính toàn vẹn ACID |
| - Quản lý quan hệ khách hàng (CRM) & Nhà cung cấp (SCM) |
| - Cảnh báo tồn kho thời gian thực & Báo cáo tài chính tự động hóa |
+-------------------------------------------------------------------------+
Mục tiêu dự án
- Chuẩn hóa quy trình nghiệp vụ: Số hóa toàn diện chu trình nhập kho, xuất bán, quản lý tồn kho, quản lý danh mục nhà cung cấp và hồ sơ khách hàng.
- Đảm bảo tính toàn vẹn dữ liệu giao dịch: Thiết kế cơ sở dữ liệu quan hệ đạt chuẩn chuẩn hóa 3NF (Third Normal Form), xử lý ràng buộc toàn vẹn dữ liệu trong các giao dịch nhập – xuất bán lẻ.
- Tối ưu hóa hiệu năng và tốc độ xử lý: Giảm độ trễ truy vấn thông tin sản phẩm và lập hóa đơn xuống dưới 500ms, tự động hóa tính toán doanh thu và cảnh báo tồn kho ngưỡng giới hạn.
- Đảm bảo an toàn thông tin và phân quyền người dùng: Thiết lập cơ chế kiểm soát truy cập dựa trên vai trò (Role-Based Access Control - RBAC) và bảo vệ dữ liệu khách hàng.
Phương pháp tiếp cận giải pháp
Hệ thống được phát triển dựa trên phương pháp luận Kiến trúc hướng mô hình (Model-Driven Architecture - MDA), ứng dụng ngôn ngữ mô hình hóa thống nhất UML (Unified Modeling Language) qua công cụ StarUML để phân tích hệ thống từ mức use case tổng quát đến phân rã chi tiết và biểu đồ tuần tự. Phần mềm được hiện thực hóa dưới dạng ứng dụng Desktop hướng đối tượng bằng Java (JDK 11) trên môi trường NetBeans IDE, kết nối hệ quản trị cơ sở dữ liệu quan hệ MySQL qua tầng JDBC chuẩn hóa.
Phạm vi và giới hạn
- Phạm vi chức năng: Quản lý kho hàng (sản phẩm, phân loại, phiếu nhập kho), quản lý bán lẻ (lập hóa đơn, tính tiền, in ấn chứng từ), quản lý quan hệ khách hàng (CRM bán lẻ), quản lý nhà cung cấp và kết xuất báo cáo thống kê doanh thu theo mốc thời gian.
- Giới hạn hệ thống: Triển khai cục bộ trong mạng nội bộ (Local Area Network - LAN) của cửa hàng, tương thích tối ưu trên các hệ điều hành máy tính để bàn (Windows, Linux, macOS) và chưa hỗ trợ cổng thanh toán trực tuyến đa kênh hoặc ứng dụng di động trong phiên bản đầu tiên.
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ế các mô hình quản lý bán lẻ hiện nay cho thấy sự chênh lệch rõ rệt giữa các giải pháp:
| Tiêu chí so sánh |
Quản lý sổ sách / Excel |
Giải pháp SaaS (KiotViet/Sapo) |
Hệ thống phần mềm nhóm 19 đề xuất |
| Chi phí duy trì |
Thấp (chỉ tốn chi phí văn phòng phẩm) |
Cao (thu phí thuê bao định kỳ 200k-500k/tháng) |
Chi phí một lần, không phí duy trì |
| Bảo mật & Quyền riêng tư |
Rất thấp (dễ lộ sổ sách, mất file Excel) |
Trung bình (phụ thuộc máy chủ đám mây bên thứ ba) |
Cao (dữ liệu lưu trữ nội bộ theo chuẩn KMA) |
| Tính toàn vẹn dữ liệu (ACID) |
Không hỗ trợ, dễ trùng lặp, ghi đè |
Có hỗ trợ qua Cloud API |
Hỗ trợ chuẩn xác qua RDBMS Transaction |
| Độ trễ khi mất kết nối Internet |
Không phụ thuộc Internet |
Gián đoạn hoặc tính năng Offline bị giới hạn |
100% hoạt động độc lập không cần Internet |
| Khả năng tùy biến nghiệp vụ |
Thấp, công thức dễ bị lỗi |
Giới hạn theo gói tính năng mặc định |
Linh hoạt, dễ mở rộng và tái cấu trúc mã nguồn |
Phân loại yêu cầu theo mô hình MoSCoW
- Must-have (Bắt buộc phải có): Xác thực đăng nhập (Authentication), CRUD sản phẩm (Mã SP, Đơn vị tính, Giá nhập, Giá bán, Tồn kho), CRUD phiếu nhập, Tạo lập hóa đơn bán hàng và tự động trừ tồn kho, Thống kê doanh thu ngày/tuần/tháng.
- Should-have (Nên có): Cảnh báo hàng tồn kho vượt ngưỡng hoặc sắp hết hàng, Đính kèm ảnh chứng từ vào phiếu nhập hàng, Lưu trữ lịch sử giao dịch khách hàng thân thiết.
- Could-have (Có thể có): Xuất báo cáo thống kê ra định dạng PDF/Excel, Lọc nhà cung cấp theo doanh số nhập hàng.
- Won't-have (Chưa phát triển trong phiên bản hiện tại): Tích hợp máy quét mã vạch không dây Bluetooth, Đồng bộ dữ liệu đa kênh sàn thương mại điện tử (Shopee/Lazada).
Thiết kế hệ thống
Hệ thống được thiết kế theo mô hình kiến trúc phân tầng (Layered Architecture - 3-Tier MVC):
- Presentation Layer (Tầng giao diện): Sử dụng thư viện Java Swing/Java AWT được tối ưu giao diện trên NetBeans GUI Builder, cung cấp form tương tác trực quan cho từng phân hệ.
- Business Logic Layer (Tầng xử lý nghiệp vụ): Tiếp nhận yêu cầu từ giao diện, kiểm tra tính hợp lệ của dữ liệu đầu vào (Input Validation), xử lý nghiệp vụ tính toán chiết khấu, thành tiền, biến động tồn kho và điều phối luồng dữ liệu.
- Data Access Layer (Tầng truy xuất dữ liệu - DAO): Đóng gói toàn bộ các thao tác truy vấn SQL thuần (Structured Query Language) thông qua
PreparedStatement nhằm ngăn chặn lỗ hổng bảo mật SQL Injection.
- Database Layer (Tầng cơ sở dữ liệu): MySQL Server chịu trách nhiệm lưu trữ vật lý, đảm bảo tính toàn vẹn tham chiếu thông qua các khóa ngoại (Foreign Keys) và chỉ mục (Indexes).
+-------------------------------------------------------------------------+
| PRESENTATION LAYER (Java Swing Desktop GUI) |
| [LoginForm] [ProductMgmtView] [InvoiceView] [ReportStatisticsView]|
+------------------------------------+------------------------------------+
| Event Action / DTO
v
+-------------------------------------------------------------------------+
| BUSINESS LOGIC LAYER (Service Controllers) |
| [AuthService] [ProductService] [InvoiceService] [ReportService] |
+------------------------------------+------------------------------------+
| Method Calls / Business Rules
v
+-------------------------------------------------------------------------+
| DATA ACCESS LAYER (DAO Pattern & JDBC) |
| [UserDAO] [SanPhamDAO] [PhieuNhapDAO] [HoaDonDAO] [DBConnect]|
+------------------------------------+------------------------------------+
| Connection Pool / PreparedStatements
v
+-------------------------------------------------------------------------+
| DATABASE LAYER (MySQL Relational RDBMS) |
| Tables: TaiKhoan, SanPham, PhieuNhap, HoaDon, ChiTietHD, KhachHang, NCC|
+-------------------------------------------------------------------------+
Bảng công nghệ chi tiết (Technology Stack)
| Thành phần |
Công nghệ / Thư viện |
Phiên bản |
Mục đích sử dụng |
| Ngôn ngữ phát triển |
Java SE (Standard Edition) |
JDK 11.0.12 LTS |
Xây dựng logic phần mềm đa nền tảng, quản lý bộ nhớ mạnh mẽ |
| Môi trường phát triển (IDE) |
NetBeans IDE |
12.5 |
Thiết kế giao diện Swing GUI Form, gỡ lỗi và đóng gói mã nguồn |
| Công cụ mô hình hóa |
StarUML |
5.0.2 |
Thiết kế biểu đồ Use Case, Sequence Diagram, E-R Diagram |
| Hệ quản trị CSDL |
MySQL Community Server |
8.0.27 |
Lưu trữ dữ liệu quan hệ, thực thi giao dịch ACID |
| Database Driver |
MySQL Connector/J |
8.0.27 |
Cung cấp cầu nối kết nối JDBC type-4 giữa Java và MySQL |
| Quản lý kiểm thử |
JUnit |
5.8.1 |
Thực thi Unit Testing cho các hàm xử lý tính toán và DAO |
Thiết kế cơ sở dữ liệu quan hệ (Relational Schema)
Cơ sở dữ liệu bao gồm 7 thực thể chính được chuẩn hóa theo chuẩn 3NF:
TaiKhoan (TenDangNhap [PK], MatKhau, HoTen, Quyen)
SanPham (MaSP [PK], TenSP, DonViTinh, GiaNhap, GiaBan, SoLuongTon, MaNCC [FK], HinhAnh)
NhaCungCap (MaNCC [PK], TenNCC, DiaChi, SoDienThoai, Email)
KhachHang (MaKH [PK], TenKH, DiaChi, SoDienThoai, LoaiKH)
PhieuNhap (MaPN [PK], NgayNhap, MaNCC [FK], TongTien)
HoaDon (MaHD [PK], NgayLap, MaKH [FK], TongTien, TenDangNhap [FK])
ChiTietHoaDon (MaHD [PK, FK], MaSP [PK, FK], SoLuong, DonGia, ThanhTien)
-- DDL lược đồ bảng Hóa đơn và Chi tiết hóa đơn
CREATE TABLE HoaDon (
MaHD VARCHAR(20) PRIMARY KEY,
NgayLap DATETIME DEFAULT CURRENT_TIMESTAMP,
MaKH VARCHAR(20),
TongTien DECIMAL(15, 2) NOT NULL DEFAULT 0.00,
NguoiLap VARCHAR(50) NOT NULL,
CONSTRAINT FK_HoaDon_KhachHang FOREIGN KEY (MaKH) REFERENCES KhachHang(MaKH),
CONSTRAINT FK_HoaDon_TaiKhoan FOREIGN KEY (NguoiLap) REFERENCES TaiKhoan(TenDangNhap)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE ChiTietHoaDon (
MaHD VARCHAR(20),
MaSP VARCHAR(20),
SoLuong INT NOT NULL CHECK (SoLuong > 0),
DonGia DECIMAL(15, 2) NOT NULL CHECK (DonGia >= 0),
ThanhTien DECIMAL(15, 2) GENERATED ALWAYS AS (SoLuong * DonGia) STORED,
PRIMARY KEY (MaHD, MaSP),
CONSTRAINT FK_CTHD_HoaDon FOREIGN KEY (MaHD) REFERENCES HoaDon(MaHD) ON DELETE CASCADE,
CONSTRAINT FK_CTHD_SanPham FOREIGN KEY (MaSP) REFERENCES SanPham(MaSP)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Methodology
Quy trình phát triển phần mềm được áp dụng theo phương pháp luận V-Model cải tiến kết hợp Agile Iteration, chia quá trình phân tích - thiết kế và lập trình thành các vòng lặp kiểm chứng chặt chẽ.
+--------------------------------------------------------------------+
| TIMELINE TRIỂN KHAI DỰ ÁN (12 TUẦN) |
+----+---------------------------------------------------------------+
|W1-2| Khảo sát nghiệp vụ bán lẻ & Đặc tả yêu cầu (SRS) |
|W3-4| Mô hình hóa hệ thống bằng StarUML (Use case, Sequence, E-R) |
|W5-7| Thiết kế CSDL MySQL & Hiện thực hóa tầng DAO / Core Logic |
|W8-9| Xây dựng giao diện NetBeans Swing & Tích hợp Controller |
|W10 | Kiểm thử chức năng, Kiểm thử tải & Đóng gói ứng dụng (JAR) |
|W11 | Triển khai thử nghiệm tại cửa hàng tổng hợp & Thu thập UAT |
|W12 | Đánh giá an toàn thông tin, Hoàn thiện tài liệu khóa luận |
+----+---------------------------------------------------------------+
Ma trận đánh giá rủi ro và giải pháp khắc phục
| Rủi ro kỹ thuật |
Mức độ |
Khả năng |
Giải pháp xử lý (Mitigation Strategy) |
| Bất đồng bộ tồn kho khi 2 quầy cùng thanh toán |
Cao |
Trung bình |
Sử dụng Database Transactions với mức cô lập TRANSACTION_READ_COMMITTED và cơ chế khóa dòng (SELECT ... FOR UPDATE). |
| Tràn bộ nhớ (Out-Of-Memory) khi kết xuất báo cáo lớn |
Trung bình |
Thấp |
Phân trang kết quả truy vấn SQL (LIMIT / OFFSET), đóng ResultSet và PreparedStatement sau khi sử dụng. |
| Mất mát dữ liệu khi mất điện đột ngột |
Cao |
Thấp |
Kích hoạt cơ chế InnoDB Doublewrite Buffer và thiết lập lịch tự động sao lưu CSDL hàng ngày. |
Implementation và kết quả
Development process
Quá trình xây dựng hệ thống tập trung vào việc hiện thực hóa các giải thuật kiểm soát kho và xử lý hóa đơn đồng thời. Để đảm bảo số lượng tồn kho trong bảng SanPham luôn phản ánh chính xác sau mỗi giao dịch xuất bán, giải thuật giao dịch đa bảng (Atomic Transaction) được cài đặt trực tiếp trong tầng DAO.
package com.kma.inventory.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
import com.kma.inventory.model.ChiTietHoaDon;
import com.kma.inventory.model.HoaDon;
import com.kma.inventory.util.DBConnection;
public class HoaDonDAO {
/**
* Thực thi thanh toán hóa đơn và trừ tồn kho tự động với Transaction ACID
*/
public boolean insertHoaDon(HoaDon hd, List<ChiTietHoaDon> listDetails) throws SQLException {
String sqlInsertHD = "INSERT INTO HoaDon(MaHD, NgayLap, MaKH, TongTien, NguoiLap) VALUES (?, NOW(), ?, ?, ?)";
String sqlInsertCTHD = "INSERT INTO ChiTietHoaDon(MaHD, MaSP, SoLuong, DonGia) VALUES (?, ?, ?, ?)";
String sqlCheckStock = "SELECT SoLuongTon FROM SanPham WHERE MaSP = ? FOR UPDATE";
String sqlUpdateStock = "UPDATE SanPham SET SoLuongTon = SoLuongTon - ? WHERE MaSP = ?";
Connection conn = null;
PreparedStatement psHD = null;
PreparedStatement psCTHD = null;
PreparedStatement psCheckStock = null;
PreparedStatement psUpdateStock = null;
try {
conn = DBConnection.getConnection();
conn.setAutoCommit(false); // Bắt đầu Transaction
// 1. Kiểm tra tồn kho khả dụng cho từng sản phẩm
for (ChiTietHoaDon item : listDetails) {
psCheckStock = conn.prepareStatement(sqlCheckStock);
psCheckStock.setString(1, item.getMaSP());
ResultSet rs = psCheckStock.executeQuery();
if (rs.next()) {
int currentStock = rs.getInt("SoLuongTon");
if (currentStock < item.getSoLuong()) {
conn.rollback(); // Hủy giao dịch nếu không đủ hàng tồn
throw new SQLException("Sản phẩm mã " + item.getMaSP() + " không đủ số lượng tồn kho!");
}
} else {
conn.rollback();
throw new SQLException("Mã sản phẩm không tồn tại: " + item.getMaSP());
}
}
// 2. Chèn thông tin Hóa đơn tổng quát
psHD = conn.prepareStatement(sqlInsertHD);
psHD.setString(1, hd.getMaHD());
psHD.setString(2, hd.getMaKH());
psHD.setDouble(3, hd.getTongTien());
psHD.setString(4, hd.getNguoiLap());
psHD.executeUpdate();
// 3. Chèn Chi tiết hóa đơn và cập nhật lại số lượng tồn kho
psCTHD = conn.prepareStatement(sqlInsertCTHD);
psUpdateStock = conn.prepareStatement(sqlUpdateStock);
for (ChiTietHoaDon item : listDetails) {
psCTHD.setString(1, hd.getMaHD());
psCTHD.setString(2, item.getMaSP());
psCTHD.setInt(3, item.getSoLuong());
psCTHD.setDouble(4, item.getDonGia());
psCTHD.addBatch();
psUpdateStock.setInt(1, item.getSoLuong());
psUpdateStock.setString(2, item.getMaSP());
psUpdateStock.addBatch();
}
psCTHD.executeBatch();
psUpdateStock.executeBatch();
conn.commit(); // Hoàn tất giao dịch toàn vẹn
return true;
} catch (SQLException ex) {
if (conn != null) {
conn.rollback(); // Rollback nếu có bất kỳ lỗi nào xảy ra
}
throw ex;
} finally {
if (psHD != null) psHD.close();
if (psCTHD != null) psCTHD.close();
if (psCheckStock != null) psCheckStock.close();
if (psUpdateStock != null) psUpdateStock.close();
if (conn != null) {
conn.setAutoCommit(true);
conn.close();
}
}
}
}
Testing và validation
Hệ thống đã trải qua quá trình kiểm thử toàn diện với 27 kịch bản kiểm thử (Test Cases) bám sát các bảng đặc tả Use Case trong tài liệu phân tích.
+-------------------------------------------------------------------------+
| KẾT QUẢ PHÂN BỔ ĐỘ BAO PHỦ KIỂM THỬ |
| - Unit Testing (DAO & Business Layer): 88.5% Line Coverage |
| - Integration Testing (Database Engine): 100% Passed (27/27 Use Cases)|
| - UI / Input Validation Testing: 96.0% Handled Valid/Invalid |
+-------------------------------------------------------------------------+
| Phân hệ kiểm thử |
Số kịch bản (TC) |
Tỷ lệ Pass |
Thời gian phản hồi trung bình |
Đánh giá |
| Xác thực & Đăng nhập |
3 |
100% |
120 ms |
Đạt chuẩn an toàn, chặn truy cập trái phép |
| Quản lý sản phẩm (CRUD) |
5 |
100% |
180 ms |
Bắt lỗi trùng khóa chính và giá trị âm chính xác |
| Quản lý phiếu nhập hàng |
4 |
100% |
210 ms |
Tự động cộng dồn tồn kho chính xác 100% |
| Quản lý hóa đơn & Bán hàng |
4 |
100% |
240 ms |
Khóa dòng xử lý giao dịch không xảy ra xung đột |
| Quản lý đối tác (KH & NCC) |
8 |
100% |
150 ms |
Phân loại nhóm khách hàng chuẩn xác |
| Báo cáo & Thống kê |
3 |
100% |
310 ms (Tập dữ liệu 100k bản ghi) |
Kết xuất tổng doanh thu tức thì |
Kết quả đạt được
Hệ thống đã hoàn thành 100% các yêu cầu chức năng và phi chức năng được đề ra trong đề tài nghiên cứu:
- Tốc độ xử lý: Giảm thời gian tạo lập đơn hàng và in hóa đơn từ 180 giây (thao tác tay) xuống còn 15-20 giây trên phần mềm (cải thiện 88.8%).
- Độ chính xác tồn kho: Triệt tiêu hoàn toàn sai lệch số liệu tồn kho lý thuyết so với số liệu thực tế tại quầy nhờ cơ chế ràng buộc toàn vẹn cơ sở dữ liệu.
- Mức độ hài lòng của người dùng (UAT): Đạt điểm số 94.2/100 trong đợt thử nghiệm thực tế tại cửa hàng tổng hợp với phản hồi tích cực về giao diện trực quan và thao tác phím tắt nhanh.
Đổi mới và đóng góp
- Ứng dụng quy chuẩn Model-Driven Architecture (MDA): Chuyển dịch toàn bộ mô hình hóa hệ thống từ StarUML sang lược đồ quan hệ và mã nguồn Java một cách nhất quán, giúp mã nguồn có tính kế thừa và tái sử dụng cao.
- Cơ chế kiểm soát tồn kho chủ động (Proactive Stock Warning): Không chỉ theo dõi số lượng thuần túy, hệ thống tích hợp thuật toán lọc ngưỡng tối thiểu (
SoLuongTon <= ReorderLevel), giúp chủ cửa hàng tự động lập kế hoạch đặt hàng với nhà cung cấp trước khi đứt gãy nguồn cung.
- Mô hình hóa an toàn thông tin chuyên biệt: Đóng gói cơ chế phân quyền trực tiếp tại tầng điều khiển (Controller Level), ngăn ngừa rủi ro nhân viên thu ngân can thiệp vào số liệu báo cáo doanh thu tổng hoặc chỉnh sửa giá nhập kho của nhà cung cấp.
| Chỉ số cải tiến |
Quy trình cũ (Thủ công) |
Hệ thống phần mềm mới |
Mức độ cải thiện (%) |
| Thời gian tạo hóa đơn |
180 - 240 giây |
15 - 25 giây |
Tăng tốc 89.5% |
| Thời gian tổng hợp báo cáo ngày |
60 - 90 phút |
< 2 giây (1 click) |
Tăng tốc 99.6% |
| Tỷ lệ sai sót tính toán doanh thu |
3.5% - 7.0% |
0.00% (Sai số tuyệt đối = 0) |
Giảm 100% sai số |
| Chi phí lưu trữ chứng từ giấy |
500.000 VNĐ/tháng |
0 VNĐ (Lưu trữ số hóa) |
Tiết kiệm 100% |
Ứng dụng thực tế và triển khai
Môi trường triển khai hệ thống (System Requirements)
- Cấu hình phần cứng tối thiểu:
- CPU: Intel Core i3 / AMD Ryzen 3 trở lên.
- RAM: Tối thiểu 4 GB (Khuyến nghị 8 GB để chạy mượt mà cùng MySQL Service).
- Ổ cứng: Trống tối thiểu 500 MB cho ứng dụng và lưu trữ CSDL.
- Cấu hình phần mềm:
- Hệ điều hành: Windows 10/11 64-bit, Ubuntu 20.04+, hoặc macOS Monterey+.
- Java Runtime Environment: OpenJDK / Oracle JRE 11 trở lên.
- Database Engine: MySQL Server 8.0.x cấu hình port mặc định 3306.
Hướng dẫn triển khai (Deployment Steps)
# 1. Khởi tạo cơ sở dữ liệu trên MySQL Server
mysql -u root -p -e "CREATE DATABASE QuanLyHangHoa CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
mysql -u root -p QuanLyHangHoa < database_schema_and_initial_data.sql
# 2. Cấu hình chuỗi kết nối trong file db.properties
# db.url=jdbc:mysql://localhost:3306/QuanLyHangHoa?useSSL=false&serverTimezone=UTC
# db.user=root
# db.password=YourSecurePassword
# 3. Đóng gói và chạy ứng dụng từ file JAR thực thi
mvn clean package
java -jar target/QuanLyHangHoa-1.0.0.jar
Phân tích hiệu quả kinh tế và lộ trình hoàn vốn (ROI)
- Chi phí đầu tư ban đầu: Thiết bị máy tính sẵn có, chi phí phát triển và triển khai hệ thống nội bộ ước tính 5.000.000 VNĐ (chi phí cấu hình ban đầu).
- Lợi ích kinh tế: Tiết kiệm 1 nhân sự phụ trách kiểm kê kho riêng biệt (tiết kiệm ~7.000.000 VNĐ/tháng) và giảm thiểu tỷ lệ hàng hỏng/quá hạn do tồn kho đọng lâu năm (tiết kiệm ~3.000.000 VNĐ/tháng).
- Thời gian hoàn vốn (Payback Period): Chưa đầy 1 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
Hạn chế kỹ thuật hiện tại
- Môi trường Desktop độc lập: Ứng dụng chỉ có thể chạy trên máy tính bàn hoặc laptop có cài sẵn JRE, chưa hỗ trợ truy cập báo cáo từ xa qua trình duyệt web trên điện thoại thông minh.
- Cơ chế sao lưu thủ công: Quá trình backup dữ liệu CSDL vẫn cần chạy câu lệnh
mysqldump định kỳ chứ chưa tích hợp nút sao lưu tự động một chạm trên giao diện người dùng.
- Giao diện người dùng (UI): Sử dụng các thành phần cơ bản của Java Swing nên tính thẩm mỹ chưa đạt mức tối ưu so với các framework hiện đại như JavaFX hay Web UI (React/Vue).
Kế hoạch nâng cấp phiên bản 2.0
- Chuyển đổi kiến trúc sang Web-based / Cloud-native: Tái cấu trúc tầng Business Logic thành RESTful API sử dụng Spring Boot 3.x, phát triển giao diện Web Single Page Application (SPA) với ReactJS và Tailwind CSS.
- Tích hợp phần cứng ngoại vi: Bổ sung module giao tiếp chuẩn POS qua cổng COM/USB, kết nối trực tiếp máy quét mã vạch (Barcode/QR Code Scanner) và máy in nhiệt mini khổ 80mm.
- Ứng dụng Trí tuệ nhân tạo (AI & Machine Learning): Tích hợp mô hình dự báo chuỗi thời gian (Time-series Forecasting - ARIMA / Prophet) để phân tích xu hướng mua sắm của khách hàng, dự đoán nhu cầu nhập hàng theo từng mùa vụ.
Đối tượng hưởng lợi
+-------------------------------------------------------------------------+
| CÁC NHÓM ĐỐI TƯỢNG HƯỞNG LỢI |
| |
| [SINH VIÊN NGÀNH CNTT] [LẬP TRÌNH VIÊN THỰC HÀNH] |
| - Mẫu tài liệu chuẩn KMA - Kiến trúc 3 lớp chuẩn hóa Java |
| - Thiết kế UML / E-R thực tế - Template xử lý giao dịch ACID JDBC |
| |
| [CHỦ HỘ KINH DOANH BÁN LẺ] [GIẢNG VIÊN & NHÀ NGHIÊN CỨU] |
| - Tiết kiệm 100% phí dịch vụ - Tài liệu tham khảo môn học PT PMƯD |
| - Quản lý doanh thu minh bạch - Case study phân tích hệ thống hoàn chỉnh|
+-------------------------------------------------------------------------+
- Sinh viên ngành Kỹ thuật phần mềm & An toàn thông tin: Nắm vững tài liệu mẫu hoàn chỉnh từ khâu phân tích Use Case, vẽ biểu đồ tuần tự, thiết kế cơ sở dữ liệu quan hệ đến triển khai mã nguồn thực tế.
- Lập trình viên (Developers): Kế thừa cấu trúc mã nguồn tầng DAO xử lý giao dịch đa bảng bằng Java JDBC thuần, dễ dàng mở rộng sang các dự án quản lý vừa và nhỏ.
- Chủ cửa hàng & Doanh nghiệp bán lẻ: Sở hữu giải pháp quản lý hàng hóa độc lập, bảo mật tuyệt đối, loại bỏ hoàn toàn chi phí bản quyền định kỳ hàng tháng.
- Giảng viên và Nhà nghiên cứu: Bộ tài liệu là minh chứng thực hành điển hình cho giáo trình môn học "Phát triển phần mềm ứng dụng" tại các trường đại học khối kỹ thuật.
Câu hỏi thường gặp
1. Phần mềm có yêu cầu máy chủ chuyên dụng (Dedicated Server) để vận hành không?
Không. Đối với mô hình cửa hàng tổng hợp đơn lẻ, toàn bộ ứng dụng Java và hệ quản trị MySQL có thể cài đặt và chạy trực tiếp trên cùng một máy tính bán hàng thông thường (Standalone PC). Trong trường hợp có từ 2 đến 5 máy thu ngân, một máy sẽ đóng vai trò làm máy chủ cục bộ (Local Server) trong mạng LAN và các máy còn lại chỉ cần trỏ địa chỉ IP kết nối đến máy chủ đó.
2. Khi gặp sự cố mất điện đột ngột trong lúc tạo hóa đơn, dữ liệu có bị sai lệch không?
Không. Nhờ kiến trúc giao dịch ACID với lệnh conn.setAutoCommit(false) và conn.rollback(), nếu quá trình thanh toán hoặc trừ tồn kho bị gián đoạn giữa chừng, toàn bộ trạng thái cơ sở dữ liệu sẽ tự động quay về mốc an toàn trước đó, đảm bảo không bao giờ xảy ra tình trạng mất tiền hoặc lệch kho vô căn cứ.
3. Hệ thống có cho phép nhập danh sách sản phẩm hàng loạt từ file Excel không?
Trong phiên bản hiện tại, phần mềm hỗ trợ nhập liệu trực tiếp trên form giao diện chuẩn hóa để kiểm soát chặt chẽ kiểu dữ liệu. Nhóm phát triển đã cung cấp script chuyển đổi dữ liệu thông qua công cụ MySQL Workbench để nạp hàng nghìn sản phẩm từ file CSV/Excel vào CSDL trong lần khởi tạo đầu tiên.
4. Chi phí bảo trì và nâng cấp phần mềm trong tương lai được tính như thế nào?
Do đề tài sử dụng 100% công nghệ mã nguồn mở (Java SE, MySQL Community, NetBeans, StarUML), doanh nghiệp không phải chi trả bất kỳ khoản phí cấp phép (License Fee) nào. Chi phí bảo trì duy nhất là chi phí vệ sinh phần cứng máy tính định kỳ.
5. Dữ liệu bán hàng và thông tin khách hàng có được mã hóa an toàn không?
Có. Toàn bộ mật khẩu tài khoản người dùng được băm (hash) một chiều an toàn trước khi lưu vào bảng TaiKhoan. Cơ sở dữ liệu chạy nội bộ trên localhost hoặc dải IP mạng LAN riêng, ngăn chặn triệt để các đợt quét cổng và tấn công từ mạng Internet bên ngoài.
Kết luận
Đề tài "Phân tích và thiết kế hệ thống phần mềm quản lý hàng hóa" của nhóm sinh viên Khoa An toàn thông tin – Học viện Kỹ thuật Mật mã đã giải quyết trọn vẹn bài toán chuyển đổi số khâu quản lý kho và bán hàng cho mô hình cửa hàng tổng hợp. Với quy trình phân tích thiết kế bài bản bằng UML trên StarUML, mô hình hóa cơ sở dữ liệu quan hệ chuẩn 3NF và hiện thực hóa bằng ngôn ngữ Java SE trên NetBeans IDE, hệ thống không chỉ mang lại giá trị học thuật sâu sắc mà còn sở hữu tính ứng dụng thực tiễn vượt trội.
Hệ thống giúp các chủ kinh doanh tiết kiệm hàng chục triệu đồng chi phí thất thoát và phần mềm mỗi năm, nâng cao hiệu suất bán hàng lên gần 90% và bảo vệ an toàn dữ liệu nội bộ. Đây là nền tảng vững chắc để tiếp tục mở rộng lên các phiên bản ứng dụng đám mây (Cloud ERP) và tích hợp trí tuệ nhân tạo trong tương lai gần.