项目要求:
嗯。。。先说一下大体的思路吧,因为该银行储蓄系统要对已注册的用户进行数据保存,所以要用到文件的内容,当然如果每次用到文件的中的信息的时候都得读文件然后再关闭文件是不是很麻烦的(反正本小博主是见识到了有多麻烦了),而且对已经保存的信息存在很大的不安全性。。所以我们可以把文件内容读出来,放到一个数组中,读完时候关闭文件,只对数组进行更改操作,更改完事之后,再打开文件,将含有新的信息的内容写入文件中,这样我们就单独写个读取文件的函数和保存已更改信息存入文件中的函数(嘿嘿~~是不是很绕口,原谅小编的表达能力管理~~,但我相信你看到下边的代码就明白了)
输入工号界面
主界面
按照相关的提示进行操作 注意:一旦挂失,要想进行操作必须解挂之后才行
//烟台大学 计算机与控制工程学院 *殷会东
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define MAX 10000
void Login_interface();//登陆界面
void Main_interface();//主界面
void Open_account();//开户
void Deposit_money();//存款
void withdraw();//取款
void inquire();//查询
void Report_loss();//挂失
void restore ();//解挂
void Change_password();//修改密码
void Transfer_account();//转账
void Close_account();//销户
//=========================================================================
void printf_interface(long position,float before);//输出状态
long Get_account_id();//银行卡号
int Find_id(long );//查找银行卡
struct Card
{
long idCard;//银行卡号
char name[9];
char password[7];
float money;//余额
int status;//状态 1==正常 0==挂失 -1==冻结
};
typedef struct Card Account;
Account array[MAX];//定义一个数组来存放银行中所有的卡
int size=0;//银行中现有账户的数量
FILE *file;
int writeData();//写数据
int readData();//读数据
long initId=10000001;
int main()
{
int res=readData();
if(res==0)
{
//第一次运行,此时文件还不存在
initId=10000001;
size=0;
}
Login_interface();
return 0;
}
void Login_interface()//登陆界面
{
int username;
char password[7];
int i;
printf("\t\t\t尊敬的用户您好,欢迎使用银行储蓄系统\n\n");
printf("\t|请输入工号:");
scanf("%d",&username);
printf("\t|请输入密码:");
for(i=0; i<1; i++) //将密码以星号表示
{
password[i]=getch();
putch('*');
}
password[1]='\0';
getch();
if(username==5244&&strcmp(password,"1")==0)
{
system("cls");
Main_interface();
}
else
{
printf("工号或密码输入错误,请重新输入\n");
Login_interface();
}
}
void Main_interface()//主界面
{
int order;
printf("\t\t尊敬的用户您好,欢迎使用银行储蓄系统\n\n");
printf("\t\t=================================\n");
printf("\t\t|=1 开户 2 存款===|\n");
printf("\t\t|=3 取款 4 查询===|\n");
printf("\t\t|=5 销户 6 改密===|\n");
printf("\t\t|=7 挂失 8 解挂===|\n");
printf("\t\t|=9 转账 10退出===|\n");
printf("\t\t=================================\n");
printf("请输入操作指令:");
scanf("%d",&order);
switch(order)
{
case 1:
Open_account();//开户 restore ();
break;
case 2:
Deposit_money();//存款
break;
case 3:
withdraw();//取款
break;
case 4:
inquire();//查询
break;
case 5:
Close_account();//销户
break;
case 6:
Change_password();//改密
break;
case 7:
Report_loss ();//挂失
break;
case 8:
restore ();//解挂
break;
case 9:
Transfer_account();
break;
case 10:
exit(0);//退出
break;
default:
printf("指令输入有误,请重新输入:\n");
Main_interface();
break;
}
}
void Open_account()//开户界面
{
char name[9];
char pass1[7],pass2[7];
Account aa;
printf("请输入持卡人姓名:\n");
scanf("%s",name);
printf("请输入密码:\n");
scanf("%s",pass1);
printf("请再次输入密码:\n");
scanf("%s",pass2);
if(strcmp(pass1,pass2)!=0)
{
printf("两次输入的密码不一致,请重新输入\n");
Open_account();//重新回到开户
}
else
{
aa.idCard=Get_account_id();
aa.money=0;
strcpy(aa.name,name);
strcpy(aa.password,pass1);
aa.status=1;
array[size]=aa;
size++;
printf("||**************************************************||\n");
printf("||姓名 |卡号 |余额 |状态|密码 ||\n");
printf("||**************************************************||\n");
printf("||%-9s|%-8ld|%-19.2f|%-4s|%-6s||\n",aa.name,aa.idCard,aa.money,"正常",aa.password);
printf("||**************************************************||\n");
writeData();
printf("开卡成功,返回主界面....\n");
getch();
system("cls");
Main_interface();
}
}
void Deposit_money()//存款界面
{
long idCard;
float money,before;
int position,a;
printf("请输入要存款的卡号:\n");
scanf("%ld",&idCard);
printf("请输入要存款的金额:\n");
scanf("%f",&money);
position=Find_id(idCard);
before=array[position].money;
if(money<0)
{
printf("输入的金额不能小于0,请重新输入\n");
getch();
Deposit_money();
}
else if(position==-1)
{
printf("该卡号不存在,请核对好后重新输入,\n");
getch();
Deposit_money();
}
else if(position>=0)
{
if(array[position].status==1)
{
array[position].money+=money;
system("cls");
printf_interface(position,before);
writeData();
printf("存款成功,继续存款请按1,退出存款请按2\n");
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
Deposit_money();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else if(array[position].status==0)
{
printf("该卡处于销户状态,按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
}
}
void withdraw()//取款界面
{
float amount,before;
long idCard;
int position,a;
char password[7];
printf("请输入卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
withdraw();
}
else if(array[position].status==0)
{
printf("该卡处于销户状态,按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
else
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
printf("请输入取款金额:\n");
scanf("%f",&amount);
if(amount<0)
{
printf("对不起,取款金额不能小于零\n");
withdraw();
}
if(array[position].money-amount<0)
{
printf("对不起,余额不足,继续取款请按1,退出取款请按2\n");
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
withdraw();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else if(array[position].status==1)
{
before=array[position].money;
array[position].money-=amount;
printf_interface(position,before);
printf("取款成功,继续取款请按1,退出取款请按2\n");
writeData();
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
inquire();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
}
else if(strcmp(password,array[position].password)!=0)
{
printf("密码输入错误,请重新输入\n");
system("cls");
withdraw();
}
}
}
void inquire()//查询界面
{
long idCard;
int position,a;
float before;
char password[7];
printf("请输入卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
system("cls");
inquire();
}
else
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
before=array[position].money;
printf_interface(position,before);
printf("查询完毕,继续查询请按1,退出查询请按2\n");
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
inquire();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else
{
printf("密码输入错误,请重新输入\n");
inquire();
}
}
}
void restore() //解挂
{
long idCard;
int position,a;
float before;
char password[7];
printf("请输入要解挂的卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
Report_loss ();
}
else
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
array[position].money=0;
array[position].status=1;
before=0;
printf_interface(position,before);
printf("解挂成功,继续解挂请按1,退出挂失请按2\n");
writeData();
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
Close_account();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else if(strcmp(password,array[position].password)!=0)
{
printf("密码输入错误,请重新输入\n");
Close_account();
}
}
}
void Report_loss ()//挂失
{
long idCard;
int position,a;
float before;
char password[7];
printf("请输入要挂失的卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
Report_loss ();
}
else
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
array[position].money=0;
array[position].status=0;
before=0;
printf_interface(position,before);
printf("挂失成功,继续挂失请按1,退出挂失请按2\n");
writeData();
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
Close_account();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else if(strcmp(password,array[position].password)!=0)
{
printf("密码输入错误,请重新输入\n");
Close_account();
}
}
}
void Close_account()//销户
{
long idCard;
int position,a;
// float before;
char password[7];
printf("请输入要销户的卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
Close_account();
}
else if(array[position].status==0)
{
printf("该卡已经处于挂失状态,按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
else
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
int i=0;
file=fopen("account.txt","w");
if(file==NULL)
{
//打开失败
printf("打开失败\n");
return ;
}
for(i=0; i<size; i++)
{
if(i==position)
{
continue;
i--;
}
if(i==size-1)
{
fprintf(file,"%ld %s %s %.2f %d",array[i].idCard,array[i].name,array[i].password,array[i].money,array[i].status);
}
else
{
fprintf(file,"%ld %s %s %.2f %d\n",array[i].idCard,array[i].name,array[i].password,array[i].money,array[i].status);
}
}
size--;
fclose(file);
printf("销户成功,继续销户请按1,退出销户请按2\n");
scanf("%d",&a);
if(a==1)
{
getch();
system("cls");
Close_account();
}
if(a==2)
{
system("cls");
Main_interface();
}
}
else if(strcmp(password,array[position].password)!=0)
{
printf("密码输入错误,请重新输入\n");
Close_account();
}
}
}
void Change_password()//改密
{
char password[7],passw1[7],passw2[7];
long idCard;
int position;
printf("请输入要修改密码的卡号:\n");
scanf("%ld",&idCard);
position=Find_id(idCard);
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入:\n");
getch();
Change_password();
}
else if(array[position].status==0)
{
printf("该卡处于销户状态,无法改密,请按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
else if(position>=0)
{
printf("请输入原密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
printf("请输入你想修改的密码:\n");
scanf("%s",passw1);
printf("请再次输入密码:\n");
scanf("%s",passw2);
if(strcmp(passw1,passw2)==0)
{
strcpy(array[position].password,passw1);
printf("密码修改成功!请按任意值返回主界面......\n");
writeData();
getch();
system("cls");
Main_interface();
}
}
else
{
printf("密码输入错误,请重新输入\n");
getch();
Change_password();
}
}
}
void Transfer_account()//转账
{
long idCard1,idCard2;
int position,a,b;//a为第一次输入卡号的位置 b--指令
char password[7];
float account,before;
printf("请输入您的卡号:\n");
scanf("%ld",&idCard1);
position=Find_id(idCard1);
a=position;
if(position==-1)
{
printf("卡号输入有误,请核对好后重新输入\n");
getch();
Transfer_account();
}
else if(array[position].status==0)
{
printf("该卡处于销户状态,无法转账,请按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
else if(position>=0)
{
printf("请输入密码:\n");
scanf("%s",password);
if(strcmp(password,array[position].password)==0)
{
printf("请输入您要转账的卡号:\n");
scanf("%ld",&idCard2);
position=Find_id(idCard2);
if(position==-1)
{
printf("卡号不存在,请重新输入");
getch();
system("cls");
Transfer_account();
}
else if(array[position].status==0)
{
printf("该卡处于销户状态,无法转账,请按任意键退出。。。\n");
getch();
system("cls");
Main_interface();
}
else if(position>=0)
{
printf("请输入转账金额:\n");
scanf("%f",&account);
before=array[a].money;
if(account<0)
{
printf("对不起,转账金额不能小于零\n");
Transfer_account();
}
else if(before-account<0)
{
printf("卡号余额不足,继续转账请按1,退出转账请按2\n");
scanf("%d",&b);
if(b==1)
{
system("cls");
Transfer_account();
}
else if(b==2)
{
getch();
system("cls");
Main_interface();
}
}
else
{
array[position].money+=account;
array[a].money-=account;
printf_interface(a,before);
printf("转账成功,继续转账请按1,退出转账请按2\n");
writeData();
scanf("%d",&b);
if(b==1)
{
getch();
system("cls");
Transfer_account();
}
if(b==2)
{
system("cls");
Main_interface();
}
}
}
}
else if(strcmp(password,array[position].password)!=0)
{
printf("密码输入错误,重新输入请按1,退出转账请按2。。。\n");
scanf("%d",&b);
if(b==1)
{
getch();
system("cls");
Transfer_account();
}
if(b==2)
{
system("cls");
Main_interface();
}
}
}
}
//=========================================================================================================================
int Find_id(long idCard)//寻找银行卡
{
int i,position=-1;
for(i=0; i<size; i++)
{
if(array[i].idCard==idCard)
position=i;
}
return position;
}
void printf_interface(long position,float before)
{
printf("||**********************************************************************||\n");
printf("||姓名 |卡号 |账户原有金额 |余额 |状态|密码 ||\n");
printf("||**********************************************************************||\n");
if(array[position].status==1)
{
printf("||%-9s|%-8ld|%-19.2f|%-19.2f|%-4s|%-6s||\n",array[position].name,array[position].idCard,before,array[position].money,"正常",array[position].password);
}
else
{
printf("||%-9s|%-8ld|%-19.2f|%-19.2f|%-4s|%-6s||\n",array[position].name,array[position].idCard,before,array[position].money,"挂失",array[position].password);
}
printf("||**********************************************************************||\n");
}
long Get_account_id()//定义卡号
{
return initId++;
}
int writeData()//将新的信息写入文件中
{
int i;
//打开文件
file=fopen("account.txt","w");
if(file==NULL)
{
//打开失败
return 0;
}
for(i=0; i<size; i++)
{
if(i==size-1)
{
fprintf(file,"%ld %s %s %.2f %d",array[i].idCard,array[i].name,array[i].password,array[i].money,array[i].status);
}
else
{
fprintf(file,"%ld %s %s %.2f %d\n",array[i].idCard,array[i].name,array[i].password,array[i].money,array[i].status);
}
}
fclose(file);
return 1;
}
int readData()//从文件中读数据
{
int i=0;
//打开文件
file=fopen("account.txt","r");
if(file==NULL)
{
//打开失败
return 0;
}
while(!feof(file))
{
//还可以读
fscanf(file,"%ld %s %s %f %d",&array[i].idCard,array[i].name,array[i].password,&array[i].money,&array[i].status);
i++;
size++;
}
initId=array[i-1].idCard+1;
fclose(file);
return 1;
}