食堂就餐餐费管理系统2.docx
《食堂就餐餐费管理系统2.docx》由会员分享,可在线阅读,更多相关《食堂就餐餐费管理系统2.docx(16页珍藏版)》请在冰豆网上搜索。
![食堂就餐餐费管理系统2.docx](https://file1.bdocx.com/fileroot1/2022-12/13/3c14b543-65ad-4d6e-97c7-cd3c45e99084/3c14b543-65ad-4d6e-97c7-cd3c45e990841.gif)
食堂就餐餐费管理系统2
沈阳航空工业学院
课程设计
学号200704021024
班级7402101
姓名田青林
指导教师吴杰宏
2008年9月8日
沈阳航空工业学院
课程设计任务书
院系:
电子信息工程专业:
电子信息工程班级:
7402101
学号:
200704021024题目:
食堂就餐餐费管理系统
(2)
一、课程设计时间
2008~09第1学期第2周,共计1周,20学时。
二、课程设计内容
用C语言编写软件完成以下任务:
1录入学生信息和食谱信息;
2就餐买单;
3按学号查餐费。
三、课程设计要求
1.程序质量:
✧贯彻结构化的程序设计思想。
✧用户界面友好,功能明确,操作方便。
✧用户界面中的菜单至少应包括“信息录入”、“就餐买单”、“查餐费(按学号)”、“退出”4项。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
2.课程设计说明书:
课程结束后,上交课程设计说明书和源程序。
课程设计说明书的格式和内容参见提供的模板。
四、指导教师和学生签字
指导教师:
________学生签名:
________
五、说明书成绩
六、教师评语
目录
一、需求分析1
二、程序流程图2
三、核心技术的实现说明及相应程序段7
四、课设总结10
五、参考文献11
六、源程序11
一、需求分析
经过对程序设计题目的分析可知,整个程序的设计实现大致分为四个模块,其中每一个模块对应一个函数,它们的功能分别是:
添加学生数据函数,就餐修改学生数据函数,查询函数,充值时对学生数据的修改函数。
1、添加学生数据函数主要实现程序最初运行时学生数据的录入功能;
2、就餐修改学生数据函数按照学号对学生的餐费作出相应的减少以及次数的增加;
3、查询函数允许按照学号对学生的就餐信息进行查询;
4、充值时对学生数据的修改函数按照学号对学生的餐费做出相应的增加。
除上面介绍的功能之外,程序还具有退出功能,根据需要终止程序的执行。
另外在程序中直接将学生的就餐信息数据直接写入文件fresh.dat中,保证每次运行程序都可以采用原来的数据。
二、程序流程图
1、程序总体结构图
当
(1)
真
输入值n=1?
假
添加学
生信息
真
n=2?
假
记录就餐
真
n=3?
假
查询
真
n=5?
假
充值
n=4?
真假
退出
图1程序总体结构图
2、具体功能框图
(1)添加学生数据函数add
以只写的方式打开d盘的fresh.dat文件不成功
真假
输出打开文件失败
Return;
输入录入学生的数量b
将b值写入文件
循环变量i=1
当i<=b时
输入学号姓名省份惯用食谱餐费次数
学生数据写入文件
关闭文件
图2添加学生数据函数
(2)读取学生数据reads
图3读取学生数据
(3)记录就餐函数buy;
图4记录就餐数据
(4)充值函数chong(与上类似);
图5充值流程
(5)查询函数show;
图6查询流程
三、核心技术的实现说明及相应程序段
本程序主要由四个自定义函数和一个主函数组成,其中主函数以菜单的形式调用其它函数来实现要求的所有功能。
在这些函数当中,添加数据函数、修改数据函数和查询函数是程序中较为核心的部分,下面分别进行说明。
1、添加数据函数
在文件(fresh.dat)不存在的情况下,首先由程序创建一个新文件,并将录入的学生信息写入该文件当中。
具体的程序段如下:
voidadd()/*录入学生信息*/
{FILE*fp;
intb,i;
structstudentstu;
if((fp=fopen("d:
\\fresh.dat","wb"))!
=NULL)/*wb只写*/
{
printf("\n请输入要添加的学生数量:
\n");
scanf("%d",&b);
putw(b,fp);/*把b输入文件中*/
for(i=1;i<=b;i++)
{
printf("\n请输入%d学生的学号,姓名,省份,惯用食谱,费用,次数用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%f%d",stu.num,stu.name,stu.provience,stu.food,&stu.money,&stu.time);
fwrite(&stu,sizeof(structstudent),1,fp);/*依次写入*/
}
}
fclose(fp);
}
2、修改函数
是在原有文件数据上对就餐的学生的餐费和就餐次数作出相应的调整。
其中找出该学生时,用到了strcmp函数。
voidbuy()/*记录就餐情况*/
{
structstudentstu[N],temp;
intn,i;
floatm;
FILE*fp;
printf("\n请输入要就餐的学生学号,按回车键确认:
");
scanf("%s",temp.num);
read(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)/*若相等即为0*/
break;
if(i>=n)
{printf("无此学生信息!
");
return;
}
printf("\n请输入此次就餐花费,按回车键确认:
\n");
scanf("%f",&m);
stu[i].money-=m;
stu[i].time++;
if((fp=fopen("d:
\\fresh.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
printf("此次就餐费用为%f",m);
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structstudent),1,fp);
fclose(fp);
}
3、查询函数
查询函数中也是用到了strcmp函数来找到需要查询的学生,然后从文件中输出该生的所有就餐信息。
voidshow()/*查询学生的就餐信息*/
{
structstudentstu[N];
intn,i;
charnumber[20];
read(stu,&n);
printf("请输入学生的学号,回车:
");
scanf("%s",number);
for(i=0;iif(strcmp(number,stu[i].num)==0)break;
if(i>=n)
{
printf("没有找到该生信息\n");
return;
}
else
printf("\n该生就餐信息为\n");
printf("学号%s、姓名%s,省份%s,惯用食谱%s,费用%f,次数%d\n",stu[i].num,stu[i].name,stu[i].provience,stu[i].food,stu[i].money,stu[i].time);
}
四、课设总结
通过此次课设足足五天的审题,编程,修改,使我深深感到了课堂知识的有限性,有许多的知识需要靠课外的积累,然而作为现在的大学生很少有人去真正把知识学懂学透,似乎及格成了努力的上线,这一点我深感惭愧。
其次我感觉编程绝对是一个细致的活,欲速则不达,自己很多时候想跳过几个似乎无关紧要的步骤,但结果往往使得程序不完善,运行起来容易出现“死角”。
再者往往有的时候认为自己是对的但却一次次出现错误,自己半天可能看不出来但让别人一眼就能看出,所以向高手们请教必不可少。
虽然只是简简单单的一个小程序,它能带给我们的东西要远比它的知识多得多……
五、参考文献
1谭浩强.C程序设计.北京:
清华大学出版社,2005
2刘成等.C语言程序设计实验指导与习题集.北京:
中国铁道出版社,2006
六、源程序
#include
#include
#include
#include
structstudent
#defineN30
{
charnum[20];
charname[10];
charprovience[10];
charfood[10];
floatmoney;
inttime;
};
voidread(structstudentstu[N],int*n)/*子函数read,*/
{
FILE*fp;/*定义文件指针类型变量*/
inti=0;
if((fp=fopen("d:
\\fresh.dat","rb"))==NULL)/*rb的意思是只读*/
{
printf("文件打开失败!
\n");
return;
}
else
{
*n=getw(fp);/*读取fp的下一个整数*/
for(i=0;i<*n;i++)
fread(&stu[i],sizeof(structstudent),1,fp);/*从fp中读如前1中*/
}
fclose(fp);
}
voidadd()/*录入学生信息*/
{FILE*fp;
intb,i;
structstudentstu;
if((fp=fopen("d:
\\fresh.dat","wb"))!
=NULL)/*wb只写*/
{
printf("\n请输入要添加的学生数量:
\n");
scanf("%d",&b);
putw(b,fp);/*把b输入文件中*/
for(i=1;i<=b;i++)
{
printf("\n请输入%d学生的学号,姓名,省份,惯用食谱,费用,次数用空格分开,并按回车键确认:
\n",i);
scanf("%s%s%s%s%f%d",stu.num,stu.name,stu.provience,stu.food,&stu.money,&stu.time);
fwrite(&stu,sizeof(structstudent),1,fp);/*依次写入*/
}
}
fclose(fp);
}
voidbuy()/*记录就餐情况*/
{
structstudentstu[N],temp;
intn,i;
floatm;
FILE*fp;
printf("\n请输入要就餐的学生学号,按回车键确认:
");
scanf("%s",temp.num);
read(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)/*若相等即为0*/
break;
if(i>=n)
{printf("无此学生信息!
");
return;
}
printf("\n请输入此次就餐花费,按回车键确认:
\n");
scanf("%f",&m);
stu[i].money-=m;
stu[i].time++;
if((fp=fopen("d:
\\fresh.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
printf("此次就餐费用为%f",m);
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structstudent),1,fp);
fclose(fp);
}
voidshow()/*查询学生的就餐信息*/
{
structstudentstu[N];
intn,i;
charnumber[20];
read(stu,&n);
printf("请输入学生的学号,回车:
");
scanf("%s",number);
for(i=0;iif(strcmp(number,stu[i].num)==0)break;
if(i>=n)
{
printf("没有找到该生信息\n");
return;
}
else
printf("\n该生就餐信息为\n");
printf("学号%s、姓名%s,省份%s,惯用食谱%s,费用%f,次数%d\n",stu[i].num,stu[i].name,stu[i].provience,stu[i].food,stu[i].money,stu[i].time);
}
voidchong()
{
structstudentstu[N],temp;
intn,i;
floatm;
FILE*fp;
printf("\n请输入学生学号,按回车键确认:
");
scanf("%s",temp.num);
read(stu,&n);
for(i=0;iif(strcmp(temp.num,stu[i].num)==0)/*若相等即为0*/
break;
if(i>=n)
{printf("无此学生信息!
");
return;
}
printf("\n请输入此次充值费用,按回车键确认:
\n");
scanf("%f",&m);
stu[i].money+=m;
if((fp=fopen("d:
\\fresh.dat","wb"))==NULL)
{printf("打开文件失败!
");
return;
}
printf("此次充值费用为%f",m);
putw(n,fp);
for(i=0;ifwrite(&stu[i],sizeof(structstudent),1,fp);
fclose(fp);
}
voidmain()
{
printf("\n************************************食堂就餐费管理系统***********************");
printf("\n1、添加学生信息");
printf("\n2、记录就餐情况");
printf("\n3、查询学生餐费");
printf("\n4、退出程序");
printf("\n5、充值");
printf("\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n");
while
(1)
{printf("\n请输入需要的操作的代号:
\n");
switch(getch())
{
case'1':
add();break;
case'2':
buy();break;
case'3':
show();break;
case'5':
chong();break;
case'4':
exit(0);break;
default:
printf("\n无此代号,请确认后重新输入");
}
}
}