资源描述
C++餐厅管理系统
北华大学
C++课程实习报告
餐厅点菜系统
学 院:电气信息工程学院
专 业:电子信息工程
班 级:
学 号:
姓 名:
指导教师:
餐厅点菜系统
一、 需求分析
1、 该程序对于餐厅菜单进行管理,显示所有菜,顾客可以点餐厅的所有菜,也可以按类查找,自动生成菜单,自动计算消费金额,可以使用优惠劵
2、 显示菜的编号、菜名、类别和单价
3、 菜可以按类查找:炒菜、炒饭和面类
4、 点菜
a)增加点菜
b)删除一个点菜
c)输出点菜信息并保存
d)计算消费金额
优惠卷
1)金额优惠
2)打折优惠
二、 设计实现
该餐厅点菜系统共有两个类和一个构造函数,Cmenu 类(菜的属性)和array类 (菜的数组),与函数youhui(计算有优惠卷时的价格)
在Cmenu类中,
定义:name 菜的编号,name 菜名,price 菜的单价,kind 菜的种类,sort 菜的数量,函数getnum 录入菜的编号
函数实现:
函数 getname 实现:录入菜的名字,
函数 getprice 实现:录入菜的单价,
函数 getkind 实现:录入菜的类别,
函数 getsort 实现:录入所点菜的数量,
函数 menudisplay 实现:菜谱显示,
函数selectdisplay 实现:对所点的菜进行输出,
函数 returnnum 实现:返回菜的编号,
函数 returnname 实现:返回菜名,
函数 returnprice 实现:返回菜的单价,
函数 returnkind 实现:返回菜的类别,
函数 returnsort 实现:返回菜的数量。
在array类中,
定义:sort 菜的类别,num 菜的数量
函数实现:
函数 getnum 实现:初始化num,
函数 getsort 实现:初始化sort,
函数 returnnum 实现:返回num,
函数 returnsort 实现:返回sort
主函数main的运行流程图:
退出界面
getnum( )
getsort( )
returnnum( )
returnsort( )
selectdisplay( )
file(“select.txt”)
returnprice( )
returnsort( )
returnkind( )
youhui( )
点菜
array类
菜单显示
menudisplay()()
按类查找
returnkind()
2
0
1
显示界面
选择操作
定义变量:
Int sort,geshu,NUM
String NAME,KIND
文件输入菜单信息
f1(“menu.txt”)
开始
三、 测试结果
首页:
菜的信息:
按类查找:
炒菜
炒饭
面类
点菜
菜的信息:
增加点菜:
删除点菜:
计算消费金额:
1、没有拥有优惠卷
2、 拥有优惠卷:
a)20元的优惠卷
b) 0.85折优惠卷
退出系统:
四、 结论及需改进的问题
餐厅点菜系统是在图书管理系统的基础上,慢慢自己改进的,其中增加点菜,删除点菜,输出菜单,按类查询都是按照图书管理系统中增加图书,删除图书,显示图书,按类查询中改进的,其中最重要的是菜单的录用,自己想了很多方法,最后用文本输入函数做的,把菜单完全的输入进去,还有一点新颖的地方,源于优惠劵的使用,不仅可以使用金额的优惠,并且还会使用打折卷的优惠,虽然这里面的算法很简单,但是增加的程序的实用性。
我感觉不足的是,应该有一个会进人后台的功能,进去可以增加菜单里的菜,删除菜,更改类别和金额,更方便餐厅的管理者,当然进人的时候,加入管理员密码。
餐厅点菜系统C++代码
#include<iostream>
#include <iomanip>
#include<fstream>
#include<string>
using namespace std;
class Cmenu //创建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 //创建一个array数组
{
public:
void getnum(int NUM); //初始化num的函数
void getsort(int SORT); //初始化sort的函数
int returnnum() //返回num的函数
{ return num; }
int returnsort() //返回sort的函数
{ return sort; }
private:
int sort,num;
};
void array::getnum(int NUM) //初始化num的函数体
{
num=NUM;
}
void array::getsort(int SORT) //初始化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]; //创建Cmenu类的对象数组
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<<"━*━*━*━*━*━*━*━*━*━*━*━欢迎光临本店━*━*━*━*━*━*━*━*━*━*━*"<<endl; //菜单
while(1)
{
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<endl;
cout<<endl;
cout<<" ┏━━━━━━━━━━━━━━━━━━━━━━━━┓ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┃ 0---------------显示菜单里所有的菜的信息 ┃ "<<endl;
cout<<" ┃ 1---------------在菜单里按类查找。 ┃ "<<endl;
cout<<" ┃ 2---------------点菜。 ┃ "<<endl;
cout<<" ┃ ┃ "<<endl;
cout<<" ┗━━━━━━━━━━━━━━━━━━━━━━━━┛ "<<endl;
cout<<endl;
cout<<"━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━*━"<<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] ; //动态创建i个array类的数组来储存菜的编号和数量
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;}
}
}
实习心得
通过这次C++实习,我确实学到了许多方面的知识,不仅仅包含课本上现有的基础知识点,更重要的是亲自实践,动手操作编写程序以及程序的调试。在这期间锻炼了我的动手能力,开拓了思维,更培养了独立思考问题的能力。因此我才有了以下六点心得和体会:
第一:不管做任何事都要有勇气,不要对不可预知的事说不,要知道只有不恐惧才会有收获。C++程序编写的时候比较复杂,而且内容也比较多,所以我们不应该被这种问题吓到,只要我们认真思考,就可以发现他其实并不是我们想象的那么难!
第二:要记得做任何事都要认真,粗心可真是吃大亏。尤其是在做C++实验的时候,敲错一个字母甚至是一个标点符号,就难以建立,难以运行。那可真是惨状啊!老师早已做下一步,可能你还停留在原地,跟不上老师的进程,耽误实习任务,所以要记得认真,这样可以接近成功!
第三:要多思考,虽然老师已将代码原本托出,但我们也要思考,写这一步的作用,能实现什么功能,在哪个部分增加变量,哪个部分增加函数,构造函数的加入可以增添什么,都是我们应该考虑的。如果真的从中有所得,自己独立思考出来,那就是自己的东西,自己可以随时运用。
第四:要勤奋,来这才知道,和外界有多大的距离,我们学的太少了,外边的知识已经爆炸了,但我们现在还在虚度光阴,真是太不应该了,也可能是一上大学我们的心理,过渡期没有很好的掌控,导致现在的我们,只是挨着过日子,没有明确自己的目标,将平时的许多时间都用到了玩游戏看电视剧上面,和C++程序员脱节。但我们要相信勤能补拙,只要自己从现在开始做,充分利用好以后的每分每秒,让生活变得充实!学无止境,只要觉醒就不会迟。
第五:要懂得谦虚,虽然这是一个伴随我们成长的一个词,但究竟做到的能有几人?我们都是处于学习的初期,对于c++上的很多东西,都是糊里糊涂。因此我们要时刻准备询问问题,不懂得地方就要虚心的向老师和同学请教。不找人的区别只找自己做题的差异,要就题论题,切不可就人论题!
简短但不简单的实习就这样接近尾声,这里给我留下的是满满的回念,满满的留恋。有的人在庆祝终于可以放假,终于可以轻松,但我更多的是,无奈,实习的时间真的是一晃而过!在这里我的动手能力明显提高,对于自己学c++也更多了些理性,对自己将来的就业方向,也有了眉目。真的很感谢这里的老师,尤其是我们的指导老师最后讲的一番话,谢谢老师!您幸苦了!
参考书籍
《C++程序设计》——清华大学出版社
《C++程序设计语言(特别版)》——机械工业出版社
《C++语言的设计和演化》——机械工业出版社
《AcceleratedC++中文版》——中国电力出版社
《C++Primer(3RD)》——中国电力出版社
《EssentialC++中文版》——华中科技大学出版社
《C++程序设计陷阱》——中国青年出版社
《提高C++性能的编译技术》——清华大学出版社
《C++Templates全览(简体版)》——人民邮电出版社
展开阅读全文