30/09/2018, 16:56

Cần giúp sửa lỗi chương trình "quản lý bán hàng"

Em năm 2 mới học lập trình C++. dưới đây là code về 1 chương trinh “quản lí bán hàng” , e có chạy trên DEVC 5.9.2 và báo lỗi mà e không biết sửa như thế nào , mong anh chị giúp đỡ
CHƯƠNG TRÌNH QUẢN LI BÁN HANG

    #include<iostream>
    #include<stdio.h>
    #include<conio.h>
    #include<stdlib.h>
    #include<iomanip>
    #include <vector>  
    
    using namespace std;
    
    class lich { //lop ngay thang nam
          public: unsigned int d,m,y;  
          public:
                 lich(unsigned int n=0,unsigned int t=0,unsigned int nam=0){ //ham tao
                       d=n;m=t;y=nam;       }
                 void xuat(){    //ham xuat thoi gian ra man hinh
                      cout<<setw(2)<<d<<"/"<<setw(2)<<m<<"/"<<setw(4)<<y;}
                 void vao(){  //ham nhap thoi gian tu ban phim
                      char a,b;
                      do{cin>>d>>a>>m>>b>>y;
                      if((d>31)||(m>12)) cout<<"Nhap sai -> nhap lai"<<endl;
                       }while((d>31)||(m>12));}
                               };
                 int operator ==(lich &a,lich &b) { /*dinh nghia toan tu bang giua 2 doi tuong cua lop lich*/
                     if (a.y==b.y&&a.m==b.m&&a.d==b.d) return 1;
                     else   return 0;
                    };  
    
    
    class hanghoa { //khai bao lop hang hoa
          char* ten;
          lich time;  
          int giatien;
          public : 
               void nhapinfo() { //ham nhap thông tin hang hoa
                   cout<<endl<<"ten hang hoa :  ";
                   cin.getline(ten,'
');
                   cout<<endl<<"thoi gian mua :  ";
                   time.vao();
                   cout<<endl<<"gia tien : ";
                   cin>>giatien;
                   }
               void xuatinfo() { //ham xuat thong tin hang hoa ra man hinh
    		        cout.setf(ios::left);
                    cout<<setw(20)<<ten<<"    ";
                    time.xuat();
                    cout<<"    "<<setw(8)<<giatien<<endl;
                    }
          friend class soghichep; // cho class soghichep la class ban cua class hang hoa
          // lam nhu the de co the truy cap vao cac phan rieng tu cua class hang hoa    
          };
    
    
    
    
    struct Node {  //kai bao cau truc danh sach
           hanghoa value;
           Node* next;
           };
    
    
    
    class soghichep { //khai bao lop so ghi chep 
          Node* H;   //con tro danh sach
          char ch;
          public:
          void nhapds();  //ham nhap thong tin cho danh sach moc noi cac hang hoa   
          void bosung();  //ham bo sung thông tin cho danh sách moc noi cac hang hoa
          int size();   //ham lay so luong hàng hóa có trong danh sách 
          void xuatds() ;  //hàm xuat danh sách ra màn hinh
          void sapxepgiatien() ; //hàm sap xep danh sách theo thu tu giam dan cua giá tien 
          void sapxepten() ; //hàm sap xep danh sách theo tên
          void sapxeptime();  //hàm sap xep danh sách theo thoi gian truoc sau
          void muatrongngay(); //tim kiem các hàng hóa mua trong ngày duoc nhap tu bàn phím
          void ghitep(char *ttep); //hàm ghi danh sách vào mot tep
          void doctep(char *ttep);  //doc tu tep có san
          };
    
    
    
    //Phan dinh nghia hàm trong class soghichep
    void soghichep::nhapds() { //hàm nhap thông tin cho danh sách móc noi các hàng hóa   
         Node* A,B;
         A = new Node;
         A->value.nhapinfo();
         A->next=NULL;
         H=A;
         do{
            cout<<endl<<"Nhan c/k (c-Co hoac k-Khong) "<<endl;cin>>ch;cin.ignore();
            if(ch=='k') break;
            B = new Node;
            B->value.nhapinfo();
            A->next=B;
            B->next=NULL;
            A=B;}while (1);
         }
    //nhap DS theo kieu FIFO (vào truoc ra truoc) và bo sung dan các phan tu vào cuoi DS
    
    void soghichep::bosung() {//hàm b? sung thông tin cho danh sách móc n?i các hàng hóa   
         PNode A;
         A=new Node;
         A->value.nhapinfo();
         A->next=H;
         H=A;
         }
    //Moi lan bo sung se có mot phan tu duoc thêm vào dau danh sách
    int soghichep::size() { //hàm lay so luong hàng hóa có trong danh sách
        PNode A=H;;
        int n=0;
        while (A!= NULL) {
              n++;
              A=A->next;}
              return n;
              }  //su dung thuat toán duyet danh sách
    void soghichep::xuatds() { //hàm xuat danh sách ra màn hinh
         PNode A;
         A=H;
         cout<<"Danh sach hang hoa co trong so ghi chep : "<<endl;
         if (H!=NULL)
         do
           {
            A->value.xuatinfo();
            A=A->next;
            }while (A!= NULL);
         } //Su dung thuat toán duyet danh sách
    void soghichep::sapxepgiatien() { //hàm sap xep danh sách theo thu tu giam dan cua giá tien
         PNode A,B;
         hanghoa td;
         for(int i=0;i<size()-1;i++) { //Su dung thuat toán sap xep noi bot
                 //có size()-1 lan duyet DS
    	A=H;
                 for (int j=0;j<size()-1-i;j++) { //moi lan duyet qua danh sách, phan tu MIN ve cuoi danh sach  
                 B=A->next;         
                 if (A->value.giatien < B->value.giatien) {
                    td=A->value;
                    A->value=B->value;
                    B->value=td;
                    };
                 A=B;
                 };  // sap xep theo thu tu giam dan 
                 };
                 }
    void soghichep::sapxepten() { //hàm sap xep danh sách theo tên 
         PNode A,B;                         // tuong tu nhu sapxepgiatien()
         hanghoa td;
         for(int i=0;i<size()-1;i++) {
                 A=H;
                 for (int j=0;j<size()-1-i;j++) {
                 B=A->next;
                 if (strcmp(A->value.ten,B->value.ten)>0) {
                    td=A->value;
                    A->value=B->value;
                    B->value=td;
                    };
                 A=B;
                 }; //sap xep theo ABC
                 };
                 }
    void soghichep::sapxeptime() { //ham sap xep danh sach theo thoi gian truoc sau	
         PNode A,B;                     // tuong tu nhu sapxepgiatien()
         hanghoa td;
         for(int i=0;i<size()-1;i++) {
                 A=H;
                 for (int j=0;j<size()-1-i;j++) {
                 B=A->next;
                 int d=0;
                 if (A->value.time.y<B->value.time.y)d=1;
                 else if(A->value.time.y==B->value.time.y)
                 if (A->value.time.m<B->value.time.m) d=1;
                 else if(A->value.time.m==B->value.time.m) 
                 if (A->value.time.d<B->value.time.d) d=1;
                 if (d==1)  {
                    td=A->value;
                    A->value=B->value;
                    B->value=td;
                    };
                 A=B;
                 };  //hang hoa nào mua som nhat xep truoc
                 };
                 }
    void soghichep::muatrongngay(){ //tim kiem các hàng hóa mua trong ngày duoc nhap tu bàn phím
         lich ngay;int k=0;
         PNode A;
         A=H;
         cout<<endl<<" nhap ngay de tim san pham: "<<endl;
         ngay.vao();
         cout<< " san pham " << endl;
         if (H!=NULL)   //Duyet lan luot tung phan tu cho den het danh sách
            do {
               if ( A->value.time == ngay ) {A->value.xuatinfo();k++;} 
                  A=A->next;
               } while (A!= NULL);
         cout <<endl<< " co " << k << " san pham mua trong ngay"<<"   ";ngay.xuat();
    //in so luong hàng hóa mua trong ngày do ra màn hinh
         }
     void soghichep::ghitep(char *ttep) {       //hàm ghi danh sách vào mot tep
          ofstream f(ttep);
          PNode A;
          A=H;
          int n=size();
          f <<n<<endl ;  //dong dau là so luong phan tu cua danh sách
          for (int i=1; i<=n;++i) { //ghi vào tep moi phan tu chiem 3 dong
              f.setf(ios::left);
              f <<A->value.ten<<endl;
              f<<A->value.time.d<<"/"<<A->value.time.m<<"/"<<A->value.time.y<<endl;
              f<<A->value.giatien<<endl;
              A=A->next;
              }
          f.close();
          cout<<"Da ghi tep xong";
          }
     void soghichep::doctep(char *ttep) {     //ham doc tu tep có san  
          ifstream f;
          f.open(ttep);
          if (f.bad()) { //neu không mo duoc tep thi dung tat ca viec doc tep
             cout << "
Tep " << ttep << " khong ton tai";
             getch();
             exit(1);
             }
          char ch1,ch2;
          int n;
          f>>n;
          f.ignore();
          PNode A,B;
          A=new Node; //neu mo thành công thi doc danh sách nhu nhap du lieu cho các bien
          f.getline(A->value.ten,'
');
          f>>A->value.time.d;
          f>>ch1>>A->value.time.m;
          f>>ch2>>A->value.time.y;
          f>>A->value.giatien;
          A->next=NULL;
          H=A;
          for (int i=1;i<n;i++) {  
              B=new Node;
              f.ignore();
              f.getline(B->value.ten,'
');
              f>>B->value.time.d;
              f>>ch1>>B->value.time.m;
              f>>ch2>>B->value.time.y;
              f>>B->value.giatien;
              A->next=B;
              B->next=NULL;
              A=B;
              }
          f.close();
          cout<<"Da load xong" ;
         };
    
    
    int main()
    {
    	int x;
    	soghichep a;
    while(1) {
           cout.setf(ios::left); //in MENU ra màn hinh
           cout<<endl<<"Nhan cac so tuong ung de chon cac muc tuong ung "<<endl;
           cout<<"1.Nhap danh sach hang hoa da mua vao so ghi chep"<<endl;
           cout<<"2.Bo sung them hang hoa vua mua vao so ghi chep"<<endl;
           cout<<"3.Lay so luong hang hoa co trong danh sach"<<endl;
           cout<<"4.Xuat nhung hang hoa da ghi trong SGC ra man hinh"<<endl;
           cout<<"5.Sap xep cac hang hoa theo ten"<<endl;
           cout<<"6.Sap xep cac hang hoa theo thoi gian"<<endl;
           cout<<"7.Sap xep cac hang hoa theo gia tien"<<endl;
           cout<<"8.Tim nhung HH mua trong ngay cho truoc"<<endl;
           cout<<"9.Ghi DS hang hoa vao tep"<<endl;
           cout<<"10.Load noi dung tu tep co san"<<endl;
           cout<<"0.Thoat khoi chuong trinh"<<endl;
           
           cin>>x;  //nhap x -so thu tu cua thao tác
           cout.unsetf(ios::left);
           switch(x) {
               case 1:  cout<<"Nhap danh sach Hang hoa ; "<<endl; cin.ignore() ; a.nhapds();
                        a.ghitep("Soghichep.txt") ; 
    	        cout<<endl<<" Danh sach duoc luu vao file Soghichep.txt"<<endl;
                        cout<<"an phim bat ki de tiep tuc"; getch(); break;
               case 2:  a.doctep("Soghichep.txt") ; cin.ignore(); a.bosung();
                        cout<<"Neu muon luu lai thi hay dung thao tac 9"<<endl;
                        cout<<"an phim bat ki de tiep tuc";getch(); break;
               case 3:  cout<<"So luong phan tu cua danh sach la:  "<<a.size(); cout<<endl<<"an phim bat ki de tiep tuc";
                        getch(); break;
               case 4:  a.xuatds(); cout<<"an phim bat ki de tiep tuc"; getch();break;
               case 5:  a.sapxepten(); cout<<"Danh sach sau khi sap xep : "<<endl; a.xuatds();
                        cout<<"an phim bat ki de tiep tuc"; getch(); break;
               case 6:  a.sapxeptime() ; cout<<"Danh sach sau khi sap xep : "<<endl; a.xuatds();
                        cout<<"an phim bat ki de tiep tuc"; getch();break;
               case 7:  a.sapxepgiatien(); cout<<"Danh sach sau khi sap xep : "<<endl; a.xuatds();
                        cout<<"an phim bat ki de tiep tuc"; getch(); break;
               case 8:  a.muatrongngay(); cout<<endl<<"an phim bat ki de tiep tuc"; getch();break;
               case 9:  a.ghitep("Soghichep.txt"); cout<<endl<<"an phim bat ki de tiep tuc"<<endl; getch();break;
               case 10: a.doctep("Soghichep.txt"); cout<<endl<<"an phim bat ki de tiep tuc"<<endl; getch();break;
               default: cout<<"thoat";
               }
           if(x==0) break;}
           system("pause");
    }
Thu Thuỷ viết 19:04 ngày 30/09/2018

chưa nhìn hết nhưng thấy cái sai

B* p1, p2;
p1 = new B(); //đúng
p2 = new B(); // sai nhé, bạn khai báo như thế thì p2 chỉ là 1 biến kiểu B thôi, ko phải là con trỏ

Vũ Phi Long viết 19:11 ngày 30/09/2018

sửa như nào nhỉ bạn , mà mình gà lm , bạn nói rõ hơn nó ở phần nào dk k

Bài liên quan
0