c语言饭卡管理系统课程设计报告.doc





《c语言饭卡管理系统课程设计报告.doc》由会员分享,可在线阅读,更多相关《c语言饭卡管理系统课程设计报告.doc(39页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、. -课程设计报告课程名称: C语言程序设计课设 工程名称:饭卡管理系统学 院:专 业:姓 名:学号:指导教师:成 绩:. . word.zl-. -目 录第1局部课程设计题目与要求21问题描述22功能要求23任务分工2第2局部?饭卡管理系统?的设计与功能实现31总体设计32数据构造33.算法设计44程序代码设计125测试与调试22第3局部课程设计总结24个人总结24个人总结26完毕语27附录程序清单28附录用户使用说明书39参考文献39. . word.zl-. -第1局部 课程设计题目与要求1 问题描述请输入选项编号07:1 建立饭卡文件2 买饭3 续钱4 添加新饭卡5 注销旧饭卡6 设置
2、与解除挂失7 创新功能0退出系统学校等大单位集体食堂买饭时间非常集中,这时如果食堂使用饭票卖饭,大家就得排长队等候,而且还要经过先去买饭票等麻烦的经历。因此食堂提出使用计算机进展管理,食堂用饭卡卖饭,不仅提高卖饭速度,还易于管理,减少不必要的麻烦,同时减轻管理人员的工作负担。2 功能要求重复显示如下图的主菜单,在主菜单中选择任意一项,均实现相应功能。在主菜单中选择1,建立名为card.dat的文件,并在其中添加假设干人的饭卡号、金额、挂失信息,要求饭卡号是唯一的。 在主菜单中选择2,要求用户输入饭卡号、饭费,然后系统自动从该人的饭卡中减去饭钱,并分别显示买饭前后的金额,如果原来饭卡中的金额缺乏
3、5元,那么不能买饭,而且显示“金额缺乏够,请续钱!,如果挂失信息为真,那么显示“本卡已冻结!。 在主菜单中选择4,添加新饭卡,这时要求新饭卡号和已有的饭卡号不能重号。 在主菜单中选择5,注销旧饭卡。 在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。 在主菜单中选择7, 在主菜单中选择0,显示“感使用本软件!已正常退出,按任意键完毕。按任意键退出本系统。第2局部 ?饭卡管理系统?的设计与功能实现1总体设计图1初始的主模块图2细分后的主模块图2数据构造例如:struct card char name10,num10; float yu,sum; int guashi; ;
4、 num10表示学号放在一维数组中,name10表示放在一维数组中,yu表示余额,sum表示消费金额的累积,guashi表示挂失的情况。3. 算法设计图3主函数流程图. . word.zl-. -图4 建立饭卡模块流程图图5 买饭模块流程图图6 续钱模块流程图图7 添加新饭卡模块流程图图8 注销旧饭卡模块流程图图9 设置与解除挂失模块流程图图10 创新功能模块流程图4程序代码设计采用模块化的思想,按照“自顶向下,逐步细化的原那么设计算法。(1) 菜单的设计1, 本例需要输出主菜单项选择择界面,简单菜单的制作可利用printf函数实现。用printf函数将菜单项逐一打印到屏幕上,界面中的边框可以
5、通过多个printf函数输出的“|和“-拼接起来。2, 菜单应根据用户的选择做出不同的反响,因此需要使用分支构造实现选择选项的功能。根据题意,主菜单含有8个菜单项选择项,属于多分支条件判断,使用带break和switch语句最为适宜。3, 因为本例具有重复选择主菜单项选择项的功能,因此需要使用循环构造。在本例中菜单至少要显示一次,随后才判断是否继续选择主菜单,所以使用do-while循坏比拟好,因为do-while循坏是先执行循环体,然后再判断表达式。4,作为菜单,应该给用户一个正常的出口,即满足一定条件时退出程序。为了给用户提供方便,我们采用人机对话形式,当用户选择某一菜单项后,系统立即完成
6、相应的功能,然后询问用户是否需要继续选择,只要用户继续选择输入y或Y,主菜单就会在屏幕上反复出现,只有当用户不再选择输入N或n,才可退出主菜单。除此之外,为了使用方便,在主菜单中还特设0选项,选择它也能正常退出程序。为了实现上述功能,有关语句都应放在do-while循环体中。选择选项的程序段可设计成如下形式:choose=getchar(); switch(choose) case 1:mycreat();break; case 2:mybuy();break; case 3:myaddyu();break; case 4:myaddcard();break; case 5:myzhuxiao
7、();break; case 6:mysetguashi();break; case 7:mynew();break; case 0:printf(n 非常感使用本软件!n 已正常退出,按任意键完毕.);exit(0);break; default :printf(n 该选项非法!);break; ( 2 ) 设计各模块的算法,这是逐步细化的过程。1,建立饭卡模块,函数名 mycreat。在该模块中输入学生的卡号,充值钱数,并将它们存放在文件中;每输入一组数据,记录数增1。建立饭卡的程序设计如下:void mycreat() int i=1;struct card temp=0;FILE *f
8、p=NULL;char yes_no=0;temp.guashi=0; temp.sum=0;system(cls); fp=fopen(D:饭卡管理系统filescard.dat,a); if(fp=NULL) printf(nn 饭卡文件丧失!按任意键继续.);getchar();exit(0); else fclose(fp); do printf(n 请输入第%d个记录:nn,i); printf( 卡号:);scanf(%s,&temp.num); if(myexist(temp.num)!=1) fp=fopen(D:饭卡管理系统filescard.dat,a); printf(
9、:); scanf(%s,&temp.name);printf( 充值钱数:); scanf(%f,&temp.yu);fprintf(fp,%10s%10s%20.2f%4d%20.2fn,temp.num,temp.name,temp.yu,temp.guashi,temp.sum); fclose(fp); i+; else printf( 卡号重复!n);printf(n 请问您要继续吗?);do yes_no=getchar(); while(yes_no!=Y&yes_no!=y&yes_no!=N&yes_no!=n); while(yes_no=Y|yes_no=y); 在文件
10、夹中寻找已输入的卡号用函数 myexist 系统自动用循环将文件中读入的学号一一做比拟。用fp=fopen(D:饭卡管理系统filescard.dat,a);追加翻开文件,输入学生的,充值钱数,并将它们存放在文件中;每输入一组数据,记录数增1。用do-while语句实现人机对话的功能,机器问用户是否继续,如果继续就接着建立新饭卡,否那么返回主菜单。2,买饭设计模块,函数名mybuy.void mybuy() system(cls); fp=fopen(D:饭卡管理系统filescard.dat,r); while(feof(fp)=0) fscanf(fp,%s%s%f%d%f,tempi.n
11、um,tempi.name,&tempi.yu,&tempi.guashi,&tempi.sum); i+; fclose(fp); printf(n 请输入卡号:);scanf(%s,num_temp); if(myexist(num_temp)=-1) printf(n 卡号不存在!); else if(myguashi(num_temp)=1) printf(n 本卡已冻结!); else if(myyu(num_temp)=0) printf(n 余额不够,请续费!); else for(j=0;ji;j+) if(strcmp(num_temp,tempj.num)=0) break
12、; printf(n 请输入消费金额:);scanf(%f,&money); printf(n 卡号余额n); printf(n 消费前: %-10s %-10s %-10.2fn,tempj.num,tempj.name,tempj.yu); printf(n 消费后: %-10s %-10s %-10.2fn,tempj.num,tempj.name,tempj.yu-money); tempj.yu=tempj.yu-money; tempj.sum=tempj.sum+money; fp=fopen(D:饭卡管理系统filescard.dat,w); for(j=0;ji-1;j+)
13、fprintf(fp,%10s%10s%20.2f%4d%20.2fn,tempj.num,tempj.name,tempj.yu,tempj.guashi,tempj.sum); fclose(fp); printf(nn 此次消费成功!按任意键返回主菜单.);getch();return; printf(nn 此次消费失败!按任意键返回主菜单.);getch(); 判断卡号存在模块:函数名myexist。系统自动用循环将文件中读入的学号一一做比拟。判断卡号挂失情况模块:函数名myguashi。系统自动用if-else语句判断挂失情况。判断卡号余额情况模块:函数名myyu。系统自动用if-e
14、lse语句分别判断卡号余额是否充足。3,续钱设计模块,函数名myaddyu。void myaddyu() system(cls); fp=fopen(D:饭卡管理系统filescard.dat,r); while(feof(fp)=0) fscanf(fp,%s%s%f%d%fn,tempi.num,tempi.name,&tempi.yu,&tempi.guashi,&tempi.sum); i+; fclose(fp); printf(nn 请输入卡号:);scanf(%s,&num_temp); if(myexist(num_temp)=1&myguashi(num_temp)=0) f
15、or(j=0;ji;j+) if(strcmp(num_temp,tempj.num)=0) printf(n 请输入续费金额:);scanf(%f,&money); printf(n 卡号余额n); printf( 续费前:%-10s %-10s %-10.2fnn,tempj.num,tempj.name,tempj.yu); printf( 续费后:%-10s %-10s %-10.2fn,tempj.num,tempj.name,tempj.yu+money); tempj.yu=tempj.yu+money; fp=fopen(D:饭卡管理系统filescard.dat,w); fo
16、r(k=0;ki;k+) fprintf(fp,%10s%10s%20.2f%4d%20.2fn,tempk.num,tempk.name,tempk.yu,tempk.guashi,tempk.sum); fclose(fp); printf(nn 续费成功!按任意键返回主菜单.); else printf(nn 卡号不存在或已挂失!按任意键返回主菜单.); getchar(); 判断卡号存在情况:函数名myexist。系统自动用循环将文件中读入的学号一一做比拟。判断挂失情况:函数名myguashi。系统自动用if-else语句判断挂失情况。用for循环构造找寻对应的学号,并输入续费金额,使
17、续费成功。备注:以下函数为续钱设计模块的子函数:fp=fopen(D:饭卡管理系统filescard.dat,r); while(feof(fp)=0) fscanf(fp,%s%s%f%d%fn,tempk.num,tempk.name,&tempk.yu,&tempk.guashi,&tempk.sum); k+; fclose(fp); for(i=0;ik;i+) if(strcmp(num,tempi.num)=0) flag=1; break; return flag; 4,添加新饭卡模块,函数名myaddcard。在该模块中输入学生的卡号,充值钱数,并将它们存放在文件中;每输入一
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 管理 系统 课程设计 报告

限制150内