c语言银行卡管理系统.docx
《c语言银行卡管理系统.docx》由会员分享,可在线阅读,更多相关《c语言银行卡管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
![c语言银行卡管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/6/b6da0e60-f52b-4cbe-84cf-0598a72b5388/b6da0e60-f52b-4cbe-84cf-0598a72b53881.gif)
c语言银行卡管理系统
1.题目要求
题目十三:
银行卡管理系统设计
设计银行卡管理系统,系统主要模块:
实现系统内制卡、发卡功能;
实现系统内账户及相关账户管理;
实现卡交易和合法性检查;
实现卡金融交易积分功能;
实现卡报表功能;
数据以文件形式存储。
(提示)
制卡:
指申请一张银行卡,但还没有使用。
发卡:
指该银行卡已经启用。
实现卡交易:
指从卡中取出掉一定的金额。
2.需求分析
structCCard
{
charcardNo[20];//卡号
charname[20];//持卡人姓名
charID[20];//持卡人身份证号码
charpassword[20];//密码
intflag;//标志该卡是否启用(0表示未启用,1表示启用)
floataccount;//账户金额
fntintegral;//积分
}card[M];
(1)制卡指申请一个银行卡。
即建立一个CCard对象,输入信息对其初始化。
(2)账户信息存储到账户信息文件中,当制作一新卡时,就把该新卡追加到账户信息文件。
对账户信息的管理需要实现账户信息查询,用基本的查找算法按卡号对账户信息文件进行查找,并打印输出。
(3)实现卡交易和合法性检查。
用户首先依靠卡号和密码登陆(通过查找账户信息文件,来查看卡号和密码是否正确匹配),输入交易金额,如果account>=输入金额,则输出“交易成功!
”,并更改account=account-输入金额。
否则输出“对不起,您的余额不够!
”。
(4)实现卡金融交易积分功能。
在把积分初始化为0,只需在卡交易的时候,把交易金额取整加到积分上。
(5)实现卡报表功能。
读账户信息文件,分屏输出所有账户的帐号和交易金额
3.总体设计
分析了整个系统之后,根据上面的系统需求分析,可以将这个系统的设计分为如下七大模块:
制卡、发卡、存款、取款、查询账户相关信息、查询账户交易记录、查询全部信息
4.详细设计
#include
#include/*调用字符函数*/
#include
#include/*通用输入输出库*/
#include
#defineM1000
voidmenu();
voidmade();
voidadd();
voidlife();
voidenter();
voidbrowse();
voidhuo(intk);
voidhedui(intk);
voidmenu1(intk);
voidfetch(intk);
voidchange(intk);
voiddeposit(intk);
voidstat_one(intk);
voidprint_one(intj);
intsearch(charh[20]);
intn=0;
structCCard/*定义信用卡结构体*/
{
intnumber;
charcardNO[20];//卡号
charname[20];//持卡人姓名
charID[20];//持卡人身份证号码
charpassword[20];//密码
intflag;//标志该卡是否启用(0表示未启用,1表示启用)
floataccount;//账户金额
intintegal;//积分
}card[M];
voidmenu()/*主菜单*/
{
intv,w1;
do
{
printf("\n\n\n\n");
printf("\t\t<_______________________THEMENU______________________>\n");
printf("\t\t||
(1)制卡操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||
(2)帐号激活||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(3)帐户登录||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(4)报表操作||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(5)退出||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\t请选择操作(1--5):
<>\b\b");
scanf("%d",&v);
if(v<1||v>5)
{
printf("\n\n\t\t**********输入有误!
************");
w1=1;
getchar();
}
elsew1=0;
}
while(w1==1);
switch(v)
{
case1:
made();break;/*制卡操作*/
case2:
life();break;/*账号激活*/
case3:
enter();break;/*账户登录*/
case4:
browse();break;/*报表操作*/
case5:
exit(0);/*退出*/
}
}
voidmain()/*主题*/
{
printf("\n\n\n\n\n\n\n\n\n");
printf("\t\t*********************银行卡管理系统************************\n");
menu();
}
voidmade()/*制卡操作*/
{
inti;
charh[20];
do
{
printf("\n\n\t请输入要申请的号码:
<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
if(strlen(h)!
=6)
{
printf("\n\n\n\t\t**************输入有误,请重新输入***************\n\n");
continue;
}
for(i=0;iif(strcmp(card[i].cardNO,h)==0)
{
printf("\n\n\t\t**********该号码已经存在,请重新输入**********\n\n");
break;
}
}
while(((strlen(h))!
=6)||strcmp(card[i].cardNO,h)==0);
card[n].number=n;
strcpy(card[n].cardNO,h);
strcpy(card[n].name,"***");
strcpy(card[n].ID,"********");
strcpy(card[n].password,"000000");
card[n].flag=0;
card[n].account=0.00;
card[n].integal=0;
printf("\n\n\n\t\t********************制卡成功!
**********************\n\n");
print_one(n);
n++;
add();
menu();
}
voidprint_one(intj)/*显示消息*/
{
printf("\n|----|--------------|----------|----------------|----|----------|----------|");
printf("\n|NO.|姓名|卡号|ID|flag|account|integal|");
printf("\n|----|--------------|----------|----------------|----|----------|----------|");
printf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",
card[j].number,card[j].name,card[j].cardNO,card[j].ID,card[j].flag,card[j].account,card[j].integal);
printf("\n|----|--------------|----------|----------------|----|----------|----------|");
}
voidlife()/*登录*/
{
intk=-1;
charh[20];
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
{
printf("\n\n\t请输入银行卡号码:
<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!
****************\n");
else
{
if(card[k].flag==1)
printf("\n\n\t\t****************该卡已经激活!
*****************\n");
elsehuo(k);
}
}
menu();
}
intsearch(charh[20])
{
inti,k=-1;
for(i=0;iif(strcmp(card[i].cardNO,h)==0)k=i;
return(k);
}
voidhuo(intk)/*激活操作*/
{
charm[20],q[20],p[20];
intx,w2;
do
{
printf("\n\n\t\t是否激活该卡?
(1)是
(2)否\n");
printf("\n\t\t请选择卡号:
<>\b\b");
scanf("%d",&x);
if(x!
=1&&x!
=2)
{w2=1;getchar();}
elsew2=0;
}
while(w2==1);
if(x==1)
{
printf("\n\n\t\t请输入姓名:
<\t\t\t>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",m);
strcpy(card[k].name,m);
printf("\n\n\t\t请输入身份证号码:
<>\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
scanf("%s",q);
strcpy(card[k].ID,q);
printf("\n\n\t\t请输入六位数密码:
<>\b\b\b\b\b\b\b");
scanf("%s",p);
strcpy(card[k].password,p);
card[k].flag=1;
printf("\n\n\n\t\t*******************激活成功!
**********************\n\n");
print_one(k);
add();
}
}
voidenter()/*进入*/
{
intk=-1;
charh[20];
if(n==0)
printf("\n\n\t\t****************请先制卡*********************\n");
else
{
printf("\n\n\t请输入银行卡号码:
<\t\t\t>\b\b\b\b\b\b\b");
scanf("%s",h);
k=search(h);
if(k==-1)
printf("\n\n\t\t\t*****************该号码不存在!
****************\n");
else
{
if(card[k].flag=0)
printf("\n\n\t\t************该卡还未激活,请先激活!
************\n");
else
hedui(k);
}
}
menu();
}
voidhedui(intk)/*验证核对*/
{
intc=0,w3=0;
charp[8];
do
{
printf("\n\n\t\t*******请输入密码:
<>\b\b\b\b\b\b\b");
scanf("%s",p);
if(strcmp(card[k].password,p)!
=0)
{
printf("\n\n\t\t********密码不正确,请重新输入!
**********\n");
continue;
}
else
{
printf("\n\n\t\t**********密码正确!
***********\n");
w3=1;
menu1(k);
}
}
while(w3==0&&c<3);
}
voidmenu1(intk)/*副菜单*/
{
intv,w4;
do
{
printf("\n\n\n");
printf("\t\t<_______________________THEMENU1______________________>\n");
printf("\t\t||
(1)查询||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||
(2)存款||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(3)取款||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(4)修改密码||\n");
printf("\t\t||------------------------------------------------------||\n");
printf("\t\t||(5)返回主菜单||\n");
printf("\t\t||______________________________________________________||\n");
printf("\n\n\t\tChoiceyournumber(1--5):
<>\b\b");
scanf("%d",&v);
if(v<1||v>5)
{w4=1;getchar();}
elsew4=0;
}
while(w4==1);
switch(v)
{
case1:
stat_one(k);break;
case2:
deposit(k);break;
case3:
fetch(k);break;
case4:
change(k);break;
case5:
menu();
}
}
voidstat_one(intk)
{
printf("\n\n\t\t*************操作成功!
***************");
print_one(k);
menu1(k);
}
voidadd()
{
inti;
FILE*fp;
if((fp=fopen("jieguo.txt","wb"))==NULL)
{
printf("\t\tCannotopenthefile\n");
return;
}
for(i=0;iif(fwrite(&card[i],sizeof(structCCard),1,fp)!
=1)
{
printf("\t\terror\n");
return;
}
fclose(fp);
printf("\n\n\n\t\t************成功保存************");
}
voiddeposit(intk)/*存款*/
{
floata=0.00;
printf("\n\n\t\t请输入存款金额:
<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&a);
card[k].account+=a;
printf("\n\n\t\t**********存款成功!
***********");
print_one(k);
add();
menu1(k);
}
voidfetch(intk)/*取款*/
{
floatb=0.00;
printf("\n\n\t\t请输入取款金额:
<\t\t>\b\b\b\b\b\b\b\b\b\b\b");
scanf("%f",&b);
if(b>card[k].account)
printf("\n\n\t\t**********对不起,您的余额不足*************");
else
{
card[k].account-=b;
card[k].integal+=b;
printf("\n\n\t\t**********交易成功***********");
print_one(k);
add();
}
menu1(k);
}
voidchange(intk)/*修改密码*/
{
chara[20],b[20];
printf("\n\n\t\t请输入新六位数密码:
<>\b\b\b\b\b\b\b");
scanf("%s",a);
printf("\n\t\t请再次输入新六位数密码:
<>\b\b\b\b\b\b\b");
scanf("%s",b);
if(strcmp(a,b)==0)
{
printf("\n\n\t\t**********密码修改成功!
*************");
add();
}
else
printf("\n\n\t\t两次密码输入不一致,密码修改失败!
");
menu1(k);
}
voidbrowse()
{
inti;
if(n==0)
printf("\n\n\t\t**********无记录,请先制卡!
***********");
else
{
printf("\n\n\t\t*************操作成功!
**************\n");
printf("\n|----|--------------|----------|----------------|------|----------|----------|");
printf("\n|NO.|姓名|卡号|ID|flag|account|integal|");
printf("\n|----|--------------|----------|----------------|------|----------|----------|");
for(i=0;iprintf("\n|%4d|%14s|%10s|%16s|%4d|%10.2f|%10d|",
card[i].number,card[i].name,card[i].cardNO,card[i].ID,card[i].flag,card[i].account,card[i].integal);
printf("\n|----|--------------|----------|----------------|------|----------|----------|");
}
menu();
}
5.上机操作
(1)主菜单
(2)制卡操作
(3)激活操作
(4)副菜单
(5)修改密码
(6)报表操作