课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565
说明:此项目是为未学习数组的同学拟出的,目的是让他们对“工程”有所体验。一些实现并不是最佳的,请参考后续的题目
【项目5-银行系统】
(4)将程序用多文件组织
涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。这种结构就是实际项目要用的了。
参考解答:
//文件:bank.cpp
#include<iostream>
using namespace std;
int account1=123;
int pwd1=123456;
double balance1=1000;
//用全局变量保存当前登录的帐户
int currentAccount;
//声明自定义函数
int checkStatus();
void work();
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>
using namespace std;
//在本文件中需要的函数声明
int checkStatus();
void updatePassword();
//外部全局变量
extern int account1;
extern int pwd1;
extern double balance1;
extern int currentAccount;
/*检验密码
*在很多的应用程序中,需要涉及到运行实体的“状态”
*相比上一个版密码校验的函数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>
using namespace std;
//外部全局变量
extern int account1;
extern int pwd1;
extern double balance1;
extern int currentAccount;
//在本文件中需要的函数声明
void showbalance();
void drawmoney();
void deposit();
void transferAccounts();
void updatePassword();
//处理业务
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;
}
}
}