mình có 1 bài tập về oop c++ quản lí danh sách hóa đơn của khách hàng, mình bị kẹt phần in ra danh sách đơn hàng mỗi hóa đơn của khách.
Và đây là code của mình:
#include<bits/stdc++.h>
using namespace std;
class Hang{
private:
string idHang;
string nameHang;
string nsx;
public:
Hang(){
}
Hang(string idHang,string nameHang,string nsx): idHang(idHang),nameHang(nameHang),nsx(nsx){}
void nhap(){
cout<<"Nhap ma hang: ";
std::getline(cin,idHang);
cout<<"Nhap ten hang: ";
std::getline(cin,nameHang);
cout<<"Nhap nha san xuat: ";
std::getline(cin,nsx);
}
string getIdHang(){
return idHang;
}
string getNamHang(){
return nameHang;
}
string getNsx(){
return nsx;
}
void display(){
cout<<setw(20)<<left<<getIdHang()<<setw(20)<<left<<getNamHang()<<setw(20)<<left<<getNsx()<<endl;
}
};
class KhachHang{
private:
string maKH;
string nameKH;
string city;
string ghiChu;
public:
KhachHang(){
}
KhachHang(string maKH,string nameKH,string city,string ghiChu): maKH(maKH),nameKH(nameKH),city(city),ghiChu(ghiChu){}
void nhap(){
cout<<"Nhap ma khach hang: ";
std::getline(cin,maKH);
cout<<"Nhap ten khach hang: ";
std::getline(cin,nameKH);
cout<<"Nhap dia chi khach hang: ";
std::getline(cin,city);
cout<<"Nhap ghi chu khach hang: ";
std::getline(cin,ghiChu);
}
string getMaKH(){
return maKH;
}
string getNameKH(){
return nameKH;
}
string getCity(){
return city;
}
string getGhiChu(){
return ghiChu;
}
void display(){
cout<<setw(20)<<left<<getMaKH()<<setw(20)<<left<<getNameKH()<<setw(20)<<left<<getCity()<<setw(20)<<left<<getGhiChu()<<endl;
}
};
class HoaDon: public KhachHang, public Hang{
private:
string maHoadon;
string ngayHoaDon;
KhachHang khach;
Hang hang;
int soLuongHang_1;
public:
HoaDon(){
}
HoaDon(string maHoadon,string ngayHoaDon,int soLuongHang_1):soLuongHang_1(soLuongHang_1),maHoadon(maHoadon),ngayHoaDon(ngayHoaDon){}
HoaDon(string maHoadon,string ngayHoaDon,string maKH,string nameKH,string city,string ghiChu,string idHang,string nameHang,string nsx)
: maHoadon(maHoadon),ngayHoaDon(ngayHoaDon),KhachHang(maKH,nameKH,city,ghiChu),Hang(idHang,nameHang,nsx){}
HoaDon(KhachHang khach,Hang hang): khach(khach), hang(hang){}
void nhap(){
cout<<"Nhap ma hoa don: ";
std::getline(cin,maHoadon);
cout<<"Nhap ngay hoa don: ";
std::getline(cin,ngayHoaDon);
cout<<"Nhap so luong hang muon mua: ";
cin>>soLuongHang_1;
cin.ignore();
}
string getMaHoaDon(){
return maHoadon;
}
string getNgayHoaDon(){
return ngayHoaDon;
}
int getSoLuongHang_1(){
return soLuongHang_1;
}
KhachHang getKhach(){
return khach;
}
Hang getHang(){
return hang;
}
};
class HoaDon_premium: public HoaDon{
private:
string maKH_1;
int soHoaDon_khachHang;
HoaDon A;
vector<HoaDon> list_hoa_don;
public:
HoaDon_premium(){
}
HoaDon_premium(string maKH_1,int soHoaDon_khachHang,string maHoadon,string ngayHoaDon,string maKH,string nameKH,string city,string ghiChu,string idHang,string nameHang,string nsx)
: soHoaDon_khachHang(soHoaDon_khachHang),maKH_1(maKH_1),HoaDon(maHoadon,ngayHoaDon,maKH,nameKH,city,ghiChu,idHang,nameHang,nsx){ }
HoaDon_premium(vector<HoaDon> list_hoa_don,string maHoadon,string ngayHoaDon,int soLuongHang,string maKH_1)
: HoaDon(maHoadon,ngayHoaDon,soLuongHang),list_hoa_don(list_hoa_don),maKH_1(maKH_1){}
void nhap(){
cout<<"Nhap ma khach hang mua hang: ";
std::getline(cin,maKH_1);
cout<<"Nhap so hoa don: ";
cin>>soHoaDon_khachHang;
cin.ignore();
}
string getMaKH(){
return maKH_1;
}
int getSoLuongHang(){
return soHoaDon_khachHang;
}
HoaDon getHoaDon(){
return A;
}
void AddHang_Khach_Hang(HoaDon a){
vector<HoaDon> b;
b.push_back(a);
}
HoaDon getds_Hoa_don(vector<HoaDon> list_hoa_don,int m,string n){
for(int i=m;i<list_hoa_don.size();i++){
if(n==list_hoa_don[i].getKhach().getMaKH()){
HoaDon a=list_hoa_don[i];
return a;
}
else{
HoaDon b=list_hoa_don[i];
return b;
}
}
}
};
void xuat_ds_Hoa_Don(vector<HoaDon_premium> list,vector<HoaDon> list_hang,string m){
int z=0;
for(int i=0;i<list.size();i++){
if(m==list[i].getMaKH()){ // so sánh với mã khách trong list hóa đơn
cout<<"Don hang thu "<<z+1<<":\n";
HoaDon_premium a=list[i];
cout<<"Ma hoa don: "<<setw(30)<<left<<a.getMaHoaDon()<<setw(10)<<left<<"Ngay hoa don: "<<a.getNgayHoaDon()<<endl;
cout<<"Danh sach don hang:\n";
cout<<setw(10)<<left<<"Ma hang"
<<setw(20)<<left<<"Ten hang"<<setw(20)<<left<<"Nha san xuat"<<endl;
for(int j=0;j<a.getSoLuongHang_1();j++){
int x=0;
for(int k=j;k<list_hang.size();k++){
if(m==list_hang[k].getKhach().getMaKH()){ // so sánh với mã khách trong list đơn hàng
HoaDon b;
b=list_hang[k];
cout<<setw(10)<<left<<b.getHang().getIdHang()
<<setw(20)<<left<<b.getHang().getNamHang()<<setw(20)<<left<<b.getHang().getNsx()<<endl;
x++; // x=0 sẽ tăng dần sau mỗi lần xuất ra 1 đơn hàng và sẽ so sánh với số lượng đơn hàng của mỗi hóa đơn
if(x>a.getSoLuongHang_1()-1){
reverse(list_hang.begin(),list_hang.end()); /* nếu số lượng đơn hàng xuất ra đã đủ thì sẽ đảo ngược lại list đơn hàng
và break; */
break;
}
}
}
}
z++;
}
}
}
int main(){
Hang A;
KhachHang B;
HoaDon_premium C;
HoaDon D;
vector<Hang> hang_1;
vector<HoaDon> listDs_Hang; // lưu danh sách hàng
vector<KhachHang> khach_hang_1; // lưu danh sách khách hàng
vector<HoaDon_premium> List_HoaDon; // lưu danh sách hóa đơn
// NHẬP HÀNG HÓA
int n;
cout<<"Nhap so luong hang hoa: ";
cin>>n;
cin.ignore();
for(int i=1;i<=n;i++){
cout<<"Nhap hang hoa thu "<<i<<" : \n";
A.nhap();
hang_1.push_back(A);
}
// IN HÀNG HÓA
cout<<setw(10)<<left<<"STT"<<setw(20)<<left<<"Ma hang"<<setw(20)<<left<<"Ten hang"<<setw(20)<<left<<"Nha san xuat"<<endl;
for(int i=0;i<hang_1.size();i++){
cout<<setw(10)<<left<<i+1;
hang_1[i].display();
}
// NHẬP KHÁCH HÀNG
int x;
cout<<"Nhap so luong khach hang: ";
cin>>x;
cin.ignore();
for(int i=1;i<=x;i++){
cout<<"Nhap khach hang thu "<<i<<": \n";
B.nhap();
khach_hang_1.push_back(B);
}
// IN KHÁCH HÀNG
cout<<setw(10)<<left<<"STT"<<setw(20)<<left<<"Ma khach hang"<<setw(20)<<left<<"Ten khach hang"<<setw(20)<<left<<"Que quan"<<setw(20)<<left<<"Ghi chu"<<endl;
for(int i=0;i<khach_hang_1.size();i++){
cout<<setw(10)<<left<<i+1;
khach_hang_1[i].display();
}
string ma_hang_hoa; // mã hàng hóa cần nhập vào danh sách đơn hàng
for(int i=0;i<khach_hang_1.size();i++){
KhachHang KH=khach_hang_1[i]; // KH sẽ lưu lại thông tin của khách
Hang ds_don_hang;
C.nhap(); // Hóa đơn chi tiết
for(int sl_hoa_don=0;sl_hoa_don<C.getSoLuongHang();sl_hoa_don++){
cout<<"NHap hoa don thu "<<sl_hoa_don+1<<":\n";
D.nhap(); // Hóa đơn
for(int sl_hang=0;sl_hang<D.getSoLuongHang_1();sl_hang++){
cout<<"Nhap ma hang hoa muon mua: ";
std::getline(cin,ma_hang_hoa);
for(int ma_hang=0;ma_hang<hang_1.size();ma_hang++){
if(ma_hang_hoa==hang_1[ma_hang].getIdHang()){ // so sánh với mỗi đơn hàng trong list hàng
ds_don_hang=hang_1[ma_hang];
break;
}
}
HoaDon list_ds(KH,ds_don_hang); // lưu lại thông tin của khách và danh sách hóa đơn
listDs_Hang.push_back(list_ds);// đẩy thông tin của mỗi list ds
}
HoaDon_premium list_hoa_don(listDs_Hang,D.getMaHoaDon(),D.getNgayHoaDon(),D.getSoLuongHang_1(),KH.getMaKH());//lưu lại thông tin của mỗi hóa đơn
List_HoaDon.push_back(list_hoa_don); // lưu lại danh sách hóa đơn
}
}
//tìm và in ra hóa đơn và danh sách mua hàng của mỗi khách
string maKhach_hang;
bool flag=true;
do
{
flag=true;
cout<<"Nhap ma khach hang can tim: ";
std::getline(cin,maKhach_hang);
for(int i=0;i<khach_hang_1.size();i++){
if(maKhach_hang==khach_hang_1[i].getMaKH()){
cout<<"Thong tin don hang cua KH: "<<khach_hang_1[i].getNameKH()<<" co ma: "<<maKhach_hang<<endl;
xuat_ds_Hoa_Don(List_HoaDon,listDs_Hang,maKhach_hang);
}
}
} while (flag==false);
}
do mình mới tập tành viết code nên code khá tởm mong mn thông cảm và mình mong mn có thể giúp mình sửa lỗi này. Mình xin cảm ơn