Việc xây dựng chương trình quản lý bán hàng giúp các doanh nghiệp có thể quản lý được các thông tin về sản phẩm, khách hàng, đơn hàng, doanh thu, lợi nhuận, và các hoạt động kinh doanh k
Trang 1TRƯỜNG ĐẠ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 CẤU TRÚC DỮ LIỆU VÀ GIẢITHUẬT
Chủ đề 16: Xây dựng chương trình quản lý bán hàng
Giảng viên hướng dẫn : ThS Nguyễn Thị TâmSinh viên thực hiện : Mai Tuyết Anh - 2210A01
Hà Thị Anh Thư - 2210A04 Lại Văn Phố - 2110A05
Đinh Xuân Phương - 2210A01
Trang 2PHÂN CÔNG VÀ KẾ HOẠCH THỰC HIỆNHỌ VÀ TÊNCÔNG VIỆC
1 XÁC ĐỊNH BÀI TOÁN
Trang 31.1 Phát biểu bài toán
Chương trình quản lý bán hàng là một công cụ hữu ích giúp một cửa hàng có thể quản lý quá trình bán hàng một cách hiệu quả Việc xây dựng chương trình quản lý bán hàng giúp các doanh nghiệp có thể quản lý được các thông tin về sản phẩm, khách hàng, đơn hàng, doanh thu, lợi nhuận, và các hoạt động kinh doanh khác, từ đó giúp tăng hiệu quả kinh doanh và giảm thiểu rủi ro.
Quản lý bán hàng sẽ bao gồm các thông tin sau:
● NHÂN VIÊN trong cửa hàng có thông tin như mã nhân viên là một mã duy nhất, tên nhân viên, số điện thoại, ngày sinh, quê quán, hệ số lương, phụ cấp.
● KHÁCH HÀNG được quản lý sẽ bao gồm mã khách hàng là một mã duy nhất, tên khách hàng, giới tính, số điện thoại, phương thức thanh toán.
● SẢN PHẨM trong cửa hàng bao gồm mã sản phẩm là một mã duy nhất, tên sản phẩm, loại hàng, đơn giá, số lượng hàng trong kho.
● HOÁ ĐƠN của cửa hàng bao gồm các thông tin mã hoá đơn là một mã duy nhất, ngày lập hoá đơn, số lượng mua sản phẩm, tổng tiền.
Trang 4Nhân Viên
Nhập danh sách nhân viên In danh sách nhân viên
Lưu danh sách nhân viên vào File Đọc danh sách nhân viên từ File Thêm 1 nhân viên vào cuối danh sách Xóa phần tử đầu danh sách
Tìm 1 nhân viên theo mã nhân viên
Hiện thông tin nhân viên có mức lương trên 2tr Hiện thông tin nhân viên có mức lương cao nhất Đếm số nhân viên có trong danh sách
Sắp xếp theo thứ tự lương tăng dần
Trang 5Sửa thông tin 1 sản phẩm
Sắp xếp sản phẩm:
1 Tăng theo số lượng 2 Giảm theo số lượng
Tính tổng số lượng sản phẩm đang có Tìm sản phẩm có số lượng lớn nhất Tìm sản phẩm có số lượng nhỏ nhất
Hóa Đơn
Nhập danh sách hóa đơn In danh sách hóa đơn
Lưu danh sách hóa đơn vào File Đọc danh sách hóa đơn từ File Thêm hóa đơn:
1 Thêm hóa đơn vào đầu danh sách 2 Thêm hóa đơn vào cuối danh sách 3 Thêm hóa đơn sau hóa đơn chỉ định Xóa hóa đơn:
1 Xóa hóa đơn ở đầu danh sách 2 Xóa hóa đơn ở cuối danh sách 3 Xóa hóa đơn sau hóa đơn chỉ định 4 Xóa hóa đơn theo mã
Tìm kiếm một hóa đơn theo mã Sửa một hóa đơn theo mã Thống kê hóa đơn theo điều kiện:
1 Danh sách hóa đơn có tổng tiền trên 50 triệu 2 Lọc hóa đơn theo mã nhân viên
3 Lọc hóa đơn theo ngày lập
4 Danh sách hóa đơn có từ 2 đến 4 loại sản phẩm Sắp xếp hóa đơn tăng dần theo tổng tiền
Tính tổng/trung bình/đếm Hóa đơn có tổng tiền lớn nhất
Trang 62 XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN2.1 Các cấu trúc dữ liệu được tổ chức
a, Ngăn xếp (Stack): Khách hàng: struct KhachHang {
char maKH[5], sdt[13], tenKH[30]; int gioiTinh, thanhToan;
//khoi tao danh sach rong void initKH(ListKH &Q)
Trang 8- Bước 1: khởi tạo biến đếm = 0
- Bước 2: Kiểm tra danh sách còn phần tử và duyệt từ phần tử đầu đến phần tử cuối của danh sách
- Nếu p -> thanhToan == momo thì tăng biến đếm lên 1 - Bước 3: In ra màn hình giá trị biến đếm
Tìm kiếm theo mã: - Bước 1: k=Q.top
- Bước 2: Kiểm tra danh sách còn phần tử và duyệt từ phần tử đầu đến phần tử cuối của danh sách theo điều kiện đã cho, nếu k!
Trang 9=NULL thì k trỏ đến phần tử cần tìm, ngược lại không tìm thấy phần tử cần tìm
b Hàng đợi:
DeQueue(Xóa 1 nhân viên ở đầu danh sách):
Trang 10EnQueue(Thêm 1 nhân viên vào cuối danh sách):
Trang 11c DSLK Đôi:
Xóa cuối:
- Bắt đầu hàm xoacuoiSP: + Khởi động hàm xoacuoiSP - Kiểm tra danh sách rỗng:
+ Kiểm tra xem danh sách có phần tử nào hay không +Nếu danh sách rỗng, kết thúc hàm.
- Kiểm tra danh sách có một phần tử:
Trang 12+Kiểm tra xem danh sách có chỉ một phần tử hay không +Nếu có, xóa phần tử đó.
+Cập nhật con trỏ đầu và cuối danh sách +Kết thúc hàm.
- Xoá cuối của danh sách nhiều phần tử: + Nếu danh sách có nhiều hơn một phần tử:
+Di chuyển con trỏ tạm thời đến phần tử cuối cùng của danh sách +Cập nhật con trỏ cuối danh sách để trỏ đến phần tử trước phần tử cuối cùng.
+Xóa phần tử cuối cùng.
+Giải phóng bộ nhớ của phần tử cuối cùng.
+Cập nhật con trỏ next của phần tử trước phần tử cuối cùng thành
- Kiểm tra danh sách rỗng hoặc chỉ có một phần tử: + Kiểm tra xem danh sách có phần tử nào không.
+ Nếu danh sách rỗng hoặc chỉ có một phần tử, kết thúc hàm vì không cần sắp xếp.
- Sắp xếp danh sách nhiều phần tử:
+ Sử dụng thuật toán sắp xếp nổi bọt (bubble sort) hoặc một thuật toán sắp xếp khác.
+ Lặp qua danh sách và so sánh các phần tử liên tiếp + Nếu phần tử sau lớn hơn phần tử trước, hoán đổi chúng + Tiếp tục quá trình này cho đến khi danh sách được sắp xếp - Hiển thị danh sách sau khi sắp xếp:
+ Hiển thị danh sách sau khi đã sắp xếp theo yêu cầu của người dùng (tăng dần hoặc giảm dần).
Trang 13- Kết thúc hàm:
+ Kết thúc hàm sapxepSP.
d DSLK Đơn:
Sắp xếp:
Trang 14Xóa sau hóa đơn chỉ định:
Trang 15Thêm sau hóa đơn chỉ định:
Trang 16Xóa hóa đơn theo mã:
Trang 18for(NodeKH* c = Q.top; c != NULL; c = c->next){ if(c->data.thanhToan==2 && c->data.gioiTinh==2){
Trang 19if(p->data.thanhToan == 2 && p->data.gioiTinh==2)
2 Code Nhân Viên (Hàng đợi) // HAM XOA DAU DANH SACH void Enqueue(Queue &Q, Node *p)
// HAM XOA CUOI DANH SACH void Dequeue(Queue &Q, NhanVien &nv)
// SAPXEP THEO LUONG TANG DAN void SapxepTheoLuong(Queue &Q)
Trang 203 Code Sản Phẩm (Danh sách liên kết đôi) // tinh tong so luong san pham trong danh sach void sumSoLuongSP(listSP &Qsp)
sum += p->info.soLuongSP; // Cộng số lượng sản phẩm vào tổng p = p->next; // Chuyển đến phần tử kế tiếp trong danh sách }
cout << "Tong so luong san pham: " << sum << endl; }
// tim san pham co ma
void hienThongTinTimKiem(listSP &Qsp, int maSP)
Trang 21{
cout << "\nThong tin san pham:"; cout << "\nMa SP: " << p->info.maSP; cout << "\nTen SP: " << p->info.tenSP; cout << "\nLoai SP: " << p->info.loaiSP; cout << "\nSo Luong: " << p->info.soLuongSP; cout << "\nDon Gia: " << p->info.donGia; return;
}
p = p->next; }
// Nếu không tìm thấy sản phẩm với mã tương ứng cout << "\nKhong tim thay san pham co ma " << maSP; }
// doc ghi file san pham int soLuongSP(listSP &Qsp)
Trang 23//loai san pham
cout<<"Nhap so loai san pham khach mua: "; cin>>a.slSP;
cout<<"_Nhap danh sach san pham mua hang: "<<endl; for(int i = 0; i < a.slSP; i++){
Trang 24void inHD (HoaDon &x){
cout<<"\n\n HOA DON BAN HANG
Trang 27float sum = sumTienDSHD (ds); int count = countDSHD (ds);
Trang 294.2: Nhân Viên (Queue): 1 Enqueue() +Nhập thông tin:
Trang 31+Danh sách ban đầu:
+ Danh sách sau khi xóa:
4.3: Sản Phẩm (DSLK Đôi):
Trang 321 In danh sách sản phẩm:
2 Tính tổng số lượng sản phẩm:
3 Tìm sản phẩm theo mã:
Trang 334.4: Hóa Đơn (DSLK Đơn):
Trang 341 Nhập danh sách hóa đơn:
Trang 352 In danh sách hóa đơn:
2 Tổng giá trị tất cả hóa đơn:
Trang 363 Trung bình cộng tất cả các hóa đơn:
4 Hóa đơn có tổng tiền lớn nhất:
Trang 375 Sửa 1 hóa đơn theo mã:
Trang 386 Sắp xếp hóa đơn tăng dần theo tổng tiền