TRƯỜNG ĐẠI HỌC GIA ĐỊNHKHOA CÔNG NGHỆ THÔNG TIN MÔN: LẬP TRÌNH HƯỚNG ĐỐI TƯỢNGTÊN ĐỀ TÀI: PHẦN MỀM ĐỂ QUẢN LÝ HÓA ĐƠN CỦA CỬA HÀNG BÁN MỸ PHẨMTÊN GIẢNG VIÊN: Trần Hoài ThuậnSINH VIÊN THỰ
Tình hình nghiên cứu liên quan đến đề tài
- Bài báo cáo chuyên đề lập trình java “Xây dựng phần mềm bán hàng mỹ phẩm M ARRY PEACH” của Phùng Việt Hoàng và Hà Huy Hoàn đã cung cấp các kiến thức việc khảo sát vấn đề, phân tích và thiết kế hệ thống của một phần mềm quản lý.
Kết cấu của đề tài
- Chương 1: Tổng quan về ngôn ngữ Java và tổng quan về phần mềm quản lý hóa đơn bán hàng
- Chương 2: Thiết kế và xây dựng phần mềm quản lý hóa đơn bán hàng của cửa hàng mỹ phẩm
TỔNG QUAN VỀ PHẦM MỀM QUẢN LÝ HÓA ĐƠN BÁN HÀNG
Tổng quan về ngôn ngữ lập trình Java
Ngôn ngữ lập trình (tiếng Anh: programming language) là ngôn ngữ hình thức bao gồm một tập hợp các lệnh tạo ra nhiều loại đầu ra khác nhau Ngôn ngữ lập trình được sử dụng trong lập trình máy tính để thực hiện các thuật toán.
Java là một trong ngôn ngữ lập trình hướng đối tượng, nó được sử dụng trong việc phát triển các phần mềm, trang web, game, hay ứng dụng trên các thiết bị di động Java được khởi đầu bởi James Gosling và bạn ở Sun Microssystems vào năm 1991 Ban đầu, java ra đời nhầm mục đích viết phần mềm cho các sản phẩm gia dụng có tên là Oak Java chính thức được giới thiệu vào tháng 6/1995 từ đó nó đã trở thành một công cụ lập trình của các lập trình viên chuyên nghiệp
Khác biệt với các loại ngôn ngữ lập trình khác Java mang một màu sắc riêng Thay vì biên dịch mã nguồn thành mã máy hoặc thông dịch mã nguồn mới có thể chạy được, thì Java được thiết kế để biên dịch mã nguồn thành bytecode, sau đó bytecode sẽ được môi trường thực thi chạy Ngôn ngữ Java được viết ra với tiêu chí
“viết một lần, thực thi khắp nơi” Hiện tại, chương trình phần mềm viết bằng Java có thể khởi tạo trên mọi nền tảng khác nhau chỉ qua một môi trường thực thi, điều kiện là môi trường đó phải phù hợp hỗ trợ nền tảng đó
1.2 Một số tính chất của JavaJava được phát triển từ ngôn ngữ C/C++, nó kế thừa các thế mạnh từ nhiều cú pháp của các ngôn ngữ lập trình C và C++, vì vậy nếu bạn biết bất kỳ ngôn ngữ nào trong số này thì việc lập trình với ngôn ngữ Java sẽ trở nên dễ dàng hơn Java có một số đặc trưng tiêu biểu: đơn giản, hướng đối tượng, độc lập phần cứng và hệ điều hành, mạnh mẽ, bảo mật, phân tán đa luồng và linh động.
1.2.1 Đơn giản Java đã loại bỏ nhiều tính năng phức tạp và ít được sử dụng hơn Hơn nữa, tính năng tự động thu gom code thừa sẽ giúp loại bỏ các cá thể đối tượng không sử dụng và ngốn bộ nhớ mà không cần phải làm điều đó theo cách thủ công Java đã loại bỏ các đặc trưng phức tạp của ngôn ngữ C và C++ như:
-Loại bỏ thao tác con trỏ, thao tác định nghĩa chồng toán tử.
-Không cho phép đa kế thừa mà sử dụng các giao diện.
-Không sử dụng lệnh “goto” cũng như “file header”. -Loại bỏ cấu truc “struct” và “union”.
1.2.2 Hướng đối tượng Đối tượng là một trường dữ liệu với tập hợp các thuộc tính và hành vi riêng của nó Lập trình hướng đối tượng (OOP) tập trung vào các đối tượng mà các nhà phát triển muốn xử lý, thay vì logic được yêu cầu để thao tác
Java là một ngôn ngữ lập trình thuần hướng đối tượng, mọi chương trình viết trên Java đều phải được xây dựng trên các đối tượng Lập trình hướng đối tượng (OOP) là một mô hình lập trình tổ chức thiết kế phần mềm xung quanh dữ liệu, chứ không phải là các chức năng và logic
Loại lập trình này phù hợp với các dự án lớn, phức tạp và được cập nhật hoặc bảo trì thường xuyên Điều này bao gồm phần mềm sản xuất, thiết kế, ứng dụng di động.
1.2.3 Độc lập phần cứng và hệ điều hànhMã Java có thể chạy trên nhiều nền tảng, bao gồm Windows, Linux, macOS và các nền tảng khác Trình biên dịch mã Java và chuyển đổi nó thành mã byte, vìJava có thể hoạt động trên các hệ thống khác nhau, mã byte này không phụ thuộc vào nền tảng, tức là “Viết một lần, Chạy mọi nơi (WORA)”.
1.2.4 Tính mạnh mẽ Không có ngôn ngữ lập trình nào có thể đảm bảo độ tin cậy hoàn toàn như Java Bởi vì các trình biên dịch giúp Java có thể phát hiện ra nhiều lỗ hổng sẽ xuất hiện tại thời điểm thực thi trong các ngôn ngữ khác, ngôn ngữ lập trình này đặt giá trị cao trong việc kiểm tra lỗi sớm Một số kiểu cấu trúc lập trình dễ xảy ra lỗi phổ biến trong các ngôn ngữ khác đã bị loại bỏ trong Java
1.2.5 Tính bảo mật Hiện tại, Java hỗ trợ bảo mật rất tốt nhờ các thuật toán mã hóa như mã hóa một chiều (one way hashing) hay mã hóa công cộng (public key), v.v Nhờ đó mà khả năng bảo mật của ngôn ngữ này rất cao, giúp cho lập trình viên có thể yên tâm trong quá trình sử dụng để lập trình phần mềm, ứng dụng, v.v.
1.2.6 Đa luồng (Multiread) Đa luồng là một tính năng của Java tạo điều kiện cho việc thực thi hai hoặc nhiều phần của một chương trình cùng một lúc để tối đa hóa hiệu quả của CPU.
Một luồng là một thành phần của một chương trình Do đó, các chủ đề là các quy trình nhẹ trong các quy trình
1.2.7 Tính linh độngSo với ngôn ngữ lập trình C hay C++, Java có tính linh hoạt hơn Bởi ngôn ngữ Java được thiết kế để thích ứng với nhiều môi trường phát triển khác nhau.
Tổng quan về phần mềm quản lý hóa đơn bán hàng
Trong thời đại kinh tế thị trường như hiện nay, các hoạt động kinh doanh với nhiều loại hình khác nhau trở nên phát triển mạnh mẽ và để đáp ứng nhu cầu đó,đòi hỏi ngày càng cao của các tổ chức doanh nghiệp về vấn đề quản lý, việc xây dựng phần mềm là một giải pháp tốt nhất Sẽ góp phần rút ngắn thời gian làm việc,giảm thiểu chi phí và sức lao động và mang lại hiểu quả cao cho các cửa hàng và doanh nghiệp Một trong những mô hình đó là phần mềm hỗ trợ việc quản lý hóa đơn bán hàng tại các cửa hàng kinh doanh mỹ phẩm
Chắc lượng cuộc sống không ngừng phát triển, nhu cầu của con người cũng không ngừng tăng lên Trong số đó, nhu cầu về việc chăm sóc làm đẹp bản thân cũng ngày càng được ưa chuộng từ đó các cửa hàng mỹ phẩm đã trở thành ngành kinh doanh phát triển mạnh mẽ, nó dần trở nên phổ biến và trở thành địa điểm tiêu dùng không thể thiếu của mọi người Do vậy, để đảm bảo việc bán hàng có thể hoạt động trơn tru hơn, linh động hơn đòi hỏi các cửa hàng mỹ phẩm cần có một phần mềm để quản lý hóa đơn bán hàng, một phần mềm có khả năng xử lý nhanh chống, tối ưu hóa quá trình bán hàng, tính bảo mật cao, tiết kiệm thời gian cho cả khách hàng, nhân viên bán hàng, và người quản lí cửa hàng để việc quản lý các hóa đơn trở nên dễ dàng, thuận tiện hơn.
2.2 Các tính năng cần có trong phần mềm quản lý hóa đơn -Quản lý khách hàng: Phần mềm cho phép cửa hàng lưu trữ thông tin cá nhân và lịch sử mua hàng của khách hàng, nhật kí chăm sóc và mua hàng đảm bảo kế hoạch kinh doanh hiệu quả với tệp khách hàng trung bình Điều này giúp cửa hàng có thể tạo ra các chương trình khuyến mãi, thẻ thành viên và xây dựng mối quan hệ lâu dài với khách hàng.
-Quản lý sản phẩm: Cửa hàng bán mỹ phẩm có nhiều loại sản phẩm và thường xuyên cập nhật sản phẩm mới Phần mềm quản lý hóa đơn cần cho phép cập nhật thông tin về sản phẩm như tên, mô tả, giá cả, số lượng tồn kho và phân loại hàng hóa theo các đặc điểm thuộc tính Điều này giúp cửa hàng biết được sản phẩm nào đang còn hàng và sản phẩm nào đang hết hàng.
-Quản lý đơn hàng: Phần mềm nên có khả năng thiết lập, lưu trữ đơn hàng nhanh chóng và quản lý đơn hàng từ khách hàng Quản lý đơn hàng bao gồm việc tạo và in hóa đơn, theo dõi tiến trình đặt hàng, và cập nhật trạng thái đơn hàng (đang giao, đã giao, đã hủy, ).
-Quản lý kho hàng: Cửa hàng bán mỹ phẩm cần phải kiểm soát số lượng hàng tồn kho của mình Phần mềm quản lý hóa đơn cần có tính năng giúp cửa hàng kiểm soát lượng hàng tồn kho, cảnh báo khi còn ít hàng và tự động cập nhật số lượng hàng sau khi có giao dịch bán hàng.
-Báo cáo tài chính: Phần mềm quản lý hóa đơn nên cung cấp các báo cáo tài chính như doanh thu theo khoảng thời gian, lợi nhuận, giá vốn, báo cáo kho, nhân sự, kênh bán hàng, báo cáo trả hàng và thống kê các mặt hàng bán chạy Các báo cáo này giúp cửa hàng theo dõi hiệu quả kinh doanh và đưa ra quyết định dựa trên dữ liệu.
2.3 Những yêu cầu của một phần mềm quản lý hóa đơn bán hàng
- Phần mềm cần có giao diện đơn giản, dễ sử dụng cho cả người quản lý và nhân viên bán hàng.
- Khả năng xử lý dữ liệu một cách nhanh chóng, chính xác.
- Hệ thống dễ dàng kiểm soát, chỉnh sửa và nâng cấp theo đặc thù từng loại cửa hàng, doanh nghiệp.
- Phần mềm cần được kết nối và thích nghi với nhiều phương tiện, nền tảng, phần mềm khác.
- Có thể kết xuất nhiều báo cáo quản trị, hỗ trợ lãnh đạo trong việc theo dõi, đánh giá và đưa ra quyết định chiến lược.
- Dịch vụ hỗ trợ tận tình, chuyên nghiệp từ nhà cung cấp phần mềm.
- Phần mềm quản lý bán hàng thường cần được tích hợp với “phần mềm ERP” để việc quản lý doanh nghiệp được đồng bộ và thống nhất.
- Tích hợp trên mọi nền tảng, hệ điều hành.
- Công nghệ, tính năng cập nhật liên tục.
- Phần mềm chuẩn thuần Việt.
- Kết nối với máy POS tính tiền.
THIẾT KẾ VÀ XÂY DỰNG PHẦN MỀM QUẢN LÝ
Class đơn hàng
public class DonHang { private String maDonHang; private String ngayLapDonHang; private double giaTriDonHang; private KhachHang khachHang; private GoiSanPham goiSanPham; public DonHang(String maDonHang, String ngayLapHoaDon, KhachHang khachHang, GoiSanPham goiSanPham) { this.maDonHang = maDonHang; this.ngayLapDonHang = ngayLapHoaDon; this.khachHang = khachHang; this.goiSanPham = goiSanPham; this.giaTriDonHang = goiSanPham.tinhGiaSanPham();
} public String toString() { StringBuilder sb = new StringBuilder(); sb.append("Đơn hàng: ").append(maDonHang).append("
").append(ngayLapDonHang).append(" ").append(giaTriDonHang); sb.append("\nThông tin khách hàng: ").append(khachHang.toString()); sb.append("\nGói sản phẩm: ").append(goiSanPham.toString()); return sb.toString();
Class khách hàng
public class KhachHang { private String maKhachHang; private String ten; private String diaChi; private String soDienThoai; public KhachHang(String maKhachHang, String ten, String diaChi, String soDienThoai) { this.maKhachHang = maKhachHang; this.ten = ten; this.diaChi = diaChi; this.soDienThoai = soDienThoai;
} public String toString() { return maKhachHang + + ten + + diaChi + + soDienThoai;" " " " " "
Class sản phẩm
public abstract class GoiSanPham { protected String maSo; protected String loaiGoiSanPham; protected String tenGoiSanPham; protected double giaTriGoiSanPham; public GoiSanPham(String maSo, String loaiGoiSanPham, String tenGoiSanPham) { this.maSo = maSo; this.loaiGoiSanPham = loaiGoiSanPham; this.tenGoiSanPham = tenGoiSanPham;
} public abstract double tinhGiaSanPham(); public String toString() { return maSo + " " + loaiGoiSanPham + " " + tenGoiSanPham + " " + giaTriGoiSanPham;
Class nước hoa
public class NuocHoa { private String maSo; private String loaiNuocHoa; private double dungTich; private double donGia; public NuocHoa(String maSo, String loaiNuocHoa, double dungTich) { this.maSo = maSo; this.loaiNuocHoa = loaiNuocHoa; this.dungTich = dungTich; this.donGia = tinhGia();
} public double tinhGia() { (loaiNuocHoa.equals(if "Hoa hồng")) { return dungTich * 20;
} else if (loaiNuocHoa.equals("Hoa cúc")) { return dungTich * 15;
} } public String toString() { return maSo + " " + loaiNuocHoa + " " + dungTich + "ml" + " " + donGia;
Class sữa tắm
public class SuaTam { private String maSo; private String loaiSuaTam; private double dungTich; private double donGia; public SuaTam(String maSo, String loaiSuaTam, double dungTich) { this.maSo = maSo; this.loaiSuaTam = loaiSuaTam; this.dungTich = dungTich; this.donGia = tinhGia();
} public double tinhGia() { (loaiSuaTam.equals(if "Cho da khô")) { return dungTich * 20;
} else if (loaiSuaTam.equals("Cho da nhờn")) { return dungTich * 40;
} } public String toString() { return maSo + " " + loaiSuaTam + " " + dungTich + "ml" + " " + donGia;
Class dầu gọi
public class DauGoi { private String maSo; private String loaiDauGoi; private double dungTich; private double donGia; private int tieuChuanKiemDinh; public DauGoi(String maSo, String loaiDauGoi, double dungTich, int tieuChuanKiemDinh) { this.maSo = maSo; this.loaiDauGoi = loaiDauGoi; this.dungTich = dungTich; this.tieuChuanKiemDinh = tieuChuanKiemDinh; this.donGia = tinhGia();
} public double tinhGia() { (loaiDauGoi.equals(if "Cho tóc khô")) { return dungTich * 20;
} else if (loaiDauGoi.equals("Cho tóc dầu")) {
} else if (tieuChuanKiemDinh == 2) { return dungTich * 40;
} public String toString() { String tieuChuan = ;""
(tieuChuanKiemDinh == 1) {if tieuChuan = "Tiêu chuẩn 1"; } else if (tieuChuanKiemDinh == 2) { tieuChuan = "Tiêu chuẩn 2"; } return maSo + + loaiDauGoi + + tieuChuan + + dungTich +" " " " " "
Class romantic
public class GoiRomantic extends GoiSanPham { private NuocHoa nuocHoa; private DauGoi dauGoi; private SuaTam suaTam; public GoiRomantic(String maSo, String tenGoiSanPham, NuocHoa nuocHoa, DauGoi dauGoi, SuaTam suaTam) { super(maSo, "Romantic", tenGoiSanPham); this.nuocHoa = nuocHoa; this.dauGoi = dauGoi; this.suaTam = suaTam; this.giaTriGoiSanPham = tinhGiaSanPham();
} public double tinhGiaSanPham() { return nuocHoa.tinhGia() + dauGoi.tinhGia() + suaTam.tinhGia();
} public String toString() { StringBuilder sb = new StringBuilder(); sb.append(super.toString()); sb.append("\nNước hoa: ").append(nuocHoa.toString()); sb.append("\nDầu gội: ").append(dauGoi.toString()); sb.append("\nSữa tắm: ").append(suaTam.toString()); return sb.toString();
Class fresh-air
public class GoiFreshAir extends GoiSanPham { private DauGoi dauGoi; private NuocHoa nuocHoa; private SuaTam suaTam; public GoiFreshAir(String maSo, String tenGoiSanPham, DauGoi dauGoi, NuocHoa nuocHoa, SuaTam suaTam) { super(maSo, "Fresh-Air", tenGoiSanPham); this.dauGoi = dauGoi; this.nuocHoa = nuocHoa; this.suaTam = suaTam; this.giaTriGoiSanPham = tinhGiaSanPham(); public double tinhGiaSanPham() { return dauGoi.tinhGia() + nuocHoa.tinhGia() + suaTam.tinhGia();
} public String toString() { StringBuilder sb = new StringBuilder(); sb.append(super.toString()); sb.append("\nDầu gội: ").append(dauGoi.toString()); sb.append("\nNước hoa: ").append(nuocHoa.toString()); sb.append("\nSữa tắm: ").append(suaTam.toString()); return sb.toString();