#include <iostream>
#include <string.h>
#include <stdio.h>
#include <iomanip>
#include <cmath>
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 printAccount(Account acc);
//存款
void deposit();
//取款
void drawMoney();
//查询
void balance();
//销户
void closeAccount();
//退出
void tuichu();
//校验密码必须是6-8位,而且是纯数字
bool isPassLegal(char pass[]);
int main()
{
//int array[20];
char loginName[20];
char loginPwd[20];
int i;
//欢迎界面
welcome();
//使用循环语句判断密码是否正确
for(i=0;i<3;i++)
{
cout<<"请输入用户名:";
cin>>loginName;
cout<<"请输入密码:";
cin>>loginPwd;
if(strcmp(loginName,"wangkaiying")==0&&strcmp(loginPwd,"1108ying")==0)
{
mainFrame();
break;
}else{
cout<<"用户名或密码输入错误"<<endl;
}
}
return 0;
}
void welcome()
{
cout<<" "<<"+-------------------------------+"<<endl;
cout<<" "<<"| |"<<endl;
cout<<" "<<"| 欢迎光临储蓄平台 |"<<endl;
cout<<" "<<"| |"<<endl;
cout<<" "<<"+-------------------------------+"<<endl;
}
void mainFrame()
{
int order;
cout<<" +--------------------------------------+"<<endl;
cout<<" | |"<<endl;
cout<<" | 1.存款 2.取款 |"<<endl;
cout<<" | 3.查询 4.开户 |"<<endl;
cout<<" | 5.销户 6.退出 |"<<endl;
cout<<" | |"<<endl;
cout<<" +--------------------------------------+"<<endl;
cout<<"请输入操作指令:"<<endl;
cin>>order;
switch(order){
case 1:
deposit();
break;
case 2:
drawMoney();
break;
case 3:
balance();
break;
case 4:
openAccount();
break;
case 5:
closeAccount();
break;
case 6:
tuichu();
break;
default:
break;
}
}
//开户
void openAccount()
{
char pwd1[10],pwd2[10];
cout<<"请输入户主:";
cin>>array[size].accName;
cout<<"请输入密码:";
cin>>pwd1;
cout<<"请再次输入密码:";
cin>>pwd2;
//验证2次输入的密码是否一致
if(strcmp(pwd1,pwd2)==0){
//2次密码一致
if(isPassLegal(pwd1)){
//密码是合法
//
strcpy(array[size].accPwd,pwd1);
cout<<"请输入金额:";
cin>>array[size].balance;
//..
strcpy(array[size].flag,"正常");
//写卡号
array[size].accNumber=autoCreament();
printAccount(array[size]);
size++;
cout<<"开户成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}else{
cout<<"密码必须是纯数字,并且是6-8位"<<endl;
openAccount();
}
}else{
//2次输入的密码不一致
cout<<"两次输入的密码不一致"<<endl;
openAccount();
}
}
//账号自增
long autoCreament()
{
if(size==0){
return INITNUMBER;
}else{
return array[size-1].accNumber+1;
}
}
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;
}
//输出指定卡的信息
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 searchAccount1(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++){
if(array[i].accNumber==accNumber){
//已找到了这张卡
pos=i;
break;
}
}
return pos;
}
void deposit()
{
long accNum;//存款的账号
double money;//存款的金额
int pos;
cout<<"请输入存款的账号:";
cin>>accNum;
cout<<"请输入存款金额:";
cin>>money;
cout<<endl;
pos=searchAccount1(accNum);
if(pos==-1){
//卡号有误
cout<<"卡号不存在,请确认后重新输入:"<<endl;
deposit();
}else{
//展示下存款前卡的信息
cout<<"存款前卡的信息:"<<endl;
printAccount(array[pos]);
//找到了该卡号所对应的卡
array[pos].balance+=money;
cout<<endl;
//展示存款后卡的信息
cout<<"存款后卡的信息:"<<endl;
printAccount(array[pos]);
cout<<"存款成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
cout<<endl;
}
//取款
/*判断卡是否存在:
*根据卡号查找卡的下标,检验该卡号是否存在。
* 若返回值>=0,卡号正确。
* 若返回值=-1,卡号有误。
*/
int searchAccount2(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++){
if(array[i].accNumber==accNumber){
//已找到了这张卡
pos=i;
break;
}
}
return pos;
}
void drawMoney()
{
long accNum;
double money;
int pos,i;
Account Pwd;
cout<<"请输入卡号:";
cin>>accNum ;
if(accNum<0)
{
cout<<"卡号不能为负!!请认真核实!!!\n";
drawMoney();
}else{
pos=searchAccount2(accNum);
if(pos==-1){
cout<<"卡号不存在!请核!!!\n";
drawMoney();
}else{
for(i=0;i<3;i++)
{
cout<<"请输入密码:";
cin>>Pwd.accPwd;
if(strcmp(array[pos].accPwd,Pwd.accPwd)==0)
{
cout<<"请输入取款金额:";
cin>>money;
if(money<=array[pos].balance)
{
array[pos].balance-=money;
cout<<"取款后的卡的信息:\n";
printAccount(array[pos]);
}else{
cout<<"您的余额不足!请先查询您的余额后再取款!\n";
mainFrame();
}
fflush(stdin);
getchar();
mainFrame();
}else{
if(i==2){
cout<<"您输入已超过三次!请退出系统.\n";
}else{
cout<<"密码错误!请核实后再输入。\n";
}
}
}
}
}
}
//查询
/*判断卡是否存在:
*根据卡号查找卡的下标,检验该卡号是否存在。
* 若返回值>=0,卡号正确。
* 若返回值=-1,卡号有误。
*/
int searchAccount3(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++){
if(array[i].accNumber==accNumber){
//已找到了这张卡
pos=i;
break;
}
}
return pos;
}
void balance()
{
long accNum;//查询的账号
double money;//卡内的金额
int pos;
cout<<"请输入所要查询的账号:";
cin>>accNum;
cout<<endl;
pos=searchAccount3(accNum);
if(pos==-1){
//卡号有误
cout<<"卡号不存在,请确认后重新输入"<<endl;
drawMoney();
}else{
cout<<"所要查询的卡的信息为:"<<endl;
printAccount(array[pos]);
cout<<"查询成功,按任意键返回"<<endl;
fflush(stdin);
getchar();
mainFrame();
}
cout<<endl;
}
//销户
//销户
/*判断卡是否存在:
*根据卡号查找卡的下标,检验该卡号是否存在。
* 若返回值>=0,卡号正确。
* 若返回值=-1,卡号有误。
*/
int searchAccount4(long accNumber)
{
int i,pos=-1;
for(i=0;i<size;i++){
if(array[i].accNumber==accNumber){
//已找到了这张卡
pos=i;
break;
}
}
return pos;
}
//销户
void closeAccount()
{
long accNum;
int pos;
int userAnswer;
int answer;
char wrd[20]={0};
cout<<"请输入您要销户的账号:";
cin>>accNum;
cout<<"请输入账号密码:";
cin>>wrd;
pos=searchAccount4(accNum);
if(pos==-1)
{
//卡号有误
cout<<"卡号不存在,请重新选择您要办理的业务!"<<endl;
mainFrame();
}
else
{
if(strcmp(array[pos].accPwd,wrd)!=0)
{
cout<<"您输入的密码有误!"<<endl;
cout<<"按1继续办理该业务,按其他数字返回!";
cin>>answer;
if(answer==1)
{
closeAccount();
}
else
{
mainFrame();
}
}
else
{
cout<<"确认注销此账户?"<<endl;
cout<<"按1销户,按其他数字返回!";
cin>>userAnswer;
if(userAnswer==1)
{
array[pos].balance=0;
strcpy(array[pos].flag,"销户");
cout<<"销户已成功,按任意键返回!"<<endl;
fflush(stdin);//清除缓存区
getchar();//任意键返回
mainFrame();
}
else
{
cout<<"您已取消销户任务,按任意键返回。"<<endl;
fflush(stdin);//清除缓存区
getchar();//任意键返回
mainFrame();
}
}
}
}
void tuichu()
{
cout<<'\n';
cout<<"谢谢您对储蓄平台的的支持,谢谢光临,再见!";
cout<<'\n';
}