C++语言程序设计课程设计说明书一、课程设计题目及功能简介1、课程设计题目:餐厅点菜系统2、程序功能简介:1、能够实现顾客点菜、结帐、打印功能,能够实现顾客预定和VIP客户管理。
2、餐桌至少有15张。
3、客人规模在30人以上。
4、能够实现客人的排队等候等功能。
二、餐厅点菜系统背景及实用性1、餐厅点菜系统的数据结构表成员名(字段名)数据类型长度字段含义Food_Name string 食物名称Food_Price float 食物价格food_type string 餐点类型all_price int 总价B[6]、C[10]、D[8] Food 对象数组Desk_number int 桌号Cust_type string 顾客类型food_num int 食物数量All_Desk_numnumber int 餐厅总桌量Desk_customer int 每桌人数desk_num int 客人所定桌数All_desk int 总餐桌数Customer_num int 每桌人数cust_number int 客人规模2、界面(1)界面一先进入:餐厅管理系统初始化主管可以设置本餐厅所能容纳的餐桌数(不得小于15张)及每张餐桌所容纳的客人数。
(2)界面二初始化完毕后,就进入了:餐厅管理系统顾客可以选择:点餐、结账、或退出系统。
(3)界面三当我们选择点餐后,屏幕上就会显示:请输入顾客数、选择用户或退出系统。
(4)界面四当我们输入顾客数和选择用户后,屏幕就会显示出:您所需要的餐桌数并请顾客输入所需餐的类型或退出系统。
(5)界面五如:当我们选择早餐后,系统就会在屏幕上自动显示出早餐菜单并供顾客选择。
(6)界面六当我们选择菜单后,系统就会自动在屏幕上显示出:顾客一共所定的餐桌数;顾客的号码;顾客所点菜单;然后,屏幕将请顾客输入所需份数。
(7)界面七当顾客输入份数后,屏幕又将显示出:餐厅管理系统,顾客又可以选择再次点餐,或者选择结账。
(8)界面八当顾客选择结账后,系统就会根据顾客所输入的桌号计算并输出顾客所消费的金额,并显示:欢迎再次光临!3、实用性“餐厅点菜系统”适合各餐厅所用,餐厅可以根据自己餐厅规模的大小而设置适合自己的系统。
有了餐厅点菜系统,更方便顾客随时预订或直接点餐,同时更节约时间和人力资源,减少了餐厅的成本,提高了餐厅运行效率。
虽然次系统还有很多不完善的方面,但此系统还是能基本满足一般小餐厅的需求。
三、“餐厅点菜系统”流程图四、“餐厅点菜系统”模板介绍系统初始化输入餐桌数输入每桌人数进入餐厅管理系统点菜 结账 打0.85折 输入客人量 vip 客户计算桌数、分配桌号退出不打折点餐输入份额显示已点菜单 输出总额结束餐厅管理系统餐厅管理系统餐厅管理系统小于15张小于30人开始本系统共分为食物、顾客、管理、实行(主函数)等四个部分。
1、食物此部分又分为四个类----食物类、早餐类、午餐类、晚餐类。
(1)食物类食物类描述了食物名称、价格等数据特性,还分别设置了返回食物价格、显示食物菜单、显示餐点类型等函数特性。
(2)早餐类早餐类设置了早餐菜单、类型、总价格等数据特性,还设置了选择早餐菜单、计算顾客消费价格、显示顾客所选择的菜单,和输出餐点类型等函数。
(3)午餐类午餐类设置了午餐菜单、类型、总价格等数据特性,还设置了选择午餐菜单、计算顾客消费价格、显示顾客所选择的菜单,和输出餐点类型等函数。
(4)晚餐类晚餐类设置了晚餐菜单、类型、总价格等数据特性,还设置了选择晚餐菜单、计算顾客消费价格、显示顾客所选择的菜单,和输出餐点类型等函数。
2、顾客此类描述了桌号、顾客类型、食物数量等数据特性,还设置了设置桌号、设置餐点类型、设置顾客类型、设置食物分数、输出餐点类型、输出桌号、显示所点菜单、根据顾客类型输出消费总额等函数。
3、管理此类描述了本餐厅所有的餐桌数、所能容纳的顾客数量、每桌顾客数、顾客人数等数据特性,还设置了返回顾客类型、分配桌子给顾客、输入所需餐点类型、显示菜单、顾客点餐份数等函数。
4、实行次部分主要先使餐厅管理系统初始化,再调用前面的六个类,使这六个连为一个整体并运行。
五、总结通过本次的C++课程设计,让我学会了把书本上的知识应用到了实际中来。
虽然在这几周中有过挫折和坎坷,有的问题一直到了最后才得以解决,但我觉得很有价值。
如:在编程中遇到很多意外错误,有些错误还不易发现,并且此系统的有些功能比较难写,还得在老师、同学的帮助下完成。
这个程序还存在许多瑕疵,不是那么的完善,如:此体统不能让顾客取消预订,不能让顾客设置就餐时间等。
但是此系统是自己查资料、写代码、请教他人、解决无数的问题后,才写出来的,它凝聚着我的智慧和价值,让我很有成就感。
在这过程中,我尽力了,我认真去编写过,也从中感受到c++语言课程设计其实也没我想象中那么困难,即使做不到完美,也能在原来的基础上提升很多。
程序设计代码写得过于繁琐,不够人性化,是因为我的能力还不够,特别是把握指针、数组等内容的能力上,我还很欠缺。
这次课程设计锻炼我的意志,磨练我的耐心,提升自我的编程能力,最重要的是这次课程设计让我战胜了对计算机课程的恐惧,让我找到了学好它的信心,明白了“世上无难事,只怕有心人”。
最后,这次课程设计也很感谢为我解疑释难的老师和朋友,是你们让我懂得了更多编程的知识,同时感谢老师和朋友一起营造的良好的学习环境,为学习增加了不少有利条件。
manage.h文件# include"customer.h"class Manage{private:int *Desk_ptr;Food *Food_ptr;Customer *Customer_ptr;int All_Desk_num;int Desk_customer;//每桌客人数int Desk_num_ing;int desk_num;//所需餐桌数int choice;public:Manage(){}Manage(int Desk,int Cust);~Manage();void Give_Desk(int cust_num);void Give_Cust_Type();void Give_Meal_Type();void Give_food_num();void Show_Menu();void Pay();};Manage::Manage(int Desk,int Cust){int i;All_Desk_num=Desk;Desk_ptr=new int[All_Desk_num];Customer_ptr=new Customer[All_Desk_num];for(i=0;i<Desk;i++){(Customer_ptr+i)->Set_Desk_number(0);}Desk_customer=Cust;}Manage::~Manage(){delete[] Desk_ptr;delete Food_ptr;}void Manage::Give_Desk(int cust_num){int i,j;int temp;temp=(cust_num%Desk_customer);if(temp==0)desk_num=(cust_num/Desk_customer);else{if(temp==cust_num)desk_num=1;elsedesk_num=(cust_num/Desk_customer)+1;}cout<<"您需要餐桌数为:"<<desk_num<<"张"<<endl;for(i=0;i<desk_num;i++){for(j=0;j<All_Desk_num;j++){if((Customer_ptr+j)->Give_Desk_num()==0){Desk_num_ing=j;(Customer_ptr+j)->Set_Desk_number(j+1);break;}}if(j==All_Desk_num)cout<<"餐馆所有餐桌已被预订!"<<endl;}cout<<"餐桌预订成功!"<<endl;}void Manage::Give_Cust_Type(){int choice;cout<<"请问你是:"<<endl;cout<<"1、VIP用户"<<endl;cout<<"2、普通用户"<<endl;cout<<"3、退出"<<endl;cin>>choice;switch(choice){case 1:(Customer_ptr+Desk_num_ing)->Set_Type("VIP用户");break;case 2:(Customer_ptr+Desk_num_ing)->Set_Type("普通用户");break;default:Manage::~Manage();exit(1);}}void Manage::Give_Meal_Type(){cout<<"请问您需要:"<<endl;cout<<"1、早餐"<<endl;cout<<"2、中餐"<<endl;cout<<"3、晚餐"<<endl;cout<<"4、退出"<<endl;cin>>choice;switch(choice){case 1:Food_ptr=new Breakfast();(Customer_ptr+Desk_num_ing)->Set_Food(Food_ptr);break;case 2:Food_ptr=new Lunch();(Customer_ptr+Desk_num_ing)->Set_Food(Food_ptr);break;case 3:Food_ptr=new Dinner();(Customer_ptr+Desk_num_ing)->Set_Food(Food_ptr);break;default :Manage::~Manage();exit(1);}}void Manage::Give_food_num(){int n;if(desk_num>1){cout<<"输入您需要的";(Customer_ptr+Desk_num_ing)->Show_food_type();cout<<"份数:"<<endl;cin>>n;(Customer_ptr+Desk_num_ing)->Set_food_num(n);}}void Manage::Show_Menu(){cout<<"您一共订了"<<desk_num<<"张餐桌!"<<endl;(Customer_ptr+Desk_num_ing)->Show();}void Manage::Pay(){int desk_number;cout<<"请输入待结账的桌号:";cin>>desk_number;(Customer_ptr+desk_number-1)->Cut_Bill();*(Desk_ptr+desk_number)=0;cout<<"欢迎再次光临!"<<endl;}#include<iostream>#include<string>using namespace std;class Food{public:string Food_Name;float Food_Price;virtual string Get_food_type(){return"您还未点餐!";}virtual float Get_price(){cout<<"您还未点餐!";return 0;}virtual void choosefood(){}virtual void Show_Food(){cout<<"食物名称:"<<Food_Name<<" "<<"食物价格:"<<Food_Price<<"元"<<endl;}};class Breakfast:public Food{public:Breakfast(){egg.Food_Name="鸡蛋",egg.Food_Price=1;milk.Food_Name="牛奶",milk.Food_Price=2;soybean_milk.Food_Name="豆浆",soybean_milk.Food_Price=1;steamed_bread.Food_Name="馒头",steamed_bread.Food_Price=0.5;youtiao.Food_Name="油条",youtiao.Food_Price=0.5;chunjuan.Food_Name="春卷",chunjuan.Food_Price=1.5;food_type1="早餐";all_price1=0.0;B[0]=egg;B[1]=milk;B[2]=soybean_milk;B[3]=steamed_bread;B[4]=youtiao;B[5]=chunjuan;}virtual void choosefood(){cout<<"请输入您需要的早餐:"<<endl;cout<<"(0) ";egg.Show_Food();cout<<"(1) ";milk.Show_Food();cout<<"(2) ";soybean_milk.Show_Food();cout<<"(3) ";steamed_bread.Show_Food();cout<<"(4) ";youtiao.Show_Food();cout<<"(5) ";chunjuan.Show_Food();cout<<"(6) 退出"<<endl;cin>>i;for(j=0;i<6;j++){a[j]=i;cin>>i;}}virtual string Get_food_type(){return food_type1;}virtual float Get_price(){for(int k=0;k<j;k++)for(int t=0;t<6;t++)if(a[k]==t){all_price1+=B[t].Food_Price;break;}return all_price1;}virtual void Show_Food(){for(int a=0;a<j;a++)B[a].Show_Food();}private:Food egg;Food milk;Food soybean_milk;Food steamed_bread;Food chunjuan;Food youtiao;string food_type1;float all_price1;int i;int j;int a[20];Food B[6];};class Lunch:public Food{public:Lunch(){eggplant.Food_Name="红烧茄子",eggplant.Food_Price=4;potato.Food_Name="土豆丝",potato.Food_Price=4;cabbage_soup.Food_Name="白菜清汤",cabbage_soup.Food_Price=2.5;toufu_soup.Food_Name="豆腐清汤",toufu_soup.Food_Price=2.5;pepper.Food_Name="青椒肉丝",pepper.Food_Price=9;fish.Food_Name="酸菜鱼",fish.Food_Price=9;chicken.Food_Name="辣子鸡",chicken.Food_Price=10;duck.Food_Name="水煮鸭",duck.Food_Price=10;beef.Food_Name="干巴牛肉",beef.Food_Price=12;prawn.Food_Name="油炸海虾",prawn.Food_Price=10;food_type2="午餐";all_price2=0.0;C[0]=eggplant;C[1]=potato;C[2]=cabbage_soup;C[3]=toufu_soup;C[4]=pepper;C[5]=fish;C[6]=chicken;C[7]=duck;C[8]=beef;C[9]=prawn;}virtual void choosefood(){cout<<"请输入您需要的午餐:"<<endl;cout<<"(0) ";eggplant.Show_Food();cout<<"(1) ";potato.Show_Food();cout<<"(2) ";cabbage_soup.Show_Food();cout<<"(3) ";toufu_soup.Show_Food();cout<<"(4) ";pepper.Show_Food();cout<<"(5) ";fish.Show_Food();cout<<"(6) ";chicken.Show_Food();cout<<"(7) ";duck.Show_Food();cout<<"(8) ";beef.Show_Food();cout<<"(9) ";prawn.Show_Food();cout<<"(10) 退出"<<endl;cin>>i2;for(j2=0;i2<10;j2++){b[j2]=i2;cin>>i2;}}virtual string Get_food_type(){return food_type2;}virtual float Get_price(){for(int k=0;k<j2;k++)for(int t=0;t<10;t++)if(b[k]==t){all_price2+=C[t].Food_Price;break;}return all_price2;}virtual void Show_Food(){for(int a=0;a<j2;a++)C[a].Show_Food();}private:Food eggplant;Food potato;Food cabbage_soup;Food toufu_soup;Food pepper;Food fish;Food chicken;Food duck;Food beef;Food prawn;string food_type2;float all_price2;int i2;int j2;int b[20];Food C[10];};food.h文件class Dinner:public Food{public:Dinner(){cucumber.Food_Name="凉拌黄瓜",cucumber.Food_Price=5;cabbage.Food_Name="炒小白菜",cabbage.Food_Price=7;Fish.Food_Name="清蒸鱼",Fish.Food_Price=10;douya.Food_Name="炒豆芽",douya.Food_Price=5;donggua.Food_Name="红枣冬瓜",donggua.Food_Price=5;zhusun.Food_Name="青椒竹笋",zhusun.Food_Price=7;haidai_soup.Food_Name="海带汤", haidai_soup.Food_Price=5;;zicai_soup.Food_Name="紫菜汤",zicai_soup.Food_Price=7;food_type3="晚餐";all_price3=0.0;D[0]=cucumber;D[1]=cabbage;D[2]=Fish;D[3]=douya;D[4]=donggua;;D[5]=zhusun;D[6]=haidai_soup;D[7]=zicai_soup;}virtual void choosefood(){cout<<"请输入您需要的晚餐:"<<endl;cout<<"(0) ";cucumber.Show_Food();cout<<"(1) ";cabbage.Show_Food();cout<<"(2) ";Fish.Show_Food();cout<<"(3) ";douya.Show_Food();cout<<"(4) ";donggua.Show_Food();cout<<"(5) ";zhusun.Show_Food();cout<<"(6) ";haidai_soup.Show_Food();cout<<"(7) ";zicai_soup.Show_Food();cout<<"(8) 退出"<<endl;cin>>i3;for(j3=0;i3<8;j3++){c[j3]=i3;cin>>i3;}}virtual string Get_food_type(){return food_type3;}virtual float Get_price(){for(int k=0;k<j3;k++)for(int t=0;t<8;t++)if(c[k]==t){all_price3+=D[t].Food_Price;break;}return all_price3;}virtual void Show_Food(){for(int a=0;a<j3;a++)D[a].Show_Food();}private:Food cucumber;Food cabbage;Food Fish;Food douya;Food donggua;Food zhusun;Food haidai_soup;Food zicai_soup;string food_type3;float all_price3;int i3;int j3;int c[20];Food D[8];};customer.h文件# include"food.h"class Customer{private:int Desk_number;//桌号Food *Cust_Food_Ptr;string Cust_type;//顾客类型int food_num;//食物数量public:void Set_Desk_number(int num){Desk_number=num;}//设置桌号void Set_Food(Food *p){Cust_Food_Ptr=p;Cust_Food_Ptr->choosefood();}//设置餐点类型void Set_Type(string typ_nam){Cust_type=typ_nam;}//设置顾客类型void Set_food_num(int num){food_num=num;}//设置食物分数void Show_food_type(){cout<<Cust_Food_Ptr->Get_food_type();}//输出餐点类型int Give_Desk_num(){return Desk_number;}//void Show(){//cout<<"您的号码为: "<<Desk_number<<"号"<<endl;cout<<"您的菜单为:"<<endl;Cust_Food_Ptr->Show_Food();}void Cut_Bill(){if(Cust_type=="VIP用户")cout<<"尊敬的VIP用户,您总共消费:"<<(Cust_Food_Ptr->Get_price())*0.85*food_num<<"元"<<endl;elsecout<<"尊敬的顾客,您总共消费:"<<Cust_Food_Ptr->Get_price()*food_num<<"元"<<endl;Desk_number=0;}};main.cpp文件#include"manage.h"int main(){int All_desknumber;//总餐桌数int Customer_num;//每张餐桌能容纳的顾客人数int cust_number;//顾客数cout<<"餐厅管理系统初始化……"<<endl;cout<<"输入该餐厅能容纳的餐桌数(不得小于张):";cin>>All_desknumber;if(All_desknumber<15){cout<<"您的输入错误!"<<endl;return 0;}else{cout<<"输入每张餐桌容纳的客人数:";cin>>Customer_num;cout<<"初始化完毕!"<<endl;}Manage My_Manage(All_desknumber,Customer_num);//声明一个对象while(1){int choice=1;cout<<"餐厅管理系统:"<<endl;cout<<"1.点餐\n2.结账\n3.退出系统"<<endl;cout<<"请选择:";cin>>choice;switch(choice){case 1:{cout<<"请输入顾客数(顾客数不能小于人):";cin>>cust_number;if(cust_number<30){cout<<"您的输入错误"<<endl;return 0;}else{My_Manage.Give_Cust_Type();//顾客类型My_Manage.Give_Desk(cust_number);//分配桌子给顾客My_Manage.Give_Meal_Type();//所需点餐类型My_Manage.Show_Menu();//显示菜单My_Manage.Give_food_num();//顾客点餐份数break;}}case 2:{My_Manage.Pay();break;}case 3:{My_Manage.~Manage();}default :cout<<"您的输入错误!"<<endl;break;}}return 0;}参考文献1、《C++程序设计》钱能清华大学出版社 2010.12、《C++程序设计试验指导》钱能清华大学出版社 2009.63、《C程序设计》谭浩强清华大学出版社 2009.84、《C++语言程序设计(第4版)》郑莉清华大学出版社 2010.55、《C++语言程序设计(第3版)学生用书》郑莉清华大学出版社 2010.10。