Trợ giúp chủ đề danh sách hóa đơn bán hàng


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

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?