Summary报告代码使用链表的错误

Mistakes in Summary report code using linked lists

我目前正在为我的大学作业做一个 C++ 项目。我在使用链表对此进行编码时遇到了一些困难。

#include <iostream>
#include<stdlib.h>
#include <string.h>
#include <iomanip>
#include <conio.h>

#define MAX 100
using namespace std;

class User
{   
    public:
        
        struct user_details
        {
            string data1;
            user_details *next1;    
        };
        
        struct user_date
        {
            string data2;
            user_date *next2;
        };
        
        struct event
        {
            string data4;
            event *next_event;
        };
    
    void push_user (string name, string date,string eventss)
    {
        user_details *newName;
        user_date *newDate;
        event *newEvent;
        cout <<"\n\nList of Events services offered.\n1.Wedding\n2.Birthday\n3.Funeral\n4.Celebration event\n5.Open House"<<endl;
        
        cin.sync();
        cout<<"\nEnter name: ";
        getline(cin, name);
        
        cin.sync();
        
        cout <<"Enter date: ";
        getline(cin, date);
        
        cin.sync();
        
        cout<<"Write the events(e.g. Course.style-Wedding or Buffet.style-Wedding):  "<< endl;
        getline(cin, eventss);
        
        if(top1 == NULL|| top2 == NULL||top_event==NULL) //checking for empty stack
        {
            top1 = new user_details;
            top1-> data1= name;
            top1->next1= NULL;
            
            top2 = new user_date;
            top2->data2=date;
            top2->next2=NULL;
            
            top_event = new event;
            top_event->data4= eventss;
            top_event->next_event= NULL;
            
        }
        else
        {
            newName= new user_details;
            newName->data1 = name;
            newName->next1 = top1;
            top1 = newName;
            
            newDate= new user_date;
            newDate->data2 = date;
            newDate->next2 =top2;
            top2= newDate;
            
            newEvent= new event;
            newEvent->data4 = eventss;
            newEvent->next_event= top_event;
            top_event = newEvent;
            
            cout<<"Added new user to stack."<<endl;
        }
    }
    
    void pop_user (string name, string date, string eventss)
    {
        user_details *current1;
        user_date *current2;
        event *current23;
        
        if(top1 == NULL)
        {
            cout<<"!!!Stack underflow" << endl;
        }
        if(top2 == NULL)
        {
            cout<<"!!!Stack underflow" << endl;
        }
        if(top_event == NULL)
        {
            cout <<"!!!Stack underflow"<<endl;
        }
        
        else
        {
            name = top1->data1;
            current1 = top1;
            top1 = top1->next1;
            delete current1;
            
            date = top2->data2;
            current2=top2;
            top2 = top2->next2;
            delete current2;
            
            eventss = top_event->data4;
            current23 = top_event;
            top_event = top_event->next_event;
            delete current23;
            
            
            cout << "Name: "<< name<<endl;
            cout << "Date: " << date<<endl;
            cout<<"Event" << eventss << " is removed " << endl;
        }
    }
    
    void display_user ()
    {
        user_details *current1;
        user_date *current2;
        event *current23;
        
        
        if(top1 == NULL)
        {
            cout<<"\nEmpty list" << endl;
        //  return;
        }
        else
        {
            current1 = top1;
            current2 =top2;
            current23=top_event;
        
            while(current1 != NULL || current2 !=NULL||current23 != NULL)
            {
                cout<<"\nName: "<< current1->data1<<endl;
                current1 = current1->next1;
                
                cout <<"Date: "<<current2->data2<<endl;
                current2 = current2->next2;
                
                cout<<"Event: " << current23->data4<<endl;
                current23 = current23->next_event;
                
                
            }
        }
    }
    
    void deleteStack_user()
    {
        user_details *current1;
        user_date *current2;
        event *current23;
        
        if(top1 == NULL || top2 ==NULL||top_event==NULL)
        return;
        else
        {
            current1 = top1;
            current2 = top2;
            current23=top_event;
            
            while(current1 != NULL || current2 != NULL||current23 != NULL)
            {
                top1 = top1->next1;
                delete current1;
                current1 = top1;
                
                top2 = top2->next2;
                delete current2;
                current2 = top2;
                
                top_event = top_event->next_event;
                delete current23;
                current23 = top_event;
            }
        }
    }
    
    void search(string user_name) //linear search
    {   
        user_details *current1;
        
        
        cout <<"Please enter the name you want to search: "<<endl;
        cin.sync();
        getline(cin,user_name);
        if(top1==NULL)
        {
                cout<<"not found";
        }
        else
        {
            current1 = top1;
            while(user_name==current1->data1||current1 != NULL)
            {
                cout<<"\nName: "<< current1->data1<<endl;
                current1 = current1->next1;
                cout <<"Found."<<endl;
                
            
            }
        }
    }
    
    
    user_details *top1=NULL;
    user_date *top2=NULL;
    event *top_event;
    
};


class reeves
{
    public:
        
    struct node
    {
        string data;
        node *next;
    };
    
    void push(string menu)
    {   
        node *newMenu;
        
        cout<<"Enter the menu: ";
        cin.sync();
        getline(cin, menu);
        if(top == NULL) //checking for empty stack
        {
            top = new node;
            top->data= menu;
            top->next= NULL;
            cout<<"\nCreated new menu."<<endl;
        }
        else
        {
            newMenu= new node;
            newMenu->data = menu;
            newMenu->next = top;
            top = newMenu;
            cout<<"Added new menu to stack."<<endl;
        }
    }
    
    void pop(string menu)
    {
            node *current;
        
        if(top == NULL)
        {
            cout<<"!!!Stack underflow" << endl;
        }
        else
        {
            menu = top->data;
            current = top;
            top = top->next;
            delete current;
            cout<<"Menu " << menu << " is removed " << endl;
        }
    }
    
    void display()
    {
            node *current;
        
        if(top == NULL)
        {
            cout<<"\nEmpty menu" << endl;
        //  return;
        }
        else
        {
            current = top;
            
            
            while(current != NULL)
            {
                cout<<current->data<<endl;
                current = current->next;
            }
        }
    }
    
    void deleteStack()
    {
                node *current;
        if(top == NULL)
        return;
        else
        {
            current = top;
            while(current != NULL)
            {
                top = top->next;
                delete current;
                current = top;
            }
        }
    }
    node *top=NULL;
};

class summary_report_price
{
    
    public:
    
    

    //double wedding_menu=22.00; //per person 
    //double birthday_menu=17.00;
    //double funeral_menu=16.00;
    //double celebrationEvent_menu=30.00;
    //double openHouse_menu=25.00;
    
    
    summary_report (){}
    ~summary_report(){}

    struct quantity
    {
        int Num;
        quantity *next_quantity;
    };
    
    struct total_quantity
    {
        int total;
        total_quantity *next_total;
    };
    
    void enter_quantity(int Quantity, int totalRevenue)
    {   int choose;
        int price;
        
        quantity *newQuantity;
        total_quantity *newTotal;
            cout << "\n\nWhich event did you previously choose?\n1.Wedding\n2.Birthday\n3.Funeral\n4.Celebration Event\n5.Open House.\n"<<endl;
                cin>>choose;
                switch(choose)
                {
                    
                    case 1:
                        cout <<"Wedding..."<<endl;
                        cout <<"Enter how many people that will be attending: "<<endl;
                        cin >>Quantity;
                        
                        totalRevenue=Quantity*22;
                    
                        break;
                    case 2:
                        cout <<"Birthday..."<<endl;
                        cout <<"Enter how many people that will be attending: "<<endl;
                        cin >>Quantity;
                        
                        totalRevenue=Quantity*17;
                        
                        break;
                    case 3:
                        cout <<"Funeral..."<<endl;
                        cout <<"Enter how many people that will be attending: "<<endl;
                        cin>>Quantity;
                        totalRevenue=Quantity*16;
                
                        
                        break;
                    case 4:
                        cout <<"Celebration Event..."<<endl;
                        cout <<"Enter how many people that will be attending: "<<endl;
                        cin >>Quantity;
                        
                        totalRevenue=Quantity*30;
                        
                        break;
                    case 5:
                        cout <<"Open House..."<<endl;
                        cout <<"Enter how many people that will be attending: "<<endl;
                        cin >>Quantity;
                        
                        totalRevenue=Quantity*25;
                        
                        break;
                    case 6:
                        exit(1);
                        break;
                    default:
                        cout<<"You can only press 1-6 only."<<endl;
                }
                
        
        if(top_quantity == NULL||top_total==NULL) //checking for empty stack
        {
            top_quantity = new quantity;
            top_quantity->Num= Quantity;
            top_quantity->next_quantity= NULL;
            
            top_total= new total_quantity; //calc total
            top_total->total=totalRevenue;
            top_total->next_total=NULL;
            
        }
        else
        {
            newQuantity= new quantity;
            newQuantity->Num= Quantity;
            newQuantity->next_quantity= top_quantity;
            top_quantity= newQuantity;
            
            newTotal= new total_quantity;
            newTotal->total=totalRevenue;
            newTotal->next_total=top_total;
            top_total= newTotal;
            
        }
    
    }
    
    void pop_price(int Quantity, int totalRevenue)
    {
        quantity *current36;
        total_quantity *current71;
        
        
        if(top_quantity== NULL)
        {
            cout<<"!!!Stack underflow" << endl;
        }
        if(top_total== NULL)
        {
            cout<<"!!!Stack underflow" << endl;
        }
        
        else
        {
            Quantity = top_quantity->Num;
            current36 = top_quantity;
            top_quantity= top_quantity->next_quantity;
            delete current36;
            
            totalRevenue = top_total->total;
            current71=top_total;
            top_total = top_total->next_total;
            delete current71;
            
            
            
            
            cout << "Quantity: "<< Quantity <<endl;
            cout << "Total: RM" << totalRevenue<< " is removed " << endl;
        }
    }
    
    void display_totalRevenue()
    {   
        quantity *current36;
        total_quantity *current71;
        
        if(top_quantity == NULL || top_total==NULL)
        {
            cout<<"\nEmpty revenue" << endl;
        //  return;
        }
        else
        {
            current36 = top_quantity;
            current71=top_total;
            
            
            while(current36 != NULL || current71 !=NULL)
            {   
                cout<<"\nQuantity: "<<current36->Num<<endl;
                current36 = current36->next_quantity;
                
                cout<<"Total: RM"<<current71->total<<endl;
                current71=current71->next_total;
            }
                        
        }
    }
    
    
  quantity *top_quantity;
  total_quantity *top_total;

};

所以这就是我面临的问题,据说我试图从不同的 类 链接列表访问这些结构,并将其打印到摘要报告中。那是计划,我一输入数据就只显示列表是空的。

以下是我遇到问题的功能...还有其他方法吗?对不起的错误。我只是 C++ 编程的初学者

void QuantityReady(User::user_details *current1, User::user_date *current2,  User::event *current23, summary_report_price::quantity *current36, summary_report_price::total_quantity *current71,int count)
    
{   
        
        //quantity
         summary_report_price::quantity *temp3;
        temp3=current36;
        
        //totalRevenue  
        summary_report_price::total_quantity *temp5;
        temp5=current71;
        
        //struct user_details
        User::user_details *temp;
        temp=current1;
        
        //struct user_date
        User::user_date *temp1;
        temp1=current2;
        
        //struct event
        User::event *temp2;
        temp2=current23;
        
        
        int i,j;
        int HoldNum, tempCount= count, sizeM[tempCount], countM[tempCount];
        int RevenueM[tempCount], HoldRevenue;
        string NameM[tempCount], HoldName;
        string DateM[tempCount], HoldDate;
        string EventM[tempCount], HoldEvent;
        
        string events1="Course style-Wedding ";
        string events2="Course style-Birthday ";
        string events3="Course style-Funeral ";
        string events4="Course style-Celebration Event ";
        string events5="Course style-Open House ";
        
        string events6="Buffet style-Wedding ";
        string events7="Buffet style-Birthday ";
        string events8="Buffet style-Funeral ";
        string events9="Buffet style-Celebration Event ";
        string events10="Buffet style-Open House ";
        
        system("cls");
        
        
        if(current1==NULL||current2==NULL||current23==NULL||current36==NULL||current71==NULL)
        {
            cout<<"The list is empty..."<< endl;
            cout<<"Press any key to continue ..."<<endl;
            
            getch();
        }
        
        else
        {       User::user_details *next1;
                User::user_date *next2;
                User::event *next_event;
                summary_report::quantity *next_quantity;
                summary_report::total_quantity *next_total;
            i=0;
            while (i<tempCount)
            {
                
                
                RevenueM[i]=temp5->total;
                temp5=temp5->next_total;
                
                
                
                sizeM[i]=temp3->Num; //quantity
                temp3=temp3->next_quantity;
                ;
                  
                
                NameM[i]=temp->data1;//struct user details
                temp=temp->next1;
                
                
                
                DateM[i]=temp1->data2; // user date
                temp1=temp1->next2;
                
                
                
                EventM[i]=temp2->data4; //event
                temp2=temp2->next_event;
            
                
                i=i+1;
            }
            
            j=0;
            for(i=0;i<tempCount; i++)
            {
                for(j=i+1; j<tempCount; j++)
                {
                    if(sizeM[i]<sizeM[j]&&NameM[i]<NameM[j]&&DateM[i]<DateM[j]&&EventM[i]<EventM[j]&&RevenueM[i]<RevenueM[j]) //bubble sorting algorithm
                    {
                        HoldRevenue=RevenueM[i];
                        RevenueM[i]=RevenueM[j];
                        RevenueM[j]=HoldRevenue;
                        
                        HoldNum=sizeM[i];
                        HoldName=NameM[i];
                        
                        sizeM[i]=sizeM[j];
                        NameM[i]=NameM[j];
                        
                        sizeM[j]=HoldNum;
                        NameM[j]=HoldName;
                        
                        //date
                        
                        HoldDate=DateM[i];
                        DateM[i]=DateM[j];
                        DateM[j]=HoldDate;
                        
                        //event
                        
                        HoldEvent=EventM[i];
                        EventM[i]=EventM[j];
                        EventM[j]=HoldEvent;
                    }
                    }   
            }
            
            for(i=0;i<tempCount;i++)
            {
                countM[i]=0;
            }
            
            cout<<"\t\t\t\tReeves Cartering Summary Report"<<endl;
            for(i=0;i<tempCount;i++)
            {   temp1=current2;
                temp2=current23;
                temp3=current36;
                temp5=current71;
                temp=current1;
            
                while (temp!=NULL||temp1!=NULL||temp2!=NULL||temp3!=NULL||temp5 !=NULL)
                {
                    if(temp->data1==NameM[i]||temp1->data2==DateM[i]||temp2->data4==EventM[i]||temp3->Num==sizeM[i]||temp5->total==RevenueM[i])
                    {   
                        
                        if(temp2->data4.compare(events1)==0)
                        {
                            cout<<temp->data1<< " "<<temp2->data4<<temp1->data2 <<temp3->Num<<" "<<temp5->total; //quantity
                        }
                        if(temp2->data4==events2)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events3)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events4)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events5)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events6)
                        {
                            cout<<temp->data1<< " "<<temp2->data4<<temp1->data2 <<temp3->Num<<" "<<temp5->total; //quantity
                        }
                        if(temp2->data4==events7)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events8)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events9)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        if(temp2->data4==events10)
                        {
                            cout<<temp->data1<<" "<<temp2->data4<<temp1->data2<<temp3->Num<<" "<<temp5->total;
                        }
                        
                        countM[i]=1;
                    }
                    
                    temp3=temp3->next_quantity;
                    temp5=temp5->next_total;
                    temp1=temp1->next2;
                    temp2=temp2->next_event;
                    temp=temp->next1;
                }
                
                
                
            }
            
            cout<<"Press any key to continue...";
            getch();
            
        }
        
        
    }

    

   



    
    ```

您的错误在以下行:

if(current1==NULL||current2==NULL||current23==NULL||current36==NULL||current71==NULL)

这意味着如果其中任何一个为空,它将打印出来列表为空,您从未更改 current23 71 或 36 的默认值,为什么您认为它们不会为空??

summary_report::quantity *temp3;
    temp3=current36;
    
    //totalRevenue  
    summary_report::total_quantity *temp5;
    temp5=current71;
    
    //struct user_details
    User::user_details *temp;
    temp=current1;
    
    //struct user_date
    User::user_date *temp1;
    temp1=current2;
    
    //struct event
    User::event *temp2;
    temp2=current23;

此时你当前的1到10都是空的,在你初始化当前的23之后,71等也将是空的...