银行项目
来源:互联网 发布:网络经营诽谤 编辑:程序博客网 时间:2024/04/28 05:15
#include<iostream>#include<string.h>#include<stdio.h>#include<iomanip> //后面使用staw()需要用的定义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;const char name[20]="xuewei";//字符串数组定义管理员姓名和密码const char pwd[20]="qiu421";void welcome();//欢迎界面void printaccount(account acc);//账号的表示long autocreament();//账号的累加void openaccount();//开户bool isPassLegal(char pass[]);//判断密码是否为6-8位纯数字void login();//登陆界面int searchaccount(long accnum);//寻找卡号为accnum的卡是否存在void deposit();//存款void withdraw();//取款void search();//查询void closeaccount();//销户void mainmenu();//主菜单int main(){welcome();//调用函数-欢迎界面login();//登陆mainmenu();//主菜单return 0;}void welcome(){cout<<"+-------------------------------------+"<<endl;cout<<"* *"<<endl;cout<<"* *"<<endl;cout<<"* & 欢迎使用邱氏银行系统 & *"<<endl;cout<<"* v 1.0 *"<<endl;cout<<"* *"<<endl;cout<<"* *"<<endl;cout<<"*-------------------------------------*"<<endl;}void login()//登录{char managername[20];char managerpwd[20];int errorcount=0;//密码输入错误的次数,三次之后自动退出。int i;for(i=0;i<3;i++){cout<<"请输入管理员账号:";cin>>managername;cout<<"请输入密码:"; cin>>managerpwd;if(strcmp(managername,name)==0 && strcmp(managerpwd,pwd)==0) //字符串数组运算法则{ mainmenu(); break;}else{errorcount++;//输错次数的累加if(errorcount!=3){cout<<"用户名或密码输入错误!请再输入一次:"<<endl;}else{cout<<"密码输入三次错误,退出系统!"<<endl;exit(0);//退出系统?}}}}void mainmenu()//主菜单{int chooser;cout<<"****************"<<endl;cout<<"* 1.开户 2.销户*"<<endl; cout<<"* 3.存款 4.取款*"<<endl;cout<<"* 5.查询 6.退出*"<<endl;cout<<"****************"<<endl;cout<<"请输入操作类型:";cin>>chooser;switch(chooser){case 1: openaccount(); break; //开户case 2:closeaccount(); break;//销户case 3:deposit(); break;//存款case 4: withdraw();break;//取款case 5: search();break;//查询case 6: exit(0); //退出default:cout<<"您的选择有误!\n"; cout<<"按任意键继续……"; break;}}void openaccount()//开户{char pwd1[10],pwd2[10];//定义两个字符变量 cout<<"请输入户主姓名:"; cin>>array[size].accname; cout<<"请输入密码:";cin>>pwd1;cout<<"请再次输入密码:";//输入两次密码cin>>pwd2;if(strcmp(pwd1,pwd2)==0){//只有两次输入一致才能进行就接下来的操作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(); mainmenu();}else{cout<<"密码必须为6-8位纯数字"<<endl;openaccount();}}else{cout<<"密码两次输入不一致,请重新操作"<<endl; openaccount();}}//判断密码是否为6-8位数码数字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;}//卡号的累加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(9)<<"卡号"<<setw(9)<<"户主"<<setw(9)<<"密码"<<setw(9)<<"金额"<<setw(9)<<"状态"<<"|"<<endl; cout<<setiosflags(ios::left)<<"|*-------------------------------------------------*|"<<endl; cout<<setiosflags(ios::left)<<"|"<<setw(9)<<acc.accnumber<<setw(9)<<acc.accname<<setw(9)<<acc.accpwd<<setw(9)<<acc.balance<<setw(9)<<acc.flag<<"|"<<endl; cout<<"|---------------------------------------------|"<<endl; } /*根据卡号查找卡的下标* 若返回值>=0,卡号是正确* 若返回值=-1,卡号有误*/int searchaccount(long accnum)//寻找卡号为accnum的卡是否存在{ int i,pos=-1; for(i=0;i<size;i++) { if(array[i].accnumber==accnum) { pos=i; break; } } return pos; }void deposit()//存款{long accnum;//存款的账号double money=0;//存款的金额,初始化int pos;cout<<"*****欢迎来到存款界面*****"<<endl;cout<<"请输入账号:";cin>>accnum;pos=searchaccount(accnum);if(pos==-1){//卡号有误cout<<"卡号有误,请重新输入:"<<endl;deposit();}else{//展示存款前卡的状态cout<<"存款前的信息为:"<<endl; printaccount(array[pos]);cout<<"请输入存款金额:"; cin>>money;//已经找到了卡号所对应的卡array[pos].balance+=money; //展示存款后卡的信息 printaccount(array[pos]);cout<<"存款成功、按任意键返回"<<endl;fflush(stdin); //????? getchar(); mainmenu();}}void withdraw()//取款{ long accnum;//取款的账号char accpwd[20];//账号的密码double money=0;//取款的金额,初始化int pos,i;cout<<"*****欢迎来到取款界面*****"<<endl;for(i=0;i<3;i++){cout<<"请输入账号:";cin>>accnum;cout<<"请输入密码:";cin>>accpwd;pos=searchaccount(accnum);if(pos>=0 && strcmp(array[pos].accpwd,accpwd)==0){cout<<"请输入取款金额:"<<endl;cin>>money;if(money<=array[pos].balance){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(); mainmenu();}else{cout<<"用户名或密码输入错误、请重新输入"<<endl;}}}//查询void search(){double accnum;char accpwd[20];int pos,i;cout<<"*****欢迎来到查询界面*****"<<endl;cout<<"请输入账号:";cin>>accnum;pos=searchaccount(accnum);if(pos>=0){for(i=0;i<3;i++){ cout<<"请输入密码:"; cin>>accpwd;if(strcmp(array[pos].accpwd,accpwd)==0) //开户密码输两次、存款金额要是非负数{cout<<"卡的信息为:"<<endl;printaccount(array[pos]);break;}else{cout<<"密码输入错误,请重新输入"<<endl;}}fflush(stdin); getchar(); mainmenu();}else{cout<<"您输入的卡不存在!请确认后重新输入"<<endl;}}void closeaccount()//销户{double accnum;char accpwd[20];int pos,i,j;cout<<"请输入账号:"<<endl;cin>>accnum;pos=searchaccount(accnum);if(pos==-1){//账号不存在cout<<"您输入的账号不存在!"<<endl;closeaccount();}else//账号存在,进入操作{ for(j=0;j<3;j++){cout<<"请输入密码:"<<endl; cin>>accpwd; if(strcmp(array[pos].accpwd,accpwd)==0){//展示卡的信息printaccount(array[pos]);cout<<"确认销户请按1,返回主菜单请按2。"<<endl;cin>>i;if(i==1){array[pos].balance=0;//余额记为0 strcpy(array[pos].flag,"销户");//状态记为“销户”printaccount(array[pos]);//展示销户后的状态cout<<"销户成功,按任意键返回"<<endl;fflush(stdin); getchar(); mainmenu();}else{mainmenu();}}else{cout<<"密码输入错误、请重新输入"<<endl;}}}}