合肥学院。
计算机科学与技术系。
2010~2011学年第二学期。
2024年6月。
点菜系统。概括:本点菜系统可以分为老板使用和客人使用,老板使用。老板可以初始化,补充,修改,删除菜单,并且写入文件。客人可以循环点菜。
一、需求分析。
随着餐饮业的蓬勃发展,各餐馆的服务员岗位日益紧张,因此,有这个点菜系统。该点菜系统无需服务员服务,菜的名称,类别,介绍,**等等信息都会显示在电脑上,通过电脑点菜。
二、算法设计。
1.设计思想:
⑴、程序结构(流程图)
点菜。录入。有。是。
否 是否。
、重要的数据结构。
typedef struct cmenu
int num;/*菜品编号*/
char fname[10]; 菜系名称*/
char name[10];/菜名*/
char introduce[1000];/菜的介绍*/
int price;/*菜的原始***/
float zhekou;/*若有折扣卡的折扣*/
struct cmenu *next;
cm;、主要的算法思想。
将点菜系统分为餐馆老板输入使用和客户点单使用,老板输入使用中通过链表实现菜单的初始化,补充,修改以及删除的过程。在客户使用栏中主要通过循环使客户可以不断点单,通过switch函数来实现客户对不同菜的选择以及是否又折扣等问题。
2、设计表示。
link *enter1()
初始化型录入菜的品种,即菜单的录入,写入d\文件。
link * enter2()
补充型录入菜的品种,即在原有菜单上添加菜系种类,读取d\文件,修改,覆盖。
menu1总菜单,包括选项录入和使用,录入供餐馆老板录入菜单使用,使用供客户点菜使用。
menu2()
菜品录入的菜单,menu1()中录入选项的子菜单,有初始化录入,补充录入,修改菜品,删除菜品四个选项,供餐馆老板对自己菜单的操作。
menu3()
顾客点菜菜单1,有点菜和结账两个选项供客人选择。
menu4()
顾客点菜菜单2,menu1()中点菜选项的子菜单,客人可以选择一览菜谱和按菜名点菜的两种点菜方式。
xiugai()
餐馆修改菜单中的菜,enter2()中修改选项的子函数,可供餐馆老板修改自己的菜单。
shanchu()
删除菜单中的菜,entee2()中删除选项的子函数,可供餐馆老板删除菜单中的某些菜,会先将菜单全部显示出,老板可按菜的**来选择要删除的菜。
use()客人使用,即menu3()点菜选项的子函数。
xuancai(int isdiscount, int list,float a,int * dishescountp);
用于客人选菜的函数。
11. float moneyconvert(float price);
用于客人选菜后计算本道菜所需要的钱。
12. void printdish(cm* pdish)
输出本菜信息。
13.void printdisha(int dishid)
输出选择到的菜的信息。
3、注释:针对题目中给出的要求,即:
a)实现菜名信息的录入。
b)实现**的显示。
c)实现菜的类别的显示。
d)有优惠券的要给出相应的折扣。
e)菜单打印。
该系统很好的实现了以上的要求,并针对a)提供菜名的添加,修改与删除。
三、用户手册。
1)、餐厅设置篇:进入系统,通过提示进入录入,分4个小选项,分别可以选择:
a.初始化录入(第一次录入,创建并录入最初的菜单):按提示输入菜后通过回车继续;
b.补充型录入(用于新添加菜至菜单):添加于输入方式与初始化录入相同。
c.修改(用于修改已经储存的菜单,例如更改**,名字等):会列出所有菜单中的菜,通过序号选择需要修改的内容,修改方式按提示和录入一样;
d.删除菜单(用于删除菜单中的某些菜,例如某些菜已经不做了,可以从菜单中删除):会列出所有菜单中的菜,更具提示,通过序号选择需要删除的菜。
注:以上初始化和修改全部写入根目录下的文件夹中的”文本。
2)用户篇:进入系统,通过提示进入使用,可以看到菜单列表,根据提示选择所需要的菜,可以根据提示不断的选择直到不选为止,并且可以看到自己每个菜的花费情况和总价钱。
四、编译与调试**现的问题。
1)、编译:编译中的主要问题在链表的使用,具体来说是链表的输出与修改。
(2)、调试:本次课程设计感觉问题最大的,耗时最久的也就是在调试了。调试**现的最主要的问题就是文件的写入和读取,fopen函数,fscanf函数以及fprintf函数的使用,写入的txt文本会出现乱码的情况,问题是以为写入文本的函数中fprintf与fscanf函数中地址符&乱用造成了乱码。
另外,当需要输出文本里的信息时,发现fprintf(fp,"%6d%-10s%-10s%-10s%-10d%-10f",p1->num,p1->name,p1->fname,p1->introduce,p1->price,p1->zhekou);中最后面一个%-10f和出了问题(现在已经把%-10f改成了%-8f,),因为在shuchu()子函数中fprintf()是读到文件的结束符为止,当在chushihua()中最后一次输入最后一个菜时的就会另起一行,使fprintf()得多读一个空白行才能读到结束符,所以出现了往屏幕上输出文本文件时出现了很多“屯”的情况。
然后是head指针传递的问题,因为有p=head语句,在调试的过程中经常遇见p无法被赋值,有些问题就是出在head指针上,head一直为空,目前还没有想到什么很好的解决办法。
其次是通过fread从文本对链表赋值,刚开始根本就赋值不了,后来知道了是因为对函数fread的理解错误,从fp中读数据到链表p只是改变了p的内容。
再次就是switch函数的应用,特别在返回上级菜单出现了问题。
五、本次课程设计的经验和体会。
通过这次课程设计,我对c语言面向过程理解的更深了,对c语言中的链表,指针也理解的更为透彻,特别是指向结构体的指针的运用以及head指针,以前总是模棱两可,通过课程设计做的点菜系统,原来模棱两可的问题清晰了,而且对链表的创建,修改,删除,增加都比原来要熟悉。
六、存在问题。
1、自己感觉**还不够简单,没有考虑到运行速度。
2、没有密码系统,客户可以进入老板的菜单管理区域。
七、参考文献。
[1]黄明等编著《c语言课程设计》北京:电子工业出版社。
[2]谭浩强编著《c程序设计题解与上机指导(第3版) 》北京:清华大学出版社。
[3]明日科技编著《visual c++程序开发范例宝典》北京:人民邮电出版社。
附录:初始化录入数据,已经录入两次,是否继续的截图:
调试设计了三道菜,以下是录入完成三道菜的截图:
经过初始化后的文本:
测试录入中的补充录入(测试补充了两道菜):
测试录入中的补充录入后的txt文本:
测试录入中的修改(修改第三道,此为修改后结果,把第三道3改成了6):
修改后的txt文本:
测试录入中的删除(删除6号,此为删除的确认截图):
删除后的txt文本:
测试客人菜单(选择是否有打折卡):
有打折卡的结果:
无打折卡只点一道菜结果:
源程序:#include <>
#include <>
#include <>
#define filename ""文件名*/
typedef struct cmenu
int num;/*菜品编号*/
char fname[10]; 菜系名称*/
char name[10];/菜名*/
char introduce[1000];/菜的介绍*/
int price;/*菜的原始***/
float zhekou;/*若有折扣卡的折扣*/
struct cmenu *next;
cm;函数声明。
void chushihua();
void zhucaidan();
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...