2014秋C++第12周项目4参考- 银行系统

课程主页在http://blog.csdn.net/sxhelijian/article/details/39152703,课程资源在云学堂“贺老师课堂”同步展示,使用的帐号请到课程主页中查看。 


【项目4 - 银行系统】
这是我们要做的一个真正的项目!涉及到的技术都用过了,只不过,程序真的要长得多了。
  在学习中,总是想要些成就感的。当你没有做过一些事情的时候,总是不能知道所学知识究竟能干些什么。在学习过程中,完成一个像样的项目,那是一件很酷的事情,也让我们更有激情。做好思想准备,中间可能会有些困难,但相信沉下心来还是可以完成的。
  要做项目的需求最好能和大家的生活实践联系起来,我们想得到。另外,还能和我们的课程同步上。两厢结合,我们就开个银行,做个自动取款机吧。
  如果没有用过自动取款机,先用你的银行卡取一次钱去吧,权当作调研。
  我们首先插卡,输密码。做纯软件模拟,我们没有读卡机,好吧,认为卡已经插好了。
  为了让大家一点一点地做出来,我试图分解其中的工作,我们逐渐完善,“增量式”地完成工作。你可以每做完一个任务,就发一篇博文,将这样一个成长的阶段记录下来。
任务1——搭一个框架
  你的程序运行后的界面如图:
  2014秋C++第12周项目4参考- 银行系统

  • 用const定义全局的常变量PASSWORD,作为银行卡的密码(真银行卡的密码可不是这样,它要分别记住各个帐户的密码,我们现在认为所有卡都这个密码)。
  • 判断输入的密码是否正确,如果不正确,提示:“你这个笨脑瓜!”并退出程序,(注意,真银行可不敢骂人,你的银行这样写写无妨。)否则,继续下面的工作。
  • 用户如图输入功能选择,根据给出的答复,用switch多分支完成下面的显示:
    • a. 输入1,显示“您的余额是xxxx.xx元。”(想过瘾,用你觉得足够大的数当余额)
    • b. 输入2-4的提示自编;
    • c. 输入0,显示“谢谢,欢迎下次再来!”(好有礼貌)
    • d. 输入不是0-4,提示“输错,不要急!”
  只要输入不是0,循环处理业务。
  写完程序后,请将之发布为博文(程序中的注释自己加,程序前要有,中间也来些必要的)。

参考解答:

#include<iostream>
using namespace std;
const int password = 123456;
int main()
{
	int iPass;
	char cChoice;
	bool bExit = false;
	cout<<"贺家银行欢迎您光临……"<<endl;
	cout<<"请输入密码:";
	cin>>iPass;
	if(iPass!=123456)
	{
		cout<<"不要着急,想好了再输入……"<<endl;
	}
	else
	{
		do
		{
			cout<<endl<<"*  您可以办理下面的业务:"<<endl;
			cout<<"*  1.查询"<<endl;
			cout<<"*  2.取款"<<endl;
			cout<<"*  3.存款"<<endl;
			cout<<"*  4.转账"<<endl;
			cout<<"*  0.退出"<<endl;
			cout<<"*  请输入(0-4):";
			cin>>cChoice;
			switch(cChoice)
			{
			case '1':
				cout<<"余额有问题,请拨打110. "<<endl;
				break;
			case '2':
				cout<<"温情提示:少取票子多种树. "<<endl;
				break;
			case '3':
				cout<<"勤俭持家,老一套,要保持. "<<endl;
				break;
			case '4':
				cout<<"加快流通,繁荣经济. "<<endl;
				break;
			case '0':
				cout<<"欢迎您下次来存款. "<<endl;
				bExit=true;
			}
		}while(!bExit);
		return 0;
	}
}


任务2——引入函数改善程序结构
  1、数据
  仍然只支持一位用户,所以用户帐号不必存储。
  要用全局变量存储:(1)用户密码(由于支持改密码功能,所以用变量,暂先用整型,声明时赋初值);(2)帐户余额(用浮点数表示,声明时赋初值)
  2、在输入密码环节,实现有限次密码输入的限制,如果三次都没有输入正确,程序将直接退出,不允许用户继续操作。
查验密码功能做成一个函数。例如:

bool pass()
{
  int 次数=0;
  bool 是否密码正确=false;   //先假设密码不正确,以便能进入do-while循环
  do{
    输入密码;
    次数++;
    if(相符)是否密码正确=true;
  }while(密码不正确且尝试次数不足3次);
  return 是否密码正确;  //上面密码正确为true,反之……
}
  3、main()函数的结构将如下所示,work函数用于处理业务。
main()
{
  ……
    if(pass())
        work();
    else
        输出“请到柜台办理密码查询后再来”。
    return 0;
}    
  4、办理业务的函数work的结构如下:
void work()
{
  //循环显示功能菜单:1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出
  //选择后办理各种业务,再显示菜单,直到选择了0。
 
}
  其中,各项业务分别编制一个函数完成。提示功能菜单(1.查询、2.取款、3.存款、4.转帐、5.改密、0.退出)后,由用户输入功能选择,用switch多分支完成对应的功能(有的功能依然只输出一句话提示即可)。图示给出建议(鼓励在合理范围内别出心裁):
2014秋C++第12周项目4参考- 银行系统

  • 输入1(查询),调用函数showbalance(),显示“您的余额是xxxx.xx元。”
  • 输入2(取款),调用drawmoney(),完成取款。要求输入取款金额,若余额不够,提示不能取款,否则,帐户余额减少。取款后给出提示:“你的余额还有XXX.XX元”。
    在实际业务中,还涉及到计算的问题。本题暂不考虑,作为拓展建议,可以在此处考虑计息。
  • 输入3(存款):调用deposit(),完成存款,余额增加(过瘾吧,想存多少存多少)。存款后给出提示:“你的余额是XXX.XX元”。
  • 输入4(转帐):调用transferAccounts(),完成转帐,只支持转出功能。要求输入对方帐号和转帐金额,若金额充足,完成转帐,当前帐户的余额减少,对方帐户余额增加。由于本题只有一个帐号,故对方帐户增加的操作先不做了。
  • 输入5(改密):调用updatePassword()改变密码。要求先输入旧密码,对了以后才能改密。新密码要输入两次,只有两次完全相同时才可以完成修改。
  • 输入0,显示“谢谢,欢迎下次再来!”退出循环,返回调用函数。
  • 输入不是0-5,提示“输错了,不要急!”
  以后我们再做支持多个帐户的银行系统。

参考解答:

#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;
}
 
//检验密码
//返回值:通过-true; 不通过-false
bool pass()
{
    bool bPass=false;   //先假设不正确,直至正确后赋值为true
    int iPass;
    int num=1;
    do
    {
        cout<<"请输入密码";
        if(num>1)
            cout<<"(提示:这是第"<<num<<"次输入密码,三次不对将吞卡)";
        cin>>iPass;
        num++;
        if(iPass==password)
            bPass=true;
    }
    while(!bPass&&num<4);   //密码不正确且次数在允许范围内
    return bPass;  //密码正确为true,表示通过,反之……
}
 
//处理业务
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 >> money;
    cout << "请输入对方帐户:";
    cin >> iAccount2; //应该判断对方帐户的有效性再转账,暂时不做,待以后改进
 
    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;
        }
    }
}



任务3——将程序用多文件组织

  将任务2中的代码,涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。

参考解答:

main.cpp——称为测试文件,是程序执行开始的文件,用于“总控”程序的执行

#include<iostream>
using namespace std;
int password = 123456;
double balance = 10000;

bool pass();
void work();

int main()
{
    cout<<"贺家银行欢迎您光临……"<<endl;
    if(pass())
        work();
    else
        cout<<"不要着急,想好了再输入……"<<endl;
    return 0;
}

work.cpp(文件名由你取)——包含完成各项银行业务的函数(术语中也称模块)

#include<iostream>
using namespace std;//本文件中的涉及输入输出,写包含文件与指定命名空间有必要。
extern double balance; //指出这个全局变量来自别的文件,是外部全局变量

void showbalance();
void drawmoney();
void deposit();
void transferAccounts();
void updatePassword();

//处理业务
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 >> money;
    cout << "请输入对方帐户:";
    cin >> iAccount2; //应该判断对方帐户的有效性再转账,暂时不做,待以后改进

    if(money<=balance)
    {
        balance-=money; //取款成功
        //此处应该为对方帐户增加余额,暂时略
        cout<<"转给"<<iAccount2<<"后,您的余额是:"<<balance<<"元。"<<endl;
    }
    else
    {
        cout<<"您的余额不足,转账失败。"<<endl;
    }
}

password.cpp——包含涉及密码的函数

#include<iostream>
using namespace std;  //本文件中的涉及输入输出,写包含文件与指定命名空间有必要。
extern int password;  //指出这个全局变量来自别的文件,是外部全局变量

//检验密码
//返回值:通过-true; 不通过-false
bool pass()
{
    bool bPass=false;   //先假设不正确,直至正确后赋值为true
    int iPass;
    int num=1;
    do
    {
        cout<<"请输入密码";
        if(num>1)
            cout<<"(提示:这是第"<<num<<"次输入密码,三次不对将吞卡)";
        cin>>iPass;
        num++;
        if(iPass==password)
            bPass=true;
    }
    while(!bPass&&num<4);   //密码不正确且次数在允许范围内
    return bPass;  //密码正确为true,表示通过,反之……
}


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;
        }
    }
}









=================== 迂者 贺利坚 CSDN博客专栏=================
|== IT学子成长指导专栏 专栏文章的分类目录(不定期更新) ==|
|== C++ 课堂在线专栏  贺利坚课程教学链接(分课程年级) ==|
|== 我写的书——《逆袭大学——传给IT学子的正能量》    ==|
===== 为IT菜鸟起飞铺跑道,和学生一起享受快乐和激情的大学 =====

上一篇:第420期 Python 周刊


下一篇:Symantec Backup Exec 2012 Agent For Linux安装