Xác định các đối tượng cần quản lý 3 đối tượng cần quản lý: a, Đối tượng Sách : b, Đối tượng Nhân viên: c, Đối tượng Hóa đơn... Ghi ile danh sách Sách SACH.dat b, Đối tượng Nhân Vi ên5..
Trang 1MÔN C U Ấ TRÚC D Ữ LIỆU VÀ GIẢI THU T Ậ
ĐỀ TÀI: QUẢN LÝ BÁN SÁCH TẠI C A HÀNG Ử
Giảng viên hướng d n: Th.s ẫ Trị nh Thị Xuân
Hà Nội – 2023
Trang 2MỤC LỤC
I XÁC ĐỊNH BÀI TOÁN Error! Bookmark not defined
1 Phát bi u bài toán.ể Error! Bookmark not de ned
2 Xác định các đối tượng cần qu n lý.ả 5
a Đối tượng Sách 5
b Đối tượng Nhân viên 6
c Đố ượi t ng Hóa đơn ……….6
3 Các chức năng cần th c hiự ện. 7
a Đối tượng Sách 7
b Đối tượng Nhân viên 8
c Đố ượi t ng Hóa đơn……… 9
II XÁC ĐỊNH CTDL BIỂU DIỄN BÀI TOÁN 10
1 Mô t ả CTDL đượ ổ chức để lưu trữc t bài toán 10
a) Danh sách liên kết đơn 10
b) Danh sách liên kết đôi 11
2 Liệt kê Input, Output ng v i t ng chứ ớ ừ ức năng 12
III XÁC ĐỊNH CÁC THUẬT TOÁN Error! Bookmark not defined 1 Danh sách liên kết đơn Error! Bookmark not de ned 2 Danh sách liên k t képế 17
IV LẬP TRÌNH – CÀI ĐẶT 18
V KIỂM THỬ – LẬP BỘ TEST 50
Trang 3Phần I XÁC ĐỊNH BÀI TOÁN
2 Xác định c ác đối tượng cần quản lý
3 đối tượng cần quản lý:
a, Đối tượng Sách :
b, Đối tượng Nh ân viên:
c, Đối tượng H óa đơn
Trang 47 Ghi ile danh sách Sách (SACH.dat)
b, Đối tượng Nh ân Vi ên
5 Ghi ile nhân viên (NV.dat)
6 Đọc file nhân viên (NV.dat)
c, Đối tượng Hóa đơn
2 Hiện thông tin hóa đơn
5 Sắp xếp theo tổng số tiền của hóa đơn
7 Đọc file danh sách Hóa đơn(HOADON.dat)
Trang 5a, Danh sách liên k ết đơn
tử phía trước tới phần tử phía sau
//Khai báo c ấu tr úc danh sách liên k ết đơn
Trang 6b Danh sách liên k ết đôi
//Khai báo c u trúc danh sách liên k ấ ết đôi
Trang 7//Khởi tạo danh s ách liên k ết đ ôi
void CreateLinkedList_Sach(LinkedList_Sach& ds_Sach)
Output: Thông tin sách được lưu trữ trong máy tính
2 Hiển thị danh sách sách
Output: Danh sách thông tin sách
3 Sắp xếp s ách theo đơn gi ăng á t dần
Input: Thông tin danh sách sách
tăng dần của đơn giá
4 Sửa th ông tin sách theo mã sách nh ập từ b àn ph ím
Input: Mã sách
5 Xóa sách theo mã sách
Input: Mã sách
6 Ghi,đọc file danh sách Sách
Trang 8Input: Danh sách sách, tên ile
phím
7 Nhập danh sách nhân vi ên
số điện thoại của nhân viên
8 In danh sách nhân vi ên
9 Tìm ki ếm nh ân viên theo tên nhân vi ên
10 Xóa nhân viên theo mã nhân vi ên
Output: Danh sách nhân viên sau khi xóa
11 Ghi, đọc file Nh ân viên
Input: Danh sách nhân viên, tên ile
12 Nhập thông tin hóa đơn
số điện thoại, địa chỉ ố lượng, đơ, s n giá, thành tiền
13 Hiện thông tin hóa đơn
14 Xóa hóa đơn theo m ã hóa đơn
15 Tìm hóa đơn theo m ã hóa đơn
16 Sắp xếp tăng dần theo t ổng số tiền của h óa đơn
Output: Danh sách hóa đơn đã được sắp xếp theo tổng tiền thanh
Trang 917 Ghi,Đọc file danh sách hóa đơn
phím
1 Danh sách liên k ết đơn
1, Nh ập danh sách Nhân vi ên
a, Mô tả thuật toán:
- Tạo vòng l p for ch y t i = 0 i = n Vặ ạ ừ ới mỗ ần i l duy t, ệ nhập thêm một phần tử vào sau danh sách
- Nếu i > n thì k t thúc thuế ật toán
b,Sơ đồ thuật toán:
2, Hiển thị danh sách nhân viên:
b, Sơ đồ thuật toán:
Trang 103, Tìm ki ếm nh ân viên có tên là x v ới x nhập từ b àn ph ím
*Thu ật to án:
Bước 1: p = Q.Head;
Bước 3: Nếu p!=NULL thì trỏ p đến phần tử cần tìm
Ngược lại thì không tìm thấy phần tử cần tìm
4, Xóa nhân viên có mã nhân viên là x v ới x nhập từ b àn ph ím
a, Mô tả thuật toán:
- Tìm nhân vi p có tên ên nhân vi là x và ph n t ên ầ ử q đứng trước nó
- Nếu tìm thấy nhân vi có tên là x thì h y p ra kh i xâu ên ủ ỏ
+ Nếu p là ph n tầ ử cuối, thì q là ph n t ầ ử cuối m i ớ
+ Tách ph n t ra kh i danh sách, n i ph n t q v i ph n t sau p và ầ ử ỏ ố ầ ử ớ ầ ửgiải phóng ph n tầ ử p
- Ngượ ạc l i, thông báo không có tên nhân vi ên
b, Sơ đồ thu t toậ án:
Trang 115, Ghi, đọc f ile danh sách nhân viên:
*Thuật toán
Bước 1: Khai báo con trỏ tệp FILE*f
Bước 2: Khởi tạo danh sách rỗng
B ước 3 M : ở v ưu fià l le với tên được nhập từ bàn ph ím
Bước 4: Nếu file rỗng thì không thể đọc file
Nếu file khác rỗng th ạo một con trỏ p cì t ó kiểu getNode
Bước 5: Đọc từ file vào getNode p
Bước 6: Chèn p vào đầu danh sách Sách
Bước 7: Kiểm tra xem đ ới ã t cuối file hay chưa?
Nếu cuối file thì chuyển sang bước 8
Ngược lại, quay lại bước 5
Bước 8: óng ile Đ
6, Nhập danh sách hóa đơn
a, Mô tả thuật toán:
- Tạo vòng l p for ch y t i = 0 i = n Vặ ạ ừ ới mỗ ần i l duy t, ệ nhập thêm m t ph n t vào sau danh sách ộ ầ ử
- Nếu i > n thì k t thúc thu t toánế ậ
b, Sơ đồ thu t tậ oán:
Trang 127, Hiển thị danh sách hóa đơn
a, Mô t thu t toán:ả ậ duyệt từ đầu đến cuối danh sách, v i m i lớ ỗ ần duyệt, xuất
ra màn hình thông tin của hóa đơn
b, Sơ đồ thu t toậ án:
8, Xóa hóa đơn theo m ã hóa đơn
9, Tìm hóa đơn theo m ã hóa đơn
10, S ắp xếp tăng dần theo tổng số tiền h óa đơn
a Mô t thu t toán ả ậ
S d ng 2 con trử ụ ỏ p, q để duyệt và so sánh v i nhau ớ
- p = Q.HeadHD;
- Lặp trong khi (p!=NULL)
+ q = p -> next;
+ L p trong khi (q!= NULL) ặ
* N u giá tr c a p ->info.Tong ế ị ủ > q >info.Tong thì hoán đổi giá tr ị
-c a p và q ủ
* q = q -> next;
+ p = p -> next;
Trang 21cout << "Don Gia: "; cin >> x.DonGia;
}
//In sach
void PrintSach(Sach x)
{
cout << "\n" << setw(10) << x.MaSach;
cout << setw(20) << x.TenSach;
Trang 22cout << setw(15) << x.SoLuong;
cout << setw(15) << x.DonGia;
cout << "\n" << setw(10) << "Ma sach";
cout << setw(20) << "Ten sach";
cout << setw(15) << "So luong";
cout << setw(15) << "Don gia";
Trang 24cout << "\n" << setw(10) << "Ma sach";
cout << setw(20) << "Ten sach";
cout << setw(15) << "So luong";
cout << setw(15) << "Don gia";
Trang 25bool state = fals e;
cout << "\n Nhap ma sach can chinh sua: ";
cin.ignore(); getline(cin, maSach_Update);
for (p = l.pHead; p != NULL; p = p->next)
cout << "So Luong: "; cin >> p->info.SoLuong;
cout << "Don Gia: "; cin >> p->info.DonGia;
Trang 27//doc file sach
void ReadFile_Sach(FILE* f,LinkedList_Sach& l)
Trang 29//chen them nut moi vao dau danh sach
void chendau(ListNV& Q, NodeNV* new_e)
Trang 31//hien thong tin nhan vien
void hienNV(NV x)
{
cout << "\n" << setw(10) << x.maNV;
cout << setw(20) << x.tenNV;
cout << setw(10) << " \n manhanvien";
cout << setw(20) << " HotenNV";
cout << setw(20) << " SoDienThoai";
Trang 34cout << "\n Nhap ma nhan vien can xoa: ";
cin >> mnv;
NodeNV* p = Q.Head, * q = NULL;
while (p != NULL && p->info.maNV != mnv)
Trang 35// -HOA //
DON -// struct Thong tin sach da mua :Ten sach,so luong, don gia, thanh tien struct DichVu
Trang 39cout << setw(5) << x.tenSach << setw(20) << x.soLuong << setw(15)
<< x.donGia << setw(15) << x.thanhTien << endl;
}
// In hoa don
void InHoaDon(HoaDon x)
{
cout << "Ma hoa don: " << x.maHD << endl;
cout << "Ten khach hang: " << x.tenKH << endl;
Trang 40cout << "So dien thoai: " << x.soDT << endl;
cout << "Dia chi: " << x.diaChi << endl;
cout << setw(5) << "Ten sach" << setw(20) << "So luong" << setw(15)
<< "Don gia" << setw(15) << "Thanh tien" << endl;
for (int i = 1; i <= x.soLS; i++)
// Nhap ds hd theo node
// void NhapDsHoaDon(List &Q)
Trang 41// Hà m xoá hoá đơn theo maHD
void XoaHoaDon(List& Q, char maHoaDonCanXoa [10])
{
nodeHD* p = Q.Head, * q = NULL;
while (p != NULL && p->info.maHD != maHoaDonCanXoa)
Trang 42// Tim kiem hoa don
nodeHD* TimKiemHoaDon(List Q, char tkHD [10])
Trang 44cout << "Sap xep thanh cong!" << endl;
}
//Doc file danh sach hoa don
void DocFile_HoaDon(FILE* f, List& Q)
//Ghi file danh sach hoa don
void GhiFile_HoaDon(FILE* f, List Q)
Trang 45FILE* f = new FILE();
//khoi tao danh sach lien ket
cout << "\n 2.Nhan vien";
cout << "\n 3.Hoa don";
cout << "\n 0.Thoat.";
Trang 46cout << "\n 1.Nhap thong tin sach ";
cout << "\n 2.In thong tin sach ";
cout << "\n 3.Sap xep sach theo don gia tang dan "; cout << "\n 4.Tim sach theo ten sach ";
cout << "\n 5.Sua thong tin sach theo ma sach "; cout << "\n 6.Xoa sach theo ma sach ";
cout << "\n 7.Ghi file danh sach sach(SACH.dat) "; cout << "\n 8.Doc file danh sach sach(Sach.dat) "; cout << "\n 0.Quay lai.";
cout << "\n chon: "; cin >> chon;
Trang 47cout << "\n -NHAN VIEN - ";
cout << "\n 1.Nhap danh sach nhan vien ";
cout << "\n 2.In danh sach nhan vien ";
cout << "\n 3.Tim kiem nhan vien theo ";
cout << "\n 4.Xoa nhan vien theo ma nhan vien "; cout << "\n 5.Ghi file nhan vien ";
cout << "\n 6.Doc file nhan vien ";
cout << "\n 0.Quay lai.";
cout << "\n chon: ";
cin >> n;
switch (n)
Trang 48cin >> chon;
char maHoaDonCanXoa[10];
Trang 512, In danh sách Sách
3, Sắp xếp danh sách sách theo đơn giá tăng dần
4, Tìm sách theo tên sách
Trang 525, Sửa thông tin sách theo mã sách
6, Xoa sach theo ma sach
7, Ghi, c file đọ
Trang 531, Nh p thông tin nhân viậ ên
2, In thông tin nhân viên
3, Tim kiem nhan vien theo Ten
4, Xoa nhan vien theo ma nhan vien
Trang 545, Ghi, đọc file NV.dat“ ”
C, Đố ượng Hóa i t đơn
1, Nh p thông tin hóa ậ đơn
Trang 55552,In danh sách hóa đơn
Trang 563,Xóa hóa đơn theo mã hóa đơn
4,Tìm hóa đơn theo mã hóa đơn
5 Sắp xếp hóa đơn tăng dần theo t ng ti n ổ ề
6, Ghi, đọc file
Trang 5757