还剩18页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
程序实践报告(C语言)姓名靳博雯学号20083566班级软信0801指导教师王爽程序实践名称程序实践
(一)程序实践内容面向过程编程强化训练开设学期2008-2009第二学期开设时间第1周——第3周报告日期2009/3/19评定成绩评定人签字评定日期东北大学软件学院
一、程序实践概述
1、题目名称餐厅信息管理程序
2、时间进度2009/3/14—2009/3/15程序构思2009/3/15—2009/3/17编写程序代码2009/3/17—2009/3/18程序测试,完成实验报告
3、__环境Microsoftvisualstudio20055
二、问题分析
1、功能说明
(1)实现客户的点菜过程,客户__,帐目的管理,餐厅系统的维护
(2)能够生成文本文件来完成数据的存储与读取,完成帐单的管理
2、解决方案
(1)使用三种不同的结构体来分别存储餐桌,菜单以及订单信息
(2)使用链表来实现创建客户订单与客户__等操作
三、方案设计
1、数据结构
(1)订单结构体typedefstructOrder{intTable_ID;//记录餐桌号intDish_ID[N];//记录菜的信息intDish_State[N];structOrder*next;}ORDER;
(2)餐桌结构体typedefstructTable{intTable_ID;//餐桌编号intCapacity;//餐桌最多能容纳的人数intTable_State;//1有人在用,0没人用}TABLE;
(3)菜的结构体typedefstructDish{intDish_ID;//菜的编名charDish_Name
[10];//菜名floatDish_Pri__;//__}DISH;
(4)源文件函数定义功能说明restaurant.cvoidLoad_Dishvoid从文件中读取菜谱ORDER*CreateOneint创建一个订单节点voidDish_Menuvoid显示菜谱voidTable_Initvoid餐桌信息初始化intsearchvoid查找匹配的餐桌ORDER*Dish_OrderORDER*ORDER*将节点添加到主链voidDishplayint显示菜的信息voids__eInListfloat将客户消费额写入账单voidS__e_InformORDER*int将已结账订单信息写入历史记录ORDER*PaymentORDER*结账voidModifyPWvoid__修改intPass_Wordvoid__验证voidObservevoid账目查询voidListMenuvoid账单管理菜单voidList___nagementvoid账单管理void__in_Menuvoid主菜单voidGet_Rankvoid统计voidMenu_selectvoid选择功能
2、总体流程⑴点菜功能的实现先调用search()函数,查找客户所需要的餐桌,找到后调用Dish_Menu()函数打印菜谱,接着调用Create(float)函数创建一个订单节点,最后调用Dish_Order()函数,将新创建的订单链到链表表尾;⑵结账功能的实现先让客户输入自己就餐的编号,根据编号查找客户消费的具体情况,并调用Display()函数打印客户点的菜的信息,接着调用S__e_Inform函数将订单信息写入历史记录文本文件中进行保存,作为统计的基础,然后调用s__eList()函数将客户消费总额和消费的具体时间存入名为“账本”的文件中,作为账目管理的基础;⑶账目管理调用voidList___nagement函数并且通过__验证,进入ListMenu()函数选1,调用ModifyPW()函数进行__修改;选2,调用Observe()函数查看账单;选3,返回;⑷餐厅统计通过调用Get_Rank()函数,打印近期比较受欢迎的十道菜
2、关键算法结账ORDER*PaymentORDER*head{inti=0;intcount=0;floatpay=
0.0;floatPay;intID;ORDER*p*p1;//声明文件指针p=head;printf请输入您的餐桌号\n;fflushstdin;scanf%dID;//用户输入餐桌号whilep!=NULL//运用指针打印出客户点的菜{ifp-Table_ID==ID{printf您点菜的情况如下\n;printf编号\t菜名\t__\n;whilep-Dish_ID[i]!=0//用循环语句打印出{Displayp-Dish_ID[i];pay+=dish[p-Dish_ID[i]-1].Dish_Pri__;i++;count++;}//跳出循环printf您一共点了%d道菜\ncount;printf您本次消费额为%f元\npay;printf您实际的付款\n;scanf%fPay;ifPaypayprintf找您%f\nPay-pay;printf谢谢您的惠顾,欢迎下次光临\n;ifcount0{s__eInListpay;S__e_Informpcount;}tb[p-Table_ID].Table_State=0;break;}else{p1=p;p=p-next;}}ifp==headhead=head-next;elsep1-next=p-next;freep;returnhead;}
4、界面设计
五、创新说明通过对函数的多次修正,减少了程序使用过程中链表的遍历链表的次数,提高了效率,使用大量指针,简单明了,快速定位
六、体会与建议做这个程序时遇到了非常多的困难,同学们的帮助和老师的指导给了我很大的信心,通过自己一点一点的努力,终于完成了我觉得这个程序太大了,一个人做不但很困难,而且在许多相似的地方,因为思维的有限,有时只能按一种模式处理,如果我们是分小组完成这样的程序,不但能培养我们的合作精神,也更有利于程序的完善代码#includestdio.h#includeconio.h#includestring.h#includestdlib.h#includetime.h#defineN10#defineD10#defineH10#defineASKORDER*__llocsizeofORDER#define__xCapacity4//定义订单结构体typedefstructOrder{intTable_ID;//记录餐桌号intDish_ID[N];//记录菜的信息intDish_State[N];structOrder*next;}ORDER;//定义餐桌结构体typedefstructTable{intTable_ID;//餐桌编号intCapacity;//餐桌最多能容纳的人数intTable_State;//1有人在用,0没人用}TABLE;//定义菜的结构体typedefstructDish{intDish_ID;//菜的编名charDish_Name
[10];//菜名floatDish_Pri__;//__}DISH;TABLEtb[H];//餐桌结构体数组DISHdish[D];//菜的结构体数组intPASSWORD=123;//__设置//函数设置voidLoad_Dishvoid;//从文件中读取菜谱ORDER*CreateOneint;//创建一个订单节点voidDish_Menuvoid;//显示菜谱voidTable_Initvoid;//餐桌信息初始化intsearchvoid;//查找匹配的餐桌ORDER*Dish_OrderORDER*ORDER*;//将节点添加到主链voidDishplayint;//显示菜的信息voids__eInListfloat;//将客户消费额写入账单voidS__e_InformORDER*int;//将已结账订单信息写入历史记录ORDER*PaymentORDER*;//结账voidModifyPWvoid;//__修改intPass_Wordvoid;//__验证voidObservevoid;//账目查询voidListMenuvoid;//账单管理菜单voidList___nagementvoid;//账单管理void__in_Menuvoid;//主菜单voidGet_Rankvoid;//统计voidMenu_selectvoid;//选择功能//主函数int__in{puts1;Table_Init;puts2;Menu_select;systempause;}//系统主菜单void__in_Menu{printf\n*********************\n;printf餐厅服务系统\n;printf*********************\n;printf
1.点菜\n;printf
2.客户结账\n;printf
3.账目管理\n;printf
4.餐厅统计\n;printf
5.退出系统\n;}//选择功能voidMenu_selectvoid{ORDER*head;intchoose;intresult;head=NULL;systemcls;do{Load_Dish;__in_Menu;printf请选择:\n;fflushstdin;scanf%dchoose;//systemcls;switchchoose{case1:result=search;ifresult==1printf您可以到%d号餐桌就餐\nresult;elseprintf您和您的朋友可以到%d号餐桌就餐\nresult;Dish_Menu;head=Dish_OrderheadCreateOneresult;//systemcls;break;case2:head=Paymenthead;break;case3:List___nagement;break;case4:Get_Rank;break;case5:exit1;break;}}while1;}//从文件中读取菜谱voidLoad_Dishvoid{FILE*fp;inti;fp=fopendish_name.___r;fori=0;iD;i++{fscanffp%d\t%s\t%f\ndish[i].Dish_IDdish[i].Dish_Namedish[i].Dish_Pri__;}}//餐桌初始化voidTable_Init{tb
[0].Capacity=1;tb
[0].Table_ID=1;tb
[1].Capacity=1;tb
[1].Table_ID=2;tb
[2].Capacity=2;tb
[2].Table_ID=3;tb
[3].Capacity=2;tb
[3].Table_ID=4;tb
[4].Capacity=2;tb
[4].Table_ID=5;tb
[5].Capacity=3;tb
[5].Table_ID=6;tb
[6].Capacity=4;tb
[6].Table_ID=7;tb
[7].Capacity=4;tb
[7].Table_ID=8;tb
[8].Capacity=4;tb
[8].Table_ID=9;tb
[9].Capacity=4;tb
[9].Table_ID=10;}//显示菜谱voidDish_Menuvoid{inti;printf*********欢迎选购本店菜*********\n;printf菜编号\t菜名\t菜单价\n;fori=0;iD;i++printf%d\t%s\t%f\ndish[i].Dish_IDdish[i].Dish_Namedish[i].Dish_Pri__;}//查找有没有匹配的餐桌intsearchvoid{intCust_Num;inti;printf请输入来客数量:\n;scanf%dCust_Num;if__xCapacityCust_Num{printf抱歉,本店没有容纳%d的餐桌!Cust_Num;return-1;}whileCust_Num=__xCapacity{fori=0;iH;i++{iftb[i].Table_State==0{iftb[i].Capacity==Cust_Numreturntb[i].Table_ID;}}printf抱歉,现在没有%d人桌Cust_Num;Cust_Num+=1;}printf餐桌已满,请客人稍等一会儿;return-1;}//一份定单ORDER*CreateOneintresult{ORDER*p;inti;p=ASK;ifresult!=-1{p-Table_ID=result;fori=0;iD;i++{printf请输入菜的编号按0结束输入:;scanf%dp-Dish_ID[i];ifp-Dish_ID[i]0||p-Dish_ID[i]10{printf超出菜谱范围请重新输入\n;i--;}elseifp-Dish_ID[i]==0break;elsep-Dish_State[i]=0;}tb[result-1].Table_State=1;}p-next=NULL;returnp;}//添加到主链ORDER*Dish_OrderORDER*headORDER*p{ORDER*p1;p1=head;ifp1!=NULL{ifp!=NULL{whilep1-next!=NULL{p1=p1-next;}p1-next=p;printf订单创建成功\n;}elseprintf订单创建失败\n;}else{ifhead==NULLp!=NULLhead=p;}returnhead;}//根据菜的编号打印一道菜的信息voidDisplayintID{inti=0;fori=0;iD;i++{ifdish[i].Dish_ID==ID{printf%d\t%s\t%f\ndish[i].Dish_IDdish[i].Dish_Namedish[i].Dish_Pri__;break;}}}//将消费额写入帐单voids__eInListfloatpay{FILE*fp;time_ttimer;timer=timeNULL;iffp=fopen账本.___a==NULL{printf操作失败\n;exit1;}fprintffp%f\t%s\npayctimetimer;//系统时间有问题printf账本保存成功\n;fclosefp;}//将已结账客户写入历史记录voidS__e_InformORDER*pintm{FILE*fp;time_ttimer;inti=0;timer=timeNULL;iffp=fopen历史记录.___a==NULL{printf操作失败\n;exit1;}fprintffp%d\nm;whilep-Dish_ID[i]0{fprintffp%d\t%s\t%f\ndish[p-Dish_ID[i]-1].Dish_IDdish[p-Dish_ID[i]-1].Dish_Namedish[p-Dish_ID[i]-1].Dish_Pri__;i++;}fprintffp%sctimetimer;printf历史记录保存成功\n;fclosefp;}//结账ORDER*PaymentORDER*head{inti=0;intcount=0;floatpay=
0.0;floatPay;intID;ORDER*p*p1;p=head;printf请输入您的餐桌号\n;fflushstdin;scanf%dID;whilep!=NULL{ifp-Table_ID==ID{printf您点菜的情况如下\n;printf编号\t菜名\t__\n;whilep-Dish_ID[i]!=0{Displayp-Dish_ID[i];pay+=dish[p-Dish_ID[i]-1].Dish_Pri__;i++;count++;}printf您一共点了%d道菜\ncount;printf您本次消费额为%f元\npay;printf您实际的付款\n;scanf%fPay;ifPaypayprintf找您%f\nPay-pay;printf谢谢您的惠顾,欢迎下次光临\n;ifcount0{s__eInListpay;S__e_Informpcount;}tb[p-Table_ID].Table_State=0;break;}else{p1=p;p=p-next;}}ifp==headhead=head-next;elsep1-next=p-next;freep;returnhead;}//修改__voidModifyPW{intpassword;printf请输入新的__\n;scanf%dpassword;PASSWORD=password;printf__修改成功\n;}//查看账目voidObserve{FILE*fp;floatpay;charstr
[25];inti=0;intj=0;iffp=fopen账本.___r==NULL{printf操作失败\n;exit1;}printf消费金额\t消费时间\n;while!feoffp{i=0;j=0;fscanffp%f\tpay;whilei=5j25{fscanffp%cstr[j];j++;ifstr[j]==i++;}fscanffp\n\n;i=0;j=0;printf%f\tpay;whilei=5j25{printf%cstr[j];j++;ifstr[j]==i++;}printf\n;}fclosefp;}//账单管理菜单voidListMenu{intchoi__;printf
1.修改__\n;printf
2.查看账本\n;printf
3.返回;do{printf请选择\n;scanf%dchoi__;switchchoi__{case1:ModifyPW;break;case2:Observe;break;case3:Menu_select;break;default:printf没有该功能项\n;}}while1;}//账单管理voidList___nagement{FILE*fp;iffp=fopen账本.___r==NULL{printf操作失败\n;exit1;}ifPass_WordListMenu;}//获得近期各菜的受欢迎程度voidGet_Rankvoid{FILE*fp;intnim=0j;intcount
[10]={0}t=0;chars
[16]=a
[10];fp=fopen历史记录.___r;while!feoffp{fscanffp%d\nn;i=0;whilei!=n{fscanffp%d%*s%*smss;forj=0;j10;j++{ifm==dish[j].Dish_ID{count[j]++;break;}}i++;ifi==nfscanffp%*s%*s%*s%*s%*s\nsssss;}}printf菜单受欢迎程度如下:\n;fori=0;i10;i++{printf\n%d菜:i+1;forj=0;jcount[i];j++printf*;}fori=0;i9;i++{forj=0;j9-i;j++{ifcount[j]count[j+1]{t=count[j];strcpyadish[j].Dish_Name;count[j]=count[j+1];strcpydish[j].Dish_Namedish[j+1].Dish_Name;count[j+1]=t;strcpydish[j+1].Dish_Namea;}}}printf\n比较受顾客欢迎的四个菜是\n;fori=0;i4;i++{printf%s\ndish[i].Dish_Name;}}//__验证intPass_Word{intpassword;do{printf请输入__\n;scanf%dpassword;ifPASSWORD==password{printf**************************************************;printf欢迎进入账目管理系统\n;printf**************************************************;return1;}else{printf__输入有误,请重新输入\n;printf是否重新输入;}}whilegetchar==y||getchar==Y;return0;}Menu_select-Load_DishDish_OrderORDER*CreateOnePaymentheadList___nagementListMenuGet_RankModifyPWObserveMenu_selectPAGE19。