codebtl
codebtl
#include <iomanip>
#include <string>
#include <map>
#include <fstream>
#include <string>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
//
====================================================STRUCT=========================
=================================
struct Toy
{
int id;
string name;
double gia;
int soluong;
};
struct Employee
{
string MaNV;
int SDT;
string TenNV;
string ngaysinh;
string Que;
float HSL;
float Luong;
};
struct KhachHang
{
char MaKh[5];
string tenKH;
char SDT[12];
};
struct HoaDon
{
int idHD;
int ngayLap; // Chuyển đổi ngĂ y từ string sang kiểu int
string maNV;
int soLuongSP;
Toy dsDoChoi[20];
double giaTien;
};
//
==================================================NHANVIEN========================
============================
// Cấu trĂºc node danh sĂ¡ch liĂªn kết
struct NodeNV
{
Employee data;
NodeNV *next;
};
cin.ignore();
cout << "Nhap ten nhan vien: ";
getline(cin, emp.TenNV);
cin.ignore();
cout << "Nhap que quan: ";
getline(cin, emp.Que);
do
{
cout << "Nhap he so luong (>= 0): ";
cin >> emp.HSL;
if (emp.HSL < 0)
{
cout << "He so luong khong duoc am. Vui long nhap lai!\n";
}
} while (emp.HSL < 0);
file.close();
cout << "Da ghi danh sach nhan vien vao file " << filename << endl;
}
string line;
while (getline(file, line))
{
stringstream ss(line);
Employee emp;
string temp;
file.close();
cout << "Da doc danh sach nhan vien tu file " << filename << endl;
}
void menuNhanVien()
{
LinkedList ds;
int luaChon;
do
{
cout << "\n=== MENU ===\n";
cout << "1. Them nhan vien\n";
cout << "2. Hien thi danh sach\n";
cout << "3. Tim nhan vien theo ma\n";
cout << "4. Xoa nhan vien\n";
cout << "5. Sap xep danh sach theo ten\n";
cout << "6. Tinh tong luong cua tat ca nhan vien\n";
cout << "7. Tim nhan vien co luong cao nhat\n";
cout << "8. Thong ke so luong nhan vien theo que quan\n";
cout << "9. In danh sach nhan vien theo que quan\n";
cout << "10. Ghi danh sach nhan vien vao file \n";
cout << "11. Doc danh sach nhan vien tu file \n";
cout << "0. Thoat chuong trinh \n";
cout << "Lua chon cua ban: ";
cin >> luaChon;
switch (luaChon)
{
case 1:
{
Employee emp;
nhapThongTin(emp);
themNhanVien(ds, emp);
break;
}
case 2:
{
hienThiDanhSach(ds);
break;
}
case 3:
{
string maNV;
cout << "Nhap ma nhan vien can tim: ";
cin >> maNV;
NodeNV *found = timKiemNhanVien(ds, maNV);
if (found != NULL)
{
cout << "Thong tin nhan vien:\n";
hienThiThongTin(found->data);
}
else
{
cout << "Khong tim thay nhan vien voi ma: " << maNV << endl;
}
break;
}
case 4:
{
string maNV;
cout << "Nhap ma nhan vien can xoa: ";
cin >> maNV;
xoaNhanVien(ds, maNV);
break;
}
case 5:
{
sapXepTheoTen(ds);
break;
}
case 6:
{
cout << "Tong luong cua tat ca nhan vien: " << tinhTongLuong(ds) << endl;
break;
}
case 7:
{
Employee emp = timNhanVienLuongCaoNhat(ds);
if (!emp.MaNV.empty())
{
cout << "Nhan vien co luong cao nhat:\n";
hienThiThongTin(emp);
}
else
{
cout << "Danh sach trong." << endl;
}
break;
}
case 8:
{
map<string, int> thongKe = thongKeQueQuan(ds);
cout << "Thong ke so luong nhan vien theo que quan:\n";
for (const auto &kv : thongKe)
{
cout << kv.first << ": " << kv.second << " nhan vien\n";
}
break;
}
case 9:
{
string que;
cin.ignore();
cout << "Nhap que quan: ";
getline(cin, que);
inNhanVienTheoQue(ds, que);
break;
}
case 10:
{
ghiFile(ds, "nhanvien.txt");
cout << "Danh sach nhan vien da duoc ghi vĂ o file 'nhanvien.txt'";
break;
}
case 11:
{
docFile(ds, "nhanvien.txt");
break;
}
case 0:
{
cout << "Thoat chuong trinh." << endl;
break;
}
default:
{
cout << "Lua chon khong hop le. Vui long nhap lai!" << endl;
}
}
} while (luaChon != 11);
}
//
===================================================TOY=============================
========================
struct StackNode
{
Toy info;
struct StackNode *Next;
};
struct Stack
{
StackNode *top;
};
void initS(Stack &s)
{
s.top = NULL;
}
void printToy(Toy X)
{
cout << X.id << " - " << X.name << " - " << X.soluong << " - " << X.gia << endl;
}
bool isEmpty(Stack s)
{
return s.top == NULL;
}
void SumPrice(Stack s)
{
double Sum = 0;
for (StackNode *k = s.top; k != NULL; k = k->Next)
{
Sum += k->info.gia;
}
cout << "Tong gia cua do choi la: " << Sum << endl;
}
void Thongke(Stack s)
{
int count = 0;
for (StackNode *k = s.top; k != NULL; k = k->Next)
{
if (k->info.gia > 1000000)
{
count++;
printToy(k->info);
}
}
cout << "Co " << count << " do choi co gia lon hon 1.000.000" << endl;
}
fileout.close();
cout << "Danh sach do choi da duoc ghi vao tep Dochoi.TXT\n";
}
while (!filein.eof())
{
Toy toy = readToy(filein);
if (filein.fail())
break;
push(s, toy);
}
filein.close();
for (StackNode *k = s.top; k != NULL; k = k->Next)
{
printToy(k->info);
}
cout << "Danh sach do choi da duoc doc tu tep Dochoi.TXT\n";
}
void menuToy()
{
Stack s;
initS(s);
int choice;
do
{
cout << "\nMenu Quan Ly Do Choi:\n";
cout << "1. Nhap thong tin do choi\n";
cout << "2. In danh sach do choi\n";
cout << "3. Tim do choi theo ten\n";
cout << "4. Tinh tong gia do choi\n";
cout << "5. Thong ke do choi co gia lon hon 1.000.000\n";
cout << "6. Ghi danh sach do choi ra tep\n";
cout << "7. Doc danh sach do choi tu tep\n";
cout << "8. Thoat\n";
cout << "Chon thao tac: ";
cin >> choice;
cin.ignore();
switch (choice)
{
case 1:
{
Toy newToy;
EnterToy(newToy);
push(s, newToy);
break;
}
case 2:
for (StackNode *k = s.top; k != NULL; k = k->Next)
{
printToy(k->info);
}
break;
case 3:
{
string name;
cout << "Nhap ten do choi can tim: ";
cin.ignore();
getline(cin, name);
search(s, name);
break;
}
case 4:
SumPrice(s);
break;
case 5:
Thongke(s);
break;
case 6:
writeToyListToFile(s);
break;
case 7:
readToyListFromFile(s);
break;
case 8:
cout << "Thoat chuong trinh.\n";
break;
default:
cout << "Lua chon khong hop le. Vui long chon lai.\n";
break;
}
} while (choice != 8);
}
//
=====================================================HOADON======================
======================================
struct TreeNode
{
HoaDon data;
TreeNode *left;
TreeNode *right;
};
void inCay(TREE t)
{
if (t != nullptr)
{
inCay(t->left);
hienThiHoaDon(t->data);
inCay(t->right);
}
}
int idCanXoa;
cin.ignore();
cout << "Nhap ID san pham can xoa: ";
cin >> idCanXoa;
int viTriCanXoa = -1;
for (int i = 0; i < t->data.soLuongSP; i++)
{
if (t->data.dsDoChoi[i].id == idCanXoa)
{
viTriCanXoa = i;
break;
}
}
if (viTriCanXoa == -1)
{
cout << "Khong tim thay san pham trong hoa don !";
return;
}
t->data.soLuongSP--;
}
// Ghi thĂ´ng tin từng sản phẩm trong hĂ³a đơn vĂ o file
for (int i = 0; i < t->data.soLuongSP; i++)
{
outFile << t->data.dsDoChoi[i].id << " "
<< t->data.dsDoChoi[i].name << " "
<< t->data.dsDoChoi[i].soluong << " "
<< t->data.dsDoChoi[i].gia << "\n";
}
// Äệ quy ghi dữ liệu cho cĂ¡c nĂºt con trong cĂ¢y
luuHoaDonRaFile(t->left, outFile);
luuHoaDonRaFile(t->right, outFile);
}
}
outFile.close();
cout << "Da luu danh sach hoa don vao file.\n";
}
HoaDon hoaDon;
while (inFile >> hoaDon.idHD) // Äá»c id hoa don đầu tiĂªn
{
inFile >> hoaDon.ngayLap >> hoaDon.maNV >> hoaDon.soLuongSP >> hoaDon.giaTien;
inFile.close();
cout << "Da doc danh sach hoa don tu file.\n";
}
void menuHoaDon()
{
TREE t;
KhoiTaoCay(t);
int luaChon;
do
{
cout << "\n=== QUAN LY HOA DON ===\n";
cout << "1. Them hoa don\n";
cout << "2. In danh sach hoa don\n";
cout << "3. Them do choi vao hoa don\n";
cout << "4. Xoa san pham trong hoa don\n";
cout << "5. Hien thi hoa don giam dan theo thanh tien\n";
cout << "6. Tong cac hoa don\n";
cout << "7. Thong ke hoa don tren 1.000.000\n";
cout << "8. Luu danh sach hoa don vao file\n";
cout << "9. Doc danh sach hoa don tu file\n";
cout << "0. Thoat\n";
cout << "Nhap lua chon: ";
cin >> luaChon;
switch (luaChon)
{
case 1:
{
HoaDon hd;
nhapHoaDon(hd);
themHoaDonVaoCay(t, hd);
cout << "Da them hoa don vao cay.\n";
break;
}
case 2:
{
cout << "Danh sach hoa don:\n";
inCay(t);
break;
}
case 3:
{
int idHDCanTim;
cout << "Nhap ID hoa don can tim: ";
cin >> idHDCanTim;
TreeNode *node = timHoaDon(t, idHDCanTim);
if (node != nullptr)
{
themPhanTuVaoHoaDon(node->data);
}
else
{
cout << "Khong tim thay hoa don co ID: " << idHDCanTim << ".\n";
}
break;
}
case 4:
{
int idHDCanTim;
cout << "Nhap ID hoa don can tim: ";
cin >> idHDCanTim;
TreeNode *node = timHoaDon(t, idHDCanTim);
if (node != nullptr)
{
xoaPhanTuKhoiHoaDon(node);
}
else
{
cout << "Khong tim thay hoa don co ID: " << idHDCanTim << ".\n";
}
break;
}
case 5:
{
cout << "Danh sach hoa don giam dan theo tong tien:\n";
hienThiDSHoaDonGiamDan(t);
break;
}
case 6:
{
cout << "Tong gia tri cac hoa don: " << tongHoaDon(t) << "\n";
break;
}
case 7:
{
cout << "Danh sach hoa don co gia tri tren 1.000.000:\n";
thongKeHoaDon(t);
break;
}
case 8:
{
luuDanhSachHoaDonVaoFile(t, "hoadon.txt");
break;
}
case 9:
{
docDanhSachHoaDonTuFile(t, "hoadon.txt");
break;
}
case 0:
cout << "Thoat chuong trinh.\n";
break;
default:
cout << "Lua chon khong hop le! Vui long thu lai.\n";
break;
}
} while (luaChon != 0);
}
//
===================================================KHACHHANG=====================
=======================================
struct Node
{
KhachHang data;
Node *next;
Node *prev;
};
struct DoublyLinkedList
{
Node *head;
Node *tail;
string line;
while (getline(file, line))
{
size_t pos1 = line.find(',');
size_t pos2 = line.find(',', pos1 + 1);
addLast(kh);
}
}
file.close();
}
};
void menuKhachHang()
{
DoublyLinkedList danhSach;
int choice;
KhachHang kh;
do
{
cout << "\n===== Menu =====\n";
cout << "1. Nhap danh sach khach hang\n";
cout << "2. Hien danh sach khach hang\n";
cout << "3. Luu danh sach vao file\n";
cout << "4. Doc danh sach tu file\n";
cout << "5. Them khach hang vao dau danh sach\n";
cout << "6. Them khach hang vao cuoi danh sach\n";
cout << "7. Tim kiem khach hang theo ten\n";
cout << "8. Xoa khach hang o dau danh sach\n";
cout << "9. Xoa khach hang o cuoi danh sach\n";
cout << "10. Sap xep danh sach khach hang theo ten\n";
cout << "0. Thoat\n";
cout << "Chon chuc nang: ";
cin >> choice;
cin.ignore(); // Xu ly newline sau khi nhap so
switch (choice)
{
case 1:
nhapKhachHang(kh);
if (choice == 1 || choice == 6)
danhSach.addLast(kh);
else
danhSach.addFirst(kh);
break;
case 2:
danhSach.display();
break;
case 3:
danhSach.saveToFile("khachhang.txt");
cout << "Danh sach da duoc luu vao file khachhang.txt\n";
break;
case 4:
danhSach.loadFromFile("khachhang.txt");
cout << "Danh sach da duoc doc tu file khachhang.txt\n";
break;
case 5:
// Them khach hang vao dau danh sach
cout << "Nhap ma khach hang (4 ky tu): ";
cin.getline(kh.MaKh, sizeof(kh.MaKh));
cout << "Nhap ten khach hang: ";
getline(cin, kh.tenKH);
cout << "Nhap so dien thoai: ";
cin.getline(kh.SDT, sizeof(kh.SDT));
danhSach.addFirst(kh);
break;
case 6:
// Them khach hang vao cuoi danh sach
cout << "Nhap ma khach hang (4 ky tu): ";
cin.getline(kh.MaKh, sizeof(kh.MaKh));
cout << "Nhap ten khach hang: ";
getline(cin, kh.tenKH);
cout << "Nhap so dien thoai: ";
cin.getline(kh.SDT, sizeof(kh.SDT));
danhSach.addLast(kh);
break;
case 7:
cout << "Nhap ten khach hang can tim: ";
getline(cin, kh.tenKH);
if (Node *found = danhSach.searchByName(kh.tenKH))
{
cout << "Khach hang tim thay: Ma khach hang: " << found->data.MaKh
<< ", Ten khach hang: " << found->data.tenKH
<< ", So dien thoai: " << found->data.SDT << endl;
}
else
{
cout << "Khong tim thay khach hang voi ten " << kh.tenKH << endl;
}
break;
case 8:
danhSach.deleteFirst();
cout << "Da xoa khach hang o dau danh sach.\n";
break;
case 9:
danhSach.deleteLast();
cout << "Da xoa khach hang o cuoi danh sach.\n";
break;
case 10:
danhSach.sortByName();
cout << "Danh sach da duoc sap xep theo ten.\n";
break;
case 0:
cout << "Thoat chuong trinh.\n";
break;
default:
cout << "Chuc nang khong hop le. Vui long chon lai.\n";
}
} while (choice != 0);
}
//
=======================================================MENU=======================
===================================
void menuChinh()
{
int choice;
do
{
cout << "\n===== MENU CHUNG =====\n";
cout << "1. Quan ly khach hang\n";
cout << "2. Quan ly hoa don\n";
cout << "3. Quan ly do choi\n";
cout << "4. Quan ly nhan vien\n";
cout << "0. Thoat\n";
cout << "Chon chuc nang: ";
cin >> choice;
switch (choice)
{
case 1:
menuKhachHang();
break;
case 2:
menuHoaDon();
break;
case 3:
menuToy();
break;
case 4:
menuNhanVien();
break;
case 0:
cout << "Thoat chuong trinh.\n";
break;
default:
cout << "Lua chon khong hop le! Vui long chon lai.\n";
break;
}
} while (choice != 0);
}
int main()
{
menuChinh(); // Gá»i hĂ m menu chĂnh
return 0;
}