#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<conio.h>
#include<ctype.h>
#include<windows.h>
struct person
{
int num;
char name[20];
int password;
double money;
int status;
} user[1000];
int N=0;
int n;
void readfile(); //用于将文件中的数据读入到数组中来进行处理
void writefile(); //用于将修改后的数据写入文件
void savemoney(); //存款
void withdraw(); //取款
void searchmoney(); //查询
void transferaccount();//转账
void reportloss(); //挂失
void cancelloss(); //解挂
void destroyaccount(); //销户
void changepassword(); //改密
int search(); //用于查找输入的账号是否存在
void MainMenu(); //是整个程序的驱动,便于用户进行选择业务
int inputpassword();
double inputmoney();
int main()
{
int j;
system("title 中国银行");
system("color 1E");
printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("\t\t\t\t欢迎进入中国银行系统!\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
printf("正在登录,请稍后...\n");
printf("===============================================================================\r");
for(j=0; j<80; j++)
{
Sleep(50);
printf(">");
}
system("cls");
readfile();
MainMenu();
writefile();
return 0;
}
void MainMenu()
{
int m;
printf("\t\t *******************************\n");
printf("\t\t * 1.登录 *\n");
printf("\t\t * 2.注册 *\n");
printf("\t\t *******************************\n");
printf("输入操作:");
scanf("%d",&m);
if(m==1)
{
int num,pass,t=3,f;
do
{
printf("请输入您的账号:");
scanf("%d",&num);
n=search(num);
if(n<0)
{
printf("该账号不存在!\n");
}
else
{
do
{
printf("请输入密码:");
pass=inputpassword();
if(pass!=user[n].password)
{
t--;
if(t==0)
{
printf("您已输错了三次密码!");
break;
}
printf("密码输入错误,您还有%d次机会",t);
}
else
{
f=1;
break;
}
}
while(t);
break;
}
}
while(1);
if(f==1)
{
int choice;
do
{
printf("\t\t *******************\n");
printf("\t\t * 1.存款 2.取款 * \n\n");
printf("\t\t * 3.查询 4.转账 * \n\n");
printf("\t\t * 5.挂失 6.解挂 * \n\n");
printf("\t\t * 7.销户 8.改密 * \n\n");
printf("\t\t * 9.退出 *\n\n");
printf("\t\t *******************\n");
printf("请输入要办理的业务:");
scanf("%d",&choice);
if(choice>=0&&choice<=9)
{
switch(choice)
{
case 1:
readfile();
savemoney();
writefile();
break;
case 2:
readfile();
withdraw();
writefile();
break;
case 3:
readfile();
searchmoney();
writefile();
break;
case 4:
readfile();
transferaccount();
writefile();
break;
case 5:
readfile();
reportloss();
writefile();
break;
case 6:
readfile();
cancelloss();
writefile();
break;
case 7:
readfile();
destroyaccount();
writefile();
break;
case 8:
readfile();
changepassword();
writefile();
break;
case 9:
printf("欢迎您再来!\n");
}
}
}
while(choice!=9);
}
}
int f;
if(m==2)
{
int num,i,j,choice;
int pass1,pass2;
char name[20];
double money;
user[N].num=N+100001;
printf("您的开户账号为:%d\n",user[N].num);
printf("请输入您的姓名:");
scanf("%s",name);
printf("请输入6位数字开户密码:");
pass1=inputpassword();
fflush(stdin);
printf("请再次输入密码:");
pass2=inputpassword();
if(pass1==pass2)
{
strcpy(user[N].name,name);
user[N].password=pass1;
user[N].money=0;
user[N].status=0;
N++;
printf("注册成功!\n");
f=1;
}
else
{
printf("\n两次输入密码不同,开户失败!\n");
}
}
if(f==1)
{
int choice;
do
{
printf("\t\t *******************\n");
printf("\t\t * 1.存款 2.取款 * \n\n");
printf("\t\t * 3.查询 4.转账 * \n\n");
printf("\t\t * 5.挂失 6.解挂 * \n\n");
printf("\t\t * 7.销户 8.改密 * \n\n");
printf("\t\t * 9.退出 *\n\n");
printf("\t\t *******************\n");
scanf("%d",&choice);
if(choice>=0&&choice<=9)
{
switch(choice)
{
case 1:
savemoney();
break;
case 2:
withdraw();
break;
case 3:
searchmoney();
break;
case 4:
transferaccount();
break;
case 5:
reportloss();
break;
case 6:
cancelloss();
break;
case 7:
destroyaccount();
break;
case 8:
changepassword();
break;
case 9:
printf("欢迎您再来!\n");
}
}
}
while(choice!=9);
}
}
void readfile()
{
FILE *fp;
int i = 0;
if ((fp=fopen("account.txt", "r"))==NULL)
{
printf("error open!");
exit(0);
}
while(fscanf(fp,"%d %s %d %lf %d",&user[i].num, user[i].name, &user[i].password, &user[i].money,&user[i].status ) != EOF)
{
i++;
}
N = i;
fclose(fp);
}
void writefile()
{
FILE *fp;
int i=0;
if ((fp=fopen("account.txt", "w"))==NULL)
{
printf("error open!");
exit(0);
}
for(i=0; i<N; i++)
fprintf(fp,"%d %s %d %f %d\n",user[i].num, user[i].name, user[i].password, user[i].money,user[i].status);
fclose(fp);
}
int inputpassword()
{
char a[10];
int pass=0;
int i;
while(1)
{
for(i=0; i<6; i++)
{
a[i]=getch();
putchar('*');
if(a[i]>='0'&&a[i]<='9')
pass=pass*10+a[i]-'0';
else if(a[i]=='\b') //当遇到退格键不做处理
{
printf("\b \b");
i--;
}
else
{
pass=0;
break; //退出for循环后,再次接受
}
}
fflush(stdin); //清除键盘缓存区中已经有的输入
printf("\n");
if(pass==0) //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
{
printf("密码要求全为数字,且不能全0!\n");
printf("请重新输入密码: ");
}
else
break;
}
return pass;
}
double inputmoney()
{
char a[100];
double money=0;
int i,f,t;
while(1)
{
f=1;
for(i=0; i<100; i++)
{
scanf("%c",&a[i]);
if(a[i]>='0'&&a[i]<='9')
money=money*10+a[i]-'0';
else if(a[0]=='\n')
{
f=0;
break;
}
else if(a[i]=='\n')
{
t=0;
break;
}
else
{
f=0;
break; //退出for循环后,再次接受
}
}
fflush(stdin); //清除键盘缓存区中已经有的输入
if(f==0) //此条件成立可能由两种情况引起:输入了非数字字符被直接重置为0,或6位全0后正常退出for循环
{
printf("金额要求全为数字!\n");
printf("请重新输入金额:");
}
else if(t==0)
break;
}
return money;
}
void savemoney()
{
double money;
printf("您的姓名为:%s\n",user[n].name);
printf("请输入要存入的金额,存款下限为100,上限为100000000000:");
do
{
fflush(stdin);
money=inputmoney();
if(money>100000000000)
{
printf("存款金额超过上限!\n");
printf("请重新输入金额:");
}
else if(money<100)
{
printf("存款金额低于下限\n");
printf("请重新输入金额:");
}
else
{
user[n].money+=money;
printf("存款成功!\n");
break;
}
}
while(1);
}
void searchmoney()
{
printf("您的姓名为:%s\n",user[n].name);
if(user[n].status==0)
printf("您的账户余额为:%.2f,并且您的账户状态正常!\n",user[n].money);
else if(user[n].status==1)
printf("您的账户余额为:%.2f,并且您的账户处于挂失状态!\n",user[n].money);
else if(user[n].status==2)
printf("您的账户已注销!\n");
}
void withdraw()
{
double money;
printf("您的姓名为:%s\n",user[n].name);
if(user[n].status==0)
{
do
{
fflush(stdin);
printf("请输入要取款的金额:");
money=inputmoney();
if(money>user[n].money)
{
printf("余额不足,无法取款!\n");
}
else
{
user[n].money-=money;
printf("取款成功!您的账户余额为:%.2f\n",user[n].money);
break;
}
}
while(1);
}
else if(user[n].status==1)
{
printf("您的账户已挂失,无法取款!\n");
}
else if(user[n].status==2)
{
printf("您的账户已注销!\n");
}
}
void transferaccount()
{
int num2,n2;
double money;
printf("请输入转出账户的账号:");
scanf("%d",&num2);
n2=search(num2);
if(n2<0)
printf("账号不存在,无法转账!\n");
else
{
if(user[n].status==0)
{
do
{
printf("请输入要转账的金额:");
fflush(stdin);
money=inputmoney();
if(money>user[n].money)
printf("账户余额不足!\n");
else
{
user[n].money-=money;
printf("转账成功!您的账户余额为:%.2f\n",user[n2].money);
break;
}
}
while(1);
}
else if(user[n].status==1)
{
printf("该账户已挂失,无法转账!\n");
}
else if(user[n].status==2)
{
printf("该账户已注销!\n");
}
}
}
void reportloss()
{
if(n<0)
printf("账号不存在,无法挂失!\n");
else
{
printf("您的姓名为:%s\n",user[n].name);
if(user[n].status==0)
{
user[n].status=1;
printf("挂失成功!\n");
}
else if(user[n].status==1)
{
printf("您的账户已处于挂失状态,无须挂失!\n");
}
else if(user[n].status==2)
{
printf("您的账户已注销!\n");
}
}
}
void cancelloss()
{
if(n<0)
printf("账号不存在,无法取消挂失!\n");
else
{
printf("您的姓名为:%s\n",user[n].name);
if(user[n].status==1)
{
user[n].status=0;
printf("取消挂失成功!\n");
}
else if(user[n].status==0)
{
printf("您的账户处于正常状态!\n");
}
else if(user[n].status==2)
{
printf("您的账户已注销!\n");
}
}
}
void changepassword()
{
int pass1,pass2;
if(n<0)
printf("账号不存在,无法修改密码!\n");
else
{
printf("您的姓名为:%s\n",user[n].name);
if(user[n].status==0)
{
printf("请输入新的密码:");
pass1=inputpassword();
printf("请再次输入密码:");
pass2=inputpassword();
if(pass1==pass2&&user[n].status==0)
{
user[n].password=pass1;
printf("改密成功!");
}
}
else if(user[n].status==1)
{
printf("您的账户处于挂失状态,无法改密!\n");
}
else if(user[n].status==2)
{
printf("您的账户已注销!\n");
}
}
}
void destroyaccount()
{
char ch;
if(n<0)
printf("账号不存在,无法销户!\n");
else
{
if(user[n].status==0)
{
printf("您确定要销户?(y/n)");
if(ch=='y')
{
user[n].status=2;
printf("销户成功!\n");
}
else
printf("操作已取消!\n");
}
else if(user[n].status==1)
{
printf("您的账户已挂失,无法注销!\n");
}
else if(user[n].status==2)
{
printf("您的账户已注销!\n");
}
}
}
int search(int num)
{
int n=-1,i;
for(i=0; i<N; i++)
{
if(user[i].num==num)
{
n=i;
break;
}
}
return n;
}
C语言项目—银行储蓄系统
最新推荐文章于 2024-01-13 21:29:14 发布