..word完美格式课程设计报告课程名称:C语言程序设计课设项目名称:饭卡管理系统学院:专业:姓名:学号:指导教师:成绩:..word完美格式目录第1部分课程设计题目与要求...........................................21.问题描述.................................................22.功能要求.................................................23.任务分工.................................错误!未定义书签。第2部分《饭卡管理系统》的设计与功能实现............................31.总体设计.....................................................32.数据结构.....................................................33.算法设计.................................................44.程序代码设计................................................125.测试与调试..................................................22第3部分课程设计总结.................................错误!未定义书签。个人总结........................................错误!未定义书签。个人总结........................................错误!未定义书签。结束语..........................................错误!未定义书签。附录Ⅰ程序清单......................................................23附录Ⅱ用户使用说明书................................................34参考文献.............................................................35..word完美格式第1部分课程设计题目与要求1.问题描述学校等大单位集体食堂买饭时间非常集中,这时如果食堂使用饭票卖饭,大家就得排长队等候,而且还要经过先去买饭票等麻烦的经历。因此食堂提出使用计算机进行管理,食堂用饭卡卖饭,不仅提高卖饭速度,还易于管理,减少不必要的麻烦,同时减轻管理人员的工作负担。2.功能要求重复显示如图所示的主菜单,在主菜单中选择任意一项,均实现相应功能。在主菜单中选择1,建立名为card.dat的文件,并在其中添加若干人的饭卡号、姓名、金额、挂失信息,要求饭卡号是唯一的。在主菜单中选择2,要求用户输入饭卡号、饭费,然后系统自动从该人的饭卡中减去饭钱,并分别显示买饭前后的金额,如果原来饭卡中的金额不足5元,则不能买饭,而且显示“金额不足够,请续钱!”,如果挂失信息为真,则显示“本卡已冻结!”。在主菜单中选择4,添加新饭卡,这时要求新饭卡号和已有的饭卡号不能重号。在主菜单中选择5,注销旧饭卡。在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。在主菜单中选择7,在主菜单中选择0,显示“感谢使用本软件!已正常退出,按任意键结束。”按任意键退出本系统。请输入选项编号(0~7):1—建立饭卡文件2—买饭3—续钱4—添加新饭卡5—注销旧饭卡6—设置与解除挂失7—创新功能0—退出系统..word完美格式第2部分《饭卡管理系统》的设计与功能实现1.总体设计主模块建立饭卡文件买饭续钱添加新饭卡注销旧饭卡设置与解除挂失创新功能图1初始的主模块创新功能建立饭卡文件买饭添加新饭卡设置与解除注销解除注销设置注销注销旧饭卡续钱主模块图2细分后的主模块图2.数据结构例如:structcard{charname[10],num[10];floatyu,sum;intguashi;};num[10]表示学号放在一维数组中,name[10]表示姓名放在一维数组中,yu表示余额,sum表示消费金额的累积,guashi表示挂失的情况。..word完美格式3.算法设计调用myprint函数输入choose的值开始Choose=?调用mycreat调用myaddyu调用myzhuxiao调用mynew其他选项调用mybuy调用myaddcard调用mysetguashi输入yes_noYes_no=n或N或y或YYes_no=y或Y结束其他真假假真图3主函数流程图..word完美格式入口打开文件打开成功输入卡号结束合法记录?真假输入充值金额是否继续?结束真假假真将记录写进文件记录数增1输入卡号输入姓名图4建立饭卡模块流程图..word完美格式入口打开文件打开成功?结束输入卡号卡号不存在?此卡挂失?卡号重复?输入金额显示消费情况关闭文件出口真假假假假真记录写入文件按任意键返回主菜单出口图5买饭模块流程图..word完美格式入口打开文件打开成功?结束输入卡号是否存在?结束输入金额显示用户信息记录写入文件关闭文件出口假真假真图6续钱模块流程图..word完美格式入口输入卡号打开文件打开成功?结束卡号重复?输入姓名输入金额记录写入文件关闭文件出口真假真假是否继续?真结束假图7添加新饭卡模块流程图..word完美格式入口打开文件打开成功?结束输入卡号卡号存在?结束显示注销成功记录写入文件关闭文件出口真假假真图8注销旧饭卡模块流程图..word完美格式入口打开文件打开成功?结束输入选项1设置挂失2解除挂失输入卡号卡号存在?Temp.guashi=1结束记录写入文件关闭文件出口输入卡号卡号存在?结束Myguashi=1记录写入文件关闭文件出口真假假真真假0返回图9设置与解除挂失模块流程图..word完美格式入口打开文件打开成功?假结束输入卡号合法记录?是否继续?结束显示加完钱后的余额记录写入文件关闭文件出口假假真图10创新功能模块流程图..word完美格式4.程序代码设计采用模块化的思想,按照“自顶向下,逐步细化”的原则设计算法。(1)菜单的设计1,本例需要输出主菜单选择界面,简单菜单的制作可利用printf函数实现。用printf函数将菜单项逐一打印到屏幕上,界面中的边框可以通过多个printf函数输出的“|”和“-”拼接起来。2,菜单应根据用户的选择做出不同的反应,因此需要使用分支结构实现选择选项的功能。根据题意,主菜单含有8个菜单选项,属于多分支条件判断,使用带break和switch语句最为合适。3,因为本例具有重复选择主菜单选项的功能,因此需要使用循环结构。在本例中菜单至少要显示一次,随后才判断是否继续选择主菜单,所以使用do-while循坏比较好,因为do-while循坏是先执行循环体,然后再判断表达式。4,作为菜单,应该给用户一个正常的出口,即满足一定条件时退出程序。为了给用户提供方便,我们采用人机对话形式,当用户选择某一菜单项后,系统立即完成相应的功能,然后询问用户是否需要继续选择,只要用户继续选择(输入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();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。建立饭卡的程序设计如下:voidmycreat(){inti=1;structcardtemp={0};..word完美格式FILE*fp=NULL;charyes_no='\0';temp.guashi=0;temp.sum=0;system(cls);fp=fopen(D:\\饭卡管理系统\\files\\card.dat,a);if(fp==NULL){printf(\n\n饭卡文件丢失!按任意键继续...);getchar();exit(0);}else{fclose(fp);do{printf(\n请输入第%d个记录:\n\n,i);printf(卡号:);scanf(%s,&temp.num);if(myexist(temp.num)!=1){fp=fopen(D:\\饭卡管理系统\\files\\card.dat,a);printf(姓名:);scanf(%s,&temp.name);printf(充值钱数:);scanf(%f,&temp.yu);fprintf(fp,%10s%10s%20.2f%4d%20.2f\n,temp.num,temp.name,temp.yu,temp.guashi,temp.sum);fclose(fp);i++;}elseprintf(卡号重复!\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');}}在文件夹中寻找已输入的卡号用函数myexist系统自动用循环将文件中读入的学号一一做比较。用fp=fopen(D:\\饭卡管理系统\\files\\card.dat,a);追加打开文件,输入学生的姓名,充值钱数,并将它们存放在文件中;每输入一组数据,记录数增1。用do---while语句实现人机对话的功能,机器问用户是否继续,如果继续就接着建立新饭卡,否则返回主菜单。..word完美格式2,买饭设计模块,函数名mybuy.voidmybuy()system(cls);fp=fopen(D:\\饭卡管理系统\\files\\card.dat,r);while(feof(fp)==0){fscanf(fp,%s%s%f%d%f,temp[i].num,temp[i].name,&temp[i].yu,&temp[i].guashi,&temp[i].sum);i++;}fclose(fp);printf(\n请输入卡号:);scanf(%s,num_temp);if(myexist(num_temp)==-1)printf(\n卡号不存在!);elseif(myguashi(num_temp)==1)printf(\n本卡已冻结!);elseif(myyu(num_temp)==0)printf(\n余额不够,请续费!);else{for(j=0;ji;j++)if(strcmp(num_temp,temp[j].num)==0)break;printf(\n请输入消费金额:);scanf(%f,&money);printf(\n卡号姓名余额\n);printf(\n消费前:%-10s%-10s%-10.2f