版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程编号:面向过程程序设计实践姓名学号班级软件工程1502指导教师韩春燕程序实践名称面向过程程序设计实践开设学期2015-2016第二学期开设时间第1周——第3周报告日期2016.3.26评定人签字评定成绩评定日期东北大学软件学院#一、程序实践概述1一、程序实践概述1、题目名称:餐厅信息管理系统2、时间进度:2016.3.12至3.27(2、时间进度:系统大概构思;第二周完成各个函数的内容;第三周检测系统各项漏洞及不足,完成修补并完成报告)3、开发环境:MicrosoftVisualC++6.0(C语言)3、开发环境:二、问题分析1、功能说明:(1)就餐系统①餐桌查询功能,输入就餐人数,程序自动输出餐厅所有餐桌情况,包括容量(最①餐桌查询功能,输入就餐人数,程序自动输出餐厅所有餐桌情况,包括容量(最多容纳人数)、状态(是否有人)和类型(大厅或包厢)。0结0结束选择后,完成订单的创建。③结账功能,请用户输入选定的餐桌,口为已点菜餐桌将显示点菜情况,核对无误后,进入支付页面,显示点菜数和消费额,用户输入付款金额后,显示找零,结束结账。④返回上一菜单⑤退出系统2)密码验证功能,用户登录管理系统时,需输入密码验证,2)密码验证功能,用户登录管理系统时,需输入密码验证,输入错误三次后自动退出系统。3)管理系统①查看账目功能,查看餐厅近期消费记录(消费金额和消费时间)。②菜品欢迎度统计功能,显示餐厅近期各种菜被点次数,并显示比较受顾客欢迎的三道菜。③修改密码功能,用户输入新的密码,修改管理系统验证密码。④返回上一菜单⑤退出系统2、解决方案:(1)就餐系统①餐桌查询功能:调用search()函数,输入就餐人数后①餐桌查询功能:调用search()函数,输入就餐人数后,用if-elseif-else判断人数是否符合餐桌容量要求,若符合,则输出餐厅所有餐桌的当前情况。②点菜功能:保存,然后调用利用Load_Dish()函数获得了菜谱数据后,Select。函数选定餐桌,调用②点菜功能:保存,然后调用利用Load_Dish()函数获得了菜谱数据后,Select。函数选定餐桌,调用将菜的信息以结构体的形式Dish_Menu()函数打印菜谱,接着调用CreateOne(float)函数创建一个订单节点保存本次点菜所有信息,最后调用Dish_Order()函数,将新创建的订单链到链表表尾。③结账功能:先让客户输入自己就餐的餐桌编号,根据编号查找客户消费的具体情况,并调用Display。函数打印客户点的菜的信息,接着调用Save_Inform()函数将订单信息写③结账功能:先让客户输入自己就餐的餐桌编号,根据编号查找客户消费的具体情况,并调用Display。函数打印客户点的菜的信息,接着调用Save_Inform()函数将订单信息写入历史记录文本文件中进行保存,作为菜品欢迎度统计的基础,然后调用和saveInList()函数将客户消费总额和消费的具体时间存入名为“账本”的文件中,作为账目管理的基础。④返回上一菜单:调用Main_Menu()函数返回主菜单。⑤退出系统:使用exit(0)退出。(2)密码验证功能:用fopen以读的形式打开“密码.txt”文件,再使用fread函数读取存储在一变量中,通过与输入数据对比判断是否相同。(3)管理系统①查看账目功能:调用Observe。函数,用fopen以读的形式打开“账本.txt”文件,再使用fscanf读取文件中数据并输出打印。②菜品欢迎度统计功能:调用Popularity_Statistics()函数,用fopen以读的形式打开“历史纪录.txt”文件,使用fscanf读取文件中数据,利用for循环打印出各道菜的点菜情况,再利用嵌套的for循环和if语句存储被点次数最高的三道菜编号,再打印出来。③修改密码功能:利用ModifyPW()函数,用fopen以写的形式打开“密码.txt”文件,再使用fwrite将输入的新密码写入文件。④返回上一菜单:调用Main_Menu()函数返回主菜单。⑤退出系统:使用exit(0)退出。三、方案设计1、模块结构:程序由头文件restaurant.h和源文件main.c、menu.c、restaurant.c、dining.c、management.。构成,五个源文件中具体包含的函数如下所示:源文件函数原型功能说明main.cmain()总控整个程序menu.cvoidMain_Menu()显示主菜单,接受用户选择的命令代码voidDining_System()显示就餐系统菜单,接受用户选择的命令代码voidManagement_System()显示管理系统菜单,接受用户选择的命令代码restaurant.cvoidEnter()显示欢迎使用界面voidTable_Init()餐桌信息初始化voidLoad_Dish()从文件中读取菜谱voidPass_Word()密码验证dining.cvoidsearch()显示所有餐桌状态voidSelect()选定餐桌voidDish_Menu()打印显示菜谱ORDER*CreateOne(int)点菜并创建一个客户节点,参数为餐桌编号,返回订单节点指针ORDER*Dish_Order(ORDER*,ORDER*)将订单节点添加至主链,参数分别为订单头指针和客户节点指针,返回订单头指针ORDER*Payment(ORDER*)客户结账,参数为订单头指针,返回订单头指针voidDisplay(int)打印菜信息,参数为菜的编号voidsavelnList(float)将客户消费金额存入账目,参数为消费额voidSave_Inform(ORDER*,int)将客户消费金额存入账目,参数为消费额management.。voidObserve。查看账目voidPopularity_Statistics()显示各道菜消费情况,并对口进行统计排名voidModifyPW()修改登录管理系统密码2、数据结构:1)定义一个结构体用于存储餐桌信息,具体如下:typedefstructTable{intTable_ID;//餐桌编号intCapacity;//餐桌最多能容纳的人数intTable_State;//1有人在用,0没人用intTable_Type;//1包厢,2大厅}TABLE;2)定义一个结构体存储订单信息,该结构体使用了链表,具体如下:typedefstructOrder{intTable_ID;//记录餐桌号intDish_ID[N];//记录菜的编号intDish_State[N];//记录菜的状态structOrder*next;}ORDER;3)定义一个结构体来存储菜的各项信息,具体如下:typedefstructDish{intDish_ID;//菜的编号charDish_Name[10];//菜名floatDish_Price;//价格}DISH;天宇餐厅信息管理系统返回主菜单4、关键算法:创建一份订单节点(部分):p=(ORDER*)malloc(sizeof(ORDER));p->Table_ID=result;for(i=0;i<N;i++){fflush(stdin);printf("\t\t\t请输入口的编号,按0结束选择:”);scanf("%d",&p->Dish_ID[i]);if(p->Dish_ID[i]<0||p->Dish_ID[i]>10){printf("\t\t\t超出菜谱范围,请重新输入\n");i--;}elseif(p->Dish_ID[i]==0)//为结账做准备break;elsep->Dish_State[i]=0;}if(i==0){printf("\t\t\t您未选择任何菜,请重新输入\n");CreateOne(result);}tb[result-1].Table_State=1;p->next=NULL;添加到订单节点至主链(部分):p1=head;system("cls");if(p1!=NULL){if(p!=NULL){while(p1->next!=NULL){p1=p1->next;//找到链表结尾}p1->next=p;请耐心等待printf("\n\n\n\n\n\n\n\n\t\t订单创建成功,已提交至后厨,请耐心等待\n");}else{printf("\n\n\n\n\n\n\n\n\t\t\t\t订单创建失败\n");exit(0);}}else{
if(head==NULL&&p!=NULL){head=p;printf("\n\n\n\n\n\n\n\n\t\t订单创建成功,\n");}else{printf("\n\n\n\n\n\n\n\n\t\t\t\t订单创建失败\n");exit(0);}}密码验证(部分):if((fp=fopen("密码.txt","r+"))==NULL){printf("\n\n\n\n\n\n\t\t\t密码文件打开失败\n"”\t\t管理系统暂时不可使用,口检查相应文件后重新登录系统"\t\t\t3秒后将返回主菜单\n");Sleep(3000);Main_Menu();}fread(&temp,sizeof(long),1,fp);fclose(fp);printf("\n\n\n\n\n\n\t\t\t\t请输入密码\n""\t\t\t(若取消并返回,请输入0并按Enter)\n\t\t\t\t");scanf("%ld",&password);if(password==0)Main_Menu();if(password==temp){frequency=0;fflush(stdin);Management_System();}else{system("cls");fflush(stdin);frequency++;if(frequency==3){printf("\n\n\n\n\n\n\t\t\t\t密码错误\n""\t\t\t您已3次输错密码,系统3秒后自动退出Sleep(3000);exit(1);}printf("\n\n\n\n\n\n\t\t\t\t密码错误,是否重新输入\n已提交至后厨,请耐心等待\n"\n");\n\t\t\t\t");"\t\t\tY表示重新输入,N已提交至后厨,请耐心等待\n"\n");\n\t\t\t\t");again:scanf("%c",&j);if(j=='y'||j=='Y'){fflush(stdin);Pass_Word();}elseif(j=='n'||j=='N'){fflush(stdin);Main_Menu();}else{system("cls");fflush(stdin);printf("\n\n\n\n\n\n\t\t\t\t错误的输入,请重新选择也\n\t\t\t\t");\n"\t\t\tY表示重新输入,N表示取消并返回主菜单\n\t\t\t\t");\ngotoagain;}}显示近期点菜情况(部分):if((fp=fopen("历史记录.txt","r"))==NULL){printf("\n\n\n\n\n\t\t\t打开历史纪录文件失败\n""\t\t该功能暂时无法使用,口检查相应文件后重新登录系统"\t\t\t3秒后将返回上一菜单\n");Sleep(3000);Management_System();}while(!feof(fp)){fscanf(fp,"%d\n",&n);i=0;while(i!=n){fscanf(fp,"%d%*s%*s",&m,s,s);for(j=0;j<10;j++){if(m==dish[j].Dish_ID){count[j]++;break;}}i++;if(i==n)fscanf(fp,"%*s%*s%*s%*s%*s\n",s,s,s,s,s);}}printf("\n\n\n\t\t\t菜的受欢迎程度如下:\n");for(i=0;i<10;i++){printf("\n\t\t\t%d菜:",i+1);for(j=0;j<count[i];j++)printf("*");}5、界面设计:1)欢迎的进入界面调用的是自定义Enter()函数,函数中使用了color和sleep函数,做出了一段简单的色彩变换动画,色彩绚丽,吸引眼球。2)主菜单与各分系统菜单与各功能之间紧密连接,多用switch函数,在各功能结束后自动返回上一级,十分便捷。.就餐系统.管理系统M.退出系统请选择对应数字就饕系统.餐桌查询.点菜M.结账.疲向上一菜单.退出系统请选择对应数字二二m:三京二二.查看账目.菜品欢迎度统计?.修改密码.返向上一菜单.退出系统请选择对应数字四、调试记录1)在使用点口功能测试voidSelect。及其调用的ORDER*CreateOne(int)ORDER*Dish_Order(ORDER*,ORDER*)函数时,运行时出现未知错误,在研究中发现原因为未将head初始化为空指针,调试该功能花费我很长时间,使我加深了对链表的了解。2)在测试密码修改功能即voidModifyPW()函数时,发现若想取消修改输入0返回后,再次进入管理系统的时候,输入原密码提示不正确。后来在查看“密码.txt”文件的时候发现内容为空,得出此问题原因为在voidModifyPW()函数中,以写的方式打开文件,文件原内容清空,后改为先读取文件中数据保存于一变量中,再以写的方式打开文件,若取消修改,将保存原数据的变量写入文件中。五、创新说明1)密码验证功能:通过从保存密码的文件中读取数据,并根据输入的密码进行比对,判断是否正确,若错误,可选择是否继续输入,当输错次数达到3次的时候,系统自动退出。密码错误,是否重新输入Y表示重新输入,口表示取消并返回主菜单密码错误您已M次输错密码,系统M秒后自动退出2)餐桌查询功能:抛弃了原有的系统自动选定餐桌功能,2)餐桌查询功能:抛弃了原有的系统自动选定餐桌功能,当输入就餐人数后一旦符合可容纳最大人数时,打印出所有餐桌状况,供用户自己选择。请输入就餐人数:(若取消查询并返回,请输入0并按Enter)101号饕桌容量1,状态:无人,类型:大厅2号餐桌容量1,状态:无人,类型:大厅M号餐桌容量2,状态:无人,类型:大厅4号餐桌容量2,状态:无人,类型:大厅5号餐桌容量2,状态:无人,类型:大厅6号饕桌容量&状态:无人,类型:大厅7号餐桌容量4,状态:无人,类型:大厅8号饕桌容量4,状态:无人,类型:大厅9号餐桌容量4,状态:无人,类型:大厅10号餐桌容量瓦状态:无人,类型:大厅U号餐桌容量&状态:无人,类型:包厢12号餐桌容量&状态:无人,类型:包厢1M号餐桌容量&状态:无人,类型:包厢14号餐桌容量12,状态:无人,类型:包厢15号餐桌容量12,状态:无人,类型:包厢按Enter榛返
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 服务礼仪培训课件
- 房屋建造的课件
- 服务管理案例课件
- 房屋布局分享课件
- 防脱洗发水中草药课件
- 飞天曲教学课件
- 飞天凌空跳水姑娘课件
- 事业单位工程岗面试强化训练结构化问答试卷及解析
- 事业单位综合岗面试强化训练专项考题试卷及解析
- 客户反馈分析指导改进
- 2026年江西省建筑设计研究总院集团有限公司第二批岗位招聘11人考试备考题库及答案解析
- 2026年6月英语六级真题册(三套全)
- 重庆市政府采购评审专家真题库及参考答案
- 2026无人机植保飞防行业市场现状分析及效率提升与成本控制研究
- 眼外伤护理查房课件
- 成人阻塞性睡眠呼吸暂停诊断和外科治疗指南
- 建筑工程技术生涯发展展示
- GB/T 45683-2025产品几何技术规范(GPS)几何公差一般几何规范和一般尺寸规范
- JG/T 299-2010供冷供热用蓄能设备技术条件
- 大学英语四级词汇完整版带音标-乱序版
- 《石油化工自动化控制系统》课件
评论
0/150
提交评论