#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include<string.h>
#include<ctype.h>
#define upNum 100
int N=0;
typedef struct
{
int account;
char name[10];
char pass[6];
double money;
int state; //0表示正常1表示注销2表示挂失
} bank;
bank n[upNum];
void writeData();
void readData();
int openaccount();
int pass();
int chooseInMenu();
void contest();
void cancel();
void cancelLoss();
void updatePassword();
int main()
{
int a,b,c;
printf("欢迎来到本银行\n");
printf("本银行功能如下\n");
printf(" 1 登录 \n");
printf(" 2 注册 \n");
scanf("%d",&a);
if(a==1)
{
readData();
pass();
contest();
writeData();
}
else if(a==2)
{
readData();
if(openaccount()==1)
{
printf("登录请按1,退出请按其他\n");
scanf("%d",&b);
if(b==1)
{
pass();
contest();
writeData();
}
else
return 0;
}
else
{
printf("重新开户请按1,退出请按0\n");
scanf("%d",&c);
if(c==0)
return 0;
else
openaccount();
printf("请登录\n");
pass();
contest();
writeData();
}
}
return 0;
}
void readData()
{
FILE *fp;
int i=0;
if ((fp=fopen("bank.txt", "r"))==NULL)
{
printf("data file cannot open!");
exit(0);
}
for(i=0; i<N; i++)
{
fscanf(fp,"%d %s %s %lf %d\n",&n[i].account,n[i].name, n[i].pass,&n[i].money,&n[i].state);
}
N=i;
fclose(fp);
}
void writeData()
{
FILE *fp;
int i=0;
if ((fp=fopen("bank.txt", "w"))==NULL)
{
printf("data file cannot open!");
exit(0);
}
for(i=0; i<N; i++)
fprintf(fp,"%d %s %s %f %d\n",n[i].account,n[i].name, n[i].pass,n[i].money,n[i].state);
fclose(fp);
}
int openaccount()
{
FILE *fp;
char ch;
char pass1[100],pass2[100];
if ((fp=fopen("password.txt", "w"))==NULL)
{
printf("password file cannot open!");
exit(0);
}
if(N==upNum)
{
printf("银行用户数已经达到上限,不能再开户");
return 0;
}
printf("请输入账号;");
scanf("%d",&n[N].account);
printf("户主姓名:");
scanf("%s",n[N].name);
printf("请输入密码;");
int i=0;
while((ch=getch())!='\r') //getch在接受输入后,不在屏幕上显示
{
pass1[i++]=ch;
putchar('*'); //接受任何字符,屏幕上只显示*
}
pass1[i]='\0';
fflush(stdin);
printf("\n");
printf("请再次输入;");
i=0;
while((ch=getch())!='\r') //getch在接受输入后,不在屏幕上显示
{
pass2[i++]=ch;
putchar('*'); //接受任何字符,屏幕上只显示*
}
pass2[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(pass1,pass2)==0)
{
fprintf(fp, "%s %s", n[N].name, pass2);
strcpy(n[N].pass,pass1);
n[N].state=0;
printf("存入金额:");
scanf("%lf",&n[N].money);
N++;
printf("开户成功\n");
return 1;
}
else
{
printf("两次密码不一致,未成功开户!\n");
fclose(fp);
return 0;
}
fclose(fp);
}
int pass()
{
int c,j;
char pass1[20];
char ch;
int iTry=3,k=-1;
int right = 0;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k>=0)
{
do
{
printf("请输入密码:");
int i=0;
while((ch=getch())!='\r') //getch在接受输入后,不在屏幕上显示
{
pass1[i++]=ch;
putchar('*'); //接受任何字符,屏幕上只显示*
}
pass1[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass1)==0)
{
right = 1;
break;
}
else
{
iTry--;
printf("密码错误\n");
if(iTry>0)
printf("超过3次将退出,你还可以尝试%d次!\n", iTry);
else
{
printf("对不起,你不能进入系统\n");
}
}
}
while(iTry);
}
else
{
printf("用户不存在请注册\n");
openaccount();
printf("请登录\n");
pass();
}
return right;
}
void cancel()
{
int c;
int k=-1,j;
char pass[20];
char ch;
printf("待销户账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k<0)
{
printf("该用户不存在,销户失败!\n");
}
else
{
printf("请输入密码");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)==0)
{
printf("余额:%.2f 元\n",n[k].money);
printf("确认销户(y/n)?");
if(tolower(getchar())=='y')
{
n[k].state=1;
n[k].money=0;
printf("取款 %.2f 元,销户成功!\n",n[k].money );
}
else
{
printf("你取消了操作,销户失败!\n");
}
fflush(stdin);
}
else
{
printf("输入的密码错误,销户失败!\n");
}
}
}
void save()
{
int j,c,k=-1;
double money;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k<0)
{
printf("该用户不存在,存款失败!\n");
}
else
{
if(n[k].state==0)
{
printf("户主姓名:%s\n",n[k].name);
printf("输入存款额:");
scanf("%lf", &money);
n[k].money+=money;
printf("存款后,您有%.2f元. \n",n[k].money);
}
else if(n[k].state==1)
{
printf("该用户已经销户,存款失败!\n");
}
else
{
printf("该用户处于挂失状态,存款失败!\n");
}
}
return;
}
void withdraw()
{
int k=-1,c,j;
char pass[20],ch;
double money;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k<0)
{
printf("该用户不存在,取款失败!\n");
}
else
{
if(n[k].state==0)
{
printf("户主姓名:%s\n",n[k].name);
printf("请输入密码");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)!=0)
{
printf("输入密码错误,取款失败!\n");
}
else
{
printf("输入取款额:");
scanf("%lf", &money);
if(money>n[k].money) //亲,不玩透支
{
printf("余额不足,取款失败!\n");
}
else
{
n[k].money-=money;
printf("取款后,还有%.2f元. \n",n[k].money);
}
}
}
else if(n[k].state==2)
{
printf("该用户处于挂失状态,取款失败!\n");
}
else
{
printf("该用户已经销户,取款失败!\n");
}
}
return;
}
void showAccount()
{
int k=-1,c,j;
char pass[20],ch;
printf("请输入查询账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k<0)
{
printf("该用户不存在!\n");
}
else
{
if(n[k].state==0)
{
printf("户主姓名:%s\n",n[k].name);
printf("请输入密码");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)!=0)
{
printf("输入密码错误,查询失败!\n");
}
else
{
printf("余额为%f",n[k].money);
}
}
else if(n[k].state==2)
{
printf("该用户处于挂失状态,查询失败!\n");
}
else
{
printf("该用户已经销户,查询失败!\n");
}
}
}
void transferAccounts()
{
int k=-1,c,j,account,m=-1;
char pass[20],ch;
double money;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k>=0)
{
if(n[k].state==0)
{
printf("请输入密码;");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)==0)
{
printf("请输入转入账号;");
scanf("%d",&account);
for(j=0; j<N; j++)
{
if(n[j].account==c)
m=j;
}
if(m>0)
{
printf("请输入转入金额");
scanf("%lf",&money);
n[k].money=n[k].money-money;
n[m].money=n[m].money+money;
}
}
}
else if(n[k].state==2)
{
printf("该用户处于挂失状态,查询失败!\n");
}
else
{
printf("该用户已经销户,查询失败!\n");
}
}
}
void reportLoss()
{
int k=-1,c,j;
char pass[20],ch;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k>=0)
{
if(n[k].state==0)
{
printf("请输入密码;");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)==0)
{
n[k].state=2;
printf("挂失成功\n");
}
}
else if(n[k].state==2)
{
printf("该用户处于挂失状态,无需挂失!\n");
}
else
{
printf("该用户已经销户,挂失失败!\n");
}
}
}
void cancelLoss()
{
int k=-1,c,j;
char pass[20],ch;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k>=0)
{
if(n[k].state==0)
{
printf("该用户没有挂失\n");
}
else if(n[k].state==2)
{
printf("请输入密码;");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)==0)
{
n[k].state=0;
printf("解挂成功\n");
}
}
else
{
printf("该用户已经销户,挂失失败!\n");
}
}
}
void updatePassword()
{
int k=-1,c,j;
char pass[20],pass1[20],pass2[20],ch;
printf("请输入账号:");
scanf("%d",&c);
for(j=0; j<N; j++)
{
if(n[j].account==c)
k=j;
}
if(k>=0)
{
if(n[k].state==0)
{
printf("请输入旧密码;");
int i=0;
while((ch=getch())!='\r')
{
pass[i++]=ch;
putchar('*');
}
pass[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(n[k].pass,pass)==0)
{
i=0;
printf("请输入新密码;");
while((ch=getch())!='\r')
{
pass1[i++]=ch;
putchar('*');
}
pass1[i]='\0';
fflush(stdin);
printf("\n请再次输入");
i=0;
while((ch=getch())!='\r')
{
pass2[i++]=ch;
putchar('*');
}
pass2[i]='\0';
fflush(stdin);
printf("\n");
if(strcmp(pass1,pass2)==0)
{
printf("修改成功\n");
}
else
{
printf("两次密码不相同,修改失败\n");
}
}
}
else if(n[k].state==2)
{
printf("挂失中.请解挂\n");
}
else
{
printf("该用户已经销户,挂失失败!\n");
}
}
}
int chooseInMenu()
{
int i;
while(i)
{
printf("\n");
printf("+----------------------------+\n");
printf("+ 1 退出 2 销户 3 存款 +\n");
printf("+ 4 取款 5 查询 6 转账 +\n");
printf("+ 7 挂失 8 解挂 9 改密 +\n");
printf("+----------------------------+\n");
printf("请输入操作指令:");
scanf("%d", &i);
if(i>=0 && i<=9)
break;
else
printf("请重新选择功能\n\n");
}
return i;
}
void contest()
{
int iChoice; //用于选择系统功能
//办理业务
do
{
iChoice = chooseInMenu(); //从菜单中获得功能代码
switch(iChoice)
{
case 1:
printf("欢迎您再来. \n");
break;
case 2:
cancel();
break;
case 3:
save();
break;
case 4:
withdraw();
break;
case 5:
showAccount();
break;
case 6:
transferAccounts();
break;
case 7:
reportLoss();
break;
case 8:
cancelLoss();
break;
case 9:
updatePassword();
break;
}
}
while(iChoice);
}
一分辛苦一分收获,只有自己一点点的努力才会有成功。抄袭别人的东西虽然可以不用自己动脑努力,但是这却是那么的可耻。加油你的大学不会放弃你。但是如果你自己放弃自己就不会有人能够救活你,不要让自己垂头丧气开开心心过好每一天。
银行系统
最新推荐文章于 2020-03-22 11:40:16 发布