饭卡管理系统实训报告书_第1页
饭卡管理系统实训报告书_第2页
饭卡管理系统实训报告书_第3页
饭卡管理系统实训报告书_第4页
饭卡管理系统实训报告书_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录第1部分 实训题目与要求11.问题提出:12.功能要求:13.任务分工:1第2部分 设计实训题目功能21.总体设计:22.算法设计33.数据结构114.程序代码设计115.测试与调试17main:17mycreate:18mybuy:18mysave:19myadd:19mydel:20mylost:20mydisplayall:21第3部分 实训总结211.个人总结:212.结束语:23附录A 程序清单24附录B 用户使用说明书37硬件和软件要求:37使用方法:37注意事项:37参考文献37饭卡管理系统机密文件档案一、实训题目与要求1. 问题提出学校等大单位集体食堂买饭时间非常集中,这时

2、如果食堂使用饭票买饭,大家就得排长队等候,而且还有经过先去买饭票等麻烦的经历。因此食堂提出使用计算机进行管理,食堂用饭卡卖饭,不仅提高卖饭速度,还更易于管理减少不必要的麻烦,同时减轻工作人员的工作负担。因此,用饭卡管理系统解决了这个问题。2.功能要求重复显示主菜单,在主菜单上选择任意一项,均实现相应功能。在主菜单中选择1,建立名为card.dat的文件,并在其中添加若干人的饭卡号,金额,挂失信息,要求饭卡号唯一。在主菜单中选择2,要求用户输入卡号,饭费,然后系统自动从该人的饭卡中减去饭钱,。并显示金额,如果饭卡中不足5元,则不能买饭,显示“余额不足,请续钱!”,如果挂失信息为真,则显示“本卡已

3、挂失!”。在主菜单中选择3,要求用户输入饭卡号,续钱额,续钱完成后分别显示续钱前后的金额。在主菜单中选择4,添加新饭卡,这时要求新饭卡号和以有的卡号不能重号。在主菜单中选择5,注销旧饭卡。在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。在主菜单中选择7,此项功能学生自由发挥,根据本组爱好增加新功能。在主菜单中选择0,显示结束信息,按任意键后,退出本系统。3.任务分工组长:潘永培负责小组主程序的模块设计和主函数的流程图,以及myprint,mycreate两个函数的算法设计和模块流程图,起到了领导与组织的较好作用。组员:余文宇负责小组程序的mybuy,mysave,my

4、add三个函数的算法设计和相应模块的流程图。积极配合全组的工作,塌实肯干。组员:罗耀祖负责小组程序的mydel,mydlost,mydisplayall三个函数的算法设计和相应模块的流程图。与其他两位同学协作默契,认真卖力。二、设计实训题目功能1. 总体设计图1:主模块图2. 算法设计图2:主流程图图3:函数mycreate流程图图4:函数mybuy流程图图5:函数mysave流程图图6:函数myadd流程图图7:函数mydelete流程图图8:函数mylost流程图图9:函数mydisplayall流程图3.数据结构名称属性长度说明numstring10卡号namestring10姓名mon

5、eyfloat金额gint2挂失信息4.程序代码设计(1)函数main()主要用了switch语句switch(choose)case'1':mycreate();break; case'2':mybuy();break;case'3':mysave();break; case'4':myadd();break;case'5':mydel();break;case'6':mylost();break;case'7':mydisplayall();break;case'0

6、9;:exit(0);default:printf("n %c为非法选项!n",choose);(2)函数 myprint()主要使用函数printf输出(3)函数mycreate()主要使用do while和while语句实现:printf("n 请输入第一个记录:n");printf(" 卡号(用#结束输入):");dogets(temp.num);while(strcmp(temp.num,"")=0);printf(" 姓名(用#结束输入):");gets();prin

7、tf(" 金额(用#结束输入):");scanf("%f",&temp.money);printf(" 挂失信息(1有,-1无)(用#结束输入):");scanf("%d",&temp.g);while(temp.num0!='#')fprintf(fp,"%15s%15s%15f%15dn",temp.num,,temp.money,temp.g);i+;printf("n 请输入第%d个记录:n",i);printf(&q

8、uot; 卡号(用#结束输入):");dogets(temp.num);while(strcmp(temp.num,"")=0);printf(" 姓名(用#结束输入):");gets();printf(" 金额 (用#结束输入):");scanf("%f",&temp.money);printf(" 挂失信息 (1有,-1无)(用#结束输入):");scanf("%d",&temp.g);(4)函数mybuy()主要使用if嵌套和

9、for循环实现: if(n=0)("n 文件中无记录!n");return;printf("n请输入要买饭的学号:");gets(temp.num);for(p=record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)find=p;break; if(p=record+n)printf("n 无此卡!n");return;if(p->g=-1)printf("此卡已挂失n");return; else if(p->money<5.0) pri

10、ntf("不足5元,请续钱n"); return; if(p->money>5.0) printf("请输入金额"); scanf("%f",&mtemp); if(p->money>mtemp) printf("Before:%f元n",(p->money); (p->money)=(p->money)-mtemp; printf("After:%f元n",(p->money); if(p->money<mtemp) prin

11、tf("金额不足,请续钱n"); return; fp=fopen("d:JiLu.dat","w");if(fp=NULL)printf("n 打开文件失败!n");return;(5)函数mysave()主要利用for循环和if嵌套:for(p=record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)find=p;break;if(p=record+n)printf("n 无此卡!n");return;if(p->g=-1)pri

12、ntf("此卡已挂失n");return; printf("请输入金额:"); scanf("%f",&mtemp); printf("Before:%f元n",(p->money); (p->money)=(p->money)+mtemp; printf("After:%f元n",(p->money);(6)函数myadd()主要使用do while和for循环:doprintf("n 请输入新添加的卡号:");dogets(temp.num

13、);while(strcmp(temp.num,"")=0);printf("n 请输入新添加的姓名: ");gets();printf("n 请输入新添加的金额: ");scanf("%f",&temp.money);printf("n 请输入新添加的挂失信息: ");scanf("%d",&temp.g);for(p=record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)print

14、f("n 卡号重复,要重新输入吗(Y/N)?");doc=getche();while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('n');break;if(p=record+n)*p=temp;break;while(c='y'|c='Y');(7)函数mydel()主要通过for和if打开和写入文件:for(k=record;k<record+n;k+)if(strcm

15、p(tempnum,k->num)=0) break;if(k<record+n)for(p=k;p<k+n-1;p+)*p=*(p+1);else printf("n 无此卡!n");fp=fopen("d:JiLu.dat","w");if(fp=NULL)printf("n 打开文件失败!n");return;for(p=record;p<record+n-1;p+)fprintf(fp,"%15s%15s%15f%15dn",p->num,p->nam

16、e,&(p->money),&(p->g);(8)函数mylost()主要使用while、if、for 修改信息:while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&p->money,&p->g);p+;n+;fclose(fp);if(n=0)printf("n 文件中无记录!n");return;printf("n 请输入要修改挂失信息的卡号:");gets(temp.num);for(p=

17、record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)find=p;break;if(p=record+n)printf("n 无此卡!n");return;printf(" 请输入挂失信息:");scanf("%d",&p->g);(9)函数mydisplayall()主要通过printf和while输出信息:printf(" 卡号 姓名 金额 挂失信息n");while(feof(fp)=0)fscanf(fp,"%15s%15s

18、%15f%15dn",temp.num,,&temp.money,&temp.g);printf("%15s%15s%15f%15dn",temp.num,,temp.money,temp.g);n+;if(n=0) printf("n 文件中无记录!n");else printf("n 文件中共有%d个记录!n",n);注:完整程序请参见附录A 5.测试与调试Main:测试数据类型测试数据预期结果实测结果合法数据1调用mycreate成功调用2调用mybuy成功调用3调用

19、mysave成功调用4调用myadd成功调用5调用mydel成功调用6调用mylost成功调用7调用mydisplayall成功调用0结束 结束N或n按任意键退出按任意键退出Y或y返回主菜单返回主菜单非法数据9显示“9为非法选项”显示“9为非法选项”mycreate:测试数据类型测试数据预期结果实测结果合法数据输入卡号:1输入卡号输入卡号输入姓名:小李输入姓名输入姓名输入金额:100输入金额输入金额输入挂失信息:1输入挂失信息输入挂失信息N或n按任意键退出按任意键退出Y或y返回主菜单返回主菜单非法数据输入金额:a无法输入无法输入输入挂失信息:a无法输入无法输入mybuy:测试数据类型测试数据预

20、期结果实测结果合法数据输入买饭卡号1显示“输入金额”显示“输入金额”输入卡号99显示“无此卡”显示“无此卡”输入卡号1金额1显示余额99元显示余额99输入卡号1金额99显示余额1元,金额不足五元,请续钱显示余额1元,金额不足五元,请续钱输入卡号1金额101显示“金额不足,请续钱”显示“金额不足,请续钱”输入卡号2显示“此卡已挂失”显示“此卡已挂失”“N”or”n”按任意键退出按任意键退出“Y”or”y”返回主菜单返回主菜单非法数据输入卡号 a显示“无此卡”显示“无此卡”输入卡号1金额a显示无意义数字显示无意义数字mysave:测试数据类型测试数据预期结果实测结果合法数据输入续费卡号1显示“输入

21、金额”显示“输入金额”输入续费卡号1金额1显示余额101显示余额101输入续费卡号2显示” 此卡已挂失”显示” 此卡已挂失”输入续费卡号99显示“无此卡”显示“无此卡”“N”or”n”按任意键退出按任意键退出“Y”or”y”返回主菜单返回主菜单非法数据输入续费卡号a显示“无此卡”显示“无此卡”输入续费卡号1金额a显示无意义数字显示无意义数字myadd:测试数据类型测试数据预期结果实测结果合法数据输入卡号:2输入卡号输入卡号输入姓名:小王输入姓名输入姓名输入金额:200输入金额输入金额输入挂失信息:-1输入挂失信息输入挂失信息N或n按任意键退出按任意键退出Y或y返回主菜单返回主菜单非法数据输入金

22、额:a无法输入无法输入输入挂失信息:a无法输入无法输入mydel:测试数据类型测试数据预期结果实测结果合法数据输入卡号:1删除饭卡1删除饭卡1输入卡号:3无此卡无此卡N或n按任意键退出按任意键退出Y或y返回主菜单返回主菜单非法数据输入卡号:a无法输入无此卡mylost:测试数据类型测试数据预期结果实测结果合法数据输入卡号1挂失信息-1卡1挂失卡1挂失输入卡号2挂失信息1卡2解除挂失卡2解除挂失“N”or”n”按任意键退出按任意键退出“Y”or”y”返回主菜单返回主菜单非法数据输入卡号a显示“无此卡”显示“无此卡”输入卡号1挂失信息3挂失信息无意义挂失信息无意义输入卡号1挂失信息a挂失信息不变挂

23、失信息不变mydisplayall:测试数据类型测试数据预期结果实测结果合法数据N或n按任意键退出按任意键退出Y或y返回主菜单返回主菜单2.结束语这次实训非常的感谢指导老师对我们的帮助,还有同学们放弃自己的任务来帮我们改错。在这里我们组谢谢各位帮助过我们的人,特别是指导老师对我们帮助才使我们顺利地完成任务。附录1 程序清单#include<stdio.h>#include<string.h>#include<conio.h>#include<stdlib.h>#define N 100struct card char num10; char na

24、me10;float money;int g;void myprint();void mycreate();void mybuy();void mysave();void myadd();void mydel();void mylost();void mydisplayall();void main()char choose='0',yes_no='0'domyprint();printf(" ");choose=getch();switch(choose)case'1':mycreate();break; /*创建*/cas

25、e'2':mybuy();break; /*买饭*/case'3':mysave();break; /*续钱*/case'4':myadd();break; /*添加*/case'5':mydel();break; /*注销*/case'6':mylost();break; /*挂失*/case'7':mydisplayall();break;/*显示全部*/case'0':exit(0);default:printf("n %c为非法选项!n",choose);

26、printf("n 要继续选择吗(Y/N)?n");doyes_no=getche();while(yes_no!='Y'&&yes_no!='y'&&yes_no!='N'&&yes_no!='n');while(yes_no='Y'|yes_no='y');void myprint() /*显示菜单界面*/system("cls"); /*调用清屏函数。若在TC下运行,改用clrscr()*/printf(&

27、quot; |-|n");printf(" | 请输入选项编号(0-7): |n");printf(" |-|n");printf(" | 1- 创建饭卡 |n");printf(" | 2- 买饭 |n");printf(" | 3- 续钱 |n");printf(" | 4- 添加新饭卡 |n");printf(" | 5- 注销旧饭卡 |n");printf(" | 6- 设置与解除挂失 |n");printf(&quo

28、t; | 7- 显示全部信息 |n");printf(" | 0- 退出 |n");printf(" |-|n");void mycreate() /*定义创建饭卡的函数*/int i=1;struct card temp =0;FILE * fp=NULL; fp=fopen("d:JiLu.dat","w");if (fp=NULL)printf("n 打开文件夹失败!n"); return;system("cls"); /*调用清屏函数。若在TC下运行,改用c

29、lrscr()*/printf("n 请输入第一个记录:n");printf(" 卡号(用#结束输入):");dogets(temp.num);while(strcmp(temp.num,"")=0);printf(" 姓名(用#结束输入):");gets();printf(" 金额(用#结束输入):");scanf("%f",&temp.money);printf(" 挂失信息(1有,-1无)(用#结束输入):");scanf(

30、"%d",&temp.g);while(temp.num0!='#')fprintf(fp,"%15s%15s%15f%15dn",temp.num,,temp.money,temp.g);i+;printf("n 请输入第%d个记录:n",i);printf(" 卡号(用#结束输入):");dogets(temp.num);while(strcmp(temp.num,"")=0);printf(" 姓名(用#结束输入):");get

31、s();printf(" 金额(用#结束输入):");scanf("%f",&temp.money);printf(" 挂失信息(1有,-1无)(用#结束输入):");scanf("%d",&temp.g);fclose(fp);void mybuy() /*定义买饭的函数*/char c='0'int n=0;float mtemp;struct card*find=NULL,temp=0,record100=0,*p=NULL;FILE*fp=NULL; ffl

32、ush(stdin);fp=fopen("d:JiLu.dat","r");if(fp=NULL)printf("n 打开文件失败!n");return;p=record;while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&p->money,&p->g);p+;n+;fclose(fp);if(n=0)("n 文件中无记录!n");return;printf("n请输入要买

33、饭的学号:");gets(temp.num);for(p=record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)find=p;break;if(p=record+n)printf("n 无此卡!n");return;if(p->g=-1)printf("此卡已挂失n");return;elseif(p->money<5.0) printf("不足5元,请续钱n");return;if(p->money>5.0) printf("

34、请输入金额");scanf("%f",&mtemp);if(p->money>mtemp) printf("Before:%f元n",(p->money);(p->money)=(p->money)-mtemp;printf("After:%f元n",(p->money);if(p->money<mtemp) printf("金额不足,请续钱n");return;fp=fopen("d:JiLu.dat","w"

35、;);if(fp=NULL)printf("n 打开文件失败!n");return;for(p=record;p<record+n;p+)fprintf(fp,"%15s%15s%15f%15dn",p->num,p->name,p->money,p->g);fclose(fp);void mysave() /*定义续钱的函数*/char c='0'int n=0;float mtemp;struct card*find=NULL,temp=0,record100=0,*p=NULL;FILE*fp=NULL

36、; fflush(stdin);fp=fopen("d:JiLu.dat","r");if(fp=NULL)printf("n 打开文件失败!n");return;p=record;while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&p->money,&p->g);p+;n+;fclose(fp);printf("n请输入要续费的卡号:");gets(temp.num);for(p=

37、record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)find=p;break;if(p=record+n)printf("n 无此卡!n");return;if(p->g=-1)printf("此卡已挂失n");return;printf("请输入金额:");scanf("%f",&mtemp);printf("Before:%f元n",(p->money);(p->money)=(p->money)+m

38、temp;printf("After:%f元n",(p->money);fp=fopen("d:JiLu.dat","w");if(fp=NULL)printf("n 打开文件失败!n");return;for(p=record;p<record+n;p+)fprintf(fp,"%15s%15s%15f%15dn",p->num,p->name,p->money,p->g);fclose(fp);void myadd() /*定义添加新饭卡的函数*/char

39、 c='0'int n=0;struct card temp=0,recordN=0,*p=NULL;FILE * fp=NULL; fflush(stdin);fp=fopen("d:JiLu.dat","r");if(fp=NULL)printf("n 打开文件失败!n ");p=record;while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&(p->money),&(p->g);

40、p+;n+;fclose(fp);doprintf("n 请输入新添加的卡号:");dogets(temp.num);while(strcmp(temp.num,"")=0);printf("n 请输入新添加的姓名: ");gets();printf("n 请输入新添加的金额: ");scanf("%f",&temp.money);printf("n 请输入新添加的挂失信息: ");scanf("%d",&temp.g);

41、for(p=record;p<record+n;p+)if(strcmp(temp.num,p->num)=0)printf("n 卡号重复,要重新输入吗(Y/N)?");doc=getche();while(c!='Y'&&c!='y'&&c!='N'&&c!='n');putchar('n');break;if(p=record+n)*p=temp;break;while(c='y'|c='Y');f

42、p=fopen("d:JiLu.dat","w");if(fp=NULL)printf("n 打开文件失败!n");return;for(p=record;p<record+n+1;p+)fprintf(fp,"%15s%15s%15f%15dn",p->num,p->name,(p->money),(p->g);fclose(fp);void mydel() /*定义注销饭卡的函数*/char tempnum8=""int n=0;struct card reco

43、rdN=0,*p=NULL,*k=NULL;FILE*fp=NULL; fflush(stdin);fp=fopen("d:JiLu.dat","r");if(fp=NULL)printf("n 打开文件失败!n");return;p=record;while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&p->money,&p->g);p+;n+;fclose(fp);printf("n 请输入要

44、注销的卡号:");gets(tempnum);for(k=record;k<record+n;k+)if(strcmp(tempnum,k->num)=0) break;if(k<record+n)for(p=k;p<k+n-1;p+)*p=*(p+1);else printf("n 无此卡!n");fp=fopen("d:JiLu.dat","w");if(fp=NULL)printf("n 打开文件失败!n");return;for(p=record;p<record+n

45、-1;p+)fprintf(fp,"%15s%15s%15f%15dn",p->num,p->name,p->money,p->g);fclose(fp);void mylost() /* 定义修改挂失信息的函数*/char c='0'int n=0;struct card *find=NULL,temp=0,record100=0,*p=NULL;FILE*fp=NULL; fflush(stdin);fp=fopen("d:JiLu.dat","r");if(fp=NULL)printf("n 打开文件失败!n");return;p=record;while(feof(fp)=0)fscanf(fp,"%15s%15s%15f%15dn",p->num,p->name,&p->money,&p->g);p+;n+;fclose(fp);if(n=0)printf("n 文件中无记录!n");return;printf("n

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论