C++第13周项目5——银行系统多文件组织+包含文件(v0.32)

简介: 课程首页地址:http://blog.csdn.net/sxhelijian/article/details/7910565说明:此项目是为未学习数组的同学拟出的,目的是让他们对“工程”有所体验。一些实现并不是最佳的,请参考后续的题目【项目5-银行系统】(4)将程序用多文件组织  涉及密码、帐户的函数放在一个文件中,完成各项功能的函数放在另一个文件中,main函放也单独一个文件。这

课程首页地址: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;
		}
	}
}			


目录
相关文章
|
8月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
125 5
WK
|
10月前
|
机器学习/深度学习 人工智能 算法
那C++适合开发哪些项目
C++ 是一种功能强大、应用广泛的编程语言,适合开发多种类型的项目。它在游戏开发、操作系统、嵌入式系统、科学计算、金融、图形图像处理、数据库管理、网络通信、人工智能、虚拟现实、航空航天等领域都有广泛应用。C++ 以其高性能、内存管理和跨平台兼容性等优势,成为众多开发者的选择。
WK
470 1
|
11月前
|
Ubuntu Linux 编译器
Linux/Ubuntu下使用VS Code配置C/C++项目环境调用OpenCV
通过以上步骤,您已经成功在Ubuntu系统下的VS Code中配置了C/C++项目环境,并能够调用OpenCV库进行开发。请确保每一步都按照您的系统实际情况进行适当调整。
1868 3
|
12月前
|
C++
【C++案例】一个项目掌握C++基础-通讯录管理系统
这篇文章通过一个通讯录管理系统的C++项目案例,详细介绍了如何使用C++实现添加、显示、删除、查找、修改和清空联系人等功能。
204 3
|
Rust 测试技术 编译器
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
Rust与C++的区别及使用问题之Rust项目中组织目录结构的问题如何解决
172 1
|
编译器 C++ 开发者
Visual Studio属性表:在新项目中加入已配置好的C++库
通过以上步骤可以确保Visual Studio中新项目成功地加入了之前已配置好的C++库。这个过程帮助开发者有效地管理多个项目中共享的库文件,提升开发效率。
428 0
|
7月前
|
编译器 C++ 开发者
【C++篇】深度解析类与对象(下)
在上一篇博客中,我们学习了C++的基础类与对象概念,包括类的定义、对象的使用和构造函数的作用。在这一篇,我们将深入探讨C++类的一些重要特性,如构造函数的高级用法、类型转换、static成员、友元、内部类、匿名对象,以及对象拷贝优化等。这些内容可以帮助你更好地理解和应用面向对象编程的核心理念,提升代码的健壮性、灵活性和可维护性。
|
3月前
|
人工智能 机器人 编译器
c++模板初阶----函数模板与类模板
class 类模板名private://类内成员声明class Apublic:A(T val):a(val){}private:T a;return 0;运行结果:注意:类模板中的成员函数若是放在类外定义时,需要加模板参数列表。return 0;
83 0
|
3月前
|
存储 编译器 程序员
c++的类(附含explicit关键字,友元,内部类)
本文介绍了C++中类的核心概念与用法,涵盖封装、继承、多态三大特性。重点讲解了类的定义(`class`与`struct`)、访问限定符(`private`、`public`、`protected`)、类的作用域及成员函数的声明与定义分离。同时深入探讨了类的大小计算、`this`指针、默认成员函数(构造函数、析构函数、拷贝构造、赋值重载)以及运算符重载等内容。 文章还详细分析了`explicit`关键字的作用、静态成员(变量与函数)、友元(友元函数与友元类)的概念及其使用场景,并简要介绍了内部类的特性。
163 0
|
5月前
|
编译器 C++ 容器
【c++11】c++11新特性(上)(列表初始化、右值引用和移动语义、类的新默认成员函数、lambda表达式)
C++11为C++带来了革命性变化,引入了列表初始化、右值引用、移动语义、类的新默认成员函数和lambda表达式等特性。列表初始化统一了对象初始化方式,initializer_list简化了容器多元素初始化;右值引用和移动语义优化了资源管理,减少拷贝开销;类新增移动构造和移动赋值函数提升性能;lambda表达式提供匿名函数对象,增强代码简洁性和灵活性。这些特性共同推动了现代C++编程的发展,提升了开发效率与程序性能。
161 12