C语言实现简易银行卡管理系统
- 用结构体数组存放用户信息
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
#include<windows.h>
#define N 100
struct PERSON
{ char name[N];
char pawd[N];
char id[N];
int num;
int money;
int status;
};
struct PERSON person[N];
struct PERSON record1[N];//记录存款
struct PERSON record2[N];//记录取款
int i,j,jine,num;
int a,b,count1=0,count2=0;
int cunkuanjine[100];
int qukuanjine[100];
功能函数实现个部分功能
void setpawd(char pawd[])//设置密码
{
int i=0;
printf("\t\t\t 请输入您的密码:");
while(1)
{
pawd[i]=getch();
if(pawd[i]!='\r')
{
printf("*");
++i;
}
else break;
}
printf("\n");
if(i>6||i<6)
{
printf("\t\t\t 您输入的密码格式错误,请重新输入!\n");
setpawd(pazwd);
}
pawd[i]='\0';
}
void put_id(char id[])//输入身份证号
{
int i=0;
printf("\t\t\t 请输入您的身份证号码(号码个数应为18位):");
while(1)
{
id[i]=getch();
if(id[i]!='\r')
{
printf("*");
++i;
}
else break;
}
printf("\n");
if(i>18||i<18)//
{
printf("\t\t\t 您输入号码的格式错误,请重新输入!\n");
put_id(id);}
id[i]='\0';
}
int put_num()//输入卡号
{
int z=0;
int m=-1;
// char pswd[100];
for(j=0;j<3;j++)
{
printf("\t\t\t 请输入您的卡号:");
scanf("%d",&num);
for(i=0;i<M;i++)
{
if(person[i].num==num&&person[i].status==0)
{ return m=1;
break;
} }
// break; 执行到rjeturn语句处,整个程序便结束,不会执行下边的break语
printf("\t\t\t 您输入的卡号不存在,请重新输入\n");
}
if(j==3)
{
printf("\t\t\t 您已连续三次输入账号错误!\n");
Sleep(1000);
fflush(stdin);
system("\t\t\t pause");
menu();
}
// urn resultnum=-1;
}
int put_pawd()//输入密码
{ int m=-1;
int z=0;
char pawd[100];
fflush(stdin);
for(j=0;j<3;j++)
{
setpawd(pawd);
for(i=0;i<M;i++)
{
if(strcmp(person[i].pawd,pawd)==0)
{ return m=1;
break;
} }
// break; 执行到rjeturn语句处,整个程序便结束,不会执行下边的break语
printf("\t\t\t 您输入的密码不存在,请重新输入\n");
}
if(j==3)
{
printf("\t\t\t 您已连续三次输入密码错误,系统将在三秒后自动退出!\n\n\n");
for(int i=0;i<3;i++)
{
Sleep(1000);
printf("\t\t\t\t\t %d\r",3-i);
}
}
menu();
//printf("\t\t\t 您输入的密码有误,请重新输入!\n");
}
void kaihu()//开户
{
char id[N];
int k=M;
system("cls");
put_id(id);
printf("\t\t\t 请输入用户姓名: \n");
printf("\t\t\t ");
scanf("%s",person[k].name);
setpawd(person[k].pawd);//设置一个密码
while(1)
{
printf("\t\t\t 请输入初始金额(不少于一元!): \n");
printf("\t\t\t ");
scanf("%d",&jine);
fflush(stdin);
if(jine>=1)
break;
else
printf("\t\t\t 金额不足,请重新输入!\n");
}
person[k].money+=jine;
srand(time(0)); //使每次产生的随机数不同
int m=rand();
person[k].num=m%10000+1000000000;//随机产生的账户
person[k].status=0;
printf("\t\t\t 您的账号为:%d\n",person[k].num);
printf("\t\t\t 开户成功,请牢记您的账户信息:\n ");
printf("\t\t\t 姓名:%s\n\t\t\t 卡号:%d\n\t\t\t 密码:%s\n\t\t\t 余额:%d\n\t\t\t 当前状态:%d\n",person[k].name,person[k].num,person[k].pawd,person[k].money,person[k].status);
printf("\t\t\t 请按任意键返回!");
M++;
getch();
system("cls");
menu();
}
void cunkuan()//存款
{
count1++;
system("cls");
printf("\n\n\n\n\n\n\n");
int y=put_num();
fflush(stdin);
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 请输入存款金额:");
scanf("%d",&jine);
person[i].money+=jine;
printf("\t\t\t 您的余额为:");
printf("%d\n",person[i].money);
for(a=count1-1;a<count1;a++)
{
cunkuanjine[a]=jine;
record1[a].money=person[i].money;
strcpy(record1[a].name,person[i].name);
record1[a].num=person[i].num;
strcpy(record1[a].pawd,person[i].pawd);
}
printf("\t\t\t 存款成功按任意键返回!");
getch();//从键盘上输入一个,不需要回车符号
system("cls");
menu();
}}}
void qukuan()//取款
{
count2++;
system("cls");
printf("\n\n\n\n\n\n");
int y=put_num();
fflush(stdin);
if(y==1)
{
int x=put_pawd();
if(x==1)
{
while(1)
{
printf("\t\t\t 请输入您的取款金额: ");
scanf("%d",&jine);
if(jine>person[i].money)
printf("\t\t\t 您的余额不足,请重新输入!\n");
else
break;
}
person[i].money-=jine;
printf("\t\t\t 您的余额为 :");
printf("%d\n",person[i].money);
for(b=count2-1;b<count2;b++)
{
qukuanjine[b]=jine;
record2[b].money=person[i].money;
strcpy(record2[b].name,person[i].name);
record2[b].num=person[i].num;
strcpy(record2[b].pawd,person[i].pawd);
}
printf("\t\t\t 取款成功,请按任意键返回!");
getch() ;
system("cls");
menu();
}
}}
void guashi() //挂失
{
system("cls");
printf("\n\n\n\n\n\n\n");
int num4,c;
int m;
char a[N+1][100];
memset(a, 0, sizeof(a));
int y=put_num();
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 确认请按Y/y,返回请按N/n\n ");
while(1){
c=getch();
if(c=='N'||c=='n')
{
system("cls");
break;
}
if(c=='Y'||c=='y'){
if(person[i].status==0)
{
person[i].status=1;
printf("\t\t\t 挂失成功 请按任意键返回!\n");
system("cls");break;
c=getch();
system("cls");break;
}
else if(person[i].status==1)
{
printf("\t\t\t 该账户已经处于挂失状态\n");
system("cls");
break;
}
}
}
menu();
}}}
void jiegua()
{ system("cls");
int i=0;
for(i=0;i<M;i++)
{
if(person[i].status==1)
{
person[i].status=0;
for(j=0;j<3;j++)
{
printf("\t\t\t 请输入您的卡号:");
scanf("%d",&num);
if(person[i].num!=num)
{
printf("\t\t\t 您输入的卡号不存在,请重新输入!\n");}
else
{
printf("\t\t\t 恭喜您,解挂成功!\n");
menu();
break;}
// break; 执行到rjeturn语句处,整个程序便结束,不会执行下边的break语
}
if(j==3)
{
printf("\t\t\t 您已连续三次输入账号错误!\n");
person[i].status=1;
}
// urn resultnum=-1;
}}}
void xiaohu()
{ //销户
system("cls");
printf("\n\n\n\n\n\n\n");
int num5,c;
int y=put_num();
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 您确定要注销您的账户?\n \t\t\t 确认请按Y/y,返回请按N/n ");
while(1)
{
c=getch();
if(c=='N'||c=='n')
{
system("cls");
break;
}
if(c=='Y'||c=='y')
{
for(;i<M;i++)
{
person[i].num=person[i+1].num;
strcpy(person[i].name,person[i+1].name);
person[i].money=person[i+1].money;
strcpy(person[i].pawd,person[i+1].pawd);
person[i].status=person[i+1].status;
}
M--;
printf("\n\t\t\t 销户成功 请按任意键返回!\n");
c=getch();
system("cls");break;
}
else printf("\n\t\t\t 输入有误,请重新输入:");
}
menu();
}}}
int zhuanzhang() //转账
{
system("cls");
printf("\n\n\n\n\n\n\n");
int num1,c;
int y=put_num();//就是验证一下卡号
if(y==1)
{
int x=put_pawd();//验证一下密码
if(x==1)
{
printf("\t\t\t 请输入对方卡号:");
scanf("%d",&num1);
for(j=0;j<1000;j++){
if(person[j].num==num1&&person[j].status==0)
break;
if(person[j].num==0||person[j].status==1){
j=0;
printf("\t\t\t 您输入的卡号不存在,请重新输入!\n");
printf("\t\t\t 请输入对方卡号:");
scanf("%d",&num1);
}
}
if(num!=num1){
while(1){
printf("\t\t\t 请输入您的转账金额:");
scanf("%d",&jine);
if(jine>person[i].money)
printf("\t\t\t 您的余额不足,请重新输入!\n");
else break;
}
}
else {
printf("\t\t\t 转账失败,请按任意键返回!");
getch();
system("cls");
return 0;
}
printf("\t\t\t 请确认您的转入用户及转账金额:\n");
printf("\t\t\t 姓名:%s 卡号:%d 金额:%d",person[j].name,person[j].num,jine);
printf("\n\t\t\t 确认转账请按Y/y,返回请按N/n");
while(1){
c=getch();
if(c=='N'||c=='n'){
system("cls");
break;
}
if(c=='Y'||c=='y'){
person[i].money-=jine;
person[j].money+=jine;
printf("\n\t\t\t 转账成功,是否显示您的余额(按Y/y显示余额,按任意键返回)");
c=getch();
if(c=='Y'||c=='y'){
printf("\n\t\t\t 您的余额为:%d",person[i].money);
printf("\n\t\t\t 交易完成 按任意键返回!");
getch();
system("cls");break;
}
else system("cls");break;
}
else printf("\n\t\t\t 输入有误,请重新输入:");
}
c=getch();
menu();
}}}
void change_pawd()//修改密码
{
char pawd[6];
int y = put_num();
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 请输入原密码:");
gets(pawd);
if (strcmp(person[i].pawd, pawd) == 0)
{
// printf("\t\t\t 输入新密码:");
fflush(stdin);
//astrcpy(person[i].pawd,pawd);
// setpawd(pawd);
//strcpy(person[i].pawd,pawd);
gets(person[i].pawd);
if (strlen(person[i].pawd) == 6)
{
printf("\t\t\t 新密码: ");
puts(person[i].pawd);
fflush(stdin);
printf("\t\t\t 提示:新密码设置成功,以后请使用新密码登录!\n");
getch();
}
else
{
strcpy(pawd,person[i].pawd);
system("cls");
printf("\t\t\t 提示:修改失败,原因新密码不符合规定!\n");
getch();
}
}
else
{
system("cls");
printf("\t\t\t 提示:修改失败,原因新密码不符合规定!\n");
getch();
}
fflush(stdin);
menu();
}
}}
void chayu()//查找余额
{
system("cls");//清屏
printf("\n\n\n\n\n\n\n");
int y = put_num();
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 您的余额为:");
printf("%d\n", person[i].money);
printf("\t\t\t 查询成功按任意键返回!\n");
getch();//等待你按下任意键,再继续执行下面的语句
system("cls");
menu();
}}}
void chajiaoyi()//查询用户交易历史
{
int n;
int y=put_num();
if(y==1)
{
int x=put_pawd();
if(x==1)
{
printf("\t\t\t 查询存款记录请输入1\n\t\t\t 查询取款记录请输入2\n\t\t\t 查询存款和取款记录请输入3\n");
scanf("%d",&n);
switch(n)
{
case 1 :{
for(a=0;a<count1;a++)
printf("\t\t\t 存款记录:账号:%d\n姓名:%s\n存款金额: %d\n余额:%d\n",record1[a].num,record1[a].name,cunkuanjine[a],record1[a].money);
}break;
case 2 :{
for(b=0;b<count2;b++)
printf("\t\t\t 取款记录:账号:%d\n姓名:%s\n取款金额:%d\n余额:%d\n",record2[b].num,record2[b].name,qukuanjine[b],record2[b].money);
}break;
case 3 :{
for(a=0;a<count1;a++)
printf("\t\t\t 存款记录:账号:%d\n姓名:%s\n存款金额: %d\n余额:%d\n",record1[a].num,record1[a].name,cunkuanjine[a],record1[a].money);
for(b=0;b<count2;b++)
printf("\t\t\t 取款记录:账号:%d\n姓名:%s\n取款金额:%d\n余额:%d\n",record2[b].num,record2[b].name,qukuanjine[b],record2[b].money);
}break;
}
menu();
}}
}
``
利用文件存储数据
```c
/*读取文件内容*/
void readData()
{
freopen("1.txt", "r", stdin);
int i=0;
while(scanf("%d %s %s %d %d\n",&person[i].num,person[i].name,&person[i].pawd,&person[i].money,&person[i].status)!=EOF) i++;
M=i;
fclose(stdin);
//cin.clear();
freopen("CON", "r", stdin);
}
void writeData()
{
freopen("1.txt","w",stdout);
for(int i=0;i<M;i++)
printf("%d %s %s %d %d\n",person[i].num,person[i].name,person[i].pawd,person[i].money,person[i].status);
fclose(stdout);
}
int main()
{ readData();
menu();
writeData();
return 0;
}