点餐系统实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《高级语言程序设计课程设计》报告模板吉林大学珠海学院
高级语言程序设计
课程设计
系别:计算机学院
专业名称:计算机科学与技术
学生姓名:
学号:
指导教师:
完成日期:2018年 6月 12日
目录
1.题目1..................................................................................................................................................................
1.1 问题描述.................................................................................................................................................
1.2 解题思路.................................................................................................................................................
1.3 程序设计.................................................................................................................................................
1.4 测试结果.................................................................................................................................................
2.题目2 (2)
2.1 问题描述 (2)
2.2 解题思路 (2)
2.3 程序设计 (2)
2.4 测试结果.................................................................................................................................................
3.题目3 (3)
3.1 问题描述 (3)
3.2 解题思路 (4)
3.3 程序设计 (4)
3.4 测试结果 (4)
4. 题目4 (5)
4.1 问题描述 (5)
4.2 解题思路 (6)
4.3 程序设计 (6)
4.4 测试结果 (6)
5. 结论与心得 (17)
6. 参考文献 (17)
1.题目1
1.1 问题描述
编写程序,输入两个整数,计算它们的商和余数,并输出。
运行程序:输入9和2两个整数,结果图如下图所示:
1.2 解题思路
问题分析:该题需要对用户输入的两个数字进行除法运算并输出结果
解题思路:首先依题目要求引导用户输入数字,然后进行除法运算并输出结果
1.3 程序设计
具体目标:利用已定义的除法运算对用户输入的两个数字进行处理
1.4 测试结果
int a,b;
cout<<"请输入两个整数,用空格分隔开,按回车键结束:"<<endl;
cin>>a>>b;
cout<<"输出结果:"<<endl;
cout<<"num1="<<a<<endl<<"num2="<<b<<endl;
cout<<a<<"除以"<<b<<" "<<"商为:"<<a/b<<" "<<"余数为:"<<a%b<<endl;
测试结果:
2.题目2
2.1 问题描述
编写程序,实现对四个整数由大到小排序,并输出。
效果如图:
2.2 解题思路
问题分析:该题需要对用户输入的四个整数进行由大到小的排序并输出解题思路:引导用户输入数字,并用冒泡排序法进行排序,然后输出
2.3 程序设计
具体目标:对用户输入的数字进行冒泡排序
2.4 测试结果
int i,j;
int a[4];
cout<<"请输入4个整数,用空格键分开,按回车键结束:"<<endl;
for(i=1;i<5;i++)
{
cin>>a[i];
}
for(i=1;i<5;i++)
{
for(j=1;j<i;j++)
{
if(a[i]>a[j])
{
int temp=0;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(i=1;i<5;i++)
{
cout<<a[i]<<" ";
}
测试结果:
3.题目3
3.1 问题描述
编写程序,输出1-200之间可以被n整除的所有整数,n由用户输入。
要求每一行显示5个数,并且程序最后输出一共有多少个整数能被n整除。
效果图:
3.2 解题思路
问题分析:该题需要用户指定一个整数,计算1-200以内能被该数字整除的整数并输出
解题思路:规定1-200的计算范围,对用户输入的数字挨个进行除法运算,对能整除的数字进行计数并输出
3.3 程序设计
具体目标;引导用户输入数字,因为题目规定的范围比较小,所以在规定的上下界范围内用穷举的方法对每个数字进行除法运算,对符合要求的数字进行计数,计算完成后以每行5个的形式输出所有符合要求的数字
3.4 测试结果
int a,b,count=0;
cout<<"请输入一个整数:"<<endl;
cin>>a;
cout<<"1-200之间能被"<<a<<"整除的数:"<<endl;
for(b=1;b<=200;b++)
{
if(b%a==0)
{
cout<<b<<" ";
count++;
}
if(count%5==0)
cout<<endl;
}
cout<<endl;
cout<<"一共有"<<count<<"个数能被"<<a<<"整除"<<endl;
测试结果:
4. 题目4
4.1 问题描述
金拱门快餐点餐、结算系统
题目描述:金拱门快餐店主要出售汉堡、小吃、饮料和甜品等类型的快餐食品,每种类型的食品有不同的产品,例如饮料类食品有可乐、咖啡、茶饮料等。
现在让你担任吉珠金拱门连锁门店的经理,负责销售产品的选定和套餐的设计,你需要使用C/C++的console模式开发一个软件,包含所有销售产品的信息(包括单品和套餐信息),通过一个菜单系统实现顾客的点餐和结算过程,通过管理员权限统计当前结算周期的销售信息(如各产品的销售量、销售额等)
功能需求:
(1)根据面向对象的设计思想,设计一个抽象类作为基类,封装所有具体产品的共有属性和运算。
根据你的产品列表,从基类派生出各具体类,包括单品和套餐产品。
(2)设计一个菜单类,应该包含但不限定下述多层菜单选项
i.顾客点餐子菜单:商品列表,顾客可一次购买多种产品
ii.结算子菜单:顾客点餐完毕自动转入结算界面,现实顾客点餐内容及总金额。
要求可以返回点餐菜单进行修改。
iii.管理员子菜单:密码管理,销售统计,退出系统。
(3)设计一个订单类,封装每一个售出的订单信息,以供数据统计使用。
(4)使用外部文件存取数据,方便数据的输入输出。
4.2 解题思路
问题分析:该题需要我们创建一个产品的抽象类,还要派生出各具体类,设置一个用户操作界面,实现顾客点餐子菜单结算子菜单管理员子菜单解题思路:首先用class创建一个产品类,使用virtual关键字声明纯虚函数,实现产品的抽象类,然后派生出各种具体产品的类(汉堡类,小吃类,饮料类,甜品类,套餐类等),通过switch关键字实现用户的操作界面,用fopen打开文件存储产品的信息,(fputs存储函数)
4.3 程序设计
具体目标:创建一个抽象产品类,具体产品继承了抽象产品类,抽象类中有价格,数量,总价格,产品信息等成语,实现顾客点餐子菜单:商品列表,顾客可一次购买多种产品,结算子菜单:顾客点餐完毕自动转入结算界面,现实顾客点餐内容及总金额。
要求可以返回点餐菜单进行修改。
管理员子菜单:密码管理,销售统计,退出系统,使用外部文件存取数据,方便数据的输入输出
4.4 测试结果
#include<iostream>
#include <string.h>
#include<stdlib.h>
#include<stdio.h>//对文件操作的库函数
#include<conio.h> //输入输出头文件包含getch putch等不回显函数
using namespace std;
class cp//产品的抽象类
{
public:
virtual double jisuanzongjiage()=0;//计算总价格函数
virtual void shurushuliang()=0;//输入数量函数
virtual void shezhijiage(double x)=0;//设置产品价格函数
double zongshuliang;//销售的总数量
char name[20];//产品名称
double shuliang;//数量
double jiage;//价格
protected: //封装产品的总价格
double zongjiage; //总价格
};
class hanbao:public cp//汉堡类
{
public:
void shezhijiage(double x)
{
jiage=x;
}
double jisuanzongjiage()
{
zongjiage=jiage*shuliang;
return zongjiage;
}
void shurushuliang()
{
cout<<"请输入点餐数量"<<endl;
cin>>shuliang;
}
};
class xiaochi:public cp//小吃类
{
public:
void shezhijiage(double x)
{
jiage=x;
}
double jisuanzongjiage()
{
zongjiage=jiage*shuliang;
return zongjiage;
}
void shurushuliang()
{
cout<<"请输入点餐数量"<<endl;
cin>>shuliang;
}
};
class yinliao:public cp//饮料类
{
public:
void shezhijiage(double x)
{
jiage=x;
}
double jisuanzongjiage()
{
zongjiage=jiage*shuliang;
return zongjiage;
}
void shurushuliang()
{
cout<<"请输入点餐数量"<<endl;
cin>>shuliang;
}
};
class tianpin:public cp//甜品类
{
public:
void shezhijiage(double x)
{
jiage=x;
}
double jisuanzongjiage()
{
zongjiage=jiage*shuliang;
return zongjiage;
}
void shurushuliang()
{
cout<<"请输入点餐数量"<<endl;
cin>>shuliang;
}
};
class taocan:public cp//套餐类
{
public:
void shezhijiage(double x)
{
jiage=x;
}
double jisuanzongjiage()
{
zongjiage=jiage*shuliang;
return zongjiage;
}
void shurushuliang()
{
cout<<"请输入点餐数量"<<endl;
cin>>shuliang;
}
};
class dingdan//订单类
{
public:
char dd[100];
};
int main()
{
FILE*chanpin;//创建保存每种产品信息的文件
while(1)
{
chanpin=fopen("产品.txt","w");
if(chanpin!=NULL)
{
cout<<"金拱门产品信息文件创建成功"<<endl;
break;
}
}
hanbao hb[5];//汉堡类的具体对象(每种汉堡)
strcpy(hb[1].name,"双层牛肉堡");//设置每种汉堡的名字strcpy(hb[2].name,"巨无霸");
strcpy(hb[3].name,"原味鸡腿堡");
strcpy(hb[4].name,"深海鳕鱼堡");
hb[1].shezhijiage(20);//设置他们的价格
hb[2].shezhijiage(25);
hb[3].shezhijiage(19);
hb[4].shezhijiage(19);
fputs("汉堡:",chanpin);//用外部文件存储汉堡类的信息fputs("\n",chanpin);
fputs(hb[1].name,chanpin);
fputs(" 价格:20",chanpin);
fputs("\n",chanpin);
fputs(" 价格:25",chanpin);
fputs("\n",chanpin);
fputs(hb[3].name,chanpin);
fputs(" 价格:19",chanpin);
fputs("\n",chanpin);
fputs(hb[4].name,chanpin);
fputs(" 价格:19",chanpin);
fputs("\n",chanpin);
fputs("\n",chanpin);
xiaochi xc[5];//小吃类的具体对象(每种小吃)
strcpy(xc[1].name,"中薯条");
strcpy(xc[2].name,"大薯条");
strcpy(xc[3].name,"炸鸡米花");
strcpy(xc[4].name,"烤鸡腿");
xc[1].shezhijiage(7);//设置他们的价格
xc[2].shezhijiage(10);
xc[3].shezhijiage(11);
xc[4].shezhijiage(9);
fputs("小吃:",chanpin);//用外部文件存储小吃类的信息fputs("\n",chanpin);
fputs(xc[1].name,chanpin);
fputs(" 价格:7",chanpin);
fputs("\n",chanpin);
fputs(xc[2].name,chanpin);
fputs(" 价格:10",chanpin);
fputs("\n",chanpin);
fputs(xc[3].name,chanpin);
fputs(" 价格:11",chanpin);
fputs("\n",chanpin);
fputs(xc[4].name,chanpin);
fputs(" 价格:9",chanpin);
fputs("\n",chanpin);
fputs("\n",chanpin);
yinliao yl[5];//饮料类的具体对象(每种饮料)
strcpy(yl[1].name,"可乐");
strcpy(yl[2].name,"咖啡");
strcpy(yl[3].name,"茶饮料");
strcpy(yl[4].name,"水果茶");
yl[1].shezhijiage(9);//设置他们的价格
yl[2].shezhijiage(15);
yl[3].shezhijiage(12);
yl[4].shezhijiage(16);
fputs("饮料:",chanpin);//用外部文件存储饮料类的信息fputs("\n",chanpin);
fputs(" 价格:9",chanpin);
fputs("\n",chanpin);
fputs(yl[2].name,chanpin);
fputs(" 价格:15",chanpin);
fputs("\n",chanpin);
fputs(yl[3].name,chanpin);
fputs(" 价格:12",chanpin);
fputs("\n",chanpin);
fputs(yl[4].name,chanpin);
fputs(" 价格:16",chanpin);
fputs("\n",chanpin);
fputs("\n",chanpin);
tianpin tp[5];//甜品类的具体对象(每种甜品) strcpy(tp[1].name,"抹茶甜筒");
strcpy(tp[2].name,"巧克力雪糕");
strcpy(tp[3].name,"草莓新地");
strcpy(tp[4].name,"奥利奥麦旋风");
tp[1].shezhijiage(4);//设置他们的价格
tp[2].shezhijiage(7);
tp[3].shezhijiage(8);
tp[4].shezhijiage(9);
fputs("甜品:",chanpin);
fputs("\n",chanpin);
fputs(tp[1].name,chanpin);
fputs(" 价格:4",chanpin);
fputs("\n",chanpin);
fputs(tp[2].name,chanpin);
fputs(" 价格:7",chanpin);
fputs("\n",chanpin);
fputs(tp[3].name,chanpin);
fputs(" 价格:8",chanpin);
fputs("\n",chanpin);
fputs(tp[4].name,chanpin);
fputs(" 价格:9",chanpin);
fputs("\n",chanpin);
fputs("\n",chanpin);
taocan tc[5];//套餐类的具体对象(每种套餐) strcpy(tc[1].name,"原味板烧鸡腿堡配中薯套餐"); strcpy(tc[2].name,"麦辣鸡腿堡鸡翅套餐"); strcpy(tc[3].name,"亲子套餐");
strcpy(tc[4].name,"深海鳕鱼堡加中薯套餐");
tc[1].shezhijiage(35);//设置他们的价格
tc[2].shezhijiage(36);
tc[3].shezhijiage(45);
tc[4].shezhijiage(39);
fputs("套餐:",chanpin);
fputs("\n",chanpin);
fputs(tc[1].name,chanpin);
fputs(" 价格:35",chanpin);
fputs("\n",chanpin);
fputs(tc[2].name,chanpin);
fputs(" 价格:36",chanpin);
fputs("\n",chanpin);
fputs(tc[3].name,chanpin);
fputs(" 价格:45",chanpin);
fputs("\n",chanpin);
fputs(tc[4].name,chanpin);
fputs(" 价格:39",chanpin);
fputs("\n",chanpin);
fputs("\n",chanpin);
for(int i=1;i<=4;i++)//设置每个产品一开始销售的数量为0;{
hb[i].zongshuliang=0;
xc[i].zongshuliang=0;
yl[i].zongshuliang=0;
tp[i].zongshuliang=0;
tc[i].zongshuliang=0;
}
while(1)
{
bool y=false;
int a;
cout<<"0.退出"<<endl;
cout<<"1.点餐"<<endl;
cout<<"2.查询汉堡类别的销售数量"<<endl;
cout<<"3.查询小吃类别的销售数量"<<endl;
cout<<"4.查询饮料类别的销售数量"<<endl;
cout<<"5.查询甜品类别的销售数量"<<endl;
cout<<"6.查询套餐类别的销售数量"<<endl;
cout<<"请输入操作号码"<<endl;
cin>>a;
switch(a)
{
case 0:
{
y=true;
}break;
case 1:
{
while(1)
{
double sum=0;
int aa=0,bb=0,cc=0,dd=0,ee=0;
system("cls");//清屏函数
cout<<"---汉堡---"<<endl;
cout<<"0.不需要"<<endl;
cout<<"1.双层牛肉堡"<<endl;
cout<<"2.巨无霸"<<endl;
cout<<"3.原味鸡腿堡"<<endl;
cout<<"4.深海鳕鱼堡"<<endl;
cout<<"请输入你要点餐的号码"<<endl; cin>>aa;
if(aa==1||aa==2||aa==3||aa==4)
{
hb[aa].shurushuliang();
sum=sum+hb[aa].jisuanzongjiage();
}
system("cls");
cout<<"---小吃---"<<endl;
cout<<"0.不需要"<<endl;
cout<<"1.中薯条"<<endl;
cout<<"2.大薯条"<<endl;
cout<<"3.炸鸡米花"<<endl;
cout<<"4.烤鸡腿"<<endl;
cout<<"请输入你要点餐的号码"<<endl; cin>>bb;
if(bb==1||bb==2||bb==3||bb==4)
{
xc[bb].shurushuliang();
sum=sum+xc[bb].jisuanzongjiage();
}
system("cls");
cout<<"---饮料---"<<endl;
cout<<"0.不需要"<<endl;
cout<<"1.可乐"<<endl;
cout<<"2.咖啡"<<endl;
cout<<"3.茶饮料"<<endl;
cout<<"4.水果茶"<<endl;
cout<<"请输入你要点餐的号码"<<endl; cin>>cc;
if(cc==1||cc==2||cc==3||cc==4)
{
yl[cc].shurushuliang();
sum=sum+yl[cc].jisuanzongjiage();
}
system("cls");
cout<<"---甜品---"<<endl;
cout<<"0.不需要"<<endl;
cout<<"1.抹茶甜筒"<<endl;
cout<<"2.巧克力雪糕"<<endl;
cout<<"3.草莓新地"<<endl;
cout<<"4.奥利奥麦旋风"<<endl;
cout<<"请输入你要点餐的号码"<<endl;
cin>>dd;
if(dd==1||dd==2||dd==3||dd==4)
{
tp[dd].shurushuliang();
sum=sum+tp[dd].jisuanzongjiage();
}
system("cls");
cout<<"---套餐---"<<endl;
cout<<"0.不需要"<<endl;
cout<<"1.原味板烧鸡腿堡配中薯套餐"<<endl;
cout<<"2.麦辣鸡腿堡鸡翅套餐"<<endl;
cout<<"3.亲子套餐"<<endl;
cout<<"4.深海鳕鱼堡加中薯套餐"<<endl;
cout<<"请输入你要点餐的号码"<<endl;
cin>>ee;
if(ee==1||ee==2||ee==3||ee==4)
{
tc[ee].shurushuliang();
sum=sum+tc[ee].jisuanzongjiage();
}
system("cls");
cout<<"你点餐的内容为"<<endl;
if(aa!=0)cout<<hb[aa].name<<" "<<hb[aa].shuliang<<"个"<<endl;
if(bb!=0)cout<<xc[bb].name<<" "<<xc[bb].shuliang<<"个"<<endl;
if(cc!=0)cout<<yl[cc].name<<" "<<yl[cc].shuliang<<"个"<<endl;
if(dd!=0)cout<<tp[dd].name<<" "<<tp[dd].shuliang<<"个"<<endl;
if(ee!=0)cout<<tc[ee].name<<" "<<tc[ee].shuliang<<"个"<<endl;
cout<<"总价格为"<<sum<<"元"<<endl;
cout<<"你需要重新点餐吗?,输入1是重新点餐,0是不需要
重新点餐"<<endl;
int xx;
cin>>xx;
if(xx==0)
{
hb[aa].zongshuliang=hb[aa].zongshuliang=hb[aa].shuliang;
xc[bb].zongshuliang=xc[bb].zongshuliang=xc[bb].shuliang;
yl[cc].zongshuliang=yl[cc].zongshuliang=yl[cc].shuliang;
tp[dd].zongshuliang=tp[dd].zongshuliang=tp[dd].shuliang;
tc[ee].zongshuliang=tc[ee].zongshuliang=tc[ee].shuliang;
break;
}
}
}break;
case 2:
{
for(int i=1;i<=4;i++)
{
cout<<hb[i].name<<" 销售总数为"<<hb[i].zongshuliang<<"个"<<endl;
}
}break;
case 3:
{
for(int i=1;i<=4;i++)
{
cout<<xc[i].name<<" 销售总数为"<<xc[i].zongshuliang<<"个"<<endl;
}
}break;
case 4:
{
for(int i=1;i<=4;i++)
{
cout<<yl[i].name<<" 销售总数为"<<yl[i].zongshuliang<<"个"<<endl;
}
}break;
case 5:
{
for(int i=1;i<=4;i++)
{
cout<<tp[i].name<<" 销售总数为"<<tp[i].zongshuliang<<"个"<<endl;
}
}break;
case 6:
{
for(int i=1;i<=4;i++)
{
cout<<tc[i].name<<" 销售总数为"<<tc[i].zongshuliang<<"个"<<endl;
}
}break;
}
if(y)break;
getch();
system("cls");
}
return 0;
}
测试结果:
5.结论与心得
在此次的程序设计实验中,A组题相对较容易解决,而B组题整个题目设计到解决思路都较A组题更为复杂,在实际解决过程中,我和同班的另一位选择B 组同道题的同学进行了合作,一起讨论问题的解决方案,在关键的地方也寻求了同专业师兄的帮助,对该类程序的设计方法终于有了较为模糊的概念。
因时间关系尚未实现的一些想法是:对点餐系统包含的餐品以菜单的形式全部列举出来,并提供编号供用户自行选择,该想法我将会在之后尝试进行。
经过此次课程,我深刻体会到了程序设计是需要实际操作的一门课程,需要长期的实践来累积应对各种问题的经验,以此可以互相借鉴,触类旁通。
6.参考文献
《高级语言程序设计课程设计》成绩评定表。