c++模拟ATM取款机
2014-01-06 13:01
489 查看
琢磨几天终于完成了,貌似bug不少,大家提提意见
//bank.h int confirm_password(int ii);//密码输入及验证函数 void function(int ii);//功能显示及实现函数 //void fuc_true();//不用这个函数了 float showbalance(int ii);//余额显示函数,返回余额 float drawmoney(int ii);//取款函数,计算利息 float savemoney(int ii);//存钱函数 void change_password(int ii);//修改密码程序 void trans_account(int ii);//转账模块 //************************************************************** //************************************************************** //template<class type,int n> //int compare_array(type a ,type b );//将比较两个数组元素是否一样的功能模块化,构建模板函数 //*********************************************************************************** //*********************************************************************************** //功能,对给入的两个数组比较是否一致,,数组长途要提前给定 template<class type,int n> int compare_array(type a[],type b[])//将比较两个数组元素是否一样的功能模块化,构建模板函数 { int i; for(i=0;i<n;i++) { if(a[i]==b[i]) continue; else { cout<<"错误,停止验证"<<endl;//只要有一位错误,就停止验证 break; } } if(i==6) { cout<<"两数组完全一致!"<<endl; return 0; } else { cout<<"两数组不一致"<<endl; return 1; } } //main.cpp #include<iostream> #include"bank.h" using namespace std; char password[2][6]={{'0','0','0','0','0','0'},{'0','0','0','0','0','0'}};//全局变量,密码 float balance[2]={10000,0};//全局变量,账户余额 char name[2][6]={{'h','u','a','h','u','a'},{'m','e','n','m','e','n'}}; int account[2][6]={{1,1,1,1,1,1},{2,2,2,2,2,2}}; void main() { int i=0;//作为用户标示符 int j,k,a[6]; char m; cout<<"欢迎来到华氏银行:";//欢迎界面 while(1) { do{ cout<<"请输入账户号:"; for(j=0;j<6;j++) { cin>>a[j]; cout<<a[j]<<"账户输入成功"<<endl; } for(i=0;i<2;i++) { cout<<"******"; j=compare_array<int,6>(a,account[i]);//????????? cout<<j<<"输入111111,j应为0"<<endl; if(j==0) { cout<<"账户合法"<<endl; break; } } if(j==0) break; k++; }while(k<3);//i=2,j=1则表示账号累计三次输入错误 if(j==0)//账户正确,下一步验证密码 { cout<<"请输入密码:"; j=confirm_password(i);//验证密码 if(j==0)//密码正确,办理业务 { while(1) { cout<<"当前为"<<i<<"号顾客办理业务"<<endl; function(i); cout<<"按任意键继续办理业务,退出请按n"<<endl; cin>>m; if(m=='n'||m=='N') break;//业务办理完成,退出本次业务办理 } } else if(j==1)//密码三次输入不正确,直接吞卡 break; } else break;//三次累计输入账号错误,吞卡 cout<<"按任意键选择其他账户继续办理业务,退出请按n"<<endl; cin>>m; if(m=='n'||m=='N') break;//业务办理完成,退出本次业务办理 } cout<<"取款结束!"; } //************************************************************************* //bank.cpp #include<iostream> #include"bank.h" using namespace std; extern char password[2][6]; extern float balance[2]; extern char name[2][6]; extern int account[2][6]; /****************************************************************************/ //密码输入和验证 int confirm_password(int ii) { cout<<"您是"<<ii<<"号顾客,请输入密码"<<endl; char pass_word[6];//存输入密码,方便验证 int i,j=0;//j表示输密码次数 do{ for(i=0;i<6;i++) { cin>>pass_word[i]; } //************************************************************ //此段程序为第一次直接判断,现改为模板函数 /* for(i=0;i<6;i++) { if(pass_word[i]==password[i]) continue; else { cout<<"密码错误,停止验证"<<endl;//只要有一位错误,就停止验证 break; } } if(i==6) { cout<<"密码正确!"<<endl; return 0; } else { cout<<"密码错误,请重新输入"<<endl; j++; } */ //****************************************************************** i=compare_array<char,6>(password[ii],pass_word); if(i==0) return 0; }while(j<3); cout<<"密码"<<j<<"次后还是错了"<<endl; return 1; } /***************************************************************/ //功能界面显示 void function(int ii) { cout<<ii<<"号顾客选择功能"<<endl; int j; cout<<"请选择功能编号(0-4):"<<endl; cout<<"1.查询"<<endl<<"2.取款"<<endl<<"3.存款"<<endl<<"4.转账"<<endl<<"5.修改密码"<<endl<<"0.退出"<<endl; cin>>j; cout<<"谢谢,你选择了"<<j<<"号功能"<<endl; switch(j) { case 1:showbalance(ii);break; case 2:drawmoney(ii);break; case 3:savemoney(ii);break; case 4:trans_account(ii);break; case 5:change_password(ii);break; case 0:cout<<"谢谢,欢迎下次再来"<<endl;break; default:cout<<"输错,不要急!"<<endl; } // return 0; } //********************************************************************************* //显示余额 float showbalance(int ii) { cout<<ii<<"号顾客余额为"<<balance[ii]<<endl; return balance[ii];//返回余额 } //********************************************************************************* float drawmoney(int ii) { cout<<ii<<"号顾客取款"<<endl; int j,i,m,k;//k为取款金额,m为活期存款天数 //float current_balance; cout<<"请输入存款种类,活期请输入0,定期请输入1:"; cin>>j; if(j==0) { cout<<"请输入存款天数:"; cin>>m; balance[ii]+=0.005/360*m;//当这里没有乘balance时,应该得10000.00138,但是输出为10000,因为我设置balance为单精度, //只能保留6位有效数字,故后面的138都已经直接忽略了 cout<<ii<<"号顾客当前余额"<<balance[ii]<<endl; } else if(j==1) { cout<<"请输入定期存期:三个月请输入1;六个月请输入2;一年请输入3;两年请输入4;三年清输入5;五年请输入6:"; cin>>i; switch(i) { case 1:balance[ii]+=0.031/12*3*balance[ii];break; case 2:balance[ii]+=0.033/12*6*balance[ii];break; case 3:balance[ii]+=0.035/12*1*balance[ii];break; case 4:balance[ii]+=0.044/12*2*balance[ii];break; case 5:balance[ii]+=0.050/12*3*balance[ii];break; case 6:balance[ii]+=0.055/12*5*balance[ii];break; } cout<<balance[ii]<<"**************"<<endl; } else { cout<<"输入错误"<<endl; return balance[ii]; } cout<<"请输入取款金额:"; cin>>k; cout<<"您共取款"<<k<<"元"<<endl; balance[ii]-=k; cout<<ii<<"号顾客余额是"<<balance[ii]<<"元"<<endl; return balance[ii];//返回余额 } //**************************************************************************** float savemoney(int ii) { cout<<ii<<"号顾客存钱"<<endl; int i; cout<<"请输入存钱数(这里定义的是整型):"; cin>>i; balance[ii]+=i; showbalance(ii); return balance[ii]; } //**************************************************************************** void change_password(int ii) { int i; char j; cout<<ii<<"号顾客修改密码"<<endl; char pass_word1[6],pass_word2[6];//两个数组来存放用户先后两次输入新密码,方便比较 while(1) { cout<<"请输入新密码:"<<endl; for(i=0;i<6;i++) cin>>pass_word1[i]; cout<<"请再次输入新密码:"<<endl; for(i=0;i<6;i++) cin>>pass_word2[i]; for(i=0;i<6;i++)//验证前后两次密码是否一致 { if(pass_word1[i]==pass_word2[i]) continue; else break; } if(i==6) { for(i=0;i<6;i++) password[ii][i]=pass_word2[i];//在全局变量中修改新密码 cout<<"两次输入密码一致,修改成功"<<endl; cout<<"当前密码:"; for(i=0;i<6;i++) cout<<password[ii][i]; } else cout<<"两次输入密码不一致,修改无效"<<endl;//只要有一位错误,修改无效 cout<<"任意键继续,退出请按n"<<endl; cin>>j; if(j=='n'||j=='N') break; else ;//else可以省略掉,这里写了也无妨,分号表示空语句,什么都不做就行了 } } //*********************************************************************************** //*********************************************************************************** //功能,对给入的两个数组比较是否一致,,数组长途要提前给定 /* template<class type,int n> int compare_array(type a[],type b[])//将比较两个数组元素是否一样的功能模块化,构建模板函数 { int i; for(i=0;i<n;i++) { if(a[i]==*(b+i)) continue; else { cout<<"错误,停止验证"<<endl;//只要有一位错误,就停止验证 break; } } if(i==6) { cout<<"两数组完全一致!"<<endl; return 0; } else { cout<<"两数组不一致"<<endl; return 1; } } */ void trans_account(int ii) { cout<<ii<<"号顾客进行转账操作"<<endl; char x; float t;//做中转钱数用 int m[6],n[6],j;//存转账账号 int i,s;//i还是用来标记用户 while(1) { cout<<"输入您要转账的账号:"<<endl; for(j=0;j<6;j++) cin>>m[j]; cout<<"请再次输入转账账号:"<<endl; for(j=0;j<6;j++) cin>>n[j]; j=compare_array<int,6>(m,n); if(j==0) { cout<<"两次输入转账账号一致,现在验证账号是否合法"<<endl; for(i=0;i<2;i++)//两次循环来验证账号是否合法,因为这里只有两个账号 { cout<<"******"; j=compare_array<int,6>(m,account[i]);//在比较的时候,不一致会提示:错误,停止验证,两数组不一致 cout<<j<<"账户合法,j应为0"<<endl; if(j==0) { cout<<i<<"号账户合法,请输入转账金额,单精度型"<<endl; s=i; cin>>t; balance[ii]-=t; balance[i]+=t; cout<<"转账完成"<<endl; break; //转账完成后,立刻跳出for循环,就直接到了下一次输入转账账号了 } } //******************************************************************************************* if(j==0)//账户合法,转账完成后 { cout<<"按任意键继续转账,退出请按n"<<endl; cin>>x; if(x=='n'||x=='N') break; } else if(j==1)//两次输入一致,但是账户不合法 { cout<<"账户不合法,按任意键重新输入,退出请按n"<<endl; cin>>x; if(x=='n'||x=='N') break; } } else if(j==1) { cout<<"两次输入账号不一致,按任意键重新输入,退出请按n"<<endl; cin>>x; if(x=='n'||x=='N') break; } } cout<<"转账结束!"<<endl; }
相关文章推荐
- C++第2次实验—模拟ATM
- 作业:c++作业:第二次上机实验-模拟ATM
- c++第一次实验-4模拟ATM
- c++作业2-标准体重,两点距离,模拟ATM
- ATM取款机系统模拟仿真
- JavaSE 模拟银行ATM取款机功能
- 模拟ATM取款机
- c++实验2-模拟ATM
- Java编写的模拟ATM取款机程序
- ATM取款机系统模拟仿真
- ATM取款机模拟
- ATM取款机的数据库模拟开发和实战总结
- C++程序设计之ATM模拟界面
- 模拟ATM取款机
- C++实验2-模拟ATM
- 分享一个模拟ATM取款机的DEMO
- ATM银行取款机模拟程序(可连接数据库)
- C++实验2-模拟ATM
- c++作业2-分段函数求值,两点距离,模拟ATM
- C++作业2—分段函数求值,两点距离,模拟ATM