




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程 序 实 践 报 告(C语言)姓 名靳博雯学 号20083566班 级软信0801指 导 教 师王爽程序实践名称程序实践(一)程序实践内容面向过程编程强化训练开 设 学 期2008-2009第二学期开 设 时 间第1周第3周报告日期2009/3/19评 定 成 绩评定人签字评 定 日 期东北大学软件学院一、程序实践概述1、 题目名称:餐厅信息管理程序2、 时间进度:2009/3/142009/3/15程序构思2009/3/152009/3/17编写程序代码2009/3/172009/3/18程序测试,完成实验报告3、 开发环境:Microsoft visual studio 20055二、问题分析1、功能说明:(1)实现客户的点菜过程,客户结帐,帐目的管理,餐厅系统的维护。(2)能够生成文本文件来完成数据的存储与读取,完成帐单的管理。2、解决方案:(1)使用三种不同的结构体来分别存储餐桌,菜单以及订单信息。(2)使用链表来实现创建客户订单与客户结帐等操作。三、方案设计1、数据结构:(1)订单结构体typedef struct Order int Table_ID; /记录餐桌号int Dish_IDN; /记录菜的信息int Dish_StateN;struct Order *next;ORDER;(2)餐桌结构体typedef struct Table int Table_ID; /餐桌编号int Capacity; /餐桌最多能容纳的人数int Table_State; /1 有人在用,0 没人用TABLE;(3)菜的结构体typedef struct Dish int Dish_ID; /菜的编名char Dish_Name10; /菜名float Dish_Price; /价格DISH;(4)源文件函数定义功能说明restaurant.cvoid Load_Dish(void)从文件中读取菜谱ORDER*CreateOne(int)创建一个订单节点void Dish_Menu(void)显示菜谱void Table_Init(void)餐桌信息初始化int search(void)查找匹配的餐桌ORDER* Dish_Order(ORDER *,ORDER *)将节点添加到主链void Dishplay(int)显示菜的信息void saveInList(float)将客户消费额写入账单void Save_Inform(ORDER *,int)将已结账订单信息写入历史记录ORDER *Payment(ORDER *)结账void ModifyPW(void)密码修改int Pass_Word(void)密码验证void Observe(void)账目查询void ListMenu(void)账单管理菜单void List_Management(void)账单管理void Main_Menu(void)主菜单void Get_Rank(void)统计void Menu_select(void)选择功能2、总体流程:Menu_select()-Load_Dish()Dish_Order(ORDER*CreateOne)Payment(head)List_Management()ListMenu()Get_Rank()ModifyPW()Observe()Menu_select()点菜功能的实现 先调用search()函数,查找客户所需要的餐桌,找到后调用Dish_Menu()函数打印菜谱,接着调用Create(float)函数创建一个订单节点,最后调用Dish_Order()函数,将新创建的订单链到链表表尾; 结账功能的实现 先让客户输入自己就餐的编号,根据编号查找客户消费的具体情况,并调用Display()函数打印客户点的菜的信息,接着调用Save_Inform()函数将订单信息写入历史记录文本文件中进行保存,作为统计的基础,然后调用saveList()函数将客户消费总额和消费的具体时间存入名为“账本”的文件中,作为账目管理的基础; 账目管理 调用void List_Management()函数并且通过密码验证,进入ListMenu()函数。选1,调用ModifyPW()函数进行密码修改;选2,调用Observe()函数查看账单;选3,返回; 餐厅统计 通过调用Get_Rank()函数,打印近期比较受欢迎的十道菜2、 关键算法:结账 ORDER *Payment(ORDER *head) int i=0; int count=0; float pay=0.0; float Pay; int ID; ORDER *p,*p1; /声明文件指针 p=head; printf(请输入您的餐桌号n); fflush(stdin); scanf(%d,&ID); /用户输入餐桌号 while(p!=NULL) /运用指针打印出客户点的菜 if(p-Table_ID=ID) printf(您点菜的情况如下:n); printf(编号t菜名t价格n); while(p-Dish_IDi!=0) /用循环语句打印出 Display(p-Dish_IDi);pay+=dishp-Dish_IDi-1.Dish_Price;i+;count+; /跳出循环 printf(您一共点了%d道菜n,count); printf(您本次消费额为%f元n,pay); printf(您实际的付款:n); scanf(%f,&Pay); if(Paypay) printf(找您%fn,Pay-pay); printf(谢谢您的惠顾,欢迎下次光临n); if(count0) saveInList(pay);Save_Inform(p,count); tbp-Table_ID.Table_State=0; break; else p1=p; p=p-next; if(p=head) head=head-next; else p1-next=p-next; free(p); return head; 4、界面设计: 五、创新说明 通过对函数的多次修正,减少了程序使用过程中链表的遍历链表的次数,提高了效率,使用大量指针,简单明了,快速定位。六、体会与建议 做这个程序时遇到了非常多的困难,同学们的帮助和老师的指导给了我很大的信心,通过自己一点一点的努力,终于完成了。我觉得这个程序太大了,一个人做不但很困难,而且在许多相似的地方,因为思维的有限,有时只能按一种模式处理,如果我们是分小组完成这样的程序,不但能培养我们的合作精神,也更有利于程序的完善。代码#include #include #include #include #include #define N 10#define D 10#define H 10#define ASK (ORDER*)malloc(sizeof(ORDER)#define MaxCapacity 4/定义订单结构体typedef struct Order int Table_ID; /记录餐桌号int Dish_IDN; /记录菜的信息int Dish_StateN;struct Order *next;ORDER;/定义餐桌结构体typedef struct Table int Table_ID; /餐桌编号int Capacity; /餐桌最多能容纳的人数int Table_State; /1 有人在用,0 没人用TABLE;/定义菜的结构体typedef struct Dish int Dish_ID; /菜的编名char Dish_Name10; /菜名float Dish_Price; /价格DISH;TABLE tbH; /餐桌结构体数组DISH dishD; /菜的结构体数组int PASSWORD=123; /密码设置/函数设置void Load_Dish(void); /从文件中读取菜谱ORDER*CreateOne(int); /创建一个订单节点void Dish_Menu(void); /显示菜谱void Table_Init(void); /餐桌信息初始化int search(void); /查找匹配的餐桌ORDER* Dish_Order(ORDER *,ORDER *); /将节点添加到主链void Dishplay(int); /显示菜的信息void saveInList(float); /将客户消费额写入账单void Save_Inform(ORDER *,int); /将已结账订单信息写入历史记录ORDER *Payment(ORDER *); /结账void ModifyPW(void); /密码修改int Pass_Word(void); /密码验证void Observe(void); /账目查询void ListMenu(void); /账单管理菜单void List_Management(void); /账单管理void Main_Menu(void); /主菜单void Get_Rank(void); /统计void Menu_select(void); /选择功能/主函数int main() puts(1); Table_Init(); puts(2); Menu_select(); system(pause);/系统主菜单void Main_Menu() printf(n*n); printf(餐厅服务系统n); printf(*n); printf(1.点菜n); printf(2.客户结账n); printf(3.账目管理n); printf(4.餐厅统计n); printf(5.退出系统n);/选择功能void Menu_select(void) ORDER* head;int choose;int result;head=NULL;system(cls);doLoad_Dish();Main_Menu();printf(请选择:n);fflush(stdin);scanf(%d,&choose);/system(cls);switch(choose)case 1:result=search(); if(result=1) printf(您可以到%d号餐桌就餐n,result); else printf(您和您的朋友可以到%d号餐桌就餐n,result); Dish_Menu(); head=Dish_Order(head,CreateOne(result); /system(cls); break;case 2:head=Payment(head); break;case 3:List_Management(); break;case 4:Get_Rank(); break;case 5:exit(1); break;while(1);/从文件中读取菜谱void Load_Dish(void) FILE *fp; int i; fp=fopen(dish_name.txt,r); for(i=0;iD;i+) fscanf(fp,%dt%st%fn,&dishi.Dish_ID,dishi.Dish_Name,&dishi.Dish_Price); /餐桌初始化void Table_Init() tb0.Capacity=1;tb0.Table_ID=1; tb1.Capacity=1;tb1.Table_ID=2; tb2.Capacity=2;tb2.Table_ID=3; tb3.Capacity=2;tb3.Table_ID=4; tb4.Capacity=2;tb4.Table_ID=5; tb5.Capacity=3;tb5.Table_ID=6; tb6.Capacity=4;tb6.Table_ID=7; tb7.Capacity=4;tb7.Table_ID=8; tb8.Capacity=4;tb8.Table_ID=9; tb9.Capacity=4;tb9.Table_ID=10;/显示菜谱void Dish_Menu(void) int i;printf(*欢迎选购本店菜*n);printf(菜编号t菜名t菜单价n);for(i=0;iD;i+)printf(%dt%st%fn,dishi.Dish_ID,dishi.Dish_Name,dishi.Dish_Price);/查找有没有匹配的餐桌int search(void) int Cust_Num; int i; printf(请输入来客数量:n); scanf(%d,&Cust_Num); if(MaxCapacityCust_Num) printf(抱歉,本店没有容纳%d的餐桌!,Cust_Num);return -1; while(Cust_Num=MaxCapacity) for(i=0;iTable_ID=result;for(i=0;iDish_IDi);if(p-Dish_IDiDish_IDi10)printf(超出菜谱范围,请重新输入n);i-;else if(p-Dish_IDi=0)break;elsep-Dish_Statei=0;tbresult-1.Table_State=1;p-next=NULL;return p;/添加到主链ORDER*Dish_Order(ORDER*head,ORDER*p)ORDER*p1;p1=head;if(p1!=NULL)if(p!=NULL)while(p1-next!=NULL)p1=p1-next;p1-next=p;printf(订单创建成功n);elseprintf(订单创建失败n);elseif(head=NULL&p!=NULL)head=p;return head;/根据菜的编号打印一道菜的信息void Display(int ID)int i=0;for(i=0;iDish_IDi0) fprintf(fp,%dt%st%fn,dishp-Dish_IDi-1.Dish_ID,dishp-Dish_IDi-1.Dish_Name,dishp-Dish_IDi-1.Dish_Price); i+; fprintf(fp,%s,ctime(&timer); printf(历史记录保存成功n); fclose(fp);/结账ORDER *Payment(ORDER *head) int i=0; int count=0; float pay=0.0; float Pay; int ID; ORDER *p,*p1; p=head; printf(请输入您的餐桌号n); fflush(stdin); scanf(%d,&ID); while(p!=NULL) if(p-Table_ID=ID) printf(您点菜的情况如下:n); printf(编号t菜名t价格n); while(p-Dish_IDi!=0) Display(p-Dish_IDi);pay+=dishp-Dish_IDi-1.Dish_Price;i+;count+; printf(您一共点了%d道菜n,count); printf(您本次消费额为%f元n,pay); printf(您实际的付款:n); scanf(%f,&Pay); if(Paypay) printf(找您%fn,Pay-pay); printf(谢谢您的惠顾,欢迎下次光临n); if(count0) saveInList(pay);Save_Inform(p,count); tbp-Table_ID.Table_State=0; break; else p1=p; p=p-next; if(p=head) head=head-next; else p1-next=p-next; free(p); return head;/修改密码void ModifyPW() int password; printf(请输入新的密码n); scanf(%d,&password); PASSWORD=password; printf(密码修改成功n);/查看账目void Observe() FILE *fp; float pay; char str25; int i=0; int j=0; if(fp=fopen(账本.txt,r)=NULL) printf(操作失败n); exit(1); printf(消费金额t消费时间n); while(!feof(fp) i=0; j=0; fscanf(fp,%ft,&pay); while(i=5&j25) fscanf(fp,%c,&strj); j+; if(strj= ) i+; fscanf(fp,nn); i=0; j=0; printf(%ft,pay); while(i=5&j25) printf(%c,strj); j+; if(strj= ) i+; printf(n); fclose(fp);/账单管理菜单void ListMenu() int choice; printf(1.修改密码n); printf(2.查看账本n); printf(3.返回); do printf(请选择:n); scanf(%d,&choice); switch(choice) case 1:ModifyPW(); break;case 2:Observe(); break;case 3:Menu_select(); break;default:printf(没有该功能项n); while(1);/账单管理void List_Management() FILE *fp; if(fp=fopen(账本.txt,r)=NULL) printf(操作失败n); exit(1); if(Pass_Word() ListMenu();/获得近期各菜的受欢迎程度void Get_Rank(void) FILE *fp; int n,i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年陪诊师考试服务态度试题及答案
- 2025年东莞市人工智能训练师初赛竞赛练习题及答案
- (试题)社会救助公共基础知识题库及答案
- 施工现场应急预案方案
- 2025年新媒体运营师中级考试预测题及实战技巧解析
- 2025年护士招聘面试预测题及应对技巧
- 北京市门头沟区2023-2024学年九年级下学期初中学业水平考试(一模)化学试题及答案
- 桃花姬阿胶糕课件
- 桃江眼科知识培训班课件
- 2025年财务主管职位面试预测题及应对建议
- 中国画基础知识课件
- 2025年全国高校辅导员素质能力大赛基础知识测试题及答案(共3套)
- 岗位竞技活动方案
- 大气监测培训课件
- 中国高熔体强度聚丙烯行业市场调查报告
- 2025年河南省中考历史试卷真题(含答案)
- 广告与设计专业介绍
- 标准预防与手卫生
- 2025-2030年中国良性前列腺增生(BPH)药物行业市场现状供需分析及投资评估规划分析研究报告
- 工程量计算培训课件
- 青少年足球训练基地项目可行性研究报告完整立项报告
评论
0/150
提交评论