




已阅读5页,还剩15页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
中国地质大学(武汉) 课程论文报告课程名称 编程方法导论 论文题目 餐厅信息管理程序学 院 _环境学院_专 业 _生物科学_姓 名 _郝晋奎_学 号 20131001325 指导老师 綦广 目录一、前言3二、设计内容3三、总体设计思路3四、功能模块的详细设计31) 数据的存储结构32) 函数之间的调用关系说明43) 各函数实现4五、程序的调试及测试111) 菜单功能112) 点菜功能123) 订餐功能124) 结账功能135) 修改菜单功能13六、心得体会13七、参考文献13八、程序源代码14一、 前言因为喜欢编程所以选择了编程方法导论这门课。也因为专业所限从没有用学习过编程课程,对编程了解也是通过自学。通过这门课程使我对编程有了一个更为宏观的了解,也学到了很多课本上没有的东西,收获很多。这次的程序设计,用到了我学到的所有知识,一定会有很多不足,也会略显稚嫩,请老师批评指正。二、 设计内容主要利用c语言的文件操作能力设计开发一个小型的餐厅信息管理程序,至少具有如下功能:点菜、结账、餐桌预定、菜单修改、餐厅信息统计等功能。操作菜单要能使使用者看懂,以便使用者正确使用。三、 总体设计思路通过程序实现餐厅管理的便捷化。主要围绕餐厅日常常用的功能来编写程序,一个函数实现一个功能,尽量做到相互之间互不影响,为整个程序服务。程序遵循以下思路:1) 以结构化各个功能模块,函数间的调用精简整个函数。2) 以全局结构来随时定义结构数组以及机构。3) 以写一个信息存一个的思想,实现多个添加功能。4) 以读一个打印一个的思想,实现显示全部信息。5) 以先判断再打印的思想,来实现查找是否有这个餐桌。四、 功能模块的详细设计1) 数据的存储结构因为菜、餐桌信息均不只含有一项内容,所以使用结构体数组typedef struct f/菜信息char name30;/菜名int price;/菜定价_food;typedef struct t/餐桌信息int flag;/定义变量名用于判断int foo30;/餐桌编号_table; struct r/订单信息_food food20;/所选菜信息_table table30;/所选餐桌信息2) 函数之间的调用关系说明在主函数中通过case选择语句调用:system(cls);menu(&restaurant);order(&restaurant);save(&restaurant);book(&restaurant);bill(&restaurant);total_information(&restaurant);change_menu(&restaurant);entry(&restaurant);九个函数,其中各函数中又个别嵌套调用了其他函数。3) 各函数实现 order(struct r*restaurant) 订餐的函数:order(struct r*restaurant)/实现点菜功能int i,j;printf(nn*nn);printf(ttt 订 餐 nn);printf(*nn);printf(请先输入选择的桌子号码(1-30):);scanf(%d,&i);/读入桌子号码if(restaurant-tablei.flag=1|restaurant-tablei.flag=2)/当餐桌为已有人或已被预订情况时提示重新选择printf(%d号桌已经被定n,i);printf(按回车,请重新选择!n);getchar();order(restaurant);/调用order函数return;restaurant-tablei.flag=1;/将1赋值给flag,定义此时为printf(请输入您要选择的菜号码(1-20),以空格分开,以999结束n);for(j=1;restaurant-tablei.fooj-1!=999;j+)/当最后一位为999时结束for循环,否则全部读入内存scanf(%d,&restaurant-tablei.fooj);/从键盘读入所选菜编号printf(点菜成功!n);system(pause);restaurant是指向struct r结构体的指针。输入餐桌号i,如果tablei.flag是1或2,则显示该桌已被选定,系统提示重新选择餐桌号,通过嵌套函数order(restaurant)再次选择。如果tablei.flag不是1或2,则该桌可用,同时使tablei.flag变为1防止重复选定。然后是for语句循环,直到输入999之前可以持续点餐,点餐通过输入菜对应的编号实现,想重复点同一道菜可以再次输入编号。 book(struct r * restaurant) 预定餐桌和菜的函数:book(struct r * restaurant)/实现预定功能,记录存入内存int i,j;printf(n*nn);printf(ttt 预 定 nn);printf(*nn);printf(请输入预定的桌子号码(1-30):);scanf(%d,&i);/读入桌子号码if(restaurant-tablei.flag=1|restaurant-tablei.flag=2)/当flag等于1或等于2时提示重新选择printf(%d号桌已经被定n,i);printf(按回车,请重新选择!n);getchar();book(restaurant);/调用book函数return;restaurant-tablei.flag=2;/将2复制给flag,定义此时预定桌位及菜printf(请输入您要预定的菜号码,以空格分开,以999结束n);for(j=1;restaurant-tablei.fooj-1!=999;j+)/当最后一位为999时结束for循环,否则全部读入内存scanf(%d,&restaurant-tablei.fooj);/从键盘读入菜编号printf(预定成功!n); system(pause);restaurant是指向struct r结构体的指针。系统提示“请输入预定的桌子号码(1-30):”同order函数,若tablei.flag是1或2,则显示该桌已被选定,系统提示重新选择餐桌号,通过嵌套函数book(restaurant)再次选择。如果tablei.flag不是1或2,则该桌可预定,同时使tablei.flag变为2防止重复预定。 for(j=1;restaurant-tablei.fooj-1!=999;j+) scanf(%d,&restaurant-tablei.fooj); 意思是只要输入的编号不是999就可以持续点菜(bill函数有设置,即使输入的编号超过菜单范围也不会被收费。特别注意for语句循环中是j-1而不是j,因为从第二次循环开始,先j+后判断)printf(预定成功!n);getchar();getchar();其中第一个getchar();用以接收回车键,第二个getchar();返回主界面。 bill(struct r * restaurant) 用于结账的函数:bill(struct r * restaurant)/实现结账功能int bill=0,i,j;/对bill初始化printf(*nn);printf(ttt 结 账nn);printf(*nn);printf(请输入要结账的桌子号码:n);scanf(%d,&i);/读入餐桌号if(restaurant-tablei.flag!=1&restaurant-tablei.flag!=2)/如果为没有客人状态printf(%d号桌没有客人,不能结帐!n,i);getchar();getchar();return;else for(j=1;restaurant-tablei.fooj!=999;j+) /读入该桌所选菜的信息 if(restaurant-tablei.foojtablei.fooj0)/如果该道菜存在 bill+=restaurant-foodrestaurant-tablei.fooj.price;/统计菜的总价 printf(%d号桌一共消费%d元.n,i,bill);printf(1、释放该桌位 2、返回上一层n);scanf(%d,&j);if(j=1)restaurant-tablei.flag=-1;/将-1赋值给flag,此时释放所选桌位elsegetchar();return;getchar();getchar();若tablei.flag是1,表示正被使用,可以结帐;若tablei.flag是2,表示已被预定,可以结账。如果不是1或2,则表示没人,不能结账。restaurant-foodrestaurant-tablei.fooj.price表示第i张桌子点的菜的编号,bill+=restaurant-foodrestaurant-tablei.fooj.price是把所有的菜单价格相加。restaurant-tablei.foojtablei.fooj0表示如果输入的编号不在菜单范围内就不能算入账单,否则会出错,这提高了容错性。结账后,若是输入1,由if(j=1)restaurant-tablei.flag=-1;知该桌位会被释放供其他客人使用,再按2 return返回界面。 函数total_information(struct r *restaurant) 显示所有进账和餐厅信息total_information(struct r *restaurant)/显示所有进账和餐厅信息int bill=0,i,j,count=0;/初始化bill和countprintf(*nn);printf(ttt进账和餐厅的信息nn);printf(*nn);for(i=1;itablei.flag=1|restaurant-tablei.flag=2)/当餐桌被选择或预定时count增加count+;for(j=1;restaurant-tablei.fooj-1!=999;j+)if(restaurant-tablei.foojtablei.fooj0)bill+=restaurant-foodrestaurant-tablei.fooj.price;printf(总共进账%d元n,bill);/输出进账金额printf(目前总共有%d个桌子被预定或有人n,count);/输出预定或有人的桌子数量printf(目前有%d个空桌子n,30-count);/输出剩余桌子数量getchar();getchar();此函数无返回值,首先定义并初始化变量,输出标题后通过for循环计算出进账金额及被使用的桌子和剩余桌子数for(i=1;itablei.flag=1或restaurant-tablei.flag=2否 是输出进账0元有0桌被预定或有人剩余30桌count+for(j=1;restaurant-tablei.fooj!=999;j+)restaurant-tablei.foojtablei.fooj0否 是无bill+=restaurant-foodrestaurant-tablei.fooj.price 函数save(struct r * restaurant) 将记录存入磁盘中实现方法:save(struct r * restaurant)/将记录存入磁盘中FILE * fp;/定义文件类型指针fp=fopen(cxq.txt,wb);/以只写方式打开“cxq.txt”文件fwrite(restaurant,sizeof(struct r),1,fp);/写入文件,一次写入一条fclose(fp);/关闭文件参数为结构体指针首先定义文件类型指针fp;然后以只写方式打开“cxq.txt”文件fp=fopen(cxq.txt,wb); 然后向restaurant所指内存区写入文件,一次写入一条,长度为struct r的长度 fwrite(restaurant,sizeof(struct r),1,fp); 关闭文件fclose(fp); 函数load(struct r * restaurant)加载磁盘中文件实现方法:load(struct r * restaurant)/加载磁盘中的文件FILE * fp;/定义文件类型指针fp=fopen(cxq.txt,rb);/以只读方式打开“cxq.txt”文件fread(restaurant,sizeof(struct r),1,fp);/写入文件,一次写入一条fclose(fp);/关闭文件定义文件类型指针fp 以只读方式打开“cxq.txt”文件fp=fopen(cxq.txt,rb);从restaurant所指内存区读取文件,一次读取一条长度为struct r的长度 fread(restaurant,sizeof(struct r),1,fp);关闭文件 fclose(fp); 函数entry(struct r * restaurant) 实现清空菜单实现方法:entry(struct r * restaurant)/实现清空菜单int i;for(i=1;,空);/字符串替换函数,清空菜名restaurant-foodi.price=0;/清空菜定价首先定义参数i使用for循环,定义参数i初始量为1当i小于21时,字符串 替换函数并且清空菜名直到i大于等于21后退出循环 函数change_menu(struct r * restaurant)实现修改菜单功能实现方法:change_menu(struct r * restaurant)/实现修改菜单功能int i,n;menu(restaurant);/首先输出修改前的全部列表do/使用do while循环printf(请输入要修改的菜名的号码: );/输入编号scanf(%d,&n);printf(请输入修改后的菜名: );/输入菜名scanf(%s,);printf(请输入修改后的价格: );/出入定价scanf(%d,&restaurant-foodn.price);printf(1、继续修改t2、返回n);scanf(%d,&i);if(i=1)/继续修改change_menu(restaurant);/调用修改菜单函数return;else/若输入2返回欢迎界面return;while(1);定义参数i,n调用函数menue(restaurant) 输出修改前的全部列表使用do while循环,分别输入编号、菜名、价格保存到n、、restaurant-foodn.price判断用户是否需要继续修改printf(1、继续修改t2、返回n);,若要修改用if语句进行判断,否则返回当用户需要继续进行修改即if(i=1)时 调用修改菜单函数change_menue(restaurant)进行修改否则即else时 返回欢迎界面五、 程序的调试及测试1) 菜单功能2) 点菜功能3) 订餐功能4) 结账功能5) 修改菜单功能六、 心得体会写程序需要耐心,更需要细心。这次写程序时调试时出现很多小问题,都是少了分号等一些小错误,检查很麻烦。所以以后写程序时一定仔细。另外,任何的程序都是由一个个函数组成的,在确定好整体思路后,化整为零,问题就变得简单多了。七、 参考文献l 杨路明. C语言程序设计基础. 北京邮电大学出版社.2005l 何钦铭,颜晖. C语言程序设计基础. 高等教育出版社.2008.八、 程序源代码#include/定义输入输出函数#include/定义杂项函数及内存分配函数#include /字符串处理# includetypedef struct f/菜信息char name30;/菜名int price;/菜定价_food;typedef struct t/餐桌信息int flag;/定义变量名用于判断int foo30;/餐桌编号_table; struct r/订单信息_food food20;/所选菜信息_table table30;/所选餐桌信息;welcome()/欢迎界面 printf(*nn);printf(tt 餐厅服务系统n);printf(*nn);printf(n 制作人:郝晋奎n);printf( 学号:20131001325n);system(pause);printf(*nn);printf(1、点菜n2、定菜n3、结账n4、进账和餐厅信息统计n5、修改菜单n6、退出n7、清空菜单n);printf(*nn);printf(请选择您需要的服务:nn);menu(struct r * restaurant)/显示菜单int i;printf(*nn);printf(ttt菜 单nn);printf(*nn);printf(序号 菜名t价格tn);for(i=1;,restaurant-foodi.price); putchar(10);/向屏幕输出一个换行符printf(.);order(struct r*restaurant)/实现点菜功能int i,j;printf(nn*nn);printf(ttt 订 餐 nn);printf(*nn);printf(请先输入选择的桌子号码(1-30):);scanf(%d,&i);/读入桌子号码if(restaurant-tablei.flag=1|restaurant-tablei.flag=2)/当餐桌为已有人或已被预订情况时提示重新选择printf(%d号桌已经被定n,i);printf(按回车,请重新选择!n);getchar();order(restaurant);/调用order函数return;restaurant-tablei.flag=1;/将1赋值给flag,定义此时为printf(请输入您要选择的菜号码(1-20),以空格分开,以999结束n);for(j=1;restaurant-tablei.fooj-1!=999;j+)/当最后一位为999时结束for循环,否则全部读入内存scanf(%d,&restaurant-tablei.fooj);/从键盘读入所选菜编号printf(点菜成功!n);system(pause);book(struct r * restaurant)/实现预定功能,记录存入内存int i,j;printf(n*nn);printf(ttt 预 定 nn);printf(*nn);printf(请输入预定的桌子号码(1-30):);scanf(%d,&i);/读入桌子号码if(restaurant-tablei.flag=1|restaurant-tablei.flag=2)/当flag等于1或等于2时提示重新选择printf(%d号桌已经被定n,i);printf(按回车,请重新选择!n);getchar();book(restaurant);/调用book函数return;restaurant-tablei.flag=2;/将2复制给flag,定义此时预定桌位及菜printf(请输入您要预定的菜号码,以空格分开,以999结束n);for(j=1;restaurant-tablei.fooj-1!=999;j+)/当最后一位为999时结束for循环,否则全部读入内存scanf(%d,&restaurant-tablei.fooj);/从键盘读入菜编号printf(预定成功!n); system(pause); bill(struct r * restaurant)/实现结账功能int bill=0,i,j;/对bill初始化printf(*nn);printf(ttt 结 账nn);printf(*nn);printf(请输入要结账的桌子号码:n);scanf(%d,&i);/读入餐桌号if(restaurant-tablei.flag!=1&restaurant-tablei.flag!=2)/如果为没有客人状态printf(%d号桌没有客人,不能结帐!n,i);getchar();getchar();return;else for(j=1;restaurant-tablei.fooj!=999;j+) /读入该桌所选菜的信息 if(restaurant-tablei.foojtablei.fooj0)/如果该道菜存在 bill+=restaurant-foodrestaurant-tablei.fooj.price;/统计菜的总价 printf(%d号桌一共消费%d元.n,i,bill);printf(1、释放该桌位 2、返回上一层n);scanf(%d,&j);if(j=1)restaurant-tablei.flag=-1;/将-1赋值给flag,此时释放所选桌位elsegetchar();return;getchar();getchar();total_information(struct r *restaurant)/显示所有进账和餐厅信息int bill=0,i,j,count=0;/初始化bill和countprintf(*nn);printf(ttt进账和餐厅的信息nn);printf(*nn);for(i=1;itablei.flag=1|restaurant-tablei.flag=2)/当餐桌被选择或预定时count增加count+;for(j=1;restaurant-tablei.fooj-1!=999;j+)if(restaurant-tablei.foojtablei.fooj0)bill+=restaurant-foodrestaurant-tablei.fooj.price;printf(总共进账%d元n,bill);/输出进账金额printf(目前总共有%d个桌子被预定或有人n,count);/输出预定或有人的桌子数量printf(目前有%d个空桌子n,30-count);/输出剩余桌子数量getchar();getchar();save(struct r * restaurant)/将记录存入磁盘中FILE * fp;/定义文件类型指针fp=fopen(cxq.txt,wb);/以只写方式打开“cxq.txt”文件fwrite(restaurant,sizeof(struct r),1,fp);/写入文件,一次写入一条fclose(fp);/关闭文件load(struct r * restaurant)/加载磁盘中的文件FILE * fp;/定义文件类型指针fp=fopen(cxq.txt,rb);/以只读方式打开“cxq.txt”文件fread(restaurant,sizeof(struct r),1,fp);/写入文件,一次写入一条fclose(fp);/关闭文件entry(struct r * restaurant)/实现清空菜单int i;for(i=1;,空);/字符串替换函数,清空菜名restaurant-foodi.price=0;/清空菜定价change_menu(struct r * restaurant)/实现修改菜单功能int i,n;menu(restaurant);/首先输出修改前的全部列表do/使用do while循环printf(请输入要修改的菜名的号码: );/输入编号scanf(%d,&n);printf(请输入修改后的菜名: );/输入菜名scanf(%s,);printf(请输入修改后的价
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古乌兰察布职业学院招聘考试真题2024
- 2024年金华兰溪市消防救援大队招聘真题
- 蜡疗考试题及答案
- 四级育婴员考试模拟题(含答案)
- 抗高血压药考试试题(有答案)
- 新进人员岗前培训考核试题(附答案)
- 华为公司运维工程师英语试题及参考答案
- 高血压危象的急救、诊疗及护理考核试题与答案
- 节能建筑评估体系-洞察及研究
- 2025年光伏发电项目土地租赁合同规范
- 推广服务合同范例
- 《分红保险的魅力》课件
- 住建局条文解读新规JGJT46-2024《施工现场临时用电安全技术标准》
- 叉车装卸货合同范例
- 电力设备运行与维护管理手册
- 工程审计课程设计
- 附件2:慢病管理中心评审实施细则2024年修订版
- 食品安全制度管理目录
- (正式版)SH∕T 3548-2024 石油化工涂料防腐蚀工程施工及验收规范
- 医院科研诚信课件
- 小学校园安全知识
评论
0/150
提交评论