#include <iostream>
#include <string.h>
#include <stdio.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 login(); //登录界面
//主界面
void mainFrame();
//生成银行中自增卡号
long autoCreament();
//开户
void openAccount();
//存款
void deposit();
//取款
void withdrawal();
//查询
void query();
//转账
void transfer();
//销户
void cancelAccount();
//改密
void changepassword();
//输出指定卡的信息
void printAccount(Account acc);
//判断密码是否合法
bool isPassLegal(char pass[]);
//根据卡号查找卡在数组中的下标
int searchAccount(long accNumber);
int main()
{
welcome();//欢迎界面
login();//登录界面
mainFrame();//主菜单
return 0;
}
void welcome()
{
cout<<" +--------------------------------------+"<<endl;
cout<<" * *"<<endl;
cout<<" * 欢迎使用储蓄综合业务平台 *"<<endl;
cout<<" * *"<<endl;
cout<<" +--------------------------------------+"<<endl;
}
void login(){
int i=0;
char name[10],cod[10];
for(i=0;i<3;i++){
cout<<"请输入用户名:";
gets(name);
cout<<"请输入密码:";
gets(cod);
if(strcmp(name,"admin")==0&&strcmp(cod,"admin")==0)
{
break;
}
else
cout<<"用户名或密码输入错误!"<<endl;
}
if(i>=3)
exit(0);
}
void mainFrame()
{
int order;
cout<<"|----------------------------|"<<endl;
cout<<"|-------1.开户---------------|"<<endl;
cout<<"|-------2.存款---------------|"<<endl;
cout<<"|-------3.取款---------------|"<<endl;
cout<<"|-------4.销户---------------|"<<endl;
cout<<"|-------5.查询---------------|"<<endl;
cout<<"|-------6.转账---------------|"<<endl;
cout<<"|-------7.改密---------------|"<<endl;
cout<<"|-------8.退出---------------|"<<endl;
cout<<"|----------------------------|"<<endl;
cout<<"请输入操作指令"<<endl;
cin>>order;
switch(order){
case 1:
openAccount();
break;
case 2:
deposit();
break;
case 3:
withdrawal();
break;
case 4:
cancelAccount();
break;
case 5:
query();
break;
case 6:
transfer();
break;
case 7:
changepassword();
break;
default:
exit(0);
}
}
void openAccount()
{
char pwd[10];
int errornum=0;
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入户主:";
cin>>array[size].accName;
cout<<"请输入密码:";
cin>>array[size].accPwd;
cout<<"请再次输入密码:";
cin>>pwd;
//验证2次输入的密码是否一致
if(strcmp(array[size].accPwd,pwd)==0)
{
//2次密码一致
if(isPassLegal(pwd))
{
cout<<"请输入金额:";//密码是合法
cin>>array[size].balance;
//..
strcpy(array[size].flag,"正常");
//写卡号
array[size].accNumber=autoCreament();
printAccount(array[size]);
size++;
cout<<"开户成功,按任意键返回"<<endl;
break;
}
else
{
cout<<"开户失败,密码必须是纯数字,并且是6-8位"<<endl;
}
}
else
{
cout<<"开户失败,两次输入的密码不一致"<<endl;
}
}
cout<<"按任意键返回主菜单"<<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<<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)<<acc.accPwd<<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){
pos=i;
break;
}
}
return pos; //返回pos;
}
void deposit()//定义存款函数
{
long accNum;//存款的账号
double money;//存款的金额
int pos,errornum=0;
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入存款的账号:";
cin>>accNum;
pos=searchAccount(accNum);
if(strcmp(array[pos].flag,"正常")==0&&pos!=-1){
//卡号正确
cout<<"请输入存款金额:";
cin>>money;
//展示下存款前卡的信息
cout<<"存款前卡的信息:"<<endl;
printAccount(array[pos]);
array[pos].balance+=money;
//展示存款后卡的信息
cout<<"存款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"存款成功!"<<endl;
break;
}else{
cout<<"卡号不存在或已销户,请仔细确认!"<<endl;
}
}
cout<<"按任意键继续!"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
void withdrawal()
{
long accNum;//取款的账号
double money;//取款的金额
int pos,errornum=0;
char pwd[10];
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入取款的账号:";
cin>>accNum;
pos=searchAccount(accNum);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos].accPwd,pwd)==0&&pos!=-1)
{
if(strcmp(array[pos].flag,"正常")==0)
{
cout<<"请输入取款金额:";
cin>>money;
if(array[pos].balance>=money)
{
//展示下取款前卡的信息
cout<<"取款前卡的信息:"<<endl;
printAccount(array[pos]);
array[pos].balance-=money;
//展示取款后卡的信息
cout<<"取款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"取款成功!"<<endl;
break;
}else{
cout<<"您的卡内余额不足!";
break;
}
}else{
cout<<"卡的状态异常!";
}
}
else
{
cout<<"账号或密码输入错误!"<<endl;
}
}
cout<<"按任意键回主菜单:";
fflush(stdin);
getchar();
mainFrame();
}
void query()//定义查询函数
{
long accNum;//账号
int pos,errornum=0;
char pwd[10];
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入您要查询的的账号:";
cin>>accNum;
pos=searchAccount(accNum);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos].accPwd,pwd)==0&&pos!=-1)
{
printAccount(array[pos]);
break;
}
else
{
cout<<"账号或密码输入错误!"<<endl;
}
}
cout<<"按任意键回主菜单:";
fflush(stdin);
getchar();
mainFrame();
}
void transfer()
{
long accNum1,accNum2;
int pos1,pos2,errornum=0;
double money;
char pwd[10];
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入您的账号:";
cin>>accNum1;
pos1=searchAccount(accNum1);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos1].accPwd,pwd)==0&&pos1!=-1)
{
if(strcmp(array[pos1].flag,"正常")==0)
{
//转账前卡的信息
cout<<"转账前卡的信息:"<<endl;
printAccount(array[pos1]);
cout<<"请输入转账金额:";
cin>>money;
cout<<"请输入要转入的账号:"<<endl;
cin>>accNum2;
pos2=searchAccount(accNum2);
if(pos2!=-1&&strcmp(array[pos2].flag,"正常")==0)
{
array[pos1].balance-=money;
array[pos2].balance+=money;
cout<<"转账后卡的信息:"<<endl;
printAccount(array[pos1]);
cout<<"转账成功!";
break;
}else{
cout<<"您输入的账号有误或状态异常,转账失败!"<<endl;
break;
}
}else{
cout<<"卡的状态异常,无法进行操作!";
break;
}
}
else{
cout<<"账号或密码错误!";
}
}
cout<<"按任意键回主菜单:";
fflush(stdin);
getchar();
mainFrame();
}
void cancelAccount()
{
long accNum;//账号
int pos,errornum=0;
char pwd[10];
for(errornum=0;errornum<3;errornum++)
{
cout<<"请输入账号:";
cin>>accNum;
pos=searchAccount(accNum);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos].accPwd,pwd)==0&&pos!=-1)
{
//打印销户前卡的信息
printAccount(array[pos]);
array[pos].balance=0;
strcpy(array[pos].flag,"销户");
printAccount(array[pos]);
cout<<"销户成功!";
break;
}
else
{
cout<<"账号或密码输入错误!"<<endl;
}
}
cout<<"按任意键回主菜单:";
fflush(stdin);
getchar();
mainFrame();
}
void changepassword()
{
long accNum;//账号
int pos,errornum=0;
char pwd[10],pwd1[10],pwd2[10],pwd3[10];
for(errornum=0;errornum<3;errornum++){
cout<<"请输入账号:";
cin>>accNum;
pos=searchAccount(accNum);
cout<<"请输入密码:";
cin>>pwd;
if(strcmp(array[pos].accPwd,pwd)==0&&pos!=-1)
{
if(strcmp(array[pos].flag,"正常")==0)
{
cout<<"请输入原密码:";
cin>>pwd1;
cout<<"请输入新密码:";
cin>>pwd2;
cout<<"请确认新密码:";
cin>>pwd3;
if(strcmp(array[pos].accPwd,pwd1)==0&&strcmp(pwd2,pwd3)==0)
{
if(isPassLegal(pwd2))
{
strcpy(array[pos].accPwd,pwd3);
cout<<"改密成功!"<<endl;
printAccount(array[pos]);//打印改密后卡的信息
break;
}else{
cout<<"密码不合法,改密失败!"<<endl;
}
}else{
cout<<"您输入的密码有误,改密失败!";
}
}else{
cout<<"卡的状态异常,无法操作!";
}
}else{
cout<<"账号或密码输入错误!"<<endl;
}
}
cout<<"按任意键回主菜单:";
fflush(stdin);
getchar();
mainFrame();
}
bool isPassLegal(char pass[])
{
bool flag=true;
int len=strlen(pass),i;
if(len<9&&len>=6){
//满足6-8位
for(i=0;i<len;i++)
{
if(pass[i]<48||pass[i]>57)
{
flag=false;
break;
}
}
}else
{
//不满足6-8位
flag=false;
}
return flag;
}