首页 c语言饭卡管理系统课程设计报告

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

举报
开通vip

c语言饭卡管理系统课程设计报告c语言饭卡管理系统课程设计报告 课程设计报告 课程名称: C语言程序设计课设 项目名称: 业: 饭卡管理系统 学 院: 专 姓 名: 学 号: 指导教师: 成 绩: 目 录 第1部分 课程设计题目与要求 ........................................... 2 1( 问题描述 ................................................. 2 2( 功能要求 .......................................

c语言饭卡管理系统课程设计报告
c语言饭卡管理系统课程 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 课程设计报告 课程名称: C语言程序设计课设 项目名称: 业: 饭卡管理系统 学 院: 专 姓 名: 学 号: 指导教师: 成 绩: 目 录 第1部分 课程设计题目与要求 ........................................... 2 1( 问题描述 ................................................. 2 2( 功能要求 ................................................. 2 3( 任务分工 ................................ 错误~未定义书签。 第2部分 《饭卡管理系统》的设计与功能实现 ............................ 3 1(总体设计 ..................................................... 3 2(数据结构 ..................................................... 3 3. 算法设计 ................................................. 4 4(程序代码设计 ................................................ 12 5(测试与调试 .................................................. 22 第3部分 课程设计总 结 ................................ 错误~未定义书签。 个人 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf ....................................... 错误~未定义书签。 个人总结 ....................................... 错误~未定义书签。 结束语 ......................................... 错误~未定义书签。 附录? 程序清单 ...................................................... 23 附录? 用户使用说明书 ................................................ 34 参考文献 ............................................................. 35 共 36 页 第 1 页 第1部分 课程设计题目与要求 1( 问题描述 学校等大单位集体食堂买饭时间非常集中,这时如果食堂使用饭票卖饭,大家就得排长队 等候,而且还要经过先去买饭票等麻烦的经历。因此食堂提出使用计算机进行管理,食堂用 饭卡卖饭,不仅提高卖饭速度,还易于管理,减少不必要的麻烦,同时减轻管理人员的工作 负担。 2( 功能要求 重复显示如图所示的主菜单,在主菜单中选择任意一项,均实现相 应功能。 在主菜单中选择1,建立名为card.dat的文件,并在其中 添加若干人的饭卡号、姓名、金额、挂失信息,要求饭卡号是唯一的。 在主菜单中选择2,要求用户输入饭卡号、饭费,然后系统自动从该人的饭卡中减去饭钱, 并分别显示买饭前后的金额,如果原来饭卡中的金额不足5元,则不能买饭,而且显示“金 额不足够,请续钱~”,如果挂失信息为真,则显示“本卡已冻结~”。 在主菜单中选择4,添加新饭卡,这时要求新饭卡号和已有的饭卡号不能重号。 在主菜 单中选择5,注销旧饭卡。 在主菜单中选择6,要求用户输入饭卡号和挂失信息,然后更新该饭卡的挂失信息。 在主菜单中选择7, 在主菜单中选择0,显示“感谢使用本软件~已正常退出,按任意键结束。”按任意键退出本系统。 第 2 页 共 36 页 第2部分 《饭卡管理系统》的设计与功能 实现 1(总体设计 图1初始的主模块 图2细分后的主模块图 2(数据结构 例如: struct card { char name[10],num[10]; float yu,sum; int guashi; }; num[10]表示学号放在一维数组中,name[10]表示姓名放在一维数组中,yu表示余额,sum表示消费金额的累积,guashi表示挂失的情况。 第 3 页 共 36 页 3. 算法设计 图3主函数流程图 第 4 页 共 36 页 图4 建立饭卡模块流程图 第 5 页 共 36 页 图5 买饭模块流程图 第 6 页 共 36 页 图6 续钱模块流程图 第 7 页 共 36 页 图7 添加新饭卡模块流程图 第 8 页 共 36 页 图8 注销旧饭卡模块流程图 第 9 页 共 36 页 图9 设置与解除挂失模块流程图 第 10 页 共 36 页 图10 创新功能模块流程图 第 11 页 共 36 页 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。 建立饭卡的程序设计如下: void mycreat() { int i=1; struct card temp={0}; 第 12 页 共 36 页 FILE *fp=NULL; char yes_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.gu ashi,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?); } } 在文件夹中寻找已输入的卡号用函数 myexist 系统自动用循环将文件中读入的学 号一一做比较。 用fp=fopen("D:\\饭卡管理系统\\files\\card.dat","a");追加打开文件,输入学生的姓名,充值钱数,并将它们存放在文件中;每输入一组数据,记录数增1。 用do---while语句实现人机对话的功能,机器问用户是否继续,如果继续就接着 第 13 页 共 36 页 建立新饭卡,否则返回主菜单。 2,买饭设计模块,函数名mybuy. void mybuy() 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,&te mp[i].guashi,&temp[i].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;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; printf("\n 请输入消费金额:");scanf("%f",&money); printf("\n 卡号 姓名 余额\n"); printf("\n 消费 前: %-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].yu); printf("\n 消费 后: %-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].yu-mon ey); temp[j].yu=temp[j].yu-money; temp[j].sum=temp[j].sum+money; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(j=0;j<i-1;j++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[j].num,temp[j].name,temp [j].yu,temp[j].guashi,temp[j].sum); fclose(fp); printf("\n\n 此次消费成功~按任意键返回主菜单.....");getch();return; } printf("\n\n 此次消费失败~按任意键返回主菜单...");getch(); 判断卡号存在模块:函数名myexist。系统自动用循环将文件中读入的学号一一做比较。 判断卡号挂失情况模块:函数名myguashi。系统自动用if---else语句判断挂失情况。 判断卡号余额情况模块:函数名myyu。系统自动用if---else语句分别判断卡号余 第 14 页 共 36 页 额是否充足。 3,续钱设计模块,函数名myaddyu。 void myaddyu() system("cls"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&t emp[i].guashi,&temp[i].sum); i++; } fclose(fp); printf("\n\n 请输入卡号:");scanf("%s",&num_temp); if(myexist(num_temp)==1&&myguashi(num_temp)==0) { for(j=0;j<i;j++) { if(strcmp(num_temp,temp[j].num)==0) { printf("\n 请输入续费金额:");scanf("%f",&money); printf("\n 卡号 姓名 余额\n"); printf(" 续费 前:%-10s %-10s %-10.2f\n\n",temp[j].num,temp[j].name,temp[j].yu); printf(" 续费 后:%-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].yu+money); temp[j].yu=temp[j].yu+money; } } fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp [k].yu,temp[k].guashi,temp[k].sum); fclose(fp); printf("\n\n 续费成功~按任意键返回主菜单......"); } else printf("\n\n 卡号不存在或已挂失~按任意键返回主菜单..."); getchar(); 判断卡号存在情况:函数名myexist。系统自动用循环将文件中读入的学号一一做比较。 判断挂失情况:函数名myguashi。系统自动用if---else语句判断挂失情况。 用for循环结构找寻对应的学号,并输入续费金额,使续费成功。 备注:以下函数为续钱设计模块的子函数: fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); 第 15 页 共 36 页 while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[k].num,temp[k].name,&temp[k].yu,& ;temp[k].guashi,&temp[k].sum); k++; } fclose(fp); for(i=0;i<k;i++) { if(strcmp(num,temp[i].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?; temp.guashi=0; temp.sum=0; system("cls"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");getch();exit(0);} fclose(fp); do { printf("\n 请输入第%d个记录:\n\n",i+1); printf(" 卡号:");scanf("%s",&temp.num); if(myexist(temp.num)!=1) { printf(" 姓名:"); scanf("%s",&temp.name); printf(" 充值钱数:"); scanf("%f",&temp.yu); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","a"); fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp.num,temp.name,temp.yu,temp.gu ashi,temp.sum); fclose(fp); i++; }else printf("\n 卡号重复!\n"); 第 16 页 共 36 页 printf("\n\n 要继续吗?"); do{yes_no=getch(); }while(yes_no!=„Y?&&yes_no!=„y?&&yes_no!=„N?&&yes_no!= „n?); }while(yes_no==„Y?||yes_no==„y?); 在文件夹中寻找已输入的卡号用函数 myexist 系统自动用循环将文件中读入的学 号一一 做比较。 没有找到,符合条件并输入学生的姓名,充值钱数,并将它们存放在文件中; 每输入一 组数据,记录数增1。 5,注销旧饭卡模块,函数名myzhuxiao。 system("cls"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");exit(0);} while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&t emp[i].guashi,&temp[i].sum); i++; } fclose(fp); printf("\n\n 请输入卡号:");scanf("%s",num_temp); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; for(k=j;k<i;k++) temp[k]=temp[k+1]; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i-1;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp [k].yu,temp[k].guashi,temp[k].sum); fclose(fp); printf("\n 注销成功~按任意键返回主菜单......"); } else printf("\n %s不存在~按任意键返回主菜单......",num_temp); getch(); 查找学生饭卡卡号用比较函数 strcmp(num_temp,temp[j].num)==0。 用for循环语句利用数组的替换使学生饭卡被注销。 6,设置与解除挂失模块,函数名mysetguashi。 system("cls"); printf("\n"); printf(" |******************************************|\n"); printf(" | 请输入选项编号(0,2) |\n"); 第 17 页 共 36 页 printf(" |******************************************|\n"); printf(" | 1--设置挂失 |\n"); printf(" | |\n"); printf(" | 2--解除挂失 |\n"); printf(" | |\n"); printf(" | 0--返回 |\n"); printf(" |******************************************|\n"); printf("\n 请输入操作编号"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");exit(0);} while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&t emp[i].guashi,&temp[i].sum); i++; } fclose(fp); choose=getchar(); if(choose==„1?) { printf("\n\n 请输入卡号:");scanf("%s",&num_temp); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; temp[j].guashi=1; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp [k].yu,temp[k].guashi,temp[k].sum); fclose(fp); printf("\n 设置成功~按任意键返回主菜单......");getch();return; }else {printf("\n 此卡不存在~按任意键返回主菜单......");getch();return;} } else if(choose==„2?) { printf("\n\n 请输入卡 号:");scanf("%s",&num_temp);printf("\n"); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; temp[j].guashi=0; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f%\n",temp[k].num,temp[k].name,temp[k]. yu,temp[k].guashi,temp[k].sum); fclose(fp); }else {printf(" 此卡不存在~按任意键返回主菜单......");getch();} } 第 18 页 共 36 页 用if---else语句分别选择设置和解除挂失功能。 备注:以下函数为设置与解除挂失的子函数: int myguashi(char num[10]) { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&t emp[i].guashi,&temp[i].sum); i++; } fclose(fp); for(j=0;j<i;j++) { if(strcmp(num,temp[j].num)==0) break; } if(temp[j].guashi==1) return 1; else return 0; } 7,创新功能模块,函数名mynew。 do { fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 打开文件失败!\n");return;} while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[k].num,temp[k].name,&temp[k].yu,&t emp[k].guashi,&temp[k].sum); k++; } fclose(fp); system("cls"); printf("请输入卡号:"); scanf("%s",num_temp); for(i=0;i<k;i++) if(strcmp(num_temp,temp[i].num)==0) break; if(temp[i].sum>=50) { 第 19 页 共 36 页 temp[i].yu=temp[i].sum/50+temp[i].yu; temp[i].sum=(int)temp[i].sum%50; printf("余额 为%f",temp[i].yu); } else printf("您的消费金额不足50"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(j=0;j<k;j++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f%\n",temp[j].num,temp[j].name,temp[j].yu ,temp[j].guashi,temp[j].sum); fclose(fp); } 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?); 用if---else语句判断消费金额是否大于50元。 如果大于五十元用到temp[i].yu,temp[i].sum计算出返回金钱。 8,界面设计模块,函数名myprint。 void myprint() { system("cls"); printf("\n\n"); printf(" |******************************************|\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(" | 7--创新功能 |\n"); printf(" | 0--退出系统 |\n"); printf(" |******************************************|\n"); } 利用myprint函数实现主菜单的显示功能。 备注以下为查找学生饭卡卡号的子函数: int myexist(char num[10]) 第 20 页 共 36 页 { FILE *fp=NULL; struct card temp[N]={0}; int i=0,flag=-1,k=0; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[k].num,temp[k].name,&temp[k].yu,&t emp[k].guashi,&temp[k].sum); k++; } fclose(fp); for(i=0;i<k;i++) if(strcmp(num,temp[i].num)==0) return flag; } 第 21 页 共 36 页{ flag=1;break; } 5(测试与调试 第 22 页 共 36 页 附录? 程序清单 #include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> #define N 100 struct card { char name[10],num[10]; float yu,sum; int guashi; }; void myprint(); 第 23 页 共 36 页 void mycreat(); void mybuy(); int myexist(char num[10]); int myguashi(char num[10]); int myyu(char num[10]); void myaddyu(); void myaddcard(); void myzhuxiao(); void mysetguashi(); void mynew(); main() { char choose=„\0?; char yes_no=„\0?; do { myprint(); printf("\n 请选择操作编号:"); choose=getch(); 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; } 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?); } void myprint() { system("cls"); 第 24 页 共 36 页 printf("\n\n"); printf(" |******************************************|\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(" | 7--创新功能 |\n"); printf(" | 0--退出系统 |\n"); printf(" |******************************************|\n"); } void mycreat() { int i=1; struct card temp={0}; FILE *fp=NULL; char yes_no=„\0?; temp.guashi=0; temp.sum=0; system("cls"); fp=fopen("D:\\card.dat","w"); 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:\\card.dat","w"); 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.gu ashi,temp.sum); 第 25 页 共 36 页 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?); } } void mybuy() { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j; char num_temp[10]={0}; float money; 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 卡号不存在~"); else if(myguashi(num_temp)==1) printf("\n 本卡已冻结~"); else if(myyu(num_temp)==0) printf("\n 余额不够,请续费~"); else { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; printf("\n 请输入消费金额:");scanf("%f",&money); printf("\n 卡号 姓名 余额\n"); printf("\n 消费 前:%-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].y 第 26 页 共 36 页 u); printf("\n 消费 后:%-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].yu-money); temp[j].yu=temp[j].yu-money; temp[j].sum=temp[j].sum+money; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(j=0;j<i-1;j++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[j].num,temp[j].name,temp[j].yu,te mp[j].guashi,temp[j].sum); fclose(fp); printf("\n\n 此次消费成功~按任意键返回主菜单.....");getchar();return; } printf("\n\n 此次消费失败~按任意键返回主菜单...");getchar(); return; } int myexist(char num[10]) { FILE *fp=NULL; struct card temp[N]={0}; int i=0,flag=-1,k=0; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[k].num,temp[k].name,&temp[k].yu,&t emp[k].guashi,&temp[k].sum); k++; } fclose(fp); for(i=0;i<k;i++) if(strcmp(num,temp[i].num)==0) { flag=1;break; } return flag; } int myguashi(char num[10]) { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); 第 27 页 共 36 页 while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&te mp[i].guashi,&temp[i].sum); i++; } fclose(fp); for(j=0;j<i;j++) if(strcmp(num,temp[j].num)==0)break; if(temp[j].guashi==1) return 1; else return 0; } int myyu(char num[10]) { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&te mp[i].guashi,&temp[i].sum); i++; } fclose(fp); for(j=0;j<i;j++) if(strcmp(num,temp[j].num)==0) break; if(temp[j].yu<5.00)return 0; else return 1; } void myaddyu() { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j,k; char num_temp[10]={0}; float money; system("cls"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); while(feof(fp)==0) 第 28 页 共 36 页 { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&te mp[i].guashi,&temp[i].sum); i++; } fclose(fp); printf("\n\n 请输入卡号:");scanf("%s",&num_temp); if(myexist(num_temp)==1&&myguashi(num_temp)==0) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; printf("\n 请输入续费金额:");scanf("%f",&money); printf("\n 卡号 姓名 余额\n"); printf(" 续费 前:%-10s %-10s %-10.2f\n\n",temp[j].num,temp[j].name,temp[j].yu); printf(" 续费 后:%-10s %-10s %-10.2f\n",temp[j].num,temp[j].name,temp[j].yu+money); temp[j].yu=temp[j].yu+money; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp[k].yu, temp[k].guashi,temp[k].sum); fclose(fp); printf("\n\n 续费成功~按任意键返回主菜单......"); } else printf("\n\n 卡号不存在或已挂失~按任意键返回主菜单..."); getch(); return; } void myaddcard() { int i=0; struct card temp={0}; FILE *fp=NULL; char yes_no=„\0?; temp.guashi=0; temp.sum=0; system("cls"); 第 29 页 共 36 页 fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");getchar();exit(0);} fclose(fp); do { printf("\n 请输入第%d个记录:\n\n",i+1); printf(" 卡号:"); scanf("%s",&temp.num); if(myexist(temp.num)!=1) { printf(" 姓名:"); scanf("%s",&temp.name); printf(" 充值钱数:"); scanf("%f",&temp.yu); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","a"); fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp.num,temp.name,temp.yu,temp.gu ashi,temp.sum); fclose(fp); i++; } else printf("\n 卡号重复!\n"); printf("\n\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?); } void myzhuxiao() { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j,k; char num_temp[10]={0}; system("cls"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");exit(0);} while(feof(fp)==0) { 第 30 页 共 36 页 fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&temp[i].guashi,&temp[i].sum); i++; } fclose(fp); printf("\n\n 请输入卡号:");scanf("%s",num_temp); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0)break; for(k=j;k<i;k++) temp[k]=temp[k+1]; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i-1;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp[k].yu, temp[k].guashi,temp[k].sum); fclose(fp); printf("\n 注销成功~按任意键返回主菜单......"); } else printf("\n %s不存在~按任意键返回主菜单......",num_temp); getchar(); return; } void mysetguashi() { FILE *fp=NULL; struct card temp[N]={0}; int i=0,j,k; char num_temp[10]={0},choose; system("cls"); printf("\n"); printf(" |******************************************|\n"); printf(" | 请输入选项编号(0,2) |\n"); printf(" |******************************************|\n"); printf(" | 1--设置挂失 |\n"); printf(" | |\n"); printf(" | 2--解除挂失 |\n"); printf(" | |\n"); printf(" | 0--返回 |\n"); printf(" |******************************************|\n"); printf("\n 请输入操作编 号"); 第 31 页 共 36 页 scanf("%s",num_temp); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 饭卡文件丢失!");exit(0);} while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[i].num,temp[i].name,&temp[i].yu,&temp[i].guashi,&temp[i].sum); i++; } fclose(fp); choose=getchar(); if(choose==„1?) { printf("\n\n 请输入卡号:"); scanf("%s",num_temp); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; temp[j].guashi=1; fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f\n",temp[k].num,temp[k].name,temp[k].yu,temp[k].guashi,temp[k].sum); fclose(fp); printf("\n 设置成 单......");getchar();return; } 功~按任意键返回主菜 else {printf("\n 此卡不存在~按任意键返回主菜 单......");getchar();} } else if(choose==„2?) { printf("\n\n 请输入卡 号:");scanf("%s",num_temp);printf("\n"); if(myexist(num_temp)==1) { for(j=0;j<i;j++) if(strcmp(num_temp,temp[j].num)==0) break; temp[j].guashi=0; fp=fopen("D:\\饭卡管理系统 \\files\\card.dat","w"); for(k=0;k<i;k++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f%\n",temp[k].num,temp[k].name 第 32 页 共 36 页 ,temp[k].yu,temp[k].guashi,temp[k].sum); fclose(fp); } else {printf(" 此卡不存在~按任意键返回主菜单......");getchar();} } } void mynew() { int i=0,k=0,j=0; char ch[20]="", yes_no=„\0?,num_temp[20]; struct card temp[N]={0}; FILE *fp=NULL; do { fp=fopen("D:\\饭卡管理系统\\files\\card.dat","r"); if(fp==NULL) {printf("\n 打开文件失败!\n");return;} while(feof(fp)==0) { fscanf(fp,"%s%s%f%d%f\n",temp[k].num,temp[k].name,&temp[k].yu,&t emp[k].guashi,&temp[k].sum); k++; } fclose(fp); system("cls"); printf("请输入卡号:"); scanf("%s",num_temp); for(i=0;i<k;i++) if(strcmp(num_temp,temp[i].num)==0) break; if(temp[i].sum>=50) { temp[i].yu=temp[i].sum/50+temp[i].yu; temp[i].sum=(int)temp[i].sum%50; printf(" 余额为%f",temp[i].yu); } else printf("您的消费金额不足50"); fp=fopen("D:\\饭卡管理系统\\files\\card.dat","w"); for(j=0;j<k;j++) fprintf(fp,"%10s%10s%20.2f%4d%20.2f%\n",temp[j].num,temp[j].name,temp[j].yu ,temp[j].guashi,temp[j].sum); fclose(fp); printf("\n 请问您要继续吗?"); 第 33 页 共 36 页 } do { yes_no=getchar(); }while(yes_no!=„Y?&&yes_no!=„y?&&yes_no!=„ N?&&yes_no!=„n?); }while(yes_no==„Y?||yes_no==„y?); 附录? 用户使用说明书 根据中文提示进行选择,在主菜单界面输入1时,进入建立饭卡系统,按照提 第 34 页 共 36 页 示输入卡号姓名和充值钱数,在输入时摁回车进行下一项的输入。 在主菜单界面输入2时,进入买饭子菜单。在买饭子菜单中输入卡号和消费金额,系统自动扣除相应消费金额,在输入时摁回车进行下一项的输入。 在主菜单界面输入3时,将进入续钱子菜单,在续钱子菜单中输入卡号和金额,系统生成并打印相应的续费信息,在输入时摁回车进行下一项的输入。 在主菜单界面输入4时,进入添加新饭卡系统,输入卡号,如果卡号没重复,系统显示添加成功,如果卡号重复,系统显示卡号重复的错误信息。 在主菜单界面输入5时,进入注销旧饭卡子菜单,在注销旧饭卡子菜单中输入卡号,如果卡号存在系统将显示相应的注销信息,如果卡号不存在,系统将显示卡号不存在的错误信息。 在主菜单界面输入6时,进入设置与解除挂失子菜单,在设置与解除挂失子菜单中选择相应的选项,选择1设置挂失,选择2解除挂失,选择0返回主菜单。 在主菜单界面输入7时,进入创新功能子菜单,在创新功能子菜单中输入卡号,系统将显示用户余额的信息。 在主菜单界面输入0时,屏幕显示非常感谢支持本软件,并退出。 [1].C语言程序设计课设指导书; [2].C程序设计教程 参考文献 第 35 页 共 36 页
本文档为【c语言饭卡管理系统课程设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_616397
暂无简介~
格式:doc
大小:86KB
软件:Word
页数:42
分类:互联网
上传时间:2017-09-28
浏览量:67