• 89.50 KB
  • 15页

《程序设计实践》中小餐馆点餐系统课程项目报告

  • 15页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'课程项目报告15 课程项目任务书题目中小饭店点餐系统主要内容用C语言开发一个简单的中小饭店点餐系统。要求实现以下基本功能:(1)有简单的用户管理功能。系统中有两类用户,系统管理员和服务员,不同用户在登陆系统后会有不同的菜单可进行不同的操作。(2)系统管理员用户能完成以下功能:a)创建系统新用户,可以查找、浏览和更新用户信息;b)输入、查询、浏览、更新菜单信息;c)统计分析功能(如统计每个菜品被顾客选择情况、每个服务员每餐或每天服务顾客数量等);d)(可选)输入、查询、浏览、更新餐桌信息(如位置、可坐几人等);e)(可选)顾客信息浏览。(3)服务员用户能完成以下功能:a)顾客信息录入(可以分店内消费、自带等);b)菜单信息查询、浏览;c)顾客点餐以及点餐情况浏览、修改、删除、状态更新等功能;d)费用计算;e)(可选)餐桌信息查询、浏览与更新等。其中功能(2)-b)与功能(3)-b)、功能(2)-d)与功能(3)-e)有重叠,模块可重用。扩展功能:可以按照自己对问题的理解以及对C语言的掌握程度进行扩展。比如(1)菜品推荐;(2)餐位预定(3)网络(含互联网、电话、微信等)订餐;(4)VIP顾客管理;(5)优惠券管理;(6)自定义菜品等等。还可以考虑支持外卖、加入对厨房、厨师的管理等功能。特别说明:尽可能地运用自己已经学习过的数据结构的知识去展现C语言运用能力。任务要求一、提交材料应包括:(1)系统源代码(2)课程项目报告二、整个设计过程具体要求(1)需求分析要求学生对系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分回答问题30分成绩评定教师:15 1需求分析题目要求设计并编写一个中小餐馆点餐系统,要求有一个餐厅管理员和若干个服务员,并要加入管理员对菜单,餐桌以及服务员的管理,并能够查看菜品选择情况以及服务员每天服务顾客数目。服务员要求能实现顾客点餐,加减菜品,创建菜品单以及结账功能。加入在管理员和服务员登入系统的时候进行密码验证,以及对服务员和管理员修改密码的管理。2概要设计(1)数据结构:a)程序的服务员,菜单,餐桌,菜品单采用链表。每一个链表的结点存储一个结构体信息,可以灵活插入,删除,遍历和修改。b)管理员采用结构体。因为只需要一个管理员,所以只定义一个管理员结构体gly,保存管理员的编号和密码。(2)模块划分a)头文件ui.h:程序使用者界面。包含17个voidui函数。b)头文件cpd.h:创建,浏览,查询,删除,更新菜品单。包含8个voidcpxx函数和一个结构体定义。c)头文件file.h:打开,创建,写入,读取,关闭文件。包含6个voidfile函数。d)头文件menu.h:程序基于ui的功能实现。包含20个voidmenu函数。e)头文件lianbiao.h:创建,插入,浏览,删除,查询链表。包含21个链表实现函数。f)主函数main.c:包含头文件,定义程序全局变量,实现程序的运行。(3)程序总体框架mainmenuuilianbiaofilecpd3详细设计(1)链表实现(以服务员为例):15 //服务员结构structstud_fwy{intnum;//服务员编号charname[20];//服务员姓名intfwgknum;//服务顾客数目charmima[20];//密码structstud_fwy*next;//链表指针};//建立服务员structstud_fwy*jl_fwy(){structstud_fwy*charu_fwy(structstud_fwy*head,structstud_fwy*p);intnum;intsize=sizeof(structstud_fwy);charname[20],mima[20];printf("输入您的编号:");scanf("%d",&num);printf("输入您的姓名:");scanf("%s",name);printf("输入你的密码:");scanf("%s",mima);p_fwy=(structstud_fwy*)malloc(size);p_fwy->num=num;p_fwy->fwgknum=0;strcpy(p_fwy->name,name);strcpy(p_fwy->mima,mima);head_fwy=charu_fwy(head_fwy,p_fwy);fwydenum++;returnhead_fwy;}//插入服务员structstud_fwy*charu_fwy(structstud_fwy*head,structstud_fwy*p){structstud_fwy*ptr,*ptr1,*ptr2;ptr2=head;ptr=p;ptr1=NULL;ptr1=NULL;if(head==NULL){head=ptr;head->next=NULL;}else{while((ptr->num>ptr2->num)&&(ptr2->next!=NULL)){15 ptr1=ptr2;ptr2=ptr2->next;}if(ptr->num<=ptr2->num){if(head==ptr2)head=ptr;elseptr1->next=ptr;ptr->next=ptr2;}else{ptr2->next=ptr;ptr->next=NULL;}}returnhead;}//删除服务员structstud_fwy*shanchu_fwy(structstud_fwy*head,intnum){structstud_fwy*ptr1,*ptr2;while(head!=NULL&&head->num==num){ptr2=head;head=head->next;free(ptr2);}if(head==NULL)returnNULL;ptr1=head;ptr2=head->next;while(ptr2!=NULL){if(ptr2->num==num){ptr1->next=ptr2->next;free(ptr2);}elseptr1=ptr2;ptr2=ptr1->next;}returnhead;}//遍历服务员voidbianli_fwy(structstud_fwy*head){15 structstud_fwy*ptr;if(head==NULL){printf("n没有服务员信息,请新建!n");return;}printf("n服务员信息:n");printf("编号t姓名t服务员每天服务顾客数目n");for(ptr=head;ptr!=NULL;ptr=ptr->next)printf("%dt%st%dn",ptr->num,ptr->name,ptr->fwgknum);}//查询服务员voidchaxun_fwy(structstud_fwy*head,intnum){structstud_fwy*ptr;if(head==NULL){printf("n没有服务员信息,请新建!n");return;}for(ptr=head;ptr!=NULL;ptr=ptr->next){if(ptr->num==num){printf("n服务员信息:n");printf("编号t姓名t服务员每天服务顾客数目n");printf("%dt%st%dn",ptr->num,ptr->name,ptr->fwgknum);return;}}printf("n没有编号为%d的服务员,请重试(按任意键返回)!n",num);getchar();getchar();return;}//修改服务员信息structstud_fwy*xiugai_fwy(structstud_fwy*head,intnum){structstud_fwy*ptr;charname[20];if(head==NULL){printf("n没有服务员信息,请新建!n");returnNULL;}for(ptr=head;ptr!=NULL;ptr=ptr->next){if(ptr->num==num){printf("n服务员信息:n");printf("编号t姓名n");15 printf("%dt%sn",ptr->num,ptr->name);printf("请输入新的信息:n");printf("输入您的编号:");scanf("%d",&num);printf("输入您的姓名:");scanf("%s",name);ptr->num=num;strcpy(ptr->name,name);bwc();returnhead_fwy;}}printf("n没有编号为%d的服务员,请重试(按任意键返回)!n",num);getchar();getchar();return0;}(1)界面实现(部分)//主菜单voidui(){system("cls");printf("################欢迎使用###############n");printf("主菜单:n");printf("1.管理员登陆.n");printf("2.服务员登陆.n");printf("0.退出.n");printf("#######################################n");}//主菜单-管理员登陆界面voidui_glydljm(){system("cls");printf("################欢迎使用###############n");printf("主菜单-管理员登陆:n");}//主菜单-管理员voidui_gly(){system("cls");printf("################欢迎使用###############n");printf("主菜单-管理员:n");printf("1.系统用户信息.n");printf("2.餐桌信息.n");15 printf("3.菜单信息.n");printf("4.点菜情况.n");printf("5.统计分析.n");printf("6.旧账单浏览.n");printf("7.返回上一级.n");printf("0.退出.n");printf("#######################################n");}//主菜单-管理员-系统用户信息voidui_gly_xtyhxx(){system("cls");printf("################欢迎使用###############n");printf("主菜单-管理员-系统用户信息:n");printf("1.服务员信息.n");printf("2.修改管理员密码.n");printf("3.返回上一级.n");printf("0.退出.n");printf("#######################################n");}//主菜单-管理员-系统用户信息-服务员信息voidui_gly_xtyhxx_fwyxx(){system("cls");printf("################欢迎使用###############n");printf("主菜单-管理员-系统用户信息-服务员信息:n");printf("1.建立.n");printf("2.删除.n");printf("3.修改.n");printf("4.查询.n");printf("5.浏览.n");printf("6.修改服务员密码.n");printf("7.返回上一级.n");printf("0.退出.n");printf("#######################################n");}(1)菜单实现(部分)//主菜单voidmenu(){voidmenu_gly();voidmenu_fwy();voidmenu_glydl();voidmenu_fwydl();15 intn,i;i=panduanfile();ui();printf("输入您的选择:");scanf("%d",&n);switch(n){case1:system("cls");if(i==1){printf("################欢迎使用###############n");printf("您是第一次使用该系统,账号为1,请输入密码:");scanf("%s",gly1.mima);printf("程序退出,请重新开启!n");bwc();getchar();getchar();exit(0);}ui_glydljm();menu_glydl();menu_gly();break;case2:if(head_fwy==NULL){system("cls");printf("暂无服务员信息,请新建(按任意键返回)!n");getchar();getchar();break;}ui_fwydljm();menu_fwydl();menu_fwy();break;case0:exit(0);default:printf("n您的输入有误,请重新输入!n");printf("按任意键返回!n");getchar();getchar();break;}}//主菜单-管理员登陆15 voidmenu_glydl(){intnum,i=0;charmima[20];while(i<3){printf("输入管理员编号:");scanf("%d",&num);printf("输入管理员密码:");scanf("%s",mima);if(num==gly1.num){if(strcmp(gly1.mima,mima)==0){fwynum=num;printf("登陆成功(按任意键继续)!n");getchar();getchar();return;}else{system("cls");printf("密码错误,登陆失败,你还有%d次机会!n",2-i);i++;}}else{system("cls");printf("编号错误,登陆失败,你还有%d次机会!n",2-i);i++;}}printf("3次输入错误,程序结束!n");getchar();getchar();exit(0);}//主菜单-管理员voidmenu_gly(){voidmenu_gly_xtyhxx();voidmenu_gly_czxx();voidmenu_gly_dcqk();voidmenu_gly_cdxx();voidmenu_gly_tjfx();voidmenu_gly_jzdll();intn;while(1){15 ui_gly();printf("输入您的选择:");scanf("%d",&n);switch(n){case1:menu_gly_xtyhxx();break;case2:menu_gly_czxx();break;case3:menu_gly_cdxx();break;case4:menu_gly_dcqk();break;case5:menu_gly_tjfx();break;case6:menu_gly_jzdll();break;case7:return;case0:exit(0);default:printf("n您的输入有误,请重新输入!n");printf("按任意键返回!n");getchar();getchar();break;}}}(1)文件实现(部分)//建立文件voidbuildfile(){if((fcz=fopen("cz.txt","wb"))==NULL){printf("cz文件建立失败!n");exit(0);}if((fcd=fopen("cd.txt","wb"))==NULL){15 printf("cd文件建立失败!n");exit(0);}if((ffwy=fopen("fwy.txt","wb"))==NULL){printf("fwy文件建立失败!n");exit(0);}if((fgly=fopen("gly.txt","wb"))==NULL){printf("gly文件建立失败!n");exit(0);}if((fcpd_x=fopen("cpd_x.txt","wb"))==NULL){printf("cpd_x文件建立失败!n");exit(0);}if((fqjbl=fopen("qjbl.txt","wb"))==NULL){printf("qjbl文件建立失败!n");exit(0);}}//打开文件voidopenfile(){if((fcz=fopen("cz.txt","rb"))==NULL){printf("cz文件打开失败!n");exit(0);}if((fcd=fopen("cd.txt","rb"))==NULL){printf("cd文件打开失败!n");exit(0);}if((ffwy=fopen("fwy.txt","rb"))==NULL){printf("fwy文件打开失败!n");exit(0);}if((fgly=fopen("gly.txt","rb"))==NULL){printf("gly文件打开失败!n");exit(0);}if((fcpd_x=fopen("cpd_x.txt","rb"))==NULL){printf("cpd_x文件打开失败!n");exit(0);}if((fqjbl=fopen("qjbl.txt","rb"))==NULL){printf("qjbl文件打开失败!n");15 exit(0);}}//关闭文件voidclosefile(){if(fclose(fcz)){printf("cz文件关闭失败!n");exit(0);}if(fclose(fcd)){printf("cd文件关闭失败!n");exit(0);}if(fclose(ffwy)){printf("fwy文件关闭失败!n");exit(0);}if(fclose(fgly)){printf("gly文件关闭失败!n");exit(0);}if(fclose(fcpd_x)){printf("cpd_x文件关闭失败!n");exit(0);}if(fclose(fqjbl)){printf("qjbl文件关闭失败!n");exit(0);}}(1)主函数(框架)#include#include#include#include"ui.h"#include"lianbiao.h"#include"cpd.h"#include"file.h"#include"menu.h"intmain(void){while(1){15 menu();}return0;}4调试分析(1)程序前期设计不足,导致编写代码时出现各种意想不到的困难,程序函数调用混乱,没有条理,导致程序后期修复,debug有很大的困难。(2)菜品单功能规划时没有想到,在编写了很多代码时在加入产生混乱,导致程序杂乱无章。(3)程序模块划分比较合理,没有产生较大的疏漏,但是这样划分导致源代码很多,有很多没有必要的东西。(4)链表写入和读取文件时出现了重复写入的问题,后来发现是指针变量没有初始化。5测试结果打开程序,执行命令1,初始化管理员密码,输入后,程序结束。打开程序,执行命令1,输入账号,密码,执行1可以管理系统用户信息。打开程序,执行命令1,输入账号,密码,执行2可以管理餐桌信息。打开程序,执行命令1,输入账号,密码,执行3可以管理菜单信息。打开程序,执行命令1,输入账号,密码,执行4可以查看点菜情况。打开程序,执行命令1,输入账号,密码,执行5可以统计分析。打开程序,执行命令1,输入账号,密码,执行6可以查看旧账单。打开程序,执行命令1,输入账号,密码,执行7可以返回上一级。打开程序,执行命令1,输入账号,密码,执行0可以退出程序。打开程序,执行命令2,进入服务员界面,执行1可以查看菜单信息。打开程序,执行命令2,进入服务员界面,执行2可以为顾客点餐。打开程序,执行命令2,进入服务员界面,执行3可以计算费用。打开程序,执行命令2,进入服务员界面,执行4可以查看餐桌信息。打开程序,执行命令2,进入服务员界面,执行5可以返回上一级。打开程序,执行命令2,进入服务员界面,执行0可以退出程序。15 6课程心得总结这是第一次做超过1000行代码的程序,没有经验,所以前期程序的规划设计阶段没有做好,导致后期编码时出现了较多问题,各种功能间出现冲突,只能用增加代码的方式来解决这些问题,所以导致源代码很长,但是实现的功能却较少,后期debug时也较为困难,添加功能时也不方便,不过,这次设计的经验带给了我很大的启发,为我以后编程产生了很重要的影响,也让我明白了前期规划的重要性,尤其是做较大程序开发的时候,前期规划是非常重要的。程序虽然没有实现预想的功能,但是带给我的收益却很多。15'