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ẢI
THUẬ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âm
Sinh 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ỆN
HỌ VÀ TÊN CÔ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 2trHiệ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ẩmSắ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ÁN 2.1 Các cấu trúc dữ liệu được tổ chức
//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ấyphầ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 NULL
- 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 17So dien thoai"<<setw(3)<<"|"<<setw(30)<<"PT thanh toan"<<endl;cout<<setfill('-');
So dien thoai"<<setw(3)<<"|"<<setw(30)<<"PT thanh toan"<<endl;cout<<setfill('-');
Trang 18//ptt la tien mat va GT nu
void DSKH_tm_gt(ListKH Q)
{
cout<<setw(7)<<"Ma KH"<<setw(3)<<"|"<<setw(30)<<"Ten KH"<<setw(3)<<"|"<<setw(5)<<"GT"<<setw(3)<<"|"<<setw(13)<<"
So dien thoai"<<setw(3)<<"|"<<setw(30)<<"PT thanh toan"<<endl;cout<<setfill('-');
cout<<setw(97)<<"-"<<endl;
cout<<setfill(' ');
for(NodeKH* c = Q.top; c != NULL; c = c->next){
if(c->data.thanhToan==2 && c->data.gioiTinh==2){ InKH(c->data);
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 22while (p != NULL)
{
x = p->info;
fileout << x.maSP << "\n" << x.tenSP << "\n" << x.loaiSP << "\n" << x.soLuongSP << "\n" << x.donGia << "\n";
filein>>x.donGia;
p = get_sp(x);
themcuoiSP(Qsp, p);
}
Trang 23//loai san pham
cout<<"Nhap so loai san pham khach mua: ";
Trang 24void inHD (HoaDon &x){
cout<<"\n\n HOA DON BAN HANG
Trang 27if(p->infor.tongTien > max){
max=p->infor.tongTien;m=p;
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