#include <iostream> #include <string.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 withdraw(); //查询 void query(); //销户 void closeAnAccount(); //修改密码 void updatePwd(); //转账 void transferAccount(); //输出指定卡的信息 void printAccount(Account acc); //根据卡号查找卡在数组中的下标 int searchAccount(long accNumber); //用户选择操作 void select(); //检查密码输入是否满足长度 bool isPassLegal(char pass[]); //检查账号状态 void checkstate(int size); int main() { char loginName[20]; char loginPwd[20]; int i; //欢迎界面 welcome(); //.. for(i=0; i<3; i++) { cout<<"请输入用户名:"; cin>>loginName; cout<<"请输入密码:"; cin>>loginPwd; if(strcmp(loginName,"admin")==0&&strcmp(loginPwd,"admin")==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<<" "<<"* 1.开户 | 2.存款 *"<<endl; cout<<" "<<"* 3.取款 | 4.查询 *"<<endl; cout<<" "<<"* 5.转账 | 6.销户 *"<<endl; cout<<" "<<"* 7.修改密码 | 0.退出 *"<<endl; cout<<" "<<"+******************************+"<<endl; cout<<"请输入操作指令:"; cin>>order; switch(order) { case 0: cout<<"谢谢您的使用,欢迎再次光临!"<<endl; break; case 1: openAccount(); break; case 2: deposit(); break; case 3: withdraw(); break; case 4: query(); break; case 5: transferAccount(); break; case 6: closeAnAccount(); break; case 7: updatePwd(); break; default: cout<<"输入有误,请重新输入!"<<endl; break; } } //检查密码输入是否满足长度 bool isPassLegal(char pass[]) { bool flag=true; int len=strlen(pass),i; if(len==6){ //满足6位 for(i=0;i<len;i++){ if(pass[i]<48||pass[i]>57){ flag=false; break; } } }else{ //不满足6-8位 flag=false; } return flag; } void select() { int i; cout<<"继续操作请按 1,退出操作请按 0.:"; cin>>i; switch (i) { case 0: cout<<"谢谢您的使用,欢迎再次光临!"<<endl; break; case 1: mainFrame(); 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; select(); } 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; } } //输出指定卡的信息 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)<<"******"<<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; int i; cout<<"请输入存款的账号:"; cin>>accNum; cout<<"请输入存款金额:"; cin>>money; pos=searchAccount(accNum); for(i=0; i<3; i++) { if(pos==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; cin>>accNum; pos=searchAccount(accNum); } else { //展示下存款前卡的信息 cout<<"存款前卡的信息:"<<endl; printAccount(array[pos]); //找到了该卡号所对应的卡 array[pos].balance+=money; //展示存款后卡的信息 cout<<"存款后卡的信息:"<<endl; printAccount(array[pos]); cout<<"存款成功,请选择是否继续操作。"<<endl; select(); break; } } } //取款 void withdraw() { long accNum;//取款的账号 double money;//取款的金额 char accPwd[6];//取款账号的密码 int pos; cout<<"请输入取款的账号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; withdraw(); } //账号正确 else { cout<<"请输入取款账号的密码:";//验证密码 cin>>accPwd; if(strcmp(array[pos].accPwd,accPwd)==0) { cout<<"请输入取款金额:"; cin>>money; if(array[pos].balance<money) { cout<<"您的余额不足,无法取出!!"<<endl; select(); } else { //展示下取款前卡的信息 cout<<"取款前卡的信息:"<<endl; printAccount(array[pos]); //取款后的余额 array[pos].balance-=money; //展示取款后卡的信息 cout<<"取款后卡的信息:"<<endl; printAccount(array[pos]); cout<<"取款成功,请选择是否继续操作。"<<endl; select(); } } else { cout<<"输入密码有误,本次操作失败,请选择是否继续操作!!"<<endl; select();//返回 } } } //查询 void query() { long accNum;//取款的账号 double money;//取款的金额 char accPwd[6];//取款账号的密码 int pos; cout<<"请输入要查询的账号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; withdraw(); } //账号正确 else { cout<<"请输入要查询账号的密码:";//验证密码 cin>>accPwd; if(strcmp(array[pos].accPwd,accPwd)==0) { cout<<"该卡的信息为:"<<endl; printAccount(array[pos]); cout<<"查询成功,请选择是否继续操作。"<<endl; select(); } else { cout<<"输入密码有误,本次操作失败,请选择是否退出系统!!"<<endl; select();//返回 } } } //销户 void closeAnAccount() { long accNum;//取款的账号 char accPwd[6];//取款账号的密码 int pos; cout<<"请输入要销户的账号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; closeAnAccount(); } //账号存在 else { cout<<"请输入要销户账号的密码:";//验证密码 cin>>accPwd; if(strcmp(array[pos].accPwd,accPwd)==0) { array[pos].balance=0; strcpy(array[pos].flag, "销户"); printAccount(array[pos]); cout<<"销户成功,请选择是否继续操作。"<<endl; select(); } else { cout<<"密码输入有误,本次操作失败,请选择是否继续操作!!"<<endl; select();//返回 } } } //修改密码 void updatePwd() { long accNum;//要修改密码的账号 char accPwd1[10];//原来密码 char accPwd2[10];//重新设置的密码 char accPwd3[10]; int pos; cout<<"请输入要修改密码的账号:"; cin>>accNum; pos=searchAccount(accNum); if(pos==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; updatePwd(); } //账号存在 else { cout<<"请输入该账号的密码:";//验证密码 cin>>accPwd1; if(strcmp(array[pos].accPwd,accPwd1)==0) { cout<<"请输入新密码:"; cin>>accPwd2; cout<<endl; cout<<"请再次输入密码:"; cin>>accPwd3; cout<<endl; if(strcmp(accPwd2,accPwd3)==0) { strcpy(array[pos].accPwd,accPwd2); printAccount(array[pos]); cout<<"修改密码成功,请选择是否继续操作!"<<endl; select(); } else { cout<<"两次密码输入不同,修改密码失败,请重新修改!"<<endl; updatePwd(); } } else { cout<<"输入密码有误,请选择是否继续操作!!"<<endl; select();;//返回 } } } //转账 void transferAccount() { long accNum1;//转出账号 long accNum2;//转入账号 double money;//转款的金额 char accPwd[6];//转出账号的密码 int pos1; int pos2; cout<<"请输入转出账号:"; cin>>accNum1; pos1=searchAccount(accNum1); if(pos1==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; withdraw(); } //账号正确 else { cout<<"请输入取款账号的密码:";//验证密码 cin>>accPwd; if(strcmp(array[pos1].accPwd,accPwd)==0) { cout<<"请输入转出金额:"; cin>>money; if(array[pos1].balance<money) { cout<<"您的余额不足,无法转账!!!"<<endl; withdraw(); } cout<<"请输入转入账号:"; cin>>accNum2; pos2=searchAccount(accNum2); if(pos2==-1) { //卡号有误 cout<<"卡号不存在,请重新输入卡号"<<endl; transferAccount(); } else { //展示下转账前卡的信息 cout<<"转出账号转账前的信息:"<<endl; printAccount(array[pos1]); //展示下转账前卡的信息 cout<<"转入账号转账前的信息:"<<endl; printAccount(array[pos2]); //展示下转账后卡的信息 cout<<"转出账号转账后的信息:"<<endl; //转账后的余额 array[pos1].balance-=money; printAccount(array[pos1]); cout<<"转入账号转账后的信息:"<<endl; //转账后的余额 array[pos2].balance+=money; printAccount(array[pos2]); cout<<"转账成功,请选择是否继续操作。"<<endl; select(); } } else { cout<<"输入密码有误,请选择是否继续操作!!"<<endl; select();;//返回 } } }
运行结果: