1.main.cpp文件
#include <iostream>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string.h>
using namespace std;
class Customer//顾客类
{
private:
char table[20];//桌号
int queues;//排队号码
char dishes[20];//菜品
int amount;//账户余额
static int total;//顾客总数
public:
Customer();
void order();//点菜函数
void Printf();//输出顾客信息
friend class LQueue;
};
class LQueue;
class Menus//菜单类
{
private:
int number;//菜单编号
int price;//价格
char dish_name[30];//菜名
static int sums;//菜品总数
public:
void Set();//增加菜品
void show();//显示菜品信息
void correct_menus();//修改菜品
void delete_menus();//删除菜品
void renew_menus();//恢复菜单
friend class LQueue;
friend void Customer::order();
};
int Customer::total=0;
int Menus::sums=5;
struct QNode
{
Customer data;
QNode *next;
};
class LQueue//队列类
{
private:
QNode *front,*rear;//队头和队尾
public:
LQueue();
void InLQueue();//增加顾客
int EmptyLQueue();//判队空
void OutLQueue();//删除队头元素
void PrintQueue();//输出队伍信息
void correct_customer(LQueue *L);//修改队伍信息
void delete_customer(LQueue *L);//删除队伍元素
~LQueue();
};
int menu()
{
char i;
puts("**********************主菜单**********************\t\n");
puts("\t\t1.增加新菜品\n");
puts("\t\t2.增加新顾客\n");
puts("\t\t3.顾客结账\n");
puts("\t\t4.显示顾客信息\n");
puts("\t\t5.显示菜品信息\n");
puts("\t\t6.修改顾客点菜信息\n");
puts("\t\t7.修改菜品信息\n");
puts("\t\t8.删除顾客\n");
puts("\t\t9.删除菜品\n");
puts("\t\t0.退出\n");
puts("**************************************************\t\n");
i=getchar();
system("cls");
return i;
}
int main()
{
LQueue L;
Menus m;
while(1)
{
switch(menu())
{
case'1':
m.Set();
break;
case'2':
L.InLQueue();
break;
case'3':
L.OutLQueue();
break;
case'4':
L.PrintQueue();
break;
case'5':
m.show();
break;
case'6':
L.correct_customer(&L);
break;
case'7':
m.correct_menus();
break;
case'8':
L.delete_customer(&L);
break;
case'9':
m.delete_menus();
break;
case'0':
m.renew_menus();
return 0;
}
}
return 0;
}
LQueue::LQueue()
{
rear=0;
front=0;
}
void LQueue::PrintQueue()
{
QNode *p;
p=front;
if(p==NULL)
{
cout<<"队内无顾客!"<<endl;
getchar();
getchar();
system("cls");
return;
}
else
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
while(p!=NULL)
{
p->data.Printf();
p=p->next;
}
getchar();
getchar();
system("cls");
}
void LQueue::InLQueue()
{
QNode *p;
p=new QNode;
p->next=NULL;
p->data.order();
if(front==0)
{
front=p;
rear=p;
}
else
{
rear->next=p;
rear=p;
}
getchar();
getchar();
system("cls");
}
int LQueue::EmptyLQueue()
{
if(front==NULL&&rear==NULL)
return 1;
else
return 0;
}
void LQueue::OutLQueue()
{
int i=0;
QNode *p;
Menus menu[50];
if(EmptyLQueue()==1)
{
cout<<"队内无顾客!"<<endl;
getchar();
getchar();
system("cls");
return;
}
else
{
p=front;
front=p->next;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
if(strcmp(p->data.dishes,menu[i].dish_name)==0)
{
p->data.amount-=menu[i].price;
break;
}
i++;
}
cout<<"首位顾客点餐之后的信息:\n"<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl;
}
if(front==NULL)
rear=front;
getchar();
getchar();
system("cls");
}
void LQueue::correct_customer(LQueue *L)
{
int i=0,temp,numb,flag=0,flag1=0;
QNode *p,*q;
p=L->front;
q=front;
if(q==NULL)
cout<<"队列中无顾客!"<<endl;
else
{
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
while(q!=NULL)
{
q->data.Printf();
q=q->next;
}
cout<<endl<<"请输入需要修改顾客的排队号码:"<<endl;
cin>>numb;
cout<<endl;
Menus menu[50];
cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
cout<<" "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
i++;
}
i=i-1;
temp=i;
cout<<endl;
while(p!=NULL)
{
if(numb==p->data.queues)
{
cout<<"当前顾客信息为:"<<endl;
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
flag1=1;
while(flag==0)
{
i=temp;
cout<<"请输入修改后的桌号、菜品、账户余额:"<<endl;
cin>>p->data.table>>p->data.dishes>>p->data.amount;
while(i>=0)
{
if(strcmp(menu[i].dish_name,p->data.dishes)==0)
{
flag=1;
break;
}
else
flag=0;
i--;
}
if(flag==1)
cout<<"输入成功!"<<endl;
else
cout<<"菜单中没有此菜!"<<endl;
}
break;
}
else
p=p->next;
}
if(flag1==0)
cout<<"队伍中无此号码!"<<endl;
}
getchar();
getchar();
system("cls");
}
void LQueue::delete_customer(LQueue *L)
{
int numb,flag=0;
QNode *p,*q,*r;
p=L->front;
r=front;
if(r==NULL)
cout<<"队列中无顾客!"<<endl;
else
{
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
while(r!=NULL)
{
r->data.Printf();
r=r->next;
}
cout<<"请输入需要删除顾客的排队号码:"<<endl;
cin>>numb;
cout<<endl;
while(p!=NULL)
{
if(numb==p->data.queues)
{
if(flag==0)
{
cout<<"此顾客信息为:"<<endl;
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
L->front=p->next;
}
else
{
cout<<"此顾客信息为:"<<endl;
cout<<"桌号"<<setw(10)<<"排队号码"<<setw(10)<<"菜名"<<setw(10)<<"账户余额"<<endl;
cout<<p->data.table<<setw(10)<<p->data.queues<<setw(10)<<p->data.dishes<<setw(10)<<p->data.amount<<endl<<endl;
q->next=p->next;
}
flag=1;
break;
}
else
{
if(flag==0)
q=L->front;
else
q=q->next;
p=p->next;
}
flag++;
}
if(flag==0)
cout<<"队伍中无此号码!"<<endl;
}
getchar();
getchar();
system("cls");
}
LQueue::~LQueue()
{
delete rear;
}
Customer::Customer()
{
total++;
queues=total;
cout<<"您当前的排队号码为:"<<queues<<endl;
}
void Customer::order()
{
int i=0,temp,flag=0;
Menus menu[50];
cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
cout<<" "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
i++;
}
i=i-1;
temp=i;
while(flag==0)
{
i=temp;
cout<<"请输入该顾客桌号、菜品、账户余额:"<<endl;
cin>>table>>dishes>>amount;
while(i>=0)
{
if(strcmp(menu[i].dish_name,dishes)==0)
{
flag=1;
break;
}
else
flag=0;
i--;
}
if(flag==1)
cout<<"输入成功!"<<endl;
else
cout<<"菜单中没有此菜!"<<endl;
}
}
void Customer::Printf()
{
cout<<table<<setw(10)<<queues<<setw(10)<<dishes<<setw(10)<<amount<<endl;
}
void Menus::show()
{
int i=0;
Menus menu[50];
cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
cout<<" "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
i++;
}
getchar();
getchar();
system("cls");
}
void Menus::Set()
{
sums++;
cout<<"请分别输入所增加的菜名和价格:"<<endl;
cin>>dish_name>>price;
number=sums;
ofstream out("Menus.txt",ios::app);
out<<number<<" "<<dish_name<<" "<<price<<" "<<endl;
cout<<"输入成功!"<<endl;
out.close();
getchar();
getchar();
system("cls");
}
void Menus::correct_menus()
{
int i=0,temp;
char name[20];
Menus menu[50];
cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
cout<<" "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
i++;
}
cout<<endl<<"请输入想要修改的菜品名:"<<endl;
cin>>name;
temp=i;
i=0;
ofstream outf("Menus.txt",ios::trunc);
while(1)
{
in>>menu[i].number>>menu[i].dish_name>>menu[i].price;
if(strcmp(name,menu[i].dish_name)==0)
{
cout<<"请输入修改后的菜品编号、菜名、价格:"<<endl;
cin>>menu[i].number>>menu[i].dish_name>>menu[i].price;
outf<<endl;
break;
}
i++;
}
ofstream out("Menus.txt",ios::app);
for(i=0;i<temp;i++)
out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
cout<<"输入成功!"<<endl;
getchar();
getchar();
system("cls");
}
void Menus::delete_menus()
{
int i=0,temp,tempi;
char name[20];
Menus menu[50];
cout<<"当前的菜品有:\n"<<"菜品编号"<<setw(10)<<"菜名"<<setw(10)<<"价格"<<endl;
ifstream in("Menus.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
{
cout<<" "<<menu[i].number<<setw(15)<<menu[i].dish_name<<setw(7)<<menu[i].price<<endl;
i++;
}
cout<<endl<<"请输入想要删除的菜品名:"<<endl;
cin>>name;
temp=i;
i=0;
ofstream outf("Menus.txt",ios::trunc);
while(1)
{
in>>menu[i].number>>menu[i].dish_name>>menu[i].price;
if(strcmp(name,menu[i].dish_name)==0)
{
tempi=i;
outf<<endl;
break;
}
i++;
}
ofstream out("Menus.txt",ios::app);
for(i=0;i<temp;i++)
{
if(tempi==i)
continue;
out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
}
cout<<"输入成功!"<<endl;
getchar();
getchar();
system("cls");
}
void Menus::renew_menus()
{
int i=0,temp;
Menus menu[50];
ifstream in("Menus_renew.txt");
while(in>>menu[i].number>>menu[i].dish_name>>menu[i].price)
i++;
temp=i;
ofstream outf("Menus.txt",ios::trunc);
ofstream out("Menus.txt",ios::app);
for(i=0;i<temp;i++)
out<<menu[i].number<<" "<<menu[i].dish_name<<" "<<menu[i].price<<endl;
cout<<"谢谢使用本系统!"<<endl;
}
2.Menus.txt文件
1 水煮肉片 18
2 鱼香肉丝 25
3 鱼头 16
4 刀拍黄瓜 16
5 鲍鱼 20
3.Menus_renew.txt
1 水煮肉片 18
2 鱼香肉丝 25
3 鱼头 16
4 刀拍黄瓜 16
5 鲍鱼 20