Bối cảnh và vấn đề nghiên cứu

Đồ án môn học Lập trình Java với đề tài "Chương trình quản lý sách tại nhà sách FAHASA" được thực hiện bởi nhóm sinh viên Đinh Huỳnh Y Pha (MSSV: 1921006797) và Nguyễn Hoàng Thy dưới sự hướng dẫn của giảng viên Hà Thanh Liêm, thuộc Khoa Công nghệ Thông tin, Trường Đại học Tài chính - Marketing (tháng 04/2022).

Công ty Cổ phần Phát hành sách FAHASA là đơn vị hoạt động trong lĩnh vực liên kết xuất bản, in ấn và phát hành sách với mạng lưới quy mô gần 60 nhà sách trên toàn quốc. Tại các chi nhánh, số lượng ấn phẩm lưu hành lên đến hàng chục nghìn đầu sách, báo và tạp chí thuộc nhiều lĩnh vực khác nhau. Trước đây, các nghiệp vụ theo dõi hàng hóa, lưu trữ thông tin nhập - xuất và tra cứu dữ liệu sách phần lớn được thực hiện theo phương thức thủ công. Quy trình này bộc lộ nhiều hạn chế về tốc độ xử lý, tính chính xác và hiệu quả kiểm soát khi quy mô hoạt động mở rộng, lượng khách hàng và nguồn sách luân chuyển ngày càng tăng.

Xuất phát từ thực trạng đó, nghiên cứu được triển khai nhằm tin học hóa quy trình quản lý bán hàng và kho sách, với hệ thống mục tiêu và nhiệm vụ cụ thể như sau:

Mục tiêu nghiên cứu:

  1. Chuẩn hóa quy trình quản lý thông tin sách tại nhà sách FAHASA.
  2. Xây dựng phần mềm quản lý thông tin sách với các trường dữ liệu cốt lõi: mã sách, tên sách, số lượng tồn kho, giá bán, thể loại, tác giả và nhà xuất bản.
  3. Xây dựng phân hệ quản lý hoạt động nhập sách từ các nhà cung cấp/nhà xuất bản vào kho.
  4. Xây dựng phân hệ quản lý hoạt động xuất sách từ kho để phân phối và bán lẻ cho khách hàng.

Nhiệm vụ nghiên cứu:

  1. Khảo sát và phân tích quy trình nghiệp vụ bán hàng, nhập kho và xuất kho thực tế tại nhà sách.
  2. Tổng hợp cơ sở lý thuyết về ngôn ngữ lập trình Java, mô hình hướng đối tượng (OOP), thư viện giao diện đồ họa Java Swing, công nghệ kết nối Java Database Connectivity (JDBC) và hệ quản trị cơ sở dữ liệu MySQL.
  3. Phân tích thiết kế hệ thống: mô hình hóa cơ sở dữ liệu quan hệ (gồm các bảng dữ liệu chuẩn) và thiết kế hệ thống các lớp đối tượng thực thi.
  4. Hiện thực hóa phần mềm trên môi trường NetBeans IDE: lập trình giao diện người dùng (GUI) và cài đặt các thao tác dữ liệu (đăng nhập, đổi mật khẩu, thêm, xóa, sửa, tìm kiếm đa tiêu chí, làm mới dữ liệu).

Đối tượng và phạm vi nghiên cứu:

  • Đối tượng nghiên cứu: Nghiệp vụ quản lý sách, quản lý nhập - xuất kho và quản lý thông tin nhân viên tại nhà sách.
  • Phạm vi không gian: Nghiên cứu và áp dụng mô phỏng tại chi nhánh Nhà sách FAHASA Quận 9 (địa chỉ: 138 Lê Văn Việt, Thành phố Hồ Chí Minh).
  • Phạm vi nội dung và học thuật: Đồ án giới hạn trong phạm vi môn học Lập trình Java ở quy mô vừa và nhỏ; dữ liệu khảo sát được thu thập từ tài liệu và thông tin liên quan đến quy trình vận hành của FAHASA trong bối cảnh điều kiện dịch bệnh.

Cơ sở lý thuyết và phương pháp

Đồ án ứng dụng các nền tảng công nghệ và lý thuyết lập trình hướng đối tượng tiêu chuẩn trong hệ sinh thái Java:

  • Ngôn ngữ lập trình Java: Ngôn ngữ hướng đối tượng tĩnh, độc lập nền tảng nhờ cơ chế biên dịch mã nguồn thành bytecode thực thi trên máy ảo Java (Java Virtual Machine - JVM), tích hợp cơ chế thu gom rác tự động (Garbage Collection) và kiểm soát lỗi chặt chẽ tại thời điểm biên dịch cũng như thực thi.
  • Lập trình hướng đối tượng (OOP): Vận dụng 4 nguyên lý nền tảng gồm tính trừu tượng (Abstraction), tính đóng gói và che giấu thông tin (Encapsulation), tính kế thừa (Inheritance) và tính đa hình (Polymorphism); mô hình hóa hệ thống thông qua các cấu trúc Lớp (Class - bao gồm thuộc tính và phương thức) cùng các Đối tượng (Object) cụ thể.
  • Thư viện Java Swing: Bộ công cụ xây dựng giao diện đồ họa người dùng (GUI) thuộc Java Foundation Classes (JFC), xây dựng trên nền tảng Abstract Windowing Toolkit (AWT). Java Swing cung cấp các thành phần giao diện gọn nhẹ, độc lập nền tảng và hỗ trợ cơ chế tùy biến giao diện (Pluggable Look & Feel).
Tiêu chí so sánh AWT (Abstract Windowing Toolkit) Java Swing
Tính phụ thuộc nền tảng Phụ thuộc vào nền tảng hệ điều hành (Platform-dependent) Độc lập với nền tảng hệ điều hành (Platform-independent)
Bản chất thành phần Thành phần giao diện nặng (Heavyweight components) Thành phần giao diện gọn nhẹ (Lightweight components)
Cơ chế Look & Feel Không hỗ trợ Pluggable Look & Feel Hỗ trợ linh hoạt Pluggable Look & Feel
  • Java Database Connectivity (JDBC): Giao diện lập trình ứng dụng (API) chuẩn cho phép ứng dụng Java gửi các câu lệnh truy vấn cấu trúc (SQL) và trao đổi dữ liệu với hệ quản trị cơ sở dữ liệu quan hệ (RDBMS).
  • Công cụ phát triển: Môi trường phát triển tích hợp NetBeans IDE (phiên bản 12), hệ quản trị cơ sở dữ liệu MySQL và thư viện điều khiển kết nối MySQL Connector/J.

Phương pháp nghiên cứu: Tác giả sử dụng phương pháp phân tích - tổng hợp tài liệu chuyên ngành về quản lý xuất bản phẩm và lập trình hướng đối tượng; phương pháp mô hình hóa dữ liệu quan hệ; phương pháp thiết kế hướng đối tượng; và phương pháp lập trình thực nghiệm xây dựng ứng dụng máy tính (desktop application).


Thiết kế và triển khai

Hệ thống được thiết kế theo cấu trúc phần mềm hướng đối tượng kết nối trực tiếp với cơ sở dữ liệu quan hệ thông qua trình điều khiển JDBC:

[ Giao diện người dùng (Java Swing GUI) ]
                    ↕
[ Các lớp xử lý nghiệp vụ / Entity Classes ]
                    ↕
[ Lớp trung gian kết nối (KetNoi - JDBC) ]
                    ↕
[ Hệ quản trị cơ sở dữ liệu MySQL ]

1. Thiết kế cơ sở dữ liệu quan hệ

Cơ sở dữ liệu của chương trình gồm 9 bảng dữ liệu được thiết kế nhằm quản lý toàn diện các thực thể trong nhà sách:

Tên bảng trong CSDL Ký hiệu bảng trong đồ án Chức năng và dữ liệu lưu trữ
NhanVien Bảng 3-1 Lưu trữ mã nhân viên, họ tên, giới tính, số CMND, số điện thoại, địa chỉ
NhaXuatBan Bảng 3-2 Lưu trữ mã nhà xuất bản, tên nhà xuất bản, địa chỉ, số điện thoại liên hệ
TacGia Bảng 3-3 Lưu trữ mã tác giả, họ tên tác giả, địa chỉ, số điện thoại liên lạc
LoaiSach Bảng 3-4 Lưu trữ danh mục phân loại sách (mã loại sách, tên loại sách)
Sach Bảng 3-5 Lưu trữ mã sách, tên sách, số lượng tồn, đơn giá bán, mã NXB, mã tác giả, mã loại sách
PhieuNhapSach Bảng 3-6 Lưu trữ thông tin phiếu nhập kho: mã phiếu nhập, mã nhân viên thực hiện, tổng số lượng, ngày nhập
PhieuXuatSach Bảng 3-7 Lưu trữ thông tin phiếu xuất kho: mã phiếu xuất, mã nhân viên thực hiện, tổng số lượng, ngày xuất
CTPNS Bảng 3-8 Chi tiết phiếu nhập sách: mã phiếu nhập, mã sách, số lượng nhập, đơn giá nhập
CTPXS Bảng 3-9 Chi tiết phiếu xuất sách: mã phiếu xuất, mã sách, số lượng xuất, đơn giá xuất

2. Thiết kế các lớp hướng đối tượng

Hệ thống hiện thực hóa 11 lớp đối tượng chuyên biệt phục vụ việc đóng gói thuộc tính và xử lý tương tác dữ liệu:

  1. KetNoi (Bảng 3-10): Chịu trách nhiệm thiết lập cầu nối tới cơ sở dữ liệu MySQL qua phương thức getConnection().
  2. ThongTinDangNhap (Bảng 3-11): Quản lý thông tin tài khoản người dùng, tên đăng nhập và mật khẩu hệ thống.
  3. ThongTinTacGia (Bảng 3-12): Đóng gói thuộc tính mã tác giả, họ tên, địa chỉ, số điện thoại.
  4. ThongTinLoaiSach (Bảng 3-13): Đóng gói thuộc tính mã loại sách và tên thể loại sách.
  5. ThongTinNXB (Bảng 3-14): Đóng gói thuộc tính mã nhà xuất bản, tên nhà xuất bản, địa chỉ, số điện thoại.
  6. ThongTinSach (Bảng 3-15): Đóng gói thông tin toàn diện về đầu sách (mã sách, tên sách, số lượng, giá, khóa ngoại NXB, tác giả, loại sách).
  7. ThongTinPhieuNhap (Bảng 3-16): Đóng gói dữ liệu phiếu nhập kho (mã phiếu nhập, mã nhân viên, ngày nhập, tổng số lượng).
  8. ThongTinPhieuXuat (Bảng 3-17): Đóng gói dữ liệu phiếu xuất kho (mã phiếu xuất, mã nhân viên, ngày xuất, tổng số lượng).
  9. ThongTinCTPN (Bảng 3-18): Đóng gói chi tiết từng dòng hàng trong phiếu nhập sách.
  10. ThongTinCTPX (Bảng 3-19): Đóng gói chi tiết từng dòng hàng trong phiếu xuất kho bán sách.
  11. ThongTinNhanVien (Bảng 3-20): Đóng gói hồ sơ nhân viên phục vụ quản lý nhân sự và đối soát lập phiếu.

3. Hiện thực hóa các phân hệ chức năng và giao diện

Các giao diện được thiết kế dạng Form chuẩn bằng Java Swing, kết hợp các bảng dữ liệu JTable và các nút điều khiển chức năng:

  • Phân hệ xác thực: Form đăng nhập (Form Đăng nhập) xác thực tài khoản; Form đổi mật khẩu (Form Đổi mật khẩu) tích hợp JCheckBox cho phép ẩn/hiển thị mật khẩu; Form điều hướng chính (Form Giao diện chính) có xác nhận đăng xuất.
  • Phân hệ Quản lý thông tin sách: Gồm 4 giao diện tab tương ứng với 4 thực thể: Quản lý tác giả (tìm kiếm theo mã, họ tên, địa chỉ), Quản lý nhà xuất bản (tìm kiếm theo mã, tên, địa chỉ), Quản lý loại sách (tìm kiếm theo mã, tên loại sách) và Quản lý thông tin sách (tìm kiếm theo mã sách, tên sách, mã NXB, mã tác giả, mã loại sách).
  • Phân hệ Quản lý xuất sách: Gồm giao diện Quản lý phiếu xuất kho (lọc tìm theo mã phiếu xuất, mã nhân viên, số lượng, ngày, tháng) và giao diện Quản lý chi tiết phiếu xuất (lọc tìm theo mã sách, mã phiếu xuất, số lượng).
  • Phân hệ Quản lý nhập sách: Gồm giao diện Quản lý phiếu nhập kho (tìm kiếm theo mã phiếu nhập, mã nhân viên, số lượng) và giao diện Quản lý chi tiết phiếu nhập (tìm kiếm theo mã sách, mã phiếu nhập, số lượng).
  • Phân hệ Quản lý nhân viên: Form Quản lý nhân viên thực hiện thêm mới, hiệu chỉnh, xóa bỏ và tìm kiếm nhân viên theo mã nhân viên, họ tên hoặc giới tính.
  • Quy chuẩn chức năng chung trên từng Form: Mỗi màn hình quản lý đều được cài đặt bộ 5 nút lệnh thao tác: Thêm (INSERT bản ghi mới), Xóa (DELETE bản ghi được chọn), Sửa (UPDATE thông tin hiệu chỉnh), Tìm kiếm (thực thi các phương thức lọc dữ liệu chuyên biệt như timkiem(), timkiemls(), timKiem()), và Reset (làm trắng các trường nhập liệu trên giao diện).

Nội dung chính theo từng chương

Chương 1: Giới thiệu tổng quan

Chương 1 giới thiệu khái quát về đơn vị nghiên cứu là Công ty Cổ phần Phát hành sách FAHASA, nêu rõ sứ mệnh phát triển văn hóa đọc và quy mô gần 60 nhà sách trên toàn quốc. Tác giả luận giải tính cấp thiết của đề tài xuất phát từ nhu cầu khắc phục các hạn chế của phương thức quản lý thủ công truyền thống tại chi nhánh Nhà sách FAHASA Quận 9 (138 Lê Văn Việt, TP. Hồ Chí Minh). Đồng thời, chương này xác định rõ mục tiêu đề tài, phạm vi nghiên cứu, phương pháp tiếp cận và cấu trúc nội dung các phân hệ chức năng dự kiến xây dựng.

Chương 2: Cơ sở lý thuyết

Chương 2 trình bày có hệ thống các kiến thức tảng về ngôn ngữ lập trình Java (lịch sử phát triển từ nhóm Green Team do James Gosling khởi xướng năm 1991, các phiên bản J2SE, J2EE, J2ME, các đặc tính độc lập phần cứng, bảo mật và cơ chế dọn rác tự động). Tiếp đó, chương phân tích sâu về 4 tính chất của lập trình hướng đối tượng (trừu tượng, đóng gói, kế thừa, đa hình) cùng khái niệm lớp và đối tượng; phân biệt chi tiết giữa thư viện đồ họa AWT và Java Swing; trình bày kiến trúc kết nối dữ liệu JDBC và cách cấu hình kết nối tới hệ quản trị CSDL MySQL; cuối cùng là tổng quan về môi trường NetBeans IDE cùng hệ quản trị MySQL.

Chương 3: Phân tích và thiết kế chương trình

Chương 3 tập trung vào công tác mô hình hóa dữ liệu và thiết kế kiến trúc phần mềm. Tác giả mô tả chi tiết bài toán quản lý và giới hạn phạm vi hệ thống; thiết lập sơ đồ cấu trúc của 9 bảng cơ sở dữ liệu quan hệ (NhanVien, NhaXuatBan, TacGia, LoaiSach, Sach, PhieuNhapSach, PhieuXuatSach, CTPNS, CTPXS). Đồng thời, chương này định nghĩa chi tiết thuộc tính và phương thức của 11 lớp đối tượng (KetNoi, ThongTinDangNhap, ThongTinTacGia, ThongTinLoaiSach, ThongTinNXB, ThongTinSach, ThongTinPhieuNhap, ThongTinPhieuXuat, ThongTinCTPN, ThongTinCTPX, ThongTinNhanVien) và làm rõ mối quan hệ ràng buộc giữa các lớp trong hệ thống.

Chương 4: Hiện thực ứng dụng

Chương 4 là phần nội dung thực nghiệm, minh họa chi tiết toàn bộ giao diện và các đoạn mã nguồn xử lý chức năng chính của chương trình. Nội dung bao gồm:

  • Thiết kế giao diện và code xử lý cho Form đăng nhập, Form đổi mật khẩu và Form giao diện chính điều hướng.
  • Phân hệ quản lý thông tin sách với các form tác giả, nhà xuất bản, loại sách, thông tin sách cùng các giải thuật tìm kiếm theo từng trường thông tin.
  • Phân hệ quản lý xuất sách với form phiếu xuất kho và form chi tiết phiếu xuất kho.
  • Phân hệ quản lý nhập sách với form phiếu nhập kho và form chi tiết phiếu nhập kho.
  • Phân hệ quản lý nhân viên với đầy đủ chức năng CRUD và lọc tìm theo mã, tên, giới tính.

Chương 5: Kết luận và kiến nghị

Chương 5 tổng kết lại toàn bộ các kết quả đạt được sau quá trình nghiên cứu và lập trình; thẳng thắn chỉ ra những mặt hạn chế của đồ án do giới hạn về mặt thời gian và phạm vi môn học; từ đó đề xuất các định hướng phát triển, mở rộng hệ thống trong tương lai.


Kết quả và đóng góp

1. Kết quả chính đạt được

  • Xây dựng hoàn chỉnh phần mềm máy tính (Desktop App) phục vụ quản lý sách tại nhà sách bằng ngôn ngữ Java, giao diện đồ họa Java Swing và cơ sở dữ liệu MySQL.
  • Thiết kế và chuẩn hóa hệ cơ sở dữ liệu gồm 9 bảng quan hệ, bảo đảm tính toàn vẹn dữ liệu cho các thực thể sách, nhà xuất bản, tác giả, loại sách, nhân viên, phiếu nhập và phiếu xuất.
  • Đóng gói thành công 11 lớp đối tượng theo mô hình OOP, phân tách rõ ràng trách nhiệm kết nối (KetNoi) và lưu trữ thực thể.
  • Hiện thực hóa đầy đủ các phân hệ nghiệp vụ: Quản lý thông tin sách (4 màn hình con), Quản lý nhập sách (2 màn hình), Quản lý xuất sách (2 màn hình), Quản lý nhân viên và Quản lý tài khoản (Đăng nhập, Đổi mật khẩu).
  • Cài đặt hoàn chỉnh bộ lọc tìm kiếm đa tiêu chí trên tất cả các phân hệ (lọc theo mã, theo tên, theo thuộc tính liên quan, theo ngày tháng và số lượng).

2. Đóng góp của đề tài

  • Về mặt thực tiễn: Cung cấp một giải pháp phần mềm cụ thể nhằm tự động hóa các thao tác ghi chép sổ sách thủ công, giảm thiểu sai sót trong công tác kiểm soát tồn kho và theo dõi luân chuyển sách tại chi nhánh nhà sách.
  • Về mặt học thuật: Hệ thống hóa quy trình áp dụng lý thuyết lập trình hướng đối tượng Java, thiết kế giao diện Swing và kết nối CSDL quan hệ MySQL qua JDBC vào một bài toán quản trị kinh doanh thực tế.

Hạn chế và hướng nghiên cứu tiếp

1. Hạn chế

  • Đồ án được thực hiện trong khuôn khổ môn học Lập trình Java với thời gian có hạn và bối cảnh dịch bệnh, nên ứng dụng chỉ mới dừng lại ở quy mô nhỏ mô phỏng cho một chi nhánh đơn lẻ (Nhà sách FAHASA Quận 9), chưa thử nghiệm triển khai trên môi trường mạng phân tán cho toàn bộ hệ thống gần 60 nhà sách.
  • Ứng dụng chưa tích hợp các phân hệ nâng cao như báo cáo thống kê trực quan bằng biểu đồ, xuất hóa đơn ra file định dạng PDF/Excel hoặc thanh toán điện tử trực tuyến.

2. Hướng phát triển

  • Mở rộng phân quyền người dùng chi tiết theo từng cấp bậc (Quản trị viên, Quản lý kho, Nhân viên thu ngân).
  • Phát triển thêm module thống kê báo cáo doanh thu, chi phí, công nợ và tự động in ấn hóa đơn bán lẻ, phiếu nhập/xuất kho.
  • Nâng cấp kiến trúc kết nối dữ liệu mạng để hỗ trợ đồng bộ dữ liệu liên chi nhánh trên nền tảng điện toán đám mây.

Giá trị tham khảo

Tài liệu đồ án mang lại giá trị tham khảo thiết thực cho các đối tượng sau:

  • Sinh viên ngành Công nghệ Thông tin, Kỹ thuật Phần mềm và Hệ thống Thông tin: Dùng làm tài liệu tham khảo trực tiếp khi thực hiện đồ án môn học Lập trình Java, Phân tích thiết kế hệ thống thông tin hoặc Lập trình ứng dụng cơ sở dữ liệu.
  • Người học lập trình Java Desktop: Có thể tham khảo chi tiết thiết kế 9 bảng CSDL quan hệ chuẩn, cách thức phân chia 11 lớp thực thể hướng đối tượng và mã nguồn cài đặt các thao tác CRUD, bắt sự kiện trên Java Swing kết hợp truy vấn JDBC.

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

1. Đề tài "Chương trình quản lý sách tại nhà sách FAHASA" do ai thực hiện và thuộc cơ sở đào tạo nào?

Đề tài là Đồ án môn học Lập trình Java do hai sinh viên Đinh Huỳnh Y Pha (MSSV: 1921006797) và Nguyễn Hoàng Thy thực hiện, dưới sự hướng dẫn của thầy Hà Thanh Liêm tại Khoa Công nghệ Thông tin, Trường Đại học Tài chính - Marketing (UFM), hoàn thành vào tháng 04 năm 2022.

2. Hệ thống phần mềm sử dụng những công nghệ và công cụ phát triển nào?

Chương trình được phát triển hoàn toàn bằng ngôn ngữ lập trình Java (nền tảng J2SE), sử dụng thư viện đồ họa Java Swing (JFC) để xây dựng giao diện, thư viện JDBC để kết nối dữ liệu, hệ quản trị cơ sở dữ liệu MySQL để lưu trữ thông tin và môi trường phát triển tích hợp NetBeans IDE phiên bản 12.

3. Cơ sở dữ liệu của chương trình gồm những bảng nào?

Cơ sở dữ liệu gồm 9 bảng quan hệ: NhanVien (thông tin nhân viên), NhaXuatBan (nhà xuất bản), TacGia (tác giả), LoaiSach (danh mục loại sách), Sach (thông tin ấn phẩm), PhieuNhapSach (phiếu nhập hàng), PhieuXuatSach (phiếu xuất hàng), CTPNS (chi tiết phiếu nhập sách) và CTPXS (chi tiết phiếu xuất sách).

4. Phân hệ Quản lý thông tin sách hỗ trợ tìm kiếm theo những tiêu chí nào?

Phân hệ Quản lý thông tin sách cho phép tìm kiếm linh hoạt theo 5 tiêu chí riêng biệt: tìm kiếm theo mã sách, theo tên sách, theo mã nhà xuất bản, theo mã tác giả và theo mã loại sách; ngoài ra các form phụ đi kèm còn hỗ trợ tìm tác giả theo địa chỉ, tìm NXB theo tên và địa chỉ.

5. Lớp KetNoi trong chương trình đảm nhận nhiệm vụ gì?

Lớp KetNoi đóng vai trò là tầng trung gian kết nối cơ sở dữ liệu, sử dụng phương thức getConnection() để nạp trình điều khiển JDBC Driver, khai báo chuỗi URL, tên người dùng và mật khẩu nhằm thiết lập kết nối an toàn từ ứng dụng Java tới cơ sở dữ liệu MySQL.


Kết luận

Đồ án "Chương trình quản lý sách tại nhà sách FAHASA" của sinh viên Đinh Huỳnh Y Pha và Nguyễn Hoàng Thy đã giải quyết thành công bài toán tự động hóa quy trình quản lý bán và luân chuyển sách tại chi nhánh FAHASA Quận 9. Bằng việc ứng dụng ngôn ngữ Java, thư viện Java Swing và CSDL MySQL qua kết nối JDBC, nhóm tác giả đã xây dựng hoàn chỉnh ứng dụng desktop với 9 bảng dữ liệu và 11 lớp đối tượng xử lý trọn vẹn các chức năng nhập, xuất, quản lý sách và nhân sự. Đây là tài liệu học thuật và thực hành có giá trị tham khảo rõ ràng cho sinh viên công nghệ thông tin trong việc thiết kế và lập trình ứng dụng hướng đối tượng.