C语言程序设计会员卡管理.docx
《C语言程序设计会员卡管理.docx》由会员分享,可在线阅读,更多相关《C语言程序设计会员卡管理.docx(24页珍藏版)》请在冰豆网上搜索。
C语言程序设计会员卡管理
【题目描述的内容】
【简单的描述】
设计一个图书大厦的会员卡管理程序,使其具有一些基本的功能,通过所给的提示信息便可以对会员的信息进行相应的处理。
【详细的描述】
会员卡管理程序
【题目描述】
请设计一个图书大厦的会员卡管理程序。
该程序应该具有下列功能:
(1)录入某位持卡人的基本信息:
姓名、身份证号、电话/手机并分配一个卡号
(2)给定卡号,显示此卡的基本信息;
(3)给定卡号,查询累积得分;
(4)给定卡号,进行购书的相应处理:
购书款的打折;累计得分处理
(5)给定卡号或身份证号等信息进行挂失处理,挂失处理后能查到该卡号,但显示“该卡已挂失”信息。
(6)给定卡号,对该卡进行删除处理;删除处理后无法找到该卡号。
(7)提供一些统计各类信息的功能。
【说明】
约定:
任何一个人均可申请会员卡;每个人只能申请一个会员卡;卡号自动生成;
购书款的打折:
累积购书满1000元后享受95折、满2000元享受9折、满5000元享受8折。
【题目要求】
(1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用程序;
(2)为各项操作功能设计一个菜单。
应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
【输入要求】
应用程序运行后,在屏幕上显示一个菜单。
用户可以根据需求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
【输出要求】
(1)应用程序运行后,要在屏幕上显示一个菜单;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
【用户文档的内容】
1.应用程序功能的详细说明
这是一个图书大厦的会员卡管理程序。
该程序具有下列功能:
使用该程序时,可以通过屏幕上显示的菜单以及所给的提示信息进行相应的操作。
程序中将菜单定义了一个函数,即:
voidmenu();/*菜单函数*/
================================================
================================================
=================WELCOM!
===================
***1.....................Enternewinformation***
***2...................................................buy***
***3..............Searchordeleteormodify***
***4.............................................modify***
***5..............................................guashi***
***6............................................xianshi***
***7...........................................adddata***
***8..................................................Exit***
================================================
================================================
程序是的主页面的菜单如下:
在菜单函数中通过对各项的选取,从而进入相应的函数中,继而进行接下来的操作。
(1)录入某位持卡人的基本信息:
姓名、身份证号、电话/手机并分配一个卡号
structhuiyuan/*定义会员信息结构体类型*/
{
charnum[100];/*卡号*/
charname[20];/*姓名*/
charID[30];/*身份证号*/
chartel[30];/*电话号码*/
floatfen;/*积分*/
charg[10];/*记录改卡是否已挂失*/
}huiyuan[100];
该功能为菜单中的1选项,定义的函数为:
voidenter();/*输入函数*/
这个函数的作用是创建一个初始的资料信息库,并保存们每位会员的各个信息。
每次进入该函数时,信息库将会被更新,以前的信息将会自动删除。
(2)给定卡号,显示此卡的基本信息;
该功能为菜单中的3选项,定义为函数:
voidsearch();/*查找函数*/
这个函数功能是通过给定的卡号或身份证号,调取信息库中的对应的信息,完成查询功能。
从菜单可以看到,在我定义的这个函数中,还添加了一个删除信息的功能。
在查找完成后,可以根据提示信息选择删除、修改、购书、继续查找和返回菜单等功能,进行相应的操作或进入相应的函数。
(3)给定卡号,查询累积得分;
该功能被合并到上一功能中,查询信息便可以查到积分。
(4)给定卡号,进行购书的相应处理:
购书款的打折;累计得分处理
该功能为菜单中的2选项,定义为函数:
voidbuy();/*购书函数*/
为方便对会员购书打折的计算,还定义了两个子函数:
floatMoney()/*处理输入的购书总金额*/
floatbuy_money(floatacc)/*购书打折处理函数*/
它们分别是对顾客所购书的计算处理及对会员购书后的积分和打折的处理。
若顾客不是会员,则经过计算得出应付金额。
若顾客是会员,则应在原有积分上进行再积分,然后进行打折处理,计算出应付金额。
打折处理方法如下:
累积购书满1000元后享受95折、满2000元享受9折、满5000元享受8折。
(5)给定卡号或身份证号等信息进行挂失处理,挂失处理后能查到该卡号,但显示“该卡已挂失”信息。
该功能为菜单中的5选项,定义为函数:
voidguashi();/*挂失函数*/
该功能为了防止会员的会员卡丢失,造成损失。
所以可以通过输入的卡号或身份证进行挂失处理。
挂失后的会员卡以后再使用时不可以享受会员待遇,即不进行各个功能的操作。
(6)给定卡号,对该卡进行删除处理;删除处理后无法找到该卡号。
该功能被加入search()函数中,通过输入卡号或身份证号进行查找操作,显示该卡信息后,选择删除delete选项。
信息库中将不存在该卡信息。
2.应用程序运行环境的要求
应用程序需要在TurboC或WinTC环境中进行操作。
3.程序的界面、交互方式和操作方法
程序界面中点击运行便可进入用户界面,而用户界面中的菜单,通过选8项,便可以退出该界面,结束操作。
4.输入数据类型、格式和内容限制
为方便保存用户信息,会员的信息都是字符型变量。
而程序运行中的提示信息的各个选项是整型变量。
由于定义的会员信息(charname[20];/*姓名*/charID[30];/*身份证号*/chartel[30];/*电话号码*/)中,姓名最多只能输入20个字符,身份证号最多只能输入30个字符,电话号码最多只能输入30个字符,所以输入是虚加以注意。
【技术文档的内容】
1.
main()
menu()
buy()
output()
modify()
enter()
guashi()
add()
search()
buy_money()
Money()
printf_face()
input()
程序整体结构图
2.问题描述
除了上述的函数,程序中其它函数功能:
voidinput(inti);/*输入数据的子函数*/
用于帮助函数enter()中输入信息。
voidprintf_back();/*用于调用其他函数*/
此函数有调用其它函数的作用,每个函数中都可以使用,起到一个联系函数的桥梁的作用。
voidprintf_out(inti);/*显示信息函数*/
当输入、添加或修改用户信息时,可以帮助显示一下用户信息,以方便确认。
voidprintf_face();/*显示信息表头*/
在显示用户信息之前,显示信息的表头。
intmodify_data(inti);/*修改数据的子函数*/
是修改函数的一个子函数,modify()函数中主要功能是调取相应卡的信息,而真正进行修改处理的是在该函数中进行的。
intsave(intn);/*保存数据函数*/
该函数用来保存每次输入、增加、修改、删除和积分后保存信息,保存在Pro.txt的文档中。
intload();/*读取数据函数*/
函数用于每次进行处理会员任务之前,调用信息库中存储的信息,然后进行下一步的操作。
3.主要模块的算法(流程图)
(1)Search()函数的算法(以按卡号查找为例)
开始
0→i
istrcmp(p.num,huiyuan[i].num)==0
i++
Y
N
i→k
printf_out(k)
i==n
结束
N
不存在
k==-1
N
k==-1
Y
该函数先判断是否存在该卡号,若存在再判断是否该卡已挂失,若未挂失,则显示该卡信息。
接下来的modify()函数、guashi()函数及buy()函数的算法相似。
都要先判断一下是否存在该卡,改卡是否已挂失,在进行下一步的操作。
(2)load()函数的算法(流程图)
(3)Money()函数的算法(流程图)
(4)buy_money()函数的算法(流程图)
nm
开始
strcmp(huiyuan[i].num,num)==0
0→i
Money()→acc
i不存在
a→i
4.原程序代码
/*HELLO.C--Hello,world*/
#include"stdio.h"
#include"conio.h"
#include"stdlib.h"
#defineN1000
structhuiyuan/*定义会员信息结构体类型*/
{
charnum[100];/*卡号*/
charname[20];/*姓名*/
charID[30];/*身份证号*/
chartel[30];/*电话号码*/
floatfen;/*积分*/
charg[10];/*记录改卡是否已挂失*/
}huiyuan[100];
/*自定义函数*/
voidmenu();/*菜单函数*/
voidenter();/*输入函数*/
voidsearch();/*查找函数*/
voidguashi();/*挂失函数*/
voidbuy();/*购书函数*/
voidmodify();/*修改函数*/
voidoutput();/*显示所有数据函数*/
voidadd();/*添加信息函数*/
voidinput(inti);
voidprintf_back();
voidprintf_out(inti);
voidprintf_face();
floatbuy_money(floatadd);
floatMoney();
intmodify_data(inti);
intsave(intn);/*保存数据函数*/
intload();/*读取数据函数*/
main()/*主函数*/
{
menu();
getch();
}
voidmenu()/*菜单函数*/
{
intn,w1;
clrscr();
do/*显示菜单*/
{
printf("\t\t================================================\n\n");
printf("\t\t================================================\n\n");
printf("\t\t=================WELCOM!
===================\n\n");
printf("\t\t***1.............Enternewinformation***\n\n");
printf("\t\t***2.............................buy***\n\n");
printf("\t\t***3........................Searchordeleteormodify***\n\n");
printf("\t\t***4............................modify***\n\n");
printf("\t\t***5............................guashi***\n\n");
printf("\t\t***6............................xianshi***\n\n");
printf("\t\t***7..............................adddata***\n\n");
printf("\t\t***8..............................Exit***\n\n");
printf("\t\t================================================\n\n");
printf("\t\t================================================\n\n");
printf("\nChooseyournumber(1-8):
[]\b\b");/*选择菜单*/
scanf("%d",&n);
if(n<1||n>8)
w1=1;
elsew1=0;
}
while(w1==1);
switch(n)
{
case1:
enter();break;
case2:
buy();break;
case3:
search();break;
case4:
modify();break;
case5:
guashi();break;
case6:
output();break;
case7:
add();break;
case8:
exit(0);
}}
voidenter()/*输入函数*/
{
inti,n;
printf("Howmanypeopledoyouwanttoadd(0-%d)?
:
",N-1);
scanf("%d",&n);
printf("\nEnterdatanow\n\n");
for(i=0;i{
printf("\nInput%dthpeoplerecord.\n",i+1);
input(i);/*调用子函数*/
}
if(i!
=0){
save(n);}
printf_face();/*显示刚刚输入的所有信息*/
for(i=0;i{
printf_out(i);}
printf_back();
}
voidsearch()/*查找函数*/
{
inti,n,k,w1=1,w2,w3,w4,m,a;
structhuiyuanp;
n=load();
do
{
printf("\n\nWhichwaydoyouwanttochoose?
\n\t1).ByID2).Bynum[]\b\b");
scanf("%d",&m);
switch(m)
{
case1:
/*按身份证查找*/
do
{k=-1;
printf("\n\nEnterdanweithatyouwanttosearch!
ID.");
scanf("%s",p.ID);
printf_face();
for(i=0;iif(strcmp(p.ID,huiyuan[i].ID)==0)
{k=i;
printf_out(k);break;/*显示该卡信息*/
}
if(k==-1)
{printf("\n\nNOexist!
please");/*该卡不存在*/
printf("\n\nAreyouagain?
\n\t1).again2).NOandback[]\b\b");
scanf("%d",&w1);
if(w1==2)
printf_back();
}
}
while(k==-1&&w1==1);break;
case2:
/*按卡号查找*/
do
{k=-1;
printf("\n\nEnternumthatyouwanttosearch!
num.");
scanf("%s",p.num);
printf_face();
for(i=0;iif(strcmp(p.num,huiyuan[i].num)==0)
{k=i;
printf_out(k);break;/*显示该卡信息*/
}
if(k==-1)/*该卡不存在*/
{printf("\n\nNOexist!
please");
printf("\n\nAreyouagain?
\n\t1).again2).NOandback[]\b\b");
scanf("%d",&w1);
if(w1==2)
printf_back();
}
}
while(k==-1&&w1==1);break;
}
w4=0;w3=0;
if(k!
=-1)
{printf("\n\nWhatdoyouwanttodo?
\n\t1).Search2).Modify3).Delete4).Backmenu[]\b\b");
scanf("%d",&w2);
switch(w2)
{case2:
w3=modify_data(k,n);break;
case3:
{printf("\nAreyousure?
\n\t1).Sure2).Noandback[]\b\b");/*删除函数*/
scanf("%d",&w4);
if(w4==1)
for(a=k;a{strcpy(huiyuan[a].num,huiyuan[a+1].num);/*删除信息*/
strcpy(huiyuan[a].name,huiyuan[a+1].name);
strcpy(huiyuan[a].ID,huiyuan[a+1].ID);
strcpy(huiyuan[a].fen,huiyuan[a+1].fen);
strcpy(huiyuan[a].g,huiyuan[a+1].g);
strcpy(huiyuan[a].tel,huiyuan[a+1].tel);
}break;}
}if(w4==1)
if(w3==1||w4==1)
{save(n);
printf("\n\nSuccessful.^_^.");
printf("\n\nWhantdoyouwanttodo?
\n\t1).Searchanother2).Back[]\b\b");
scanf("%d",&w2);
}
}
}
while(w2==1);
menu();
}
voidmodify()/*修改函数*/
{structhuiyuanp;
FILE*fp;
inti,n,k,w0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();/*显示所有卡信息*/
for(i=0;i{if((i!
=0)&&(i%10==0))
{printf("\n\nRememberNO.whichneededmodify.passanykeytocontiune...");
getch();
puts("\n\n");
}
printf_out(i);
}
do
{printf("\n\nEnterNO.thatyouwanttomodify!
NO.:
");/*选择序号*/
scanf("%s",p.num);
for(i=0;iif(strcmp(p.num,huiyuan[i].num)==0)
{k=i;
p=huiyuan[i];
}
if(k==-1)printf("\n\nNOexist!
pleaseagain");/*判断是否存在该卡*/
}while(k==-1);
printf_face();
printf_out(k);
w1=modify_data(k,n);/*调用修改数据子函数*/
if(w1==1)
{printf("\nSuccessful^_^.\n\nAreyoumodifyanother?
\n\n\t1).Yes2).Backwithsave\t[]\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0;
if(w2==1)
huiyuan[k]=p;
}
if(w0!
=1&&w2==1)
save(n);/*保存信息*/
}while(w0==1);
menu();
}
voidguashi()/*挂失函数*/
{intn,i,x;
charID,a,num;
n=load();
printf("Enter1).ID2).num[]\b\b");
scanf("%d",&x);
switch(x)
{case1:
{printf("\nEnterID/*用身份证挂失*/
scanf("%s",ID);
printf_face();
for(i=0;iif(strcmp(huiyuan[i].ID,ID)==0){
printf_out(i);
printf("\nAresuer(y/n):
[]\b\b");
scanf("%s",a);
if(strcmp(a,"y")==0)/*判断是否为挂失*/
strcpy(huiyuan[i].g,"diu");
}break;}
case2:
{printf("\nEnternum:
");/*用卡号挂失*/
scanf("%s",num);
printf_face();
f