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