我在第1和第3例中运行代码时遇到问题,案例1和案例3没有做我想要的事情.. 如果输入“1”,则应输入新客户,如果输入“3”,程序将显示该列表。程序不会这样做,问题出在哪里?
这是Header.h“头文件”
#include<iostream>
#include<string>
using namespace std;
class customer
{
public:
string name;
int gsize;
int status;
customer* next;
customer();
customer(string,int,int);
};
class waitinglist
{
public:
int tables; //number of occupied tables
int chairnum;
int totalcustomers;
customer*head,*tail;
waitinglist();
waitinglist(int);
void newcustomer(string,int,int);
void diplaycustomer(string);
void displayall();
};
这是带有主
的Source.cpp #include"Header.h"
customer::customer()
{
name="";
gsize=status=0;
next=NULL;
}
customer::customer(string name1,int gsize1,int status1)
{
name=name1;
gsize=gsize1;
status=status1;
next=NULL;
}
waitinglist::waitinglist()
{
chairnum=totalcustomers=tables=0;
head=tail=NULL;
}
waitinglist::waitinglist(int val)
{
chairnum=val;
totalcustomers=0;
tables=0;
head=tail=NULL;
}
void waitinglist::newcustomer(string name1,int gsize1 ,int status1)
{
customer*tmp= new customer;
if (head==NULL) // linkedlist is empty
{
head = tail = tmp;
totalcustomers++;
}
else
{
tmp->next = head;
head = tmp;
totalcustomers++;
}
}
void waitinglist::displayall()
{
customer *tmp;
tmp = head;
while(tmp != NULL)
{
cout<<tmp->name <<" "<<tmp->gsize<<"-->";
tmp = tmp->next;
}
cout << endl;
}
void waitinglist::diplaycustomer(string Name)
{
customer*tmp ;
tmp=head ;
cin>>Name ;
while(tmp!=NULL )
{
if (Name==tmp->name)
{
cout << "the name : "<< tmp->name << endl ;
cout << "the group size = "<<tmp->gsize << endl ;
cout << "the status : " << tmp->status <<endl;
break ;
}
else if (Name!=tmp->name)
{
tmp=tmp->next;
}
}
if (tmp==NULL)
{
cout<<"can't found! ";
}
}
int main()
{
int choice;
string namevar=" ";
int gsizevar=0;
int statusvar=0;
waitinglist mylist;
do
{
cout<<"Note: 1 in status means{the customer not here and 2 means the customer is here.}\n";
cout<<"Select your option.\n\n";
cout<<"(1) Add a new Customer.\n";
cout<<"(2) Display information based on Name.\n";
cout<<"(3) List all Names.\n";
cout<<"(4) Quit.\n\n";
cout<<"Enter your choice: --> ";
cin>>choice;
if (1 <= choice && choice <= 3)
{
switch (choice)
{
case 1:
mylist.newcustomer(namevar,gsizevar,statusvar);
break;
case 2:
mylist.diplaycustomer(namevar);
break;
case 3:
mylist.displayall();
break;
default:
cout << "Invalid choice. Enter again.\n\n";
break;
}
}
}
while (choice != 4);
return 0;
}
答案 0 :(得分:1)
当用户输入1
作为选择时,请致电:
mylist.newcustomer(namevar,gsizevar,statusvar);
但是,您没有任何代码可以从用户那里收集namevar
,gsizevar
和statusvar
。您只需使用它们初始化的值:
string namevar=" ";
int gsizevar=0;
int statusvar=0;
函数newcustomer
添加了一个新客户来使用这些值。
在使用这些值之前,您需要在致电newcustomer
之前或在newcustomer
内部添加代码以从用户收集这些数据。
如果您决定从newcustomer
内的用户收集数据,则无需将其作为变量传递。
清理建议:
您要求用户在diplaycustomer
中输入名称。因此,无需通过namevar
。你可以使用:
void waitinglist::diplaycustomer()
{
customer*tmp ;
tmp=head ;
// Use a local variable.
string Name;
cin>>Name ;
...
}
答案 1 :(得分:0)
有几个原因导致程序无法执行您希望的操作。例如,您不使用构建新客户时提供的名称(并且该名称肯定是空的)。 您应该使用调试器并放置断点以了解代码中发生的情况。