问题及代码:
任务2——引入函数改善程序结构
1、数据
仍然只支持一位用户,所以用户帐号不必存储。
要用全局变量存储:(1)用户密码(由于支持改密码功能,所以用变量,暂先用整型,声明时赋初值);(2)帐户余额(用浮点数表示,声明时赋初值)
2、在输入密码环节,实现有限次密码输入的限制,如果三次都没有输入正确,程序将直接退出,不允许用户继续操作。
查验密码功能做成一个函数。例如:
4、办理业务的函数work的结构如下:
其中,各项业务分别编制一个函数完成。提示功能菜单(1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出)后,由用户输入功能选择,用switch多分支完成对应的功能(有的功能依然只输出一句话提示即可)。图示给出建议(鼓励在合理范围内别出心裁):
- 输入1(查询),调用函数showbalance(),显示“您的余额是xxxx.xx元。”
- 输入2(取款),调用drawmoney(),完成取款。要求输入取款金额,若余额不够,提示不能取款,否则,帐户余额减少。取款后给出提示:“你的余额还有XXX.XX元”。
在实际业务中,还涉及到计算的问题。本题暂不考虑,作为拓展建议,可以在此处考虑计息。 - 输入3(存款):调用deposit(),完成存款,余额增加(过瘾吧,想存多少存多少)。存款后给出提示:“你的余额是XXX.XX元”。
- 输入4(转帐):调用transferAccounts(),完成转帐,只支持转出功能。要求输入对方帐号和转帐金额,若金额充足,完成转帐,当前帐户的余额减少,对方帐户余额增加。由于本题只有一个帐号,故对方帐户增加的操作先不做了。
- 输入5(改密):调用updatePassword()改变密码。要求先输入旧密码,对了以后才能改密。新密码要输入两次,只有两次完全相同时才可以完成修改。
- 输入0,显示“谢谢,欢迎下次再来!”退出循环,返回调用函数。
- 输入不是0-5,提示“输错了,不要急!”
/*
*Copyright (c)2014,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:test.cpp
*作 者:陈文青
*完成日期:2014年11月16日
*版 本 号:v1.0
*
*问题描述:银行系统改善
*程序输入:
*程序输出:
*/
#include<iostream>
using namespace std;
int password = 123456;
double balance = 10000;
bool pass();
void work();
void showbalance();
void drawmoney();
void deposit();
void transferAccounts();
void updatePassword();
int main()
{
cout<<"贺家银行欢迎您光临……"<<endl;
if(pass())
work();
else
cout<<"密码错误,请持身份证前往就近银行办理业务。"<<endl;
return 0;
}
bool pass() //密码验证
{
bool bPass=false; //先假设不正确,直至正确后赋值为true
int iPass;
int num=1;
cout<<"请输入密码:";
do
{
if(num>1)
cout<<"密码第"<<num-1<<"次输入错误,请重新输入:(提示:三次不对将吞卡)"<<endl;
cin>>iPass;
num++;
if(iPass==password)
bPass=true; //密码正确时赋值为true
}
while(!bPass&&num<4); //密码不正确且次数在三次输入范围之内
return bPass;
}
void work() //处理业务
{
char cChoice;
bool bExit = false;
do
{
cout<<endl<<"* 您可以办理下面的业务:"<<endl;
cout<<"* 1.查询 2.取款 3.存款 4.转账 5.改密 0.退出"<<endl;
cout<<"* 请输入(0-5):";
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() //查询余额
{
cout<<"您的当前余额是:"<<balance<<"元"<<endl;
}
void drawmoney() //取款业务
{
double money;
cout << "请输入取款金额:";
cin >> money;
if(money<=balance)
{
balance-=money;
cout<<"取款成功,您的余额是:"<<balance<<"元。"<<endl;
}
else
{
cout<<"对不起,您的余额已不足。"<<endl;
}
}
void deposit() //存款业务
{
double money;
cout << "请输入存款金额:";
cin >> money;
balance+=money;
cout<<"存款成功,您的余额是:"<<balance<<"元。"<<endl;
}
void transferAccounts() //转帐
{
double money;
int iAccount2;
cout << "请输入对方帐户:";
cin >> iAccount2;
cout << "请输入转帐金额:";
cin >> money;
if(money<=balance)
{
balance-=money;
cout<<"转给"<<iAccount2<<"后,您的余额为:"<<balance<<"元。"<<endl;
}
else
{
cout<<"您的余额不足,转账失败。"<<endl;
}
}
void updatePassword() //密码修改业务
{
int p1,p2;
cout << "请输入原密码:";
cin >> p1;
if(p1!=password)
{
cout<<"密码输入错误。"<<endl;
}
else
{
cout << "请输入新密码:";
cin >> p1;
cout << "请确认新密码:";
cin >> p2;
if(p1==p2)//两次输入相符
{
password=p1;
cout<<"密码修改成功!"<<endl;
}
else
{
cout<<"两次输入不一致,密码修改失败。"<<endl;
}
}
}
运行结果: