智能点餐系统.docx
《智能点餐系统.docx》由会员分享,可在线阅读,更多相关《智能点餐系统.docx(26页珍藏版)》请在冰点文库上搜索。
![智能点餐系统.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/107473ae-b79a-4919-9c38-c2fb9d8325df/107473ae-b79a-4919-9c38-c2fb9d8325df1.gif)
智能点餐系统
通达学院
专业课程设计II
题目:
智能点餐系统
专业计算机科学与技术(通信工程)
学生姓名
班级学号09002806
指导教师徐佳
指导单位计算机学院计算机科学与技术系
日期2012.11.12-2012.11.23
教师评语
同学出勤率(满勤、较高、一般,较低),学习态度(端正、较端正、一般、较差),程序设计基础(好、较好、一般、较差),演示程序(已经、没有)达到了基本要求,算法设计(好、较好、一般),界面友好程度(好、较好、一般),答辩过程中回答问题(准确、较准确、错误率较高),撰写报告格式(规范、一般)、内容(丰满、简单)、表述(清晰、一般、不清楚),(圆满、较好、基本)完成了课题任务。
教师签名:
年月日
成绩评定
备注
智能点餐系统
一、课题内容和要求
通过对现代点餐系统的改良,为了更好的满足广大消费者的多元化消费需求和不同层次的消费水平,提供更加快捷的便民服务,使人们的消费过程更加简单方便,智能点餐系统将会越来越普及。
基本功能:
1、对菜品价格、图片、原料等进行增加删除;
2、按客户需求点餐;
3、按金额自动配餐。
二、需求和思路分析
本系统的目的是实现点菜系统所需的各种基本功能,用户可通过访问我们的点餐系统,进行登陆,获得你想要的各种食物、酒水,管理员可以查看用户菜品,原料的剩余,可以对菜品进行增删改查。
系统管理员通过该部分功能完成餐厅点菜管理系统中基础数据的设置工作。
主要工作包括:
用户登录,对基本菜基础数据的设置,包括:
价格、原料等的介绍;删菜、添菜。
(1)用户自动登录,和服务器建立连接
(2)选择所选择的点餐方案,是自助点餐还是套餐订制
(3)菜单信息主要包括后台管理员对菜单的管理和客户对菜单的使用。
后台部分的管理:
包括增加新菜,更新菜单;删除不用菜单;包括菜的名称,价格,配料等。
前台用户使用:
客户可以查询餐厅提供的各种食物,点取自己喜爱的食物,了解菜的价格和是否点菜。
(4)用户可以根据系统给予的菜品的编号自动点餐,选择所点的份数及相应酒水的瓶数,在你确定点菜并获取序号时,系统自动记录你所点的菜单,直到点餐完毕后,系统自动结账,您将得知自己点餐的金额,并付款。
(5)为了方便顾客的需求,本系统有套餐推荐
按照相应的金额自动配餐(默认为三个菜),如输入45元,55元将会有相应的菜系列出以供选择,同时可以自动添加酒水。
1、系统运行稳定、安全可靠。
界面简洁友好,使用方便;
2、当基础数据发生变化时,系统管理员应该能很方便地维护基础数据,提高系统的灵活性;
3、最大程度的保证点菜数据的准确性。
在顾客进行点菜时要实现避免大量的文字输入,以便减少点菜时间,提高录入数据的准确度。
三、概要设计
(1)定义结构体,实现对菜品已点份数、名称、原材料的记录
structcai
{
intfenshu;
charname[50];
intuse;
intprice;
};
(2)用线性表实现对菜品原材料的剩余量的记录,线性表对应菜品的点餐菜单编码,同时分配存储空间。
typedefintElemType;
structList
{
ElemType*list;
intsize;
intMaxSize;
};
/*以下为线性表的函数*/
voidInitList(structList*L,intms)/*初始化线性表L,即进行动态存储空间分配并置L为一个空表*/
{
if(ms<=0){printf("ms值非法!
\n");exit
(1);}
L->MaxSize=ms;/*设置线性表空间大小为ms*/
L->list=malloc(ms*sizeof(ElemType));
if(!
L->list)
{
printf("动态存储分配失败!
");
exit
(1);
}
L->size=0;
}
voidagainMalloc(structList*L)
{
ElemType*p=realloc(L->list,2*L->MaxSize*sizeof(ElemType));/*空间扩展为原来的2倍,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间*/
if(!
p){
printf("分配存储空间失败!
");
exit
(1);
}
L->list=p;/*使list指向新线性表空间*/
L->MaxSize=2*L->MaxSize;/*把线性表空间大小修改为新的长度*/
}
voidInsertLastList(structList*L,ElemTypex)/*向线性表L的表尾插入元素x*/
{
if(L->size==L->MaxSize)
againMalloc(L);
L->list[L->size]=x;
L->size++;
}
(3)菜单表格函数:
voidcddayin(structcaia[])
{
inti=0,j=0,s=0;
for(i=0;i<30;i++)
{if(a[i].fenshu>0)j++;}
if(j!
=0)
{
printf("已点菜/酒品编号已点菜品名称已点份数/瓶数价格\n");
for(i=0;i<30;i++)
if(a[i].fenshu>0)
{printf("%5d%10s%14d%d¥\n",i,a[i].name,a[i].fenshu,a[i].fenshu*a[i].price);
s=s+a[i].fenshu*a[i].price;
}
printf("您好,您点餐价格合计=%d¥\n",s);
}
if(j==0)
printf("顾客尚未点餐,无法进行菜单打印!
\n");
}
(4)原材料的表格函数:
voidycliao(structList*yuan,structcaia[])
{
inti=1,p=0,k=0;
for(i=0;i<30;i++)
{
do{
p=a[i].use%100;
yuan->list[p]=yuan->list[p]-a[i].fenshu;
a[i].use=a[i].use/100;
}while(a[i].use!
=0);
}
printf("|---------------------------------材料余量-----------------------------------|\n");
printf("|------------------原材料余量---------------------------|-----酒品余量-------|\n");
printf("|-------------------------------------------------------|--------------------|\n");
printf("|10.鸡肉=%3d11.猪肉=%3d12.鱼肉=%3d|50.雪花啤酒=%3d|\n",
yuan->list[10],yuan->list[11],yuan->list[12],yuan->list[50]);
printf("|13.黄瓜=%3d14.土豆=%3d15.豆腐=%3d|51.燕京啤酒=%3d|\n",
yuan->list[13],yuan->list[14],yuan->list[15],yuan->list[51]);
printf("|16.茄子=%3d17.青椒=%3d18.牛肉=%3d|52.二锅头=%3d|\n",
yuan->list[16],yuan->list[17],yuan->list[18],yuan->list[52]);
printf("|19.大葱=%3d20.鲜鸭血=%3d21.花生=%3d||\n",
yuan->list[19],yuan->list[20],yuan->list[21]);
printf("|22.花椒=%3d23.酱=%3d24.胡萝卜=%3d||\n",
yuan->list[22],yuan->list[23],yuan->list[24]);
printf("|25.辣椒=%3d26.芹菜=%3d27.豆皮=%3d||\n",
yuan->list[25],yuan->list[26],yuan->list[27]);
printf("|-------------------------------------------------------|--------------------|\n");
printf("|-------------------------------------------------------|--------------------|\n");
}
(5)显示点菜表格,消费者可以了解菜品、酒品及相应的价格,并选择相应的数量和瓶数。
voiddiancai(structcaia[])
{
intp=0,wep=0;
do{
printf("|--------------------------------[1]自助点餐---------------------------|\n");
printf("|--------------------------菜品----------------------|-------酒品------|\n");
printf("|----------------------------------------------------|-----------------|\n");
printf("|1.宫爆鸡丁[15]2.鱼香肉丝[14]3.京酱肉丝[16]|21.雪花啤酒|\n");
printf("|4.地三鲜[10]5.水煮鱼[50]6.麻婆豆腐[11]|22.燕京啤酒|\n");
printf("|7.夫妻肺片[17]8.拍黄瓜[8]9.鲜鸭血[20]|23.二锅头|\n");
printf("|----------------------------------------------------|-----------------|\n");
printf("|----------------------------------------------------|-----------------|\n");
printf("|----------------------------(输入0确认并结束点餐)---------------------|\n");
scanf("%d",&p);
system("CLS");
if(p>=1&&p<=9)
{
printf("|------------------------------------------|\n");
printf("|------------------份数--------------------|\n");
printf("|------------------------------------------|\n");
printf("|1.一份2.两份|\n");
printf("|3.三份4.其他请直接输入|\n");
printf("|------------------------------------------|\n");
printf("|------------------------------------------|\n");
scanf("%d",&wep);
if(wep>50)
{system("CLS");printf("您输入的值异常或过大,请您检查输入的值!
\n");continue;}/*防止误输入*/
elseif(wep<=50)
{a[p].fenshu+=wep;
system("CLS");
}
}
elseif(p>=21&&p<=23)
{
printf("|--------------------------------------------------------|\n");
printf("|-------------------------酒品数量-----------------------|\n");
printf("|--------------------------------------------------------|\n");
printf("|1.一瓶2.两瓶3.三瓶4.其他瓶数请直接输入|\n");
printf("|--------------------------------------------------------|\n");
printf("|--------------------------------------------------------|\n");
scanf("%d",&wep);
if(wep>50)
{system("CLS");printf("您输入的值异常或过大,请您检查输入的值!
\n");continue;}/*防止误输入*/
elseif(wep<=50)
{
a[p].fenshu+=wep;
system("CLS");
}
}
elseif(p!
=0)
printf("对不起,你输入的编码没有对应菜品,请重新输入!
\n");
}while(p!
=0);
system("CLS");
cddayin(a);
}
(6)消费者可以选择是否要查询原材料,及相应的酒水剩余量,同时管理员也可以根据原料剩余状况选择是否要增删菜。
voidycldayin(structListyuan,structcaia[])
{
charl='\0';
printf("显示原材料余量?
(Y/N)\n");
l=getch();
if(l=='Y'||l=='y')
{//system("CLS");
ycliao(&yuan,a);
getchar();
}
else
{//system("CLS");
getchar();
printf("\n\n\n\n");}
}
(7)为了方便顾客设计的套餐组合,顾客可以输入金额显示不同的套餐
voidzuhe(structcaia[])
{
intmoney=0,sum=0,s,i,n;
printf("请输入你的预期套餐费用(默认三菜):
");
scanf("%d",&money);
for(s=0;s<9;s++){
for(i=s+1;i<9;i++){
for(n=i+1;n<9;n++){
sum=a[s].price+a[i].price+a[n].price;
if(money==sum){
printf("%s",a[s].name);
printf("+");
printf("%s",a[i].name);
printf("+");
printf("%s",a[n].name);
printf("\n\n");
}
五、详细设计
程序源代码:
#include
#include
#include
#include"windows.h"
structcai/*cai结构体实现对菜品已点份数、名称、原材料的记录*/
{
intfenshu;
charname[50];
intuse;
intprice;
};
typedefintElemType;
structList/*该线性表实现对菜品原材料的剩余量的记录,线性表对应菜品的点餐菜单编码*/
{
ElemType*list;
intsize;
intMaxSize;
};
/*以下为线性表的函数*/
voidInitList(structList*L,intms)/*初始化线性表L,即进行动态存储空间分配并置L为一个空表*/
{
if(ms<=0){printf("ms值非法!
\n");exit
(1);}
L->MaxSize=ms;/*设置线性表空间大小为ms*/
L->list=malloc(ms*sizeof(ElemType));
if(!
L->list)
{
printf("动态存储分配失败!
");
exit
(1);
}
L->size=0;
}
voidagainMalloc(structList*L)
{
ElemType*p=realloc(L->list,2*L->MaxSize*sizeof(ElemType));/*空间扩展为原来的2倍,并由p指针所指向,原内容被自动拷贝到p所指向的存储空间*/
if(!
p){
printf("分配存储空间失败!
");
exit
(1);
}
L->list=p;/*使list指向新线性表空间*/
L->MaxSize=2*L->MaxSize;/*把线性表空间大小修改为新的长度*/
}
voidInsertLastList(structList*L,ElemTypex)/*向线性表L的表尾插入元素x*/
{
if(L->size==L->MaxSize)
againMalloc(L);
L->list[L->size]=x;
L->size++;
}
/*表格函数*/
voidcddayin(structcaia[])
{
inti=0,j=0,s=0;
for(i=0;i<30;i++)
{if(a[i].fenshu>0)j++;}
if(j!
=0)
{
printf("已点菜/酒品编号已点菜品名称已点份数/瓶数价格\n");
for(i=0;i<30;i++)
if(a[i].fenshu>0)
{printf("%5d%10s%14d%d¥\n",i,a[i].name,a[i].fenshu,a[i].fenshu*a[i].price);
s=s+a[i].fenshu*a[i].price;
}
printf("您好,您点餐价格合计=%d¥\n",s);
}
if(j==0)
printf("顾客尚未点餐,无法进行菜单打印!
\n");
}
voidycliao(structList*yuan,structcaia[])
{
inti=1,p=0,k=0;
for(i=0;i<30;i++)
{
do{
p=a[i].use%100;
yuan->list[p]=yuan->list[p]-a[i].fenshu;
a[i].use=a[i].use/100;
}while(a[i].use!
=0);
}
printf("|---------------------------------材料余量-----------------------------------|\n");
printf("|------------------原材料余量---------------------------|-----酒品余量-------|\n");
printf("|-------------------------------------------------------|--------------------|\n");
printf("|10.鸡肉=%3d11.猪肉=%3d12.鱼肉=%3d|50.雪花啤酒=%3d|\n",
yuan->list[10],yuan->list[11],yuan->list[12],yuan->list[50]);
printf("|13.黄瓜=%3d14.土豆=%3d15.豆腐=%3d|51.燕京啤酒=%3d|\n",
yuan->list[13],yuan->list[14],yuan->list[15],yuan->list[51]);
printf("|16.茄子=%3d17.青椒=%3d18.牛肉=%3d|52.二锅头=%3d|\n",
yuan->list[16],yuan->list[17],yuan->list[18],yuan->list[52]);
printf("|19.大葱=%3d20.鲜鸭血=%3d21.花生=%3d||\n",
yuan->list[19],yuan->list[20],yuan->list[21]);
printf("|22.花椒=%3d23.酱=%3d24.胡萝卜=%3d||\n",
yuan->list[22],yuan->list[23],yuan->list[24]);
printf("|25.辣椒=%3d26.芹菜=%3d27.豆皮=%3d||\n",
yuan->list[25],yuan->list[26],yuan->list[27]);
printf("|-------------------------------------------------------|--------------------|\n");
printf("|-------------------------------------------------------|--------------------|\n");
}
voiddiancai(structcaia[])
{
intp=0,wep=0;
do{
printf("|--------------------------------[1]自助点餐---------------------------|\n");
printf("|--------------------------菜品----------------------|-------酒品------|\n");
printf("|-------------------------------------