您好,欢迎访问三七文档
中北大学程序设计实训说明书学院、系:软件学院专业:软件工程学生姓名:王一平学号:1314010333设计题目:会员卡计费系统起迄日期:2014年11月21日~2015年1月17日指导教师:尹四清2015年1月10日1一、选题要求(1)新会员登记。(将会员个人信息及此会员的会员卡信息进行录入。)(2)会员信息修改。(3)会员续费。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息并显示。此时可以进行续费,续费后,提示成功,并显示更新后的信息。)(4)会员消费结算。(会员出示会员卡后,管理人员根据卡号查找到该会员的信息,结算本次费用。提示成功,并显示更新后的信息。)累计消费满1000元,及自动升级为VIP会员。之后每次消费给予9折优惠。(5)会员退卡。(收回会员卡,并将余额退还,删除该会员信息。)(6)用菜单进行管理(7)统计功能。能够按每个会员的缴费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。能够按累计消费总额进行排序。在排序的最后一行显示所有会员的缴费总额,以及消费总额。二、程序设计方法及主要函数介绍设计方法:结构化程序设计。主要函数介绍:voidcreat_member(mem*pNew);从键盘接受会员的信息。voidnewMember();添加一个新的会员。voidmodify_m();通过调用search_id函数,搜索到要修改的会员,然后选择需要修改的项目。voidadd();通过调用search_id函数,搜索到要续费的会员,进行会员续费操作。voidconsume();通过调用search_id函数,搜索到要结算的会员,输入消费金额,如果累计消费大于1000元,本次消费9折优惠,否则正常计费。2voiddelete_m();通过调用search_id函数,搜索到要删除的会员,并显示本会员余额,并退费。voidstatistics();调用sort_c和sort_m函数,统计会员信息。mem*search_id(mem*p);通过id搜索会员信息,返回搜索到的指针。mem*sort_c(mem*);通过累计消费金额进行排序mem*sort_m(mem*);通过剩余金额进行排序三、程序源代码(包括注释)/*引入头文件*/#includestdio.h#includestdlib.h#includestring.h#includeconio.h/*自定义符号常量*/#defineMAX10#defineMENU_MAIN_COUNT7//主菜单的选项个数/*自定义数据类型*/typedefstructmember{//定义member,采用链式存储结构charname[MAX];//姓名charid[MAX];//卡号charsex[2];//性别intage;//年龄floatmoney;//存款chartel[12];//电话structmember*next;//指向下一个会员信息floatcost;//消费金额3}mem;/*声明函数*/voidmenu();voidsave(mem*p);/*输入信息操作*/voidcreat_member(mem*pNew){//创建一个新的会员chars;printf(卡号:);scanf(%s,pNew-id);printf(请输入姓名:);scanf(%s,pNew-name);a:printf(请输入性别(f--女m--男):);getchar();s=getchar();if(s=='f'||s=='m'){if(s=='f'||s=='F')strcpy(pNew-sex,女);if(s=='M'||s=='m')strcpy(pNew-sex,男);}else{printf(输入错误,请重新输入...\n);gotoa;}printf(请输入年龄:);scanf(%d,&(pNew-age));printf(请输入缴费金额:);scanf(%f,&(pNew-money));printf(请输入电话:);scanf(%s,pNew-tel);pNew-cost=0;printf(\n创建完毕!\n);}mem*head=NULL;//头指针为NULLmem*get_last(mem*p){//获取最后一个节点if(p-next==NULL){returnp;4}else{get_last(p-next);}}voidnewMember(){//添加会员信息charcon='N';mem*pLast=NULL;mem*pNew=(mem*)malloc(sizeof(mem));pNew-next=NULL;creat_member(pNew);if(head==NULL){head=pNew;}else{pLast=get_last(head);pLast-next=pNew;}printf(继续输入会员信息?(Y继续,N返回菜单));getchar();con=getchar();if(con=='n'||con=='N'){save(pNew);menu();}else{save(pNew);newMember();}}5/*显示信息操作*/voidtable_head(){//定义表头printf(+----------+------+------+------+--------+--------+-----------+\n);printf(|卡号|姓名|性别|年龄|余额|累计消费|电话|\n);printf(+----------+------+------+------+--------+--------+-----------+\n);}voidtable_buttom(){//定义底线printf(+----------+------+------+------+--------+--------+-----------+\n);}voidtable_row(mem*p){//printf(|%10s|%6s|%6s|%6d|%8.2f|%8.2f|%11s|\n,p-id,p-name,p-sex,p-age,p-money,p-cost,p-tel);}voiddisplay(mem*p){//显示所有信息p=head;table_head();while(p!=NULL){table_row(p);p=p-next;}table_buttom();}voiddisplay_one(mem*p){//只显示一条信息table_head();table_row(p);table_buttom();}voidtable_sum(){printf(+----------+------+------+------+--------+--------+-----------+\n);printf(|||||总计|总计||\n);6printf(+----------+------+------+------+--------+--------+-----------+\n);}voidtable_r(floatmoney,floatcost){printf(|||||%8.2f|%8.2f||\n,money,cost);}voiddisplay_statistics(mem*p,floatmoney,floatcost){//显示统计信息p=head;table_head();while(p!=NULL){table_row(p);p=p-next;}p=head;table_sum();table_r(money,cost);table_buttom();}/*文件相关操作*/voidsave(mem*p){//保存信息到文件FILE*fp;//p=head;fp=fopen(member.dat,a);while(p!=NULL){fprintf(fp,%s%s%s%d%f%s%d\n,p-id,p-name,p-sex,p-age,p-money,p-tel,p-cost);p=p-next;}fclose(fp);getchar();7}voidmodify_file(mem*p){//保存修改的信息到文件FILE*fp;p=head;if((fp=fopen(member.dat,w))==NULL){printf(文件不存在);getch();menu();}while(p!=NULL){fprintf(fp,%s%s%s%d%f%s%f\n,p-id,p-name,p-sex,p-age,p-money,p-tel,p-cost);p=p-next;}fclose(fp);getchar();}voidload(mem*p){//从文件加载信息FILE*fp;mem*pLast=NULL;head=NULL;if((fp=fopen(member.dat,r))==NULL){printf(没有会员信息,请录入!);getch();menu();}while(!feof(fp)){mem*pNew=(mem*)malloc(sizeof(mem));pNew-next=NULL;fscanf(fp,%s%s%s%d%f%s%f\n,8pNew-id,pNew-name,pNew-sex,&(pNew-age),&(pNew-money),pNew-tel,&(pNew-cost));if(head==NULL){head=pNew;}else{pLast=get_last(head);pLast-next=pNew;}}p=head;fclose(fp);}/*通过卡号搜索信息*/mem*search_id(mem*p){//通过卡号搜索信息charid[MAX];inti=0;p=head;scanf(%s,id);while(p&&(strcmp(id,n)!=0)){if(strcmp(p-id,id)==0){i=1;break;}elsep=p-next;}if(strcmp(id,n)==0)//输入n时返回菜单menu();if(p==NULL){//重新搜索卡号9printf(您查找的卡号不存在,请重新输入:\n);p=search_id(p);}elsereturnp;}/*修改会员信息操作*/voidmodify_m(){//修改会员的信息intage;chars,fun='y';charpro[]=|\n|1姓名\n|2性别\n|3年龄\n|4电话\n|5返回\n|\n;mem*p;load(p);display(p);printf(请输入需要修改信息的会员卡号(n返回菜单):);p=search_id(p);while(fun=='y'||fun=='Y'){system(cls);display_one(p);printf(请选择修改的项目:\n);printf(pro);getchar();scanf(%c,&fun);10switch(fun){case'1':printf(请输入姓名:);scanf(%s,p-name);break;case'2':a:printf(请输入性别(f--女m--男):);getchar();s=getchar();if(s=='f'||s=='m'){if(s=='f'||s=='F')strcpy(p-sex,女);if(s=='M'||s=='m')strcpy(p-sex,男);}else{printf(输入错误,请重新输入...\n);gotoa;}break;case'3':printf(请输入年龄:);scanf(%d,&(p-age));break;case'4':printf(请输入电话:);scanf(%s,p-tel);break;default:break;}printf(是否继续
本文标题:程序设计实训说明书
链接地址:https://www.777doc.com/doc-4018380 .html