1、C语言程序设计会员卡管理教学内容【题目描述的内容】【简单的描述】设计一个图书大厦的会员卡管理程序,使其具有一些基本的功能,通过所给的提示信息便可以对会员的信息进行相应的处理。【详细的描述】 会员卡管理程序【题目描述】请设计一个图书大厦的会员卡管理程序。该程序应该具有下列功能:(1) 录入某位持卡人的基本信息:姓名、身份证号、电话/手机并分配一个卡号(2) 给定卡号,显示此卡的基本信息;(3) 给定卡号,查询累积得分; (4) 给定卡号,进行购书的相应处理:购书款的打折;累计得分处理 (5) 给定卡号或身份证号等信息进行挂失处理,挂失处理后能查到该卡号,但显示“该卡已挂失”信息。(6) 给定卡号
2、,对该卡进行删除处理;删除处理后无法找到该卡号。(7) 提供一些统计各类信息的功能。【说明】 约定: 任何一个人均可申请会员卡;每个人只能申请一个会员卡;卡号自动生成;购书款的打折:累积购书满1000元后享受95折、满2000元享受9折、满5000元享受8折 。【题目要求】(1) 按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;(2) 为各项操作功能设计一个菜单。应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。【输入要求】应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的
3、信息。【输出要求】(1) 应用程序运行后,要在屏幕上显示一个菜单;(2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。【用户文档的内容】1. 应用程序功能的详细说明这是一个图书大厦的会员卡管理程序。该程序具有下列功能:使用该程序时,可以通过屏幕上显示的菜单以及所给的提示信息进行相应的操作。程序中将菜单定义了一个函数,即:void menu(); /*菜单函数*/= WELCOM!=* 1 .Enter new information * 2 .buy * 3 .Search or delete or modify * 4 .modify * 5 .gu
4、ashi * 6 .xian shi * 7 .add data * 8 .Exit *=程序是的主页面的菜单如下:在菜单函数中通过对各项的选取,从而进入相应的函数中,继而进行接下来的操作。(1) 录入某位持卡人的基本信息:姓名、身份证号、电话/手机并分配一个卡号struct huiyuan /*定义会员信息结构体类型*/char num100; /*卡号*/char name20; /*姓名*/char ID30; /*身份证号*/char tel30; /*电话号码*/float fen; /*积分*/char g10; /*记录改卡是否已挂失*/huiyuan 100; 该功能为菜单中的
5、1选项,定义的函数为:void enter(); /*输入函数*/这个函数的作用是创建一个初始的资料信息库,并保存们每位会员的各个信息。每次进入该函数时,信息库将会被更新,以前的信息将会自动删除。(2) 给定卡号,显示此卡的基本信息;该功能为菜单中的3选项,定义为函数:void search(); /*查找函数*/这个函数功能是通过给定的卡号或身份证号,调取信息库中的对应的信息,完成查询功能。从菜单可以看到,在我定义的这个函数中,还添加了一个删除信息的功能。在查找完成后,可以根据提示信息选择删除、修改、购书、继续查找和返回菜单等功能,进行相应的操作或进入相应的函数。(3) 给定卡号,查询累积得
6、分;该功能被合并到上一功能中,查询信息便可以查到积分。(4)给定卡号,进行购书的相应处理:购书款的打折;累计得分处理该功能为菜单中的2选项,定义为函数:void buy(); /*购书函数*/为方便对会员购书打折的计算,还定义了两个子函数:float Money() /*处理输入的购书总金额*/float buy_money(float acc) /*购书打折处理函数*/它们分别是对顾客所购书的计算处理及对会员购书后的积分和打折的处理。若顾客不是会员,则经过计算得出应付金额。若顾客是会员,则应在原有积分上进行再积分,然后进行打折处理,计算出应付金额。打折处理方法如下:累积购书满1000元后享受
7、95折、满2000元享受9折、满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个字符,所以输入是虚加以注意。【
9、技术文档的内容】1. main()menu()buy()output()modify()enter()guashi()add()search ()buy_money()Money()printf_face()input()程序整体结构图2. 问题描述 除了上述的函数,程序中其它函数功能:void input(int i); /*输入数据的子函数*/用于帮助函数enter()中输入信息。void printf_back(); /*用于调用其他函数*/此函数有调用其它函数的作用,每个函数中都可以使用,起到一个联系函数的桥梁的作用。void printf_out(int i); /*显示信息函数*/
10、当输入、添加或修改用户信息时,可以帮助显示一下用户信息,以方便确认。void printf_face(); /*显示信息表头*/在显示用户信息之前,显示信息的表头。int modify_data(int i); /*修改数据的子函数*/是修改函数的一个子函数,modify()函数中主要功能是调取相应卡的信息,而真正进行修改处理的是在该函数中进行的。int save(int n); /*保存数据函数*/该函数用来保存每次输入、增加、修改、删除和积分后保存信息,保存在Pro.txt的文档中。int load(); /*读取数据函数*/函数用于每次进行处理会员任务之前,调用信息库中存储的信息,然后进
11、行下一步的操作。3. 主要模块的算法(流程图)(1)Search()函数的算法(以按卡号查找为例)开始0iinstrcmp(p.num,huiyuani.num)=0i+YNikprintf_out(k)i=n结束N不存在k=-1Nk=-1Y 该函数先判断是否存在该卡号,若存在再判断是否该卡已挂失,若未挂失,则显示该卡信息。 接下来的modify()函数、guashi()函数及buy()函数的算法相似。都要先判断一下是否存在该卡,改卡是否已挂失,在进行下一步的操作。(2)load()函数的算法(流程图)(3) Money()函数的算法(流程图)(4) buy_money()函数的算法(流程图)
12、nm开始strcmp(huiyuani.num,num)=00iMoney()accin不存在ai4. 原程序代码/* HELLO.C - Hello, world */#include stdio.h#include conio.h#include stdlib.h#define N 1000struct huiyuan /*定义会员信息结构体类型*/char num100; /*卡号*/char name20; /*姓名*/char ID30; /*身份证号*/char tel30; /*电话号码*/float fen; /*积分*/char g10; /*记录改卡是否已挂失*/huiyu
13、an 100; /*自定义函数*/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 a
14、dd);float Money();int modify_data(int i);int save(int n); /*保存数据函数*/int load(); /*读取数据函数*/main() /*主函数*/menu();getch();void menu() /*菜单函数*/ int n,w1; clrscr();do /*显示菜单*/ printf(tt=nn);printf(tt=nn);printf(tt = WELCOM!=nn);printf(tt * 1 .Enter new information *nn);printf(tt * 2 .buy *nn);printf(tt *
15、 3 .Search or delete or modify *nn);printf(tt * 4 .modify *nn);printf(tt * 5 .guashi *nn);printf(tt * 6 .xian shi *nn);printf(tt * 7 .add data *nn);printf(tt * 8 .Exit *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); swi
16、tch(n) case 1:enter();break; case 2:buy();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); f
17、or(i=0;in;i+) printf(n Input %dth 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
18、).By num bb);scanf(%d,&m); 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
19、).again 2).NO and back 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) /*该卡不存在*
20、/printf(nnNO exist!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);
21、break; case 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
22、); strcpy(huiyuana.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(); do k=-1;
23、printf_face(); /*显示所有卡信息*/for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnRemember NO.which needed modify.pass any key to contiune .); getch(); puts(nn); printf_out(i); do printf(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=huiyu
24、ani; if(k=-1)printf(nnNO exist!please again); /*判断是否存在该卡*/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)
25、; /*保存信息*/while(w0=1); menu(); void guashi() /*挂失函数*/ 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) /*判断是否为挂失*/ strcpy(huiyuani.g,diu); break;case 2:printf(nEnter num:);/*用卡号挂失*/ scanf(%s,num); printf_face();
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1