课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
说明:此项目是为未学习数组的同学拟出的,目的是让他们对“工程”有所体验。一些实现并不是最佳的,请参考后续的题目
【项目5-银行系统】
(4)将程序用多文件组织
涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。这种结构就是实际项目要用的了。
下面的参考解答中使用了包含文件
//bank1.h 用于mian函数中 #ifndef _MYHEADER #define _MYHEADER //全局变量 int account1=123; int pwd1=123456; double balance1=1000; //用全局变量保存当前登录的帐户 int currentAccount; //声明自定义函数 int checkStatus(); void work(); void showbalance(); void drawmoney(); void deposit(); void transferAccounts(); void updatePassword(); #endif /* _MYHEADER */
//bank2.h 用于其他函数中,全局变量均是extern型的 #ifndef _MYHEADER2 #define _MYHEADER2 //全局变量 extern int account1; extern int pwd1; extern double balance1; //用全局变量保存当前登录的帐户 extern int currentAccount; //声明自定义函数 int checkStatus(); void work(); void showbalance(); void drawmoney(); void deposit(); void transferAccounts(); void updatePassword(); #endif
//文件:bank.cpp #include<iostream> #include"bank1.h" using namespace std; int main() { int status; char ch; cout<<"贺家银行欢迎您光临……(本系统目前只有一个用户,帐号123,初始密码123456)"<<endl; while(1) //支持用户多次登录办理业务 { status=checkStatus(); if(1==status) work(); else if(2==status) cout<<"欢迎下次光临……"<<endl; else cout<<"吞卡,请联系就近网点解决……"<<endl; cout<<"=====要退出系统,请按键Q,其他键继续下一位用户登录======"<<endl; fflush( stdin ); //清空输入缓冲区,否则getchar()自动获得 ch=getchar(); if(ch=='q'||ch=='Q')break; } return 0; }
//文件 password.cpp,有关密码的功能 #include<iostream> #include"bank2.h" using namespace std; /*检验密码 *在很多的应用程序中,需要涉及到运行实体的“状态” *相比上一个版密码校验的函数pass(),其返回值:通过-true; 不通过-false *这个方案用checkStatus()可以返回更多的信息(状态) *返回值约定: 1 - 用户名、密码正确,可以进一步工作 2 - 用户名放弃登录正常退出 3 - 三次登录失败吞卡后退出 */ int checkStatus() { int iStatus=3; //默认吞卡的结局 int iPass; int num=1; char goOn; cout<<"请输入帐户"; cin>>currentAccount; //currentAccount是全局变量 do { if(num==1) cout<<"请输入密码"; else { cout<<"温情提示:这是您第"<<num<<"次输入密码,三次不对将吞卡。"<<endl; cout<<"还要继续尝试吗(继续输入Y,退出输入N,之后回车):"; cin>>goOn; if('Y'==goOn||'y'==goOn) cout<<"请再次输入密码"; else { iStatus=2; //用户放弃登录 break; } } cin>>iPass; num++; if(currentAccount==account1&&iPass==pwd1) //帐户 { iStatus=1; //密码对了 break; } }while(num<4); //密码不正确且次数在允许范围内循环 //如果在循环因为num==4为真而退出,iStatus的值还保持初始3,代表吞卡 return iStatus; //返回状态 } void updatePassword() { int p1,p2; if(currentAccount==account1) //确定帐户,目前只有一个帐户,真银行不这样,待改进 { cout << "请输入新密码:"; cin >> p1; cout << "请确认新密码:"; cin >> p2; if(p1==p2)//两次输入相符 { pwd1=p1; cout<<"密码修改成功!"<<endl; } else { cout<<"两次输入不一致,密码修改失败。"<<endl; } } }
//文件 money.cpp,有关存、取、转款的函数定义 #include<iostream> #include"bank2.h" using namespace std; //处理业务 void work() { char cChoice; bool bExit = false; do { cout<<endl<<"* 您可以办理下面的业务:"<<endl; cout<<"* 1.查询"<<endl; cout<<"* 2.取款"<<endl; cout<<"* 3.存款"<<endl; cout<<"* 4.转账"<<endl; cout<<"* 5.修改密码"<<endl; cout<<"* 0.退出"<<endl; cout<<"* 请输入(0-4):"; cin>>cChoice; switch(cChoice) { case '1': showbalance(); break; case '2': drawmoney(); break; case '3': deposit(); break; case '4': transferAccounts(); break; case '5': updatePassword(); break; case '0': cout<<"欢迎您下次来存款. "<<endl; bExit=true; } }while(!bExit); return; } //查询余额 void showbalance() { if(currentAccount==account1) //确定帐户,目前只有一个帐户,真银行不这样,待改进 cout<<"您的当前余额是:"<<balance1<<"元"<<endl; } //取款 void drawmoney() { double money; if(currentAccount==account1) //确定帐户,目前只有一个帐户,真银行不这样,待改进 { cout << "请输入取款金额:"; cin >> money; //下面不计利息了,从现在起,我们的银行只提供银行卡业务,是定期统一计息的 if(money<=balance1) { balance1-=money; //取款成功 cout<<"取款后,您的余额是:"<<balance1<<"元。"<<endl; } else { cout<<"您的余额不足,取款失败。"<<endl; } } } //存款 void deposit() { double money; if(currentAccount==account1) //确定帐户,目前只有一个帐户,真银行不这样,待改进 { cout << "请输入存款金额:"; cin >> money; //下面不计利息了,从现在起,我们的银行只提供银行卡业务,是定期统一计息的 balance1+=money; //取款成功 cout<<"存款后,您的余额是:"<<balance1<<"元。"<<endl; } } //转帐 void transferAccounts() { double money; int iAccount2; if(currentAccount==account1) //确定帐户,目前只有一个帐户,真银行不这样,待改进 { cout << "请输入转帐金额:"; cin >> money; cout << "请输入对方帐户:"; cin >> iAccount2; //应该判断对方帐户的有效性再转账,暂时不做,待以后改进 if(money<=balance1) { balance1-=money; //取款成功 //此处应该为对方帐户增加余额,暂时略 cout<<"转账后,您的余额是:"<<balance1<<"元。"<<endl; } else { cout<<"您的余额不足,转账失败。"<<endl; } } }