C++第13周项目5——银行系统支持多用户(v0.3)

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565说明:此项目是为未学习数组的同学拟出的,目的是让他们对“工程”有所体验。一些实现并不是最佳的,请参考后续的题目【项目5任务3】补充功能,使银行更职业一些  1、支持多个用户  用变量account1以及pwd1分别表示客户和他的密码,balance1表示这两个用户的

课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565


说明:此项目是为未学习数组的同学拟出的,目的是让他们对“工程”有所体验。一些实现并不是最佳的,请参考后续的题目

【项目5任务3】补充功能,使银行更职业一些
  1、支持多个用户
  用变量account1以及pwd1分别表示客户和他的密码,balance1表示这两个用户的余额(开始靠近真的银行了,得为多个用户服务,此任务完成后,将来改造成多个用户的。学习了数组,我们会有好的解决办法,学习结构体,还有更好的办法,到学习文件,接近最好的办法了。当然,用面向对象技术,也将能有一个全新的视角看这个问题。现在我们就做两个用户的银行,帐号、密码还都用整型数,余额可要浮点数了。)
  2、增加修改密码功能
  密码不再使用常量,而是定义为一个变量并在程序开始运行时初始化。在修改密码功能时,输入密码,当然还要有确认密码,如果两次输入不一致,修改密码无效。重复直到修改成功或用户放弃修改。在整个过程中,通过信息输出,给用户足够友好的提示。
  3、补充新功能
  对于支持多个用户的需求,程序作出的改变有:
  (1)登录时,要求帐号、密码都输入,且输入对了才可以。
  (2)整个程序,包括登录、各项业务等均纳入一个大循环中,允许在程序的一次运行中A用户办理了业务退出后,B用户接着登录,或者A用户再次登录,……,直到在等待用户登录过程中,用户在键盘上按了q或Q(quit)才结束程序的执行;
while(1)
{
    登录并执行业务;
    ch=getchar();
    if(ch=='q'||ch=='Q')break;
}
  在现实中,这儿所提及的需求是通过计算机网络构建起了一个分布式系统处理的,很多用户可以同时登录,分别完成各自的业务,而不是一个操作完了,另一个接着来。

  (3)对于各项功能,完善相应的函数,正式开始“像样”的业务(尽管还有待完善)

查询:查询当前用户的余额;
取款:在当前用户余额上减少金额,能不能透支,你说了算
存款:在当前用户余额上增加金额,假设你是大款,想存多少存多少(有钱人的钱都不存银行,投资利更大,是不是真有钱,你看着办)
转帐:就在两、三个帐户间转,一方增加,对应另一方减少。注意:程序得审核输入的对方帐号是正确的,不能转到无主的帐户上。
修改密码:不能登录的是A,却改了B的密码。

参考代码:(下载 可以运行的程序,参考效果)
#include<iostream>   
using namespace std; 
//用全局变量存储各个帐户的相关信息,便于各函数间共享数据(是一种解决办法)
//直接用变量并不是好方案,后面将引入数组解决
//直接在程序中存储并不是好方案,这些信息要存入文件
//现阶段只涉及一个帐户
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();

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

/*检验密码
*在很多的应用程序中,需要涉及到运行实体的“状态”
*相比上一个版密码校验的函数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 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;
		}
	}
}			

void updatePassword()
{
	int p1,p2;
	if(currentAccount==account1)   //确定帐户,目前只有一个帐户,真银行不这样,待改进
	{
		cout << "请输入新密码:";
		cin >> p1;  
		cout << "请确认新密码:";
		cin >> p2;  
		if(p1==p2)//两次输入相符
		{
			pwd1=p1;   
			cout<<"密码修改成功!"<<endl;
		}
		else
		{
			cout<<"两次输入不一致,密码修改失败。"<<endl;
		}
	}
}




目录
相关文章
|
4月前
|
算法 C语言 C++
C++语言学习指南:从新手到高手,一文带你领略系统编程的巅峰技艺!
【8月更文挑战第22天】C++由Bjarne Stroustrup于1985年创立,凭借卓越性能与灵活性,在系统编程、游戏开发等领域占据重要地位。它继承了C语言的高效性,并引入面向对象编程,使代码更模块化易管理。C++支持基本语法如变量声明与控制结构;通过`iostream`库实现输入输出;利用类与对象实现面向对象编程;提供模板增强代码复用性;具备异常处理机制确保程序健壮性;C++11引入现代化特性简化编程;标准模板库(STL)支持高效编程;多线程支持利用多核优势。虽然学习曲线陡峭,但掌握后可开启高性能编程大门。随着新标准如C++20的发展,C++持续演进,提供更多开发可能性。
92 0
WK
|
1月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
86 1
|
2月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
570 3
|
3月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
57 3
|
4月前
|
Rust 安全 C++
系统编程的未来之战:Rust能否撼动C++的王座?
【8月更文挑战第31天】Rust与C++:现代系统编程的新选择。C++长期主导系统编程,但内存安全问题频发。Rust以安全性为核心,通过所有权和生命周期概念避免内存泄漏和野指针等问题。Rust在编译时确保内存安全,简化并发编程,其生态系统虽不及C++成熟,但发展迅速,为现代系统编程提供了新选择。未来有望看到更多Rust驱动的系统级应用。
72 1
|
4月前
|
存储 算法 数据可视化
【C++】C++旅游管理系统(源码+论文)【独一无二】
【C++】C++旅游管理系统(源码+论文)【独一无二】
|
4月前
|
存储 数据可视化 C++
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
【C++】C++-机房收费管理系统(源码+注释)【独一无二】
|
4月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)
本系统设计了一个选题管理流程,包括读取题目信息、随机抽取题目、保存及查询选题结果等功能。使用 `readProjects` 从文件读取题目信息,`drawProject` 随机抽取未选中的题目,`saveSelection` 保存选题结果至文件,`querySelection` 查询并显示所有选题结果。主函数提供菜单界面,支持学生信息输入、抽题及结果查询。关注【测试开发自动化】公众号,回复“题库”获取源码。
41 0
|
4月前
|
C++
使用 QML 类型系统注册 C++ 类型
使用 QML 类型系统注册 C++ 类型
95 0
|
4月前
|
存储 数据可视化 C++
【C++】C++-学生考试题库管理系统(源码)【独一无二】
【C++】C++-学生考试题库管理系统(源码)【独一无二】
170 0