Báo cáo Bài tập lớn LTHDT: Quản lý bán sách tại cửa hàng (ĐH Mở Hà Nội)

Tài liệu tham khảo BTL Lập trình hướng đối tượng đề tài Quản lý bán sách. Báo cáo chi tiết về bài toán, sơ đồ lớp và các chức năng hệ thống.

Trường đại học

Viện Đại học Mở Hà Nội

Người đăng

Ẩn danh

Thể loại

Bài tập lớn

2024

54
2
0

Phí lưu trữ

30 Point

Tóm tắt

I. Hướng dẫn tổng quan BTL LTHDT Đề tài Quản lý bán sách

Bài tập lớn Lập trình Hướng đối tượng (BTL LTHDT) với đề tài Quản lý bán sách là một project nền tảng, giúp sinh viên áp dụng các kiến thức cốt lõi của OOP vào một bài toán thực tế. Mục tiêu chính của đề tài này là xây dựng một phần mềm quản lý bán sách đơn giản nhưng đầy đủ chức năng, mô phỏng hoạt động của một cửa hàng sách. Báo cáo này trình bày chi tiết quá trình từ phát biểu bài toán, phân tích thiết kế, đến triển khai và kiểm thử hệ thống. Việc hoàn thành bài tập lớn lập trình hướng đối tượng này không chỉ củng cố kỹ năng lập trình Java hoặc C++ mà còn rèn luyện tư duy phân tích hệ thống. Hệ thống tập trung vào bốn đối tượng quản lý chính: Sách, Nhân viên, Khách hàng và Hóa đơn. Mỗi đối tượng được biểu diễn bằng các lớp (class) với thuộc tính và phương thức riêng, thể hiện rõ các nguyên lý của OOP như đóng gói, kế thừa, đa hình và trừu tượng. Tài liệu gốc từ Viện Đại học Mở Hà Nội cung cấp một khung sườn rõ ràng, từ việc phân công nhiệm vụ cho các thành viên trong nhóm đến việc định nghĩa chi tiết từng lớp và thuật toán xử lý. Đây là một tài liệu tham khảo giá trị cho bất kỳ ai đang thực hiện một đồ án quản lý nhà sách tương tự.

1.1. Mục tiêu và phạm vi của đồ án quản lý nhà sách

Mục tiêu cốt lõi của đồ án quản lý nhà sách là ứng dụng thành công các nguyên tắc của lập trình hướng đối tượng để giải quyết bài toán quản lý. Cụ thể, dự án cần xây dựng một chương trình có khả năng quản lý thông tin các đầu sách, nhân viên bán hàng, khách hàng thân thiết và các hóa đơn giao dịch. Phạm vi của đề tài BTL C++ hay LTHDT Java này bao gồm các chức năng cơ bản như nhập, hiển thị, thêm, sửa, xóa, tìm kiếm dữ liệu cho từng đối tượng. Ngoài ra, hệ thống còn phải thực hiện các nghiệp vụ phức tạp hơn như sắp xếp sách theo tiêu chí nhất định, thống kê (đếm, tính tổng), và đặc biệt là khả năng đọc/ghi dữ liệu ra file để đảm bảo tính bền vững của thông tin. Dự án không yêu cầu giao diện đồ họa phức tạp mà tập trung vào logic xử lý ở backend.

1.2. Phát biểu bài toán quản lý cửa hàng sách thực tế

Bài toán được phát biểu dựa trên hoạt động thực tế của một cửa hàng sách. Cửa hàng cần một hệ thống thông tin quản lý nhà sách để lưu trữ và xử lý dữ liệu. Các thực thể chính bao gồm: Nhân viên (mã, họ tên, SĐT, địa chỉ, hệ số lương), Khách hàng (mã, họ tên, địa chỉ, SĐT), Sách (mã, tên, số lượng, giá, tác giả) và Hóa đơn (mã, ngày lập, nhân viên bán, khách hàng mua, danh sách sách). Hệ thống phải cho phép thực hiện các thao tác quản lý dữ liệu cơ bản (CRUD), đọc/ghi file, sắp xếp, tìm kiếm và tính toán. Đây là nền tảng để xây dựng các lớp đối tượng và chức năng cho project quản lý bán sách.

II. Phân tích thách thức khi quản lý bán sách tại cửa hàng

Việc quản lý một cửa hàng sách theo phương pháp thủ công tồn tại nhiều thách thức và rủi ro. Ghi chép sổ sách bằng tay dễ dẫn đến sai sót, thất lạc dữ liệu và tốn nhiều thời gian. Việc tra cứu thông tin một cuốn sách cụ thể, kiểm tra lượng tồn kho, hay tìm kiếm lịch sử mua hàng của một khách hàng trở nên vô cùng chậm chạp và không hiệu quả. Khi quy mô cửa hàng mở rộng, số lượng đầu sách và giao dịch tăng lên, những khó khăn này càng trở nên nghiêm trọng. Quản lý kho sách thủ công không thể cung cấp số liệu tồn kho chính xác và kịp thời, dẫn đến tình trạng hết hàng mà không biết hoặc nhập thừa hàng tồn đọng. Tương tự, quản lý đơn hàng sách và thông tin khách hàng rời rạc khiến việc chăm sóc khách hàng và thực hiện các chương trình khuyến mãi trở nên bất khả thi. Do đó, việc xây dựng một phần mềm quản lý bán sách là giải pháp tất yếu để tự động hóa quy trình, giảm thiểu sai sót, nâng cao hiệu quả hoạt động và cung cấp dịch vụ tốt hơn cho khách hàng. Một hệ thống máy tính hóa giúp chuẩn hóa quy trình, đảm bảo tính toàn vẹn dữ liệu và cung cấp các báo cáo thống kê nhanh chóng, hỗ trợ ra quyết định kinh doanh.

2.1. Khó khăn trong quản lý kho sách và đơn hàng thủ công

Thao tác quản lý kho sách thủ công là một trong những thách thức lớn nhất. Nhân viên phải kiểm đếm bằng tay, cập nhật sổ sách liên tục, dễ gây nhầm lẫn giữa số lượng thực tế và số liệu trên giấy tờ. Việc này ảnh hưởng trực tiếp đến khả năng đáp ứng nhu cầu khách hàng. Tương tự, việc xử lý và quản lý đơn hàng sách bằng giấy tờ cũng rất phức tạp, khó theo dõi tình trạng đơn hàng, doanh thu và công nợ. Những hạn chế này là động lực chính để tiến hành phân tích thiết kế hệ thống bán sách tự động.

2.2. Yêu cầu xây dựng hệ thống thông tin quản lý nhà sách

Từ những thách thức trên, yêu cầu đặt ra cho hệ thống thông tin quản lý nhà sách là phải giải quyết được các vấn đề cốt lõi. Hệ thống cần có một cơ sở dữ liệu quản lý sách tập trung, cho phép cập nhật thông tin sách, tồn kho một cách chính xác. Các chức năng quản lý nhân viên, khách hàng phải được tích hợp để dễ dàng tra cứu và quản lý. Đặc biệt, hệ thống phải tự động hóa việc tạo và lưu trữ hóa đơn, liên kết thông tin từ các thực thể sách, khách hàng và nhân viên. Toàn bộ yêu cầu này là cơ sở cho việc thiết kế các lớp và chức năng trong báo cáo đồ án công nghệ phần mềm.

III. Phương pháp phân tích thiết kế hệ thống bán sách tối ưu

Để xây dựng một hệ thống hiệu quả, giai đoạn phân tích thiết kế hệ thống bán sách đóng vai trò cực kỳ quan trọng. Dựa trên các yêu cầu của bài toán, phương pháp tiếp cận hướng đối tượng được lựa chọn làm kim chỉ nam. Quá trình này bắt đầu bằng việc xác định các lớp (Class) chính. Tài liệu gốc đã xác định rõ các lớp cơ sở như Person, Sach, và các lớp kế thừa như NhanVien, KhachHang, cùng với các loại sách chuyên biệt như SGK, Tieuthuyet, Vanhoc. Việc sử dụng tính kế thừa (NhanVienKhachHang kế thừa từ Person) giúp tái sử dụng mã nguồn và tạo ra một cấu trúc logic, dễ bảo trì. Sơ đồ lớp (Class Diagram) là công cụ trực quan hóa mối quan hệ giữa các lớp này, thể hiện rõ các thuộc tính, phương thức và mối quan hệ kế thừa, tập hợp. Việc thiết kế các lớp quản lý danh sách như DSNhanVien, DSSach, DSKhachHang sử dụng ArrayList trong Java là một lựa chọn hợp lý để quản lý động một tập hợp các đối tượng. Cách tiếp cận này đảm bảo hệ thống có cấu trúc chặt chẽ, dễ dàng mở rộng và phản ánh đúng bản chất của các thực thể trong thế giới thực.

3.1. Xây dựng sơ đồ UML cho project quản lý bán sách

Sơ đồ lớp UML là công cụ không thể thiếu trong giai đoạn thiết kế. Sơ đồ UML quản lý bán sách trong báo cáo mô tả trực quan cấu trúc của hệ thống. Nó cho thấy lớp cha Person với các thuộc tính chung và hai lớp con NhanVien, KhachHang kế thừa và mở rộng. Tương tự, lớp Sach là lớp cơ sở cho các loại sách cụ thể. Sơ đồ cũng thể hiện mối quan hệ tập hợp giữa các lớp danh sách (ví dụ DSNhanVien chứa một danh sách các đối tượng NhanVien) và lớp HoaDon, vốn chứa thông tin về nhân viên, khách hàng và danh sách sách đã mua. Sơ đồ này giúp lập trình viên có cái nhìn tổng thể trước khi bắt tay vào viết source code quản lý cửa hàng sách.

3.2. Thiết kế cơ sở dữ liệu quản lý sách với sơ đồ ERD

Mặc dù dự án này sử dụng file để lưu trữ, việc thiết kế một sơ đồ ERD quản lý nhà sách (Entity-Relationship Diagram) vẫn rất hữu ích để hình dung cấu trúc dữ liệu logic. Sơ đồ ERD sẽ xác định các thực thể (Nhân Viên, Khách Hàng, Sách, Hóa Đơn), các thuộc tính của chúng và mối quan hệ (một-nhiều, nhiều-nhiều). Ví dụ, một Nhân Viên có thể tạo nhiều Hóa Đơn, một Hóa Đơn có thể chứa nhiều Sách. Thiết kế này là nền tảng quan trọng nếu trong tương lai muốn nâng cấp hệ thống sử dụng một hệ quản trị CSDL thực thụ như SQL Server cho quản lý sách.

IV. Bí quyết triển khai source code quản lý cửa hàng sách Java

Giai đoạn triển khai là quá trình chuyển hóa bản thiết kế thành mã nguồn có thể thực thi. Trong đề tài BTL LTHDT này, ngôn ngữ lập trình Java được sử dụng. Việc triển khai tuân thủ chặt chẽ thiết kế hướng đối tượng đã định sẵn. Mỗi lớp trong sơ đồ UML được hiện thực hóa thành một file .java. Ví dụ, lớp Person được tạo với các thuộc tính HoTen, DiaChi, SDT và các phương thức get, set, Nhap, Hien. Lớp NhanVien sử dụng từ khóa extends để kế thừa từ Person và bổ sung thêm các thuộc tính riêng như MaNV, HSL. Một điểm quan trọng trong source code quản lý cửa hàng sách là việc sử dụng ArrayList để tạo các lớp danh sách động, ví dụ ArrayList<NhanVien> lstNV. Các thuật toán xử lý nghiệp vụ chính như thêm, xóa, tìm kiếm được cài đặt trong các lớp danh sách này. Ví dụ, thuật toán tìm kiếm duyệt qua từng phần tử trong ArrayList để so sánh mã đối tượng, trong khi thuật toán xóa sử dụng phương thức remove() sẵn có. Việc triển khai các hàm đọc/ghi file sử dụng ObjectOutputStreamObjectInputStream giúp lưu và tải toàn bộ đối tượng ArrayList, đảm bảo tính toàn vẹn dữ liệu.

4.1. Cấu trúc các lớp đối tượng trong đề tài BTL C Java

Cấu trúc mã nguồn được tổ chức rõ ràng theo từng lớp. Lớp PersonSach đóng vai trò là các lớp cha, định nghĩa các thuộc tính và hành vi chung. Các lớp NhanVien, KhachHang, SGK, Tieuthuyet... là các lớp con, kế thừa và ghi đè (override) phương thức nếu cần. Các lớp DSNhanVien, DSKhachHang, DSSach, DSHoaDon đóng vai trò quản lý, chứa một ArrayList các đối tượng tương ứng và cung cấp các phương thức thao tác trên danh sách đó. Cuối cùng, lớp Main chứa hàm main() để chạy chương trình, tạo menu cho người dùng tương tác và điều phối các chức năng. Cấu trúc này giúp đề tài BTL C++ hay Java trở nên module hóa và dễ quản lý.

4.2. Mô tả các thuật toán xử lý nghiệp vụ chính của hệ thống

Các thuật toán cốt lõi được mô tả chi tiết trong báo cáo. Thuật toán sắp xếp sách sử dụng Collections.sort kết hợp với một Comparator tùy chỉnh để so sánh các đối tượng Sach dựa trên số lượng. Thuật toán đếm và tính tổng sử dụng vòng lặp for-each để duyệt qua danh sách, áp dụng điều kiện hoặc tính toán trên từng phần tử. Các thuật toán tìm kiếm và xóa đều dựa trên việc duyệt danh sách và so sánh mã định danh (MaNV, MaKH, MaSach) để xác định đúng đối tượng cần thao tác. Những thuật toán này là trái tim của chức năng hệ thống quản lý bán sách, đảm bảo chương trình hoạt động đúng theo yêu cầu nghiệp vụ.

V. Top chức năng cốt lõi của phần mềm quản lý bán sách LTHDT

Sản phẩm cuối cùng của bài tập lớn lập trình hướng đối tượng là một chương trình hoàn chỉnh với các chức năng thiết thực. Hệ thống được điều khiển thông qua một menu chính trong console, cho phép người dùng lựa chọn các đối tượng cần quản lý: Khách hàng, Nhân viên, Sách, và Hóa đơn. Mỗi mục trong menu lại dẫn đến một menu con với các tùy chọn chi tiết. Giao diện tuy đơn giản nhưng đáp ứng đầy đủ các yêu cầu nghiệp vụ. Người dùng có thể dễ dàng nhập một danh sách nhân viên mới, hiển thị thông tin toàn bộ sách trong kho, hay thêm một giao dịch hóa đơn. Đặc biệt, chức năng đọc/ghi file là một phần quan trọng, cho phép lưu lại toàn bộ trạng thái của hệ thống và khôi phục lại trong các phiên làm việc sau. Các chức năng thống kê như đếm số sách có giá trị cao hay tính tổng giá trị kho sách cung cấp thông tin hữu ích cho người quản lý. Đây là một hệ thống thông tin quản lý nhà sách thu nhỏ, thể hiện sự thành công trong việc áp dụng lý thuyết vào thực tiễn.

5.1. Chức năng quản lý nhân viên nhà sách và khách hàng

Module quản lý nhân viên nhà sách và khách hàng cho phép thực hiện các thao tác CRUD cơ bản. Người dùng có thể nhập danh sách nhân viên/khách hàng, hiển thị danh sách đã có, thêm một bản ghi mới, tìm kiếm một người cụ thể theo mã, và xóa thông tin khi cần thiết. Thông tin được quản lý bao gồm các thuộc tính cơ bản như họ tên, địa chỉ, số điện thoại và các thuộc tính riêng như mã nhân viên, hệ số lương. Đây là chức năng nền tảng cho mọi hoạt động của cửa hàng.

5.2. Chức năng quản lý đơn hàng sách và nghiệp vụ kho

Đây là module nghiệp vụ quan trọng nhất. Chức năng quản lý kho sách cho phép nhập mới các loại sách (tiểu thuyết, văn học, kỹ năng...), cập nhật số lượng, giá bán. Các tính năng nổi bật bao gồm sắp xếp sách theo số lượng, tìm kiếm sách theo tên, và các báo cáo nhanh như đếm số sách có giá trị trên một ngưỡng nhất định và tính tổng giá trị kho. Chức năng quản lý đơn hàng sách (thông qua quản lý Hóa đơn) cho phép tạo hóa đơn mới, ghi nhận thông tin giao dịch, liên kết đến nhân viên bán và khách hàng mua.

5.3. Giao diện phần mềm bán sách và các tính năng phụ trợ

Giao diện phần mềm bán sách được thiết kế dưới dạng menu text-based (console), đơn giản và dễ sử dụng. Người dùng tương tác bằng cách nhập các lựa chọn số. Các tính năng phụ trợ quan trọng là đọc và ghi file dữ liệu. Chức năng này giúp dữ liệu không bị mất sau khi tắt chương trình, đảm bảo tính liên tục trong quản lý. Đây là một bước mô phỏng việc lưu trữ dữ liệu vào cơ sở dữ liệu thực tế, là một yêu cầu không thể thiếu trong các báo cáo đồ án công nghệ phần mềm.

VI. Kết luận báo cáo đồ án và định hướng phát triển trong tương lai

Báo cáo BTL LTHDT về đề tài Quản lý bán sách đã trình bày một cách toàn diện quá trình xây dựng một ứng dụng phần mềm từ đầu. Dự án đã hoàn thành các mục tiêu đề ra: áp dụng thành công các nguyên lý của lập trình hướng đối tượng, xây dựng được một chương trình có đầy đủ các chức năng quản lý cơ bản và giải quyết được bài toán thực tế của một cửa hàng sách. Thông qua việc triển khai các lớp, sử dụng kế thừa, và cài đặt các thuật toán xử lý, sinh viên đã củng cố vững chắc kiến thức môn học. Sản phẩm là một phần mềm quản lý bán sách hoạt động ổn định, đáp ứng đúng yêu cầu của đề bài. Kết quả của bài tập lớn lập trình hướng đối tượng này là một minh chứng rõ ràng cho khả năng phân tích, thiết kế và lập trình của nhóm thực hiện. Đây là một nền tảng vững chắc để phát triển các dự án phức tạp hơn trong tương lai.

6.1. Đánh giá kết quả đạt được của bài tập lớn LTHDT

Kết quả đạt được của bài tập lớn LTHDT là rất tích cực. Hệ thống đã mô hình hóa thành công các đối tượng trong thực tế thành các lớp trong chương trình. Các chức năng chính như quản lý sách, nhân viên, khách hàng và hóa đơn đều hoạt động chính xác. Việc áp dụng các cấu trúc dữ liệu như ArrayList và các thuật toán tìm kiếm, sắp xếp đã cho thấy khả năng xử lý vấn đề của người lập trình. Dự án là một sản phẩm học tập hoàn chỉnh, có giá trị thực tiễn và là một tài liệu tham khảo tốt cho các đồ án quản lý nhà sách sau này.

6.2. Hướng phát triển phần mềm theo mô hình MVC và công nghệ mới

Để nâng cấp dự án, hướng phát triển trong tương lai có thể tập trung vào một số điểm. Thứ nhất, tái cấu trúc mã nguồn theo mô hình MVC (Model-View-Controller) để tách biệt lớp xử lý dữ liệu (Model), giao diện người dùng (View) và logic điều khiển (Controller), giúp hệ thống dễ bảo trì và mở rộng hơn. Thứ hai, thay thế việc lưu trữ bằng file bằng một hệ quản trị cơ sở dữ liệu thực sự như SQL Server cho quản lý sách hoặc MySQL để quản lý dữ liệu hiệu quả và an toàn hơn. Cuối cùng, có thể phát triển một giao diện phần mềm bán sách đồ họa (GUI) sử dụng Java Swing, JavaFX hoặc chuyển thành một ứng dụng web để thân thiện hơn với người dùng cuối.

18/12/2025

Trích đoạn nội dung tài liệu

VIỆN ĐẠI HỌC MỞ HÀ NỘI KHOA CÔNG NGHỆ THÔNG TIN ---------------------- BÁO CÁO BÀI TẬP LỚN MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNG ĐỀ SỐ LTHDT.1 ĐỀ TÀI: QUẢN LÝ BÁN SÁCH TẠI CỬA HÀNG SÁCH Nhóm thực hiện: Trương Thị Hồng Hạnh – 2310A06 Hồ Khánh Ly – 2310A06 Nguyễn Thị Linh Phương – 2310A06 Giảng viên hướng dẫn: Mai Thúy Hà Hà Nội – <2024> PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆN ĐÁNH HỌ VÀ TÊN CÔNG VIỆC GIÁ KẾT GHI CHÚ QUẢ Trương Thị Hồng - Xây dựng class Sach Hạnh - Xây dựng class SGK, Tieuthuyet,Vanhoc, Kynang, Kinhdi. - Xây dựng class DSSsach - Xây dựng class HoaDon - Xây dựng class DSHoaDon - Tổng hợp trình bày word. Hồ Khánh Ly - Xây dựng class Person - Xây dựng class KhachHang - Xây dựng class DSKhachHang - Phát biểu bài toán Nguyễn Thị Linh - Xây dựng class Phương NhanVien - Xây dựng class DSNhanVien - Xây dựng class Main Yêu cầu: - Mô tả chi tiết và đầy đủ nội dung làm BTL của từng sinh viên - Cho điểm đánh giá (0-10) đối với từng thành viên trong nhóm tại cột “Đánh giá kết quả” I. PHÁT BIỂU BÀI TOÁN Thực hiện xây dựng cơ sở dữ liệu bài toán “Quản lý bán hàng sách của cửa hàng bán sách”.

Mô tả hoạt động bán hàng của cửa hàng như sau:  Nhân viên: Cửa hàng có nhiều nhân viên, mỗi nhân viên trong cửa hàng lưu trữ lại thông tin: họ tên, mã nhân viên, số điện thoại, địa chỉ, hệ số lương.  Khách hàng: Mỗi khách hàng mua sách đều được lưu trữ lại thông tin: Mã khách hàng, Họ tên, địa chỉ, số điện thoại.  Sách: Cửa hàng có bán nhiều loại sách, mỗi quyển sách đều được phân biệt bởi: Mã sách, tên sách, số lượng sách, giá tiền, tác giả.  Hóa đơn: Mỗi hóa đơn được quản lý bởi: mã hóa đơn, ngày lập, phương thức thanh toán.

Các chức năng của bài toán: 1. Nhập dữ liệu 2. Hiển thị dữ liệu  Đọc file  Ghi file 3. Thêm bản ghi 4.

Sắp xếp bản ghi tăng/giảm dần 6. Đếm số bản ghi 7. Tìm kiếm bản ghi 8. Tính tổng II.

XÁC ĐỊNH SƠ ĐỒ LỚP CỦA BÀI TOÁN 1. Class Person  Thuộc tính: String Hoten, SĐT, Diachi  phương thức:  Constructor: Hàm tạo có đối số và hàm tạo không đối số  Getter, Setter: Phương thức get, set cho các thuộc tính kiểu private  Nhap: Nhập thông tin các thuộc tính  Hien: Hiện ra các thông tin 2. Class NhanVien kế thừa từ class Person  Thuộc tính: int MaNV, float HSL, LuongCoBan.  Phương thức:  Nhap: override nhap() ở class Person  Hien: override hien() ở class Person, hiện thông tin nhân viên và hệ số lương, lương của nhân viên 3.

Class KhachHang kế thừa từ class Person  Thuộc tính: String Hoten, Diachi, SĐT  Phương thức:  Nhap: override phương thức nhap() ở class Person, nhập thông tin khách hàng  Hien: override phương thức hien() ở class Person, hiển thị thông tin khách hàng 4. Class Sach  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan.  Phương thức:  nhapSach(): nhập thông tin sách  hienSach(): hiện thông tin sách 5. Class SGK  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan, MonHoc.

 Phương thức:  nhapSach(): nhập thông tin sách  hienSach(): hiện thông tin sách 6. Class Vanhoc  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan.  Phương thức:  nhapSach(): nhập thông tin sách 7. Class Tieuthuyet  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan.

 Phương thức:  nhapSach(): nhập thông tin sách  hienSach(): hiện thông tin sách 8. Class Kynang  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan.  Phương thức:  nhapSach(): nhập thông tin sách  hienSach(): hiện thông tin sách 9. Class Kinhdi  Thuộc tính: String TenSach, TacGia, int MaSach, SoLuong, float GiaBan.

 Phương thức:  nhapSach(): nhập thông tin sách  hienSach(): hiện thông tin sách 10.Class HoaDon  Thuộc tính: String MaHD, NgayLap, Nhanvien x, KhachHang y, DSSach z.  Phương thức:  Nhap: override nhap() ở class person  Hien: override hien() ở class person, hiện thông tin hóa đơn, mã nhân viên, mã khách hang và danh sách sách.Class DSNhanVien  Thuộc tính:  ArrayList<NhanVien> lstNV  Phương thức:  NhapDS(): Nhập danh sách nhân viên  HienDS(): Hiện danh sách nhân viên  Them(): Thêm nhân viên  Tim(): Tìm nhân viên theo mã nhân viên  Xoa(): Xóa nhân viên theo mã nhân viên 12.Class DSKhachHang  Thuộc tính:  ArrayList<KhachHang> lstKH  Phương thức:  NhapDS(): Nhập danh sách khách hàng  HienDS(): Hiện danh sách khách hàng  Them(): Thêm khách hàng  Tim(): Tìm khách hàng theo mã khách hàng  Xoa(): Xóa khách hàng theo mã khách hàng 13.Class DSSach  Thuộc tính:  ArrayList<Sach> lstSach  Phương thức:  NhapDS(): Nhập danh sách sách  HienDS(): Hiện danh sách sách  Them(): Thêm sách  Tim(): Tìm sách theo mã sách  Xoa(): Xóa sách theo mã sách  ghiFile(): Ghi file ArrayList<Sach> đã được nhập  docFile(): Đọc file ArrayList<Sach> 14.Class DSHoaDon  Thuộc tính:  ArrayList<HoaDon> lstHD  Phương thức:  NhapDS(): Nhập danh sách hóa đơn  HienDS(): Hiện danh sách hóa đơn  Them(): Thêm hóa đơn  Tim(): Tìm hóa đơn theo mã hóa đơn  Xoa(): Xóa hóa đơn theo mã hóa đơn  ghiFile(): Ghi file ArrayList<HoaDon> đã được nhập  docFile(): Đọc file ArrayList<HoaDon> Person - Hoten: String - Diachi: String - SĐT: String + Constructor() + get() +set() +nhap() + hien() DSHoaDon KhachHang -ArrayList<HoaDon> listHD - Hoten: String - Diachi: String - NhapDSHD() SDT: String - HienDSHD() +Them() + get() +Xoa() +set() +nhap() + Tim()NhanVien +ghiFile() + hien() - MaNV: int +docFile() - HSL: float - LuongCoBan: float +get() +set() +nhap() +hien() +tinhluong() DSNhanVien - ArrayList<NhanVien> listNV +NhapDSNV() +HienDSNV() +Them() +Xoa() + Tim() DSKhachHang - ArrayList<KhachHang> listKH HoaDon - NhapDSKH() - MaHD: int - HienDSKH() - NgayLap: String +Them() - PTTT: String +Xoa() - x: NhanVien + Tim() - y: KhachHang - z: DSSach - + get() +set() +nhap() + hien() DSSach -ArrayList<Sach> listSach - NhapDSTB() - HienDSTB() +Them() +Xoa() + Tim() +ghiFile() +docFile() SGK Sach - MaSach: int - MaSach: int - TenSach: - TenSach: String String - SoLuong: int - SoLuong: - GiaTien: float int - TacGia: String - GiaTien: + get() float +set() - TacGia: +nhap() String + hien() + get() + TinhTien() +set() +nhap() + hien() + TinhTien() Kynang Kinhdi Tieuthuyet Vanhoc - MaSach: - MaSach: - MaSach: - MaSach: int int int int - TenSach: - TenSach: - TenSach: - TenSach: String String String String - SoLuong: - SoLuong: - SoLuong: - SoLuong: int int int int - GiaTien: - GiaTien: - GiaTien: - GiaTien: float float float float - TacGia: - TacGia: - TacGia: - TacGia: String String String String + get() + get() + get() + get() +set() +set() +set() +set() +nhap() +nhap() +nhap() +nhap() + hien() + hien() + hien() + hien() + + + + TinhTien() TinhTien() TinhTien() TinhTien() III. MÔ TẢ THUẬT TOÁN – THAO TÁC  Xây dựng Menu quản lý 4 đối tượng là Khách Hàng, Nhân Viên, Sách và Hóa Đơn. Quản lý thông tin nhân viên, khách hàng, sách, hóa đơn Thuật toán:  Nhập thông tin nhân viên, khách hàng, sách, hóa đơn.

 Chỉnh sửa thông tin nhân viên, khách hàng, hóa đơn:  Nhập mã nhân viên, mã khách hàng, mã hóa đơn cần tìm để chỉnh sửa.  Thêm: Nhập vào thông tin đối tượng mới  Xóa: Trong ArrayList dùng phép remove  Tìm: Kiểm tra xem phần tử tại vị trí i có trùng với mnv, mkh, mhd cần tìm không. Nếu trùng, hiển thị thông tin của nhân viên và kết thúc thuật toán. Nếu không trùng, di chuyển đến phần tử tiếp theo và lặp lại quá trình cho đến khi tìm thấy hoặc hết danh sách.

Sắp xếp sách theo số lượng Thuật toán:  Sử dụng Collections Sort trong ArrayList<Sach>  Trong phương thức compare() của Comparator, hai đối tượng sách (t0 và t1) được so sánh dựa trên số lượng của chúng ( t0.getSL(), phương thức compare() trả về một số âm.getSL(), phương thức compare() trả về một số dương.getSL(), phương thức compare() trả về số 0.  Dựa vào kết quả trả về của compare(), phương thức sort() sẽ sắp xếp các phần tử trong danh sách listSach. Đếm số sách có số tiền lớn hơn 500 Thuật toán:  Khởi tạo biến đếm int dem =0, sử dụng vòng lặp for each để duyệt qua từng phần tử sách trong danh sách listSach.  Trong mỗi lần lặp, phương thức TinhTien() được gọi để tính toán giá tiền của sách.

 Nếu giá tiền của sách lớn hơn 500, biến dem sẽ tăng lên 1 và in ra số lượng sách đó.  Nếu không có sách nào thỏa mãn điều kiện, thông báo "Không có quyển nào có số tiền lớn hơn 500" sẽ được in ra. Tính tổng tiền sách Thuật toán:  Khởi tạo biến đếm int sum =0, sử dụng vòng lặp for each để duyệt qua từng phần tử sách trong danh sách listSach.  Trong mỗi lần lặp, phương thức TinhTien() được gọi để tính toán giá tiền của sách.

 Giá trị giá tiền của sách được cộng vào biến sum.  Sau khi duyệt qua tất cả các sách, tổng số tiền của tất cả các sách được in ra màn hình. KIỂM THỬ - LẬP BỘ TEST 1. Class Person package quanlybansach; import java.Serializable; import java.Scanner; public class Person implements Serializable{ private String HoTen; private String DiaChi; private String SDT; public Person(){ HoTen=""; DiaChi="";SDT=""; } public Person(String HoTen, String DiaChi, String SDT){ this.HoTen = HoTen; this.DiaChi = DiaChi; this.SDT = SDT; } public String getHoTen() { return HoTen; } public void setHoTen(String hoTen) { this.HoTen = hoTen; } public String getDiaChi() { return DiaChi; } public void setDiaChi(String diaChi) { this.DiaChi = diaChi; } public String getSDT(){ return SDT; } public void setSDT(String SDT){ this.SDT= SDT; } public void Nhap() { Scanner sc = new Scanner(System.print("\nNhap ho ten: "); HoTen = sc.print("Nhap dia chi: "); DiaChi = sc.print("Nhap so dien thoai: "); SDT= sc.

Class Sach package quanlybansach; import java.Serializable; import java.Scanner; public class Sach implements Serializable{ private String Masach; private String Tensach; private int SoLuong; private float GiaBan; private String TacGia; // Phương thức khởi tạo public Sach(){ } public Sach (String Masach, String Tensach, int SoLuong, float GiaBan, String TacGia){ this.Masach = Masach; this.Tensach = Tensach; this.SoLuong = SoLuong; this.GiaBan = GiaBan; this.TacGia = TacGia; } // Phương thức set public void setMasach(String Masach){ this.Masach = Masach; } public void setTensach(String Tensach){ this.Tensach = Tensach; } public void setSoLuong(int SoLuong){ this.SoLuong = SoLuong; } public void setGiaBan(float GiaBan){ this.GiaBan = GiaBan; } public void setTacGia(String TacGia){ this.TacGia = TacGia; } // Phương thức get public String getMasach(){ return Masach; } public String getTensach(){ return Tensach; } public int getSL(){ return SoLuong; } public float getGiaBan(){ return GiaBan; } public String getTacGia(){ return TacGia; } // Phương thức nhập public void nhapSach(){ System.println("Nhap thong tin sach"); Scanner sc = new Scanner(System.print("Nhap ma sach:"); Masach = sc.print("Nhap ten sach:"); Tensach = sc.print("Nhap so luong:"); SoLuong = sc.print("Nhap gia ban:"); GiaBan = sc.print("Nhap ten tac gia:"); TacGia = sc. Class SGK package quanlybansach; import java.Serializable; import java.

Nội dung được bảo vệ bản quyền — Tải xuống đầy đủ