《C语言程序设计-会员卡管理.docx》由会员分享,可在线阅读,更多相关《C语言程序设计-会员卡管理.docx(12页珍藏版)》请在三一办公上搜索。
1、【题目描述的内容】【简单的描述】设计一个图书大厦的会员卡管理程序,使其具有一些基本的功能,通过所给的提示信息便可以对会员的信息 进行相应的处理。【详细的描述】会员卡管理程序【题目描述】请设计一个图书大厦的会员卡管理程序。该程序应该具有下列功能:(1) 录入某位持卡人的基本信息:姓名、身份证号、电话/手机并分配一个卡号(2) 给定卡号,显示此卡的基本信息;(3) 给定卡号,查询累积得分;(4) 给定卡号,进行购书的相应处理:购书款的打折;累计得分处理(5) 给定卡号或身份证号等信息进行挂失处理,挂失处理后能查到该卡号,但显示“该卡已挂失”信息。(6) 给定卡号,对该卡进行删除处理;删除处理后无法
2、找到该卡号。(7) 提供一些统计各类信息的功能。【说明】约定:任何一个人均可申请会员卡;每个人只能申请一个会员卡;卡号自动生成;购书款的打折:累积购书满1000元后享受95折、满2000元享受9折、满5000元享受8折。【题目要求】(1) 按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;(2) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行 的操作项目。【输入要求】应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根 据应用程序的提示信息,从键盘输入相应的信息。【输出要求】(1) 应用程序运行
3、后,要在屏幕上显示一个菜单;(2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。【用户文档的内容】1. 应用程序功能的详细说明这是一个图书大厦的会员卡管理程序。该程序具有下列功能:使用该程序时,可以通过屏幕上显示的菜单以及所给的提示信息进行相应的操作。程序中将菜单定义了一个 函数,即:void menu();/* 菜单函数*/程序是的主页面的菜单如下:在菜单函 数中通过对各 项的选取,从 而进入相应的 函数中,继而 进行接下来的 操作。(1)录入某位 持卡人的基本 信息:姓名、 身份证号、电 话/手机并分配 一个卡号struct huiyuan /*
4、定义会员信息 结构体类型*/char num100;/* 卡号 */char name20;/* 姓名 */char ID30;/* 身份证号*/char tel30;/* 电话号码*/float fen;/* 积分 */char g10;/*记录改卡是否已挂失*/huiyuan 100;该功能为菜单中的1选项,定义的函数为:void enter();/*输入函数 */这个函数的作用是创建一个初始的资料信息库,并保存们每位会员的各个信息。每次进入该函数时,信息库 将会被更新,以前的信息将会自动删除。(2) 给定卡号,显示此卡的基本信息;该功能为菜单中的3选项,定义为函数:void search
5、(); /* 查找函数*/这个函数功能是通过给定的卡号或身份证号,调取信息库中的对应的信息,完成查询功能。从菜单可以看到, 在我定义的这个函数中,还添加了一个删除信息的功能。在查找完成后,可以根据提示信息选择删除、修改、购 书、继续查找和返回菜单等功能,进行相应的操作或进入相应的函数。(3) 给定卡号,查询累积得分;该功能被合并到上一功能中,查询信息便可以查到积分。(4) 给定卡号,进行购书的相应处理:购书款的打折;累计得分处理该功能为菜单中的2选项,定义为函数:void buy();/*购书函数 */为方便对会员购书打折的计算,还定义了两个子函数:float Money()/*处理输入的购书
6、总金额*/float buy_money(float acc)/*购书打折处理函数 */它们分别是对顾客所购书的计算处理及对会员购书后的积分和打折的处理。若顾客不是会员,则经过计算得 出应付金额。若顾客是会员,则应在原有积分上进行再积分,然后进行打折处理,计算出应付金额。打折处理方 法如下:WELCOM!* 1* 2* 3* 4* 5* 6* 7* 8Enter new information *buy*Search or delete or modify * modify* guashi* xianshi *add data *Exit *累积购书满1000元后享受95折、满2000元享受9
7、折、满5000元享受8折。(5) 给定卡号或身份证号等信息进行挂失处理,挂失处理后能查到该卡号,但显示“该卡已挂失”信息。该功能为菜单中的5选项,定义为函数:void guashi();/* 挂失函数*/该功能为了防止会员的会员卡丢失,造成损失。所以可以通过输入的卡号或身份证进行挂失处理。挂失后的 会员卡以后再使用时不可以享受会员待遇,即不进行各个功能的操作。(6) 给定卡号,对该卡进行删除处理;删除处理后无法找到该卡号。该功能被加入search()函数中,通过输入卡号或身份证号进行查找操作,显示该卡信息后,选择删除delete 选项。信息库中将不存在该卡信息。2. 应用程序运行环境的要求应用
8、程序需要在Turbo C或Win TC环境中进行操作。3. 程序的界面、交互方式和操作方法程序界面中点击运行便可进入用户界面,而用户界面中的菜单,通过选8项,便可以退出该界面,结束操作。4. 输入数据类型、格式和内容限制为方便保存用户信息,会员的信息都是字符型变量。而程序运行中的提示信息的各个选项是整型变量。由于 定义的会员信息(char name20; /*姓名*/ char ID30; /*身份证号*/ char tel30; /*电话号码*/)中,姓名最多只 能输入20个字符,身份证号最多只能输入30个字符,电话号码最多只能输入30个字符,所以输入是虚加以注 意。【技术文档的内容】1.
9、程序整体结构图2. 问题描述除了上述的函数,程序中其它函数功能:void input(int i);/*输入数据的子函数*/用于帮助函数enter()中输入信息f_back(); /*printfS 调用其它函数的(enterO ; /*显示信hi息函数*/main()menu()使用,起到一个联系函数数*/,每个函数中都可以void printf_o当输入、添加或修改用户信息时 可以帮助显示inpvo()d printf_fac/();*显示信息在显示用户信息之前,显示信息的表头。/*修改数据的子函数*/output()buy()用户信息,以方便确认buy_money()的作用。、Money
10、()int modify_data(int i);是修改函数的一个子函数,modifadd(函数1中主要功能是调取相应卡的信信息,而 数中进行的。int save(int该函数用来保存每次输入、int load();/*i卖取数据函数*/函数用于每次进行处理会员任务之前,调用信息库中存储的信息,然后进行下一步的操作。数据函数*/轴口积I分后保存信息 search ()进行修改处理的是在该函io.txt的文档中。3.主要模块的算法(流程图)(1) Search ()函数的算法(以按卡号查找为例)开始该函数先判断是否存在该卡号,若存在再判断是否该卡乜挂失,若未挂失,则显示该卡信息。接下来的modi
11、fy ()函数、guashi ()函数及buy() 函数的算法相似。都要先判断一下是否存在该卡,改卡是否已挂失,在进行下一步的操作。nm4.原程序代码/* HELLO.C - Hello, world */#include stdio.h”#include conio.h”#include stdlib.h”#define N 1000struct huiyuan/*定义会员信息结构体类型*/charcharcharcharnum100;name20;ID30;tel30;float fen;char g10;huiyuan 100;/*卡号*/*姓名*/*身份证号*/*电话号码*/*积分*/
12、*记录改卡是否已挂失*/*自定义函数*/void menu();void enter();void search();void guashi();void buy();void modify();void output();void add();void input(int i);/*菜单函数*/*输入函数*/*查找函数*/*挂失函数*/*购书函数*/*修改函数*/*显示所有数据函数*/*添加信息函数*/void printf_back();void printf_out(int i);void printf_face();float buy_money(float add);float Mo
13、ney();int modify_data(int i);int save(int n);int load();main()menu();getch();void menu()int n,w1;clrscr();do/*保存数据函数*/*i卖取数据函数*/*主函数*/*菜单函数*/*显示菜单*/printf(tt=nn);printf(tt=nn);printf(tt = WELCOM!=nn);printf(tt * 1 Enternew information *nn);printf(tt * 2 buy *nn);printf(tt * 3Search or delete or modi
14、fy *nn);printf(tt *4modify *nn);printf(tt *5guashi *nn);printf(tt *6xian shi *nn);printf(tt * 7add data *nn);printf(tt * 8Exit *nn);printf(tt=nn);printf(tt=nn);printf(nChoose your number(1-8): bb);/*选择菜单*/scanf(%d”,&n); if(n8) w1=1; else w1=0; while(w1=1); switch(n) case 1:enter();break; case 2:buy(
15、);break; case 3:search();break; case 4:modify();break; case 5:guashi();break; case 6:output();break; case 7:add();break; case 8:exit(0); void enter()/* 输入函数 */ int i,n; printf(How many people do you want to add(0-%d)?:,N-1); scanf(%d”,&n); printf(n Enter data nownn); for(i=0;in;i+) printf(n Input %d
16、th people record.n”,i+1); input(i);/*调用子函数*/ if(i!=0) save(n); printf_face();/*显示刚刚输入的所有信息*/for(i=0;in;i+) printf_out(i); printf_back(); void search()/* 查找函数*/ int i,n,k,w1=1,w2,w3,w4,m,a; struct huiyuan p; n=load(); do printf(nnWhich way do you want to choose? nt1).By ID 2).By num bb); scanf(%d”,&m
17、);switch(m) case 1:/*按身份证查找*/do k=-1; printf(nnEnter danwei that you want to search! ID.”); scanf(%s”,p.ID); printf_face(); for(i=0;in;i+) if(strcmp(p.ID,huiyuani.ID)=0) k=i; printf_out(k);break;/* 显示该卡信息 */ if(k=-1) printf(nnNO exist!please);/*该卡不存在 */printf(nnAre you again?nt1).again 2).NO and bac
18、k bb); scanf(%d”,&w1); if(w1=2) printf_back(); while(k=-1&w1=1);break; case 2:/*按卡号查找*/do k=-1; printf(nnEnter num that you want to search! num.”); scanf(%s”,p.num); printf_face(); for(i=0;in;i+) if(strcmp(p.num,huiyuani.num)=0) k=i; printf_out(k);break;/*显示该卡信息 */ if(k=-1)/*该卡不存在*/printf(”nnNO exis
19、t!please”); printf(”nnAre you again?nt1).again 2).NO and back bb); scanf(%d”,&w1); if(w1=2) printf_back(); while(k=-1&w1=1);break; w4=0;w3=0; if(k!=-1) printf(”nnWhat do you want to do?nt 1).Search 2).Modify 3).Delete 4).Back menu bb); scanf(”d”,&w2); switch(w2)case 2:w3=modify_data(k,n);break;case
20、3:printf(nAre you sure?nt 1).Sure 2).No and back bb);/*删除函数 */ scanf(%d”,&w4);if(w4=1)for(a=k;an;a+)strcpy(huiyuana.num,huiyuana+1.num);/*删除信息*/strcpy(huiyuana.name,huiyuana+1.name);strcpy(huiyuana.ID,huiyuana+1.ID);strcpy(huiyuana.fen,huiyuana+1.fen);strcpy(huiyuana.g,huiyuana+1.g);strcpy(huiyuana.
21、tel,huiyuana+1.tel);break;if(w4=1)if(w3=1|w4=1)save(n);printf(nnSuccessful.);printf(nnWhant do you want to do? nt 1).Search another 2).Back bb);scanf(%d”,&w2);while(w2=1);menu();void modify()/*修改函数 */struct huiyuan p;FILE *fp;int i,n,k,w0=1,w1,w2=0;n=load();dok=-1;printf_face();/*显示所有卡信息*/for(i=0;in
22、;i+)if(i!=0)&(i%10=0)printf(nnRemember NO.which needed modify.pass any key to contiune .”);getch();puts(nn);printf_out(i);doprintf(nnEnter NO.that you want to modify! NO.:); /*选择序号*/scanf(%s”,p.num);for(i=0;in;i+)if(strcmp(p.num,huiyuani.num)=0)k=i;p=huiyuani; if(k=-1)printf(nnNO exist!please again)
23、; /*判断是否存在该卡*/ while(k=-1); printf_face(); printf_out(k); w1=modify_data(k,n); /*调用修改数据子函数*/ if(w1=1) printf(nSuccessful.nnAre you modify another ?nnt 1).Yes 2).Back with savet bb); scanf(%d”,&w0); w2=1; else w0=0; if(w2=1) huiyuank=p; if(w0!=1&w2=1) save(n);/*保存信息*/while(w0=1); menu(); void guashi(
24、)/*挂失函数*/ int n,i,x; char ID,a,num; n=load(); printf(Enter 1).ID 2).num bb); scanf(%d”,&x); switch(x) case 1:printf(nEnter ID /*用身份证挂失 */scanf(%s”,ID); printf_face(); for(i=0;in;i+)/*查找相应信息 */if(strcmp(huiyuani.ID,ID)=0) printf_out(i); printf(nAre suer(y/n): bb); scanf(%s”,a); if(strcmp(a,y)=0)/*判断是
25、否为挂失*/strcpy(huiyuani.g,diu); break; case 2:printf(nEnter num:);/*用 卡号挂失*/ scanf(%s”,num); printf_face(); for(i=0;in;i+)/*查找相应信息 */if(strcmp(huiyuani.num,num)=0) printf_out(i); printf(nAre suer(y/n): bb); scanf(%s”,a); if(strcmp(a,y)=0)/*判断是否为挂失*/strcpy(huiyuani.g,diu);break;save(n);printf_back();vo
26、id buy()/*购书函数 */float m,n;int x;m=buy_money(n);printf(nchoose:t1)go on buying 2)end and back to menut bb); scanf(%d”,&x);if(x=1)buy();elsemenu();float Money()/*处理输入的购书总金额*/int i, n,a,b,c;float sum=0.0;float m100;printf(nEnter the number of books:);/*输入所买书的本书 */scanf(%d”,&n);for(i=0;in ;i+)printf(nE
27、nter %dth books money:n,i+1); /*输入每本书的价格 */ scanf(%f”,&mi);sum=sum+mi;return sum;float buy_money(float acc)/*购书打折处理函数*/int i,n,a,b,c;char num;/*暂时存储每次购书金额*/n=load();acc=Money();printf(nEnter card num:);scanf(%s”,num);for(i=0;i=1&c=5000) acc=acc*0.80; printf(discount);/*打折处理 */else if(huiyuana.fen=20
28、00) acc=acc*0.90;printf(discount);else if(huiyuana.fen=1000) acc=acc*0.95;printf(discount);printf(nShould pay total money:%.2f”,acc);save(n);return acc;elseprintf(n1)back to menu. 2)search. bb);scanf(%d”,&b);if(b=2)search();else menu();int modify_data(int i)/*修改数据的子函数*/int c,w1;doputs(nmodify by=nn
29、1).num2).name3).ID4).telephonet bb);/*选择要修改的内容*/printf(Which you needed?: bb);scanf(%d”,&c);if(c4|c4|c1);doswitch(c)/*修改相应信息*/case 1:printf(num:);scanf(%s”,huiyuani.num);break;case 2:printf(name:);scanf(%s”,huiyuani.name);break;case 3:printf(ID:);scanf(%s”,huiyuani.ID);break;case 4:printf(tel:);scan
30、f(%s”,huiyuani.tel);break;puts(nNow:n);/*显示刚修改的信息*/printf_face();printf_out(i);printf(nAre you sure?nnt 1).Sure 2).No and remodify 3).Back without save in this time :bb); scanf(%d”,&w1); while(w1=2); return(w1); void add()/*添加信息函数*/ int i,n,m,k; FILE*fp; n=load();printf(How many people are you want
31、to add(0-%d)?:,N-1-n);/*输入要添加的人数 */ scanf(%d”,&m); k=m+n; for(i=n;ik;i+)/*依次输入信息 */ printf(nInput %dth people record.n”,i-n+1 ); input(i); printf_face();/*显示刚输入的信息*/for(i=n;ik;i+) printf_out(i); if(fp=fopen(Pro.txt”,ab)=NULL) printf(cannot open filen); for(i=n;ik;i+)/*保存数据 */if(fwrite(&huiyuani,size
32、of(struct huiyuan),1,fp)!=1) printf(file write errorn); fclose(fp); printf_back(); void output()/*显示所有数据函数*/ int i,n,x; char pa; n=load(); clrscr(); printf(Enter password:n);/*输入密码 */gets(pa); while(strcmp(pa,12345”)!=0) clrscr(); printf(Enter password again:); gets(pa); clrscr();printf_face();/*显示所
33、有信息*/for(i=0;in;i+)printf_out(i);printf(nn1)back to menu. 2)buy. 3)search and delete. 4)modify.t bb);scanf(%d”,&x);switch(x)case 1:menu();break;case 2:buy();break;case 3:search();break;case 4:modify();break;default:menu();int save(int n)/*保存数据函数*/FILE *fp;int i;if(fp=fopen(Pro.txt”,wb)=NULL)printf(n
34、Cannot open filen);return NULL;for(i=0;in;i+)if(huiyuani.num!=0)if(fwrite(&huiyuani,sizeof(struct huiyuan),1,fp)!=1)printf(file write errorn);fclose(fp);int load()/*i卖取数据函数*/FILE *fp;int i;if(fp=fopen(Pro.txt”,rb)=NULL)printf(nCannot open filen);return NULL;for(i=0;!feof(fp);i+)fread(&huiyuani,sizeo
35、f(struct huiyuan),1,fp);fclose(fp);return(i-1);void input(int i)/*输入数据的子函数*/int k,y;long x;randomize();x=random(32767);/*随机产生卡号 */ltoa(x,huiyuani.num,10);for(k=0;ki;k+)if(strcmp(huiyuank.num,huiyuani.num)=0)x=random(32767);ltoa(x,huiyuani.num,10);printf(name:);/*输入姓名 */scanf(%s”, huiyuani.name);prin
36、tf(ID:);scanf(%s”,huiyuani.ID);/*输入身份证 */printf(telephone:);scanf(%s”,huiyuani.tel);/*输入电话号码*/huiyuani.fen=0.0;/*积分初始值为 0.0*/void printf_back()/*用于调用其他函数*/int j,w;printf(nntSuccessful!nn);printf(What do you want you to continue to do?nnt1).search or modifyt2).Back to menu.t3).add data bb);scanf(%d”,
37、&w);if(w=1)search();if(w=3)add();if(w!=1&w!=3)menu();void printf_out(int i) /* 显示信息函数*/if(strcmp(huiyuani.g,diu)=0)printf(%s card yi gua shi!nyou cant use it!n”,huiyuani.num); elseprintf(%d%8s%15s%15s%16s%15fn”,i+1,huiyuani.num,huiyuani.name,huiyuani.ID,huiyuani. tel,huiyuani.fen);void printf_face()/* 显示信息表头*/printf(n xuhao numnameIDtelephone jifen n);