模拟餐馆点菜系统
你到一个餐馆去仔细研究一下餐馆的业务流程:餐馆事先准备好自己的招牌菜及一些常规的菜式,有营业场所,服务人员等;顾客来了以后,服务生先给客人找一张桌子坐下来,然后递上菜谱等待顾客点菜,顾客可以点一个菜,也可以退菜,完了之后结账走人,这张桌子又可以用来招待下一批顾客。自己设计程序模拟点菜系统。
自己分析:主要由菜单页面、点菜页面,一开始并没有什么头绪,于是上网寻找资料,看到大部分的资料用的都是9、10、11、12章的类容,都用到了类和对象,感觉看着眼花缭乱,我尝试过用结构体构造一个菜单,但是到了点菜的环节就失败了,我也借鉴过很多的资料,但是因为涉及的内容超出了自己所学的范围,或许是自己思维受限吧,怎么都想不出来,于是我只能学着网上的资料一步一步的用类和对象的方式来写,一开始也遇到很多问题,即使是跟着写,写着写着就眼花缭乱了,感觉都找不到北了,但是我知道我只能硬着头皮好好模仿着写了,于是我又花了很长时间,改正,修改,调试,最终终于出了个样子了,希望老师谅解,我会继续学习的,在这次的课程设计中我终于知道了一名程序员是要能沉得住气的,面对数百甚至数千的代码,还是需要勇气和耐心的,同时我感觉我对c++的了解也加深了不少,但是还有很大的提升空间。希望以后我能学的更好,在此,谢谢老师您的教导!
#include<iostream>
#include <iomanip>
#include<fstream>
#include<string>
using namespace std;
class Cmenu
{
int num;
string name;
float price;
string kind;
int sort;
public:
void getnum(int i);
void getname(string Name);
void getprice(float Price);
void getkind(string Kind);
void getsort(int SORT);
void menudisplay();
void selectdisplay();
float returnnum()
{ return num; }
string returnname()
{ return name; }
float returnprice()
{ return price; }
string returnkind()
{ return kind; }
int returnsort()
{ return sort; }
};
void Cmenu::getnum(int i)
{
num=i;
}
void Cmenu::getname(string Name)
{
name=Name;
}
void Cmenu::getprice(float Price)
{
price=Price;
}
void Cmenu::getkind(string Kind)
{
kind=Kind;
}
void Cmenu::getsort(int SORT)
{
sort=SORT;
}
void Cmenu::menudisplay()
{
cout<<setw(3)<<num<<setw(22)<<name<<setw(16)<<kind<<setw(16)<<price<<endl;
}
void Cmenu::selectdisplay()
{
cout<<setw(3)<<num<<setw(24)<<name<<setw(16)<<kind<<setw(16)<<price<<setw(19)<<sort<<endl;
}
float youhui(float sum,float point)
{
if(point>1.0)
{
sum=sum-point;
}
if(point<=1.0)
{
sum=sum*point;
}
return sum;
}
class array
{
public:
void getnum(int NUM);
void getsort(int SORT);
int returnnum()
{ return num; }
int returnsort()
{ return sort; }
private:
int sort,num;
};
void array::getnum(int NUM)
{
num=NUM;
}
void array::getsort(int SORT)
{
sort=SORT;
}
void main()
{
int i,id,m,q,z,sort,b;
char j;
int geshu;
int NUM;
string NAME,KIND;
float PRICE,POINT,sum=0;
Cmenu food[40];
ifstream f1("menu.txt");
for(j=0;j<12;j++)
{
f1>>NUM;
f1>>KIND;
f1>>NAME;
f1>>PRICE;
food[j].getnum(NUM);
food[j].getkind(KIND);
food[j].getname(NAME);
food[j].getprice(PRICE);
food[0].getnum(1);
food[0].getkind("世界杯咖啡");
food[0].getname("摩卡咖啡");
food[0].getprice(8);
food[1].getnum(2);
food[1].getkind("世界杯咖啡");
food[1].getname("美式咖啡");
food[1].getprice(10);
food[2].getnum(3);
food[2].getkind("世界杯咖啡");
food[2].getname("拿铁咖啡");
food[2].getprice(15);
food[3].getnum(4);
food[3].getkind("世界杯咖啡");
food[3].getname("卡布奇诺");
food[3].getprice(15);
food[4].getnum(5);
food[4].getkind("世界杯咖啡");
food[4].getname("焦糖玛奇朵");
food[4].getprice(5);
food[5].getnum(6);
food[5].getkind("世界杯咖啡");
food[5].getname("特浓咖啡 ");
food[5].getprice(6);
food[6].getnum(7);
food[6].getkind("世界杯点心");
food[6].getname("爱尔良烤翅汉堡");
food[6].getprice(6);
food[7].getnum(8);
food[7].getkind("世界杯点心");
food[7].getname("三文治及汉堡");
food[7].getprice(7);
food[8].getnum(9);
food[8].getkind("世界杯点心");
food[8].getname("牛堡或鸡堡 ");
food[8].getprice(5);
food[9].getnum(10);
food[9].getkind("世界杯扒");
food[9].getname("世界杯鸡扒");
food[9].getprice(8);
food[10].getnum(11);
food[10].getkind("世界杯扒");
food[10].getname("世界杯猪扒");
food[10].getprice(5);
food[11].getnum(12);
food[11].getkind("世界杯扒");
food[11].getname("世界杯牛扒");
food[11].getprice(6);
}
f1.close();
cout<<"━0━0━0━0━0━0━0━0━0━0━0━欢迎光临世界杯咖啡店━0━0━0━0━0━0━0━0"<<endl; //菜单
while(1)
{
cout<<"━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━"<<endl;
cout<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ 0---------------菜单信息 ┃ "<<endl;
cout<<" ┃^ 0 ^ 1---------------分类查找 ^ 0 ^ ┃ "<<endl;
cout<<" ┃ 2---------------开始点菜 ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cout<<endl;
cout<<"━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━0━"<<endl;
cin>>q;
if(q==0)
{
cout<<"-------------------------------菜单---------------------------"<<endl;
cout<<"菜的编号 菜名 类别 单价/元 "<<endl;
for(j=0;j<12;j++)
food[j].menudisplay();
cout<<"-------------------------------------------------------------"<<endl;
}
if(q==1)
{
cout<<"1--------------世界杯咖啡"<<endl;
cout<<"2--------------世界杯点心"<<endl;
cout<<"3--------------世界杯扒"<<endl;
cin>>z;
if(z>3)
{
system("cls");
cout<<"请输入正确序号"<<endl;
}
switch(z)
{
case 1: //输出咖啡类
for(j=0;j<40;j++)
{
if(food[j].returnkind()=="世界杯咖啡")
food[j].menudisplay();
}
break;
case 2: //输出点心类
for(j=0;j<40;j++)
{
if(food[j].returnkind()=="世界杯点心")
food[j].menudisplay();
}
break;
case 3: //输出扒类
for(j=0;j<40;j++)
{
if(food[j].returnkind()=="世界杯扒")
food[j].menudisplay();
}
break;
}
}
if(q>2)
{
system("cls");
cout<<"请输入正确序号"<<endl;
}
if(q==2) break; //退出进入点菜环节
}
cout<<"你要点多少个菜?"<<endl;
cin>>i;
array *a=new array[i] ;
for(j=0;j<i;j++)
{
cout<<"请选择第"<<j+1<<"个菜的编号:"<<endl;
cin>>id;
cout<<"请输入数量:"<<endl;
cin>>sort;
a[j].getnum(id);
a[j].getsort(sort);
}
for(;;)
{
cout<<" "<<endl;
cout<<" "<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ 1--------加菜 ┃ "<<endl;
cout<<" ┃ 2--------退菜 ┃ "<<endl;
cout<<" ┃ 3--------输出点菜信息并保存 ┃ "<<endl;
cout<<" ┃ 4--------所用消费金额 ┃ "<<endl;
cout<<" ┃ 0--------退出系统 ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cin>>b;
if(b==1)
{
cout<<"你要增加多少个菜?"<<endl;
cin>>geshu;
array *p=new array[i];
for(j=0;j<i;j++)
{
p[j].getnum(a[j].returnnum());
p[j].getsort(a[j].returnsort());
}
delete [] a;
i=i+geshu;
a=new array[i];
for(j=0;j<i-geshu;j++)
{ a[j].getnum(p[j].returnnum());
a[j].getsort(p[j].returnsort());
}
delete [] p;
for(j=i-geshu;j<i;j++)
{
cout<<"请输入增加的一个菜的编号和数量:"<<endl;
cin>>id;
cin>>sort;
a[j].getnum(id);
a[j].getsort(sort);
}
cout<<"增加点菜成功。"<<endl;
}
if(b==2)
{
cout<<"请输入要删除的菜的编号:"<<endl;
cin>>id;
for(j=0;j<i;j++)
{
if(a[j].returnnum()==id)
{
m=j;
for(j=m;j<i;j++)
{
a[j]=a[j+1];
}
i--;
cout<<"删除点菜成功。"<<endl;break;
}
}
if(j==i)
{
cout<<"您并没有点过此类菜,请重新确认。"<<endl;
}
}
if(b==3)
{ char baocun;
cout<<"菜的编号 菜名 类别 单价/元 数量"<<endl;
for(m=0;m<i;m++)
{
for(j=0;j<40;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ food[j].getsort(a[m].returnsort());
food[j].selectdisplay();
}
}
}
cout<<"是否保存并退出?"<<endl;
cout<<"请按y(是)或n(否)"<<endl;
cin>>baocun;
if(baocun=='y')
{ ofstream file("select.txt");
file<<"菜的编号 菜名 类别 单价/元 数量"<<endl;
for(m=0;m<i;m++)
{
for(j=0;j<40;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ file<<food[j].returnnum()<<" "<<food[j].returnname()<<" "<<food[j].returnkind()<<
" "<<food[j].returnprice()<<" "<<food[j].returnsort()<<endl;
}
}
}
file.close();
cout<<"已成功保存!"<<endl;
break;}
}
if(b==4) {
sum=0;
cout<<"你是否拥有优惠券?"<<endl;
cout<<"0----------是"<<endl;
cout<<"1----------否"<<endl;
cin>>q;
for(m=0;m<i;m++)
{
for(j=0;j<40;j++)
{
if(a[m].returnnum()==food[j].returnnum())
{ food[j].getsort(a[m].returnsort());
sum=sum+food[j].returnprice()*food[j].returnsort();
}
}
}
if(q>1) {system("cls");cout<<"请输入正确序号"<<endl;}
if(q==0)
{
cout<<"请输入优惠券的优惠金额(大于1)或者是优惠的折扣比:"<<endl;
cin>>POINT;
cout<<"打折后的总的金额是:"<<youhui(sum,POINT)<<"元"<<endl;
}
if(q==1)
{
cout<<"总的金额是:"<<sum<<"元"<<endl;}
}
if(b==0)
{system("cls");
cout<<endl;
cout<<endl;
cout<<endl;
cout<<"*****************************欢迎再次光临********************************"<<endl;
cout<<endl;
cout<<endl;
break;}
if(b>4) {system("cls");cout<<"请输入正确序号"<<endl;}
}
这是菜单,主要以咖啡为主,点心和扒类为辅。
这是分类查找
开始点菜!
加菜菜单,金额计算。