/*
银行系统。
包括
1.开户 2.存款
3.取款 4.销户
5.查询 6.改密
7.转账 8.退出
9.挂失 0.解挂
功能!
用户名jilina
密码 123456!
*/
#include <iostream>
#include <fstream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <iomanip>
using namespace std;
//银行中最大的账户数量
#define MAXACCOUNTNUMBER 20000
//银行卡的开号初始值
#define INITNUMBER 10001
struct Account
{
long accNumber; //卡号
char accName[20]; //户主
char accPwd[10]; //密码
double balance; //余额
char flag[6]; //卡的状态
};
//银行中所有卡
Account array[MAXACCOUNTNUMBER];
int size=0;
void welcome();
//主界面
void mainFrame();
//生成银行中自增卡号
long autoCreament();
//开户
void openAccount();
//存款
void deposit();
//鉴定密码
void chaxunmima(char Pwd[]);
//输出指定卡的信息
void printAccount(Account acc);
//查询当前的余额
void bid();
//相应的取款
void withdrawal();
//改密
void gai();
//销户
void closed();
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);
//转账
void move();
//保存数据:
void Save();
//登入文件
void login();
void read(); //读文件
void missing(); //挂失
void finding(); //解挂
int panjine(double money);//不能存负的或取负的
int main()
{
//欢迎界面
welcome();
login();
return 0;
}
//欢迎界面
void welcome()
{
read();//读入文件!!
//移动到屏幕中间
cout<<'\t'<<'\t'<<'\t'<<"+----------------------------------+"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"| |"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"| 欢迎登陆银行系统 |"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"| |"<<endl;
cout<<'\t'<<'\t'<<'\t'<<"+----------------------------------+"<<endl;
}
//主菜单
void mainFrame()
{
int order;
cout<<endl;
cout<<'\t'<<"*-----------------------------*"<<endl;
cout<<'\t'<<"* 1.开户 2.存款 *"<<endl;
cout<<'\t'<<"* 3.取款 4.销户 *"<<endl;
cout<<'\t'<<"* 5.查询 6.改密 *"<<endl;
cout<<'\t'<<"* 7.转账 8.退出 *"<<endl;
cout<<'\t'<<"* 9.挂失 0.解挂 *"<<endl;
cout<<'\t'<<"*-----------------------------*"<<endl;
cout<<endl<<"请输入操作指令: ";
cin>>order;
switch(order)
{
case 1:
openAccount();
break;
case 2:
deposit();
break;
case 3:
withdrawal();
break;
case 4:
closed();
break;
case 5:
bid();
break;
case 6:
gai();
break;
case 7:
move();
break;
case 8:
cout<<endl<<"祝您心情愉快!"<<endl;
cout<<endl<<"欢迎您下次使用!"<<endl;
cout<<endl;
exit(1);
break;
case 9:
missing();
break;
case 0:
finding(); //解挂();
break;
default:
cout<<endl;
cout<<"您输入的指令有误! 系统退出!"<<endl;
cout<<endl;
exit(1);
break;
}
}
//创建账户
void openAccount()
{
int pan;
cout<<endl<<"请输入户主:";
cin>>array[size].accName;
fflush(stdin);
cout<<endl<<"请输入六位数字密码:";
cin>>array[size].accPwd;
fflush(stdin);
chaxunmima(array[size].accPwd);
cout<<endl<<"请输入开户金额:";
cin>>array[size].balance;
pan=panjine(array[size].balance);
if(pan==0)
{
cout<<"金额错误!";
mainFrame();
}
else
{
fflush(stdin);
//
strcpy(array[size].flag,"正常");
//写卡号
array[size].accNumber=autoCreament();
printAccount(array[size]);
Save();
size++;
cout<<endl<<"开户成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
//密码的鉴定
void chaxunmima(char Pwd[])
{
int i;
char a[7];
if(strlen(Pwd)!=6)
{
cout<<endl<<"不是六位数字密码!请重新输入!"<<endl;
cout<<endl<<"密码错误,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"请您再次输入:";
for(i=0;i<6;i++)
{
cin>>a[i];
}
a[6]='\0';
for(i=0;i<6;i++)
{
if(a[i]<48||a[i]>57)
{
cout<<endl<<"不是六位数字密码!请重新输入!"<<endl;
cout<<endl<<"密码错误,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
if(strcmp(a,Pwd)==0)
{
cout<<endl<<"创建密码完成!"<<endl;
}
else
{
cout<<endl<<"前后密码输入不一致,请重新操作!"<<endl;
cout<<endl<<"密码错误,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
//实现卡号的涨
long autoCreament()
{
if(size==0)
{
return INITNUMBER;
}
else
{
return array[size-1].accNumber+1;
}
}
//输出指定卡的信息
void printAccount(Account acc)
{
cout<<endl;
cout<<"|----------------------------------------|"<<endl;
cout<<setiosflags(ios::left)<<"|"<<setw(8)<<"卡号"<<setw(8)<<"户主"<<setw(8)<<"密码"<<setw(8)<<"金额"<<setw(8)<<"状态"<<"|"<<endl;
cout<<setiosflags(ios::left)<<"+----------------------------------------+"<<endl;
cout<<setiosflags(ios::left)<<"|"<<setw(8)<<acc.accNumber<<setw(8)<<acc.accName<<setw(8)<<"正常"<<setw(8)<<acc.balance<<setw(8)<<acc.flag<<"|"<<endl;
cout<<"|----------------------------------------|"<<endl;
}
/*根据卡号查找卡的下标
* 若返回值>=0,卡号是正确
* 若返回值=-1,卡号有误
*/
int searchAccount(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++)
{
if(array[i].accNumber==accNumber&&strcmp(array[i].flag,"销户")!=0)
{
//找到了这张卡
pos=i;
break;
}
}
return pos;
}
//存款
void deposit()
{
long accNum;//存款的账号
double money;//存款的金额
int pos,pan;
cin.sync();
cout<<endl<<"请输入存款的账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(pos==-1)
{
//卡号有误
cout<<"卡号不存在,请重新操作"<<endl;
//...
deposit();
}
else
{
cout<<endl<<"请输入存款金额:";
cin>>money;
pan=panjine(money);
if(pan==0)
{
cout<<"存款金额错误!";
mainFrame();
}
else
{
//展示下存款前卡的信息
cout<<endl<<"存款前卡的信息:"<<endl;
printAccount(array[pos]);
//找到了该卡号所对应的卡
array[pos].balance+=money;
//展示存款后卡的信息
Save();
cout<<endl<<"存款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<endl<<"存款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
//查询余额
void bid()
{
int i;
char a[7];
int size,accNumber;
cout<<endl<<"请输入您要查询的卡号:";
cin>>accNumber;
size=searchAccount(accNumber);
if(size==-1)
{
cout<<"查无此卡!";
mainFrame();
}
else
{
cout<<endl<<"请输入您的密码:";
for(i=0;i<6;i++)
{
cin>>a[i];
}
a[6]='\0';
if(strcmp(a,array[size].accPwd)==0)
{
printAccount(array[size]);
cout<<endl<<"查询成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
//取款
void withdrawal()
{
char key[7];
int money,size,accNumber,pan1,i;
cout<<endl<<"请输入您的卡号:";
cin>>accNumber;
//寻找该卡号
size=searchAccount(accNumber);
if(size==-1)
{
cout<<"查无此卡!";
mainFrame();
}else
{
if(strcmp(array[size].flag,"挂失")==0)
{
cout<<"此卡已挂失,不允许取款!";
mainFrame();
}else
{
cout<<endl<<"请输入您的密码:";
fflush(stdin);
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accPwd)==0)
{
cout<<endl<<"请输入您要取款的金额:";
cin>>money;
pan1=panjine(money);
if(pan1==0)
{
cout<<"取款金额错误!";
mainFrame();
}else
{
//展示下存款前卡的信息
cout<<endl<<"取款前卡的信息:"<<endl;
printAccount(array[size]);
//找到了该卡号所对应的卡
if(array[size].balance<money)
{
cout<<endl<<"您的账户余额不足,无法取款!"<<endl;
cout<<endl<<"取款失败,按任意键返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}else
{
array[size].balance-=money;
Save();
//展示存款后卡的信息
cout<<endl<<"取款后卡的信息:"<<endl;
printAccount(array[size]);
cout<<endl<<"取款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}else
{
cout<<endl<<"密码有误,请重新操作!"<<endl;
withdrawal();
}
}
}
}
//销户
void closed()
{
char key[7];
int i,size,accNumber;
cout<<endl<<"请输入您要销户的卡号:";
cin>>accNumber;
//寻找该卡号
size=searchAccount(accNumber);
if(size==-1)
{
cout<<"查无此卡!";
mainFrame();
}
else
{
if(strcmp(array[size].flag,"挂失")==0)
{
cout<<"此卡已挂失不允许销户!";
mainFrame();
}
else
{
cout<<endl<<"请输入您的密码:";
fflush(stdin);
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accPwd)==0)
{
cout<<endl<<"销户前卡的信息:"<<endl;
printAccount(array[size]);
strcpy(array[size].flag,"销户");
Save();
cout<<endl<<"销户成功!"<<endl;
printAccount(array[size]);
cout<<"按任意键返回";
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"密码错误,请您慎重销户!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
}
void gai()
{
char key[7],pass[7];
int i,shu,accNumber;
cout<<endl<<"请输入您要改密的卡号:";
cin>>accNumber;
//寻找该卡号
shu=searchAccount(accNumber);
if(shu==-1)
{
cout<<"查无此卡!";
mainFrame();
}
else
{
if(strcmp(array[shu].flag,"挂失")==0)
{cout<<"此卡已挂失不允许改密!";}
else
{
cout<<endl<<"请输入您的密码:";
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[shu].accPwd)==0)
{
cout<<endl<<"请输入六位新密码:";
for(i=0;i<6;i++)
{
cin>>pass[i];
}
pass[6]='\0';
cout<<endl<<"请再次输入六位新密码:";
cin>>array[shu].accPwd;
if(strcmp(pass,array[shu].accPwd)==0)
{
cout<<endl<<"修改密码成功!"<<endl;
Save();
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"前后密码不一致!请重新操作!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
else
{
cout<<endl<<"密码错误!请重新操作!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
}
void move()
{
double money;
char a, key[7];
int i,shu1,shu2,ren,accNumber,pan;
cout<<endl<<"本银行不支持跨行转账!"<<endl;
cout<<endl<<"确认要转账吗?Y or N ?"<<endl;
fflush(stdin);
a=getchar();
if(a=='y'||a=='Y')
{
cout<<endl<<"请输入您的卡号:";
cin>>accNumber;
//寻找该卡号
shu1=searchAccount(accNumber);
if(shu1==-1)
{
cout<<"查无此卡!";
mainFrame();
}
else
{
if(strcmp(array[shu1].flag,"挂失")==0)
{cout<<"此卡已挂失,不允许转账!!!";}
else
{
cout<<endl<<"请输入您的密码:";
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[shu1].accPwd)==0)
{
cout<<endl<<"请输入您要转账的卡号:";
cin>>ren;
shu2=searchAccount(ren);
if(shu2==-1)
{
//卡号有误
cout<<endl<<"卡号不存在,请重新操作"<<endl;
//...
cout<<endl<<"转账失败,按任意键返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"请输入转账的金额:";
cin>>money;
if(array[shu1].balance<money)
{
cout<<endl<<"您的账户余额不足!无法转账!"<<endl;
cout<<endl<<"转账失败,按任意键返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
else
{
pan=panjine(money);
if(pan==0)
{
cout<<"金额输入错误";
mainFrame();
}
else
{
array[shu1].balance-=money;
array[shu2].balance+=money;
Save();
cout<<endl<<"转账完成!谢谢使用!"<<endl;
cout<<endl<<"您当前的账户为:"<<endl;
printAccount(array[shu1]);
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
}else
{
cout<<endl<<"密码不正确!请重新操作!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
}
else
{
cout<<endl<<"谢谢!请按任意键返回!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
//保存文件
void Save()
{
ofstream outfile("银行数据.txt",ios::out);
if(!outfile)
{
cout<<endl<<"open error!"<<endl;
exit(1);
}else
{
for(int i=0;i<=size;i++) //依次写入文件
{
outfile<<array[i].accNumber<<" "<<array[i].accName<<" "<<array[i].accPwd<<" "<<array[i].balance<<" "<<array[i].flag<<endl;
}
}
outfile.close();
}
void login()
{
char bankname[10]="jilina";
char bankpassword[10]="123456";
int i;
for(i=0;i<3;i++)
{
cout<<"请输入用户名:";
char name[10]={0};
cin>>name;
cout<<"请输入密码:";
char password[10]={0};
cin>>password;
if (strcmp(bankname,name)!=0||strcmp(bankpassword,password)!=0)
{
if(i==2)
{
cout<<"您输入的错误次数太多,不允许继续操作!"<<endl;
break;
}
cout<<"用户名或则密码错误请重新输入:" <<endl;
}
else{
mainFrame();
break;
}
}
}
void read()
{ //读文件
ifstream infile("银行数据.txt",ios::in); //文件目标
if(!infile)
{
cerr<<endl<<"open error!"<<endl<<endl;
exit(1);
}
while(infile>>array[size].accNumber>>array[size].accName>>array[size].accPwd>>array[size].balance>>array[size].flag) //依次检索文件
{size++;}
infile.close();
}
void missing()
{
char key[7];
int i,size,accNumber;
cout<<endl<<"请输入您要挂失的卡号:";
cin>>accNumber;
//寻找该卡号
size=searchAccount(accNumber);
if(strcmp(array[size].flag,"挂失")==0)
{
cout<<"您已经挂失,不能再执行此操作!"<<endl;
mainFrame();
}else
{
cout<<endl<<"请输入您的密码:";
fflush(stdin);
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accPwd)==0)
{
cout<<endl<<"挂失前卡的信息:"<<endl;
printAccount(array[size]);
strcpy(array[size].flag,"挂失");
Save();
cout<<"挂失成功!"<<endl;
//Save();
cout<<endl<<"挂失后卡的信息:"<<endl;
printAccount(array[size]);
cout<<"按任意键返回";
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"密码错误!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}
}
void finding()
{
char key[7];
int i,size,accNumber;
cout<<endl<<"请输入您要解挂的卡号:";
cin>>accNumber;
//寻找该卡号
size=searchAccount(accNumber);
if(size==-1)
{
cout<<"查无此卡!";
mainFrame();
}
else
{
if(strcmp(array[size].flag,"挂失")==0)
{
cout<<endl<<"请输入您的密码:";
fflush(stdin);
for(i=0;i<6;i++)
{
cin>>key[i];
}
key[6]='\0';
if(strcmp(key,array[size].accPwd)==0)
{
cout<<endl<<"解挂前卡的信息:"<<endl;
printAccount(array[size]);
strcpy(array[size].flag,"正常");
Save();
cout<<"解挂成功!"<<endl;
printAccount(array[size]);
cout<<"按任意键返回";
fflush(stdin);
getchar();
mainFrame();
}
else
{
cout<<endl<<"密码错误!"<<endl;
cout<<endl<<"按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
}else
{
cout<<"您的卡未挂失!";
cout<<"按任意键返回";
fflush(stdin);
getchar();
mainFrame();
}
}
}
int panjine(double money)//不能存负的或取负的
{
int pan;
if(money<0)
{pan=0;}
else
{pan=1;}
return pan;
}
有无奈有快乐的银行系统----My Love.
最新推荐文章于 2024-10-02 17:08:35 发布