当前位置: 首页 > news >正文

C++面向对象程序设计:银行储蓄管理系统

题目描述:

设计一个银行储蓄管理系统,以菜单方式工作。

 

功能需求:

(1)设计一个账户类Account,包括户名、密码、电话、余额等信息。

(2)为新用户开户。

(3)为老用户销户、挂失。

(4)可以办理存取款操作。

(5)可以查询每笔历史交易记录。

 

程序设计:

#include<iostream>>
#include <string>
using namespace std;
class Bank;
void menu(Bank &);

class Account {
	private:
		string name; //户名
		string ID;  //账号
		string mima;  //密码
		double yue;  //余额
		bool isLost=false;//挂失功能

	public:
		string record="";
		Account(string i,string n,double y,string m) {
			ID =i;
			name =n;
			yue =y;
			mima =m;
		}
		string getID() {
			return ID;
		}
		string getMi() {
			return mima;
		} 
		//挂失
		void setLost(bool state) {
			isLost=state;
		}
		bool getLost() {
			return isLost;
		}
		void showInfo() {
			cout << "储户账号:" << ID << endl;
			cout << "储户姓名:" << name << endl;
			cout << "储户余额" << yue << endl;
			cout<<"历史交易记录:"<<endl;
			cout<<record;
		}

		void saving(double a) {
			yue =yue +a;
			record=record+"save:\n";
		}

		bool qukuan(double a) {
			if(yue <a) {
				cout<<"余额不足"<<endl;
				return 0;
			} else {
				yue -= a;
				cout << "取款成功" << endl;
				record=record+"get:\n";
				return 1;
			}
		}

};
class Bank {
	private:
		int accountNumber;
		Account *account[100];  //用户个数上限

	public:
		Bank() {
			accountNumber =0;
		}

		void createaccount() {    //实现开户功能
			string ID,name,mima;
			double yue;
			char choice;
here:
			cout<<"请输入您的账号"<<endl;
			cin>>ID;
			cout<<endl;

			//检查账户是否已存在
			for(int i = 0; i<accountNumber; i++) {

				if(account[i]->getID()==ID) {
					cout<<"该账户已存在,请重新输入!"<<endl;
					goto here;
				}

			}
			cout<<"请输入您的用户名"<<endl;
			cin>>name;

			cout<<"请输入您的密码"<<endl;
			cin>>mima;

			cout<<"您是否要预存款?(Y/N)"<<endl;
			cin>>choice;
			if(choice=='Y'||choice=='y') {
				cout<<"- 存入金额 : ";
				cin>>yue;
			} else
				yue=0;

			Account *a=new Account(ID,name,yue,mima);  //传送用户数据
			account[accountNumber++]=a;
			cout <<"当前已有储户"<<accountNumber<< endl;
			cout<<"创建成功"<<endl;
		}

		void deleteaccount() { //实现销户功能
			int i;
			string id,m;
			cout<<"请输入您的账号\n";
			cin>>id;
			cout<<"请输入您的密码\n";
			cin>>m;
			cout<<"请问您是否确认销户?(Y/N)";
			char thisChoice;
			cin>> thisChoice;
			if(thisChoice!='Y' && thisChoice!='y')
				return;
			cout <<"您要注销的账户为:"<<id<< endl;
			for(i = 0; i<accountNumber; i++) {
				//删除用户
				if(account[i]->getID()==id&&account[i]->getMi()==m) {
					Account * temp= account[i];
					account[i]=account[accountNumber-1];
					account[accountNumber-1]=temp;
					delete account[--accountNumber];
					cout<<"删除成功"<<endl;
					return;
				}

			}
			cout<<"不存在该用户或密码错误!"<<endl;
		}

		void guashi() {//实现挂失功能
			int i;
			string id,m;
			cout<<"请输入您的账号\n";
			cin>>id;
			cout<<"请输入您的密码\n";
			cin>>m;
			cout<<"请问您是否确认挂失?(Y/N)";
			char thisChoice;
			cin>> thisChoice;
			if(thisChoice!='Y' && thisChoice!='y')
				return;
			cout <<"您要挂失的账户为:"<<id<< endl;
			for(i = 0; i<accountNumber; i++) {
				//删除用户
				if(account[i]->getID()==id&&account[i]->getMi()==m) {
					account[i]->setLost(true);
					cout<<"挂失成功"<<endl;
					return;
				}
			}
			cout<<"不存在该用户或密码错误!"<<endl;
		}

		void cunkuan() { //实现存款功能
			double money;
			double yue;
			string id,m;
			int i;
			cout<<"请输入您要存入的账户";
			cin>>id;

			cout<<"请输入您的密码\n";
			cin>>m;

			cout<<"请输入您要存入的金额";
			cin>>money;
			for(i =0; i<accountNumber; i++) {
				if(account[i]->getID()==id&&account[i]->getMi()==m) {
					//调用存款函数存款
					account[i]->saving(money);
					cout<<"存款成功";
					cout<<endl;
					account[i]->showInfo();
					return;
				}
			}
			cout << "存款失败" << endl;
		}

		void quqian() { //实现取款功能
			int i;
			string id,m;
			double money;

			cout<<"请输入您的账户"<<endl;
			cin>>id;
			cout<<"请输入您的密码"<<endl;
			cin>>m;
			cout<<"请输入取款金额"<<endl;
			cin>>money;

			for(i =0; i<accountNumber; i++) {
				//如果挂失了,是无法取款的
				if(account[i]->getID() ==id&&account[i]->getMi()==m&&!account[i]->getLost()) {
					bool rs=account[i]->qukuan(money);
					//如果取款成功
					if(rs) {
						account[i]->showInfo();
						return;
					} else {
						cout<<"账户余额不足"<<endl;
						return;
					}
				}
			}
			cout<<"失败"<<endl;
		}

		void check() { //查询 
			int i;
			string id,m;
			double money;
			cout<<"请输入您的账户"<<endl;
			cin>>id;
			cout<<"请输入您的密码"<<endl;
			cin>>m;
			for(i=0; i<accountNumber; i++) {
				if(account[i]->getID()==id&&account[i]->getMi()==m) {
					account[i]->showInfo();
					return;
				}
			}
			if(i ==accountNumber) {
				cout<<"没找到"<<endl;
			}
		}

};
void menu() {
	int m;
	Bank b;
	while(1) {
		system("cls");
		cout<<"----------欢迎来到此银行-----------"<<endl;
		cout<<"----------请选择您的业务-------------"<<endl;
		cout<<"-----------1、开户-------------------"<<endl;
		cout<<"-----------2、销户-------------------"<<endl;
		cout<<"-----------3、存款-------------------"<<endl;
		cout<<"-----------4、取钱-------------------"<<endl;
		cout<<"-----------5、查询-------------------"<<endl;
		cout<<"-----------6、挂失-------------------"<<endl;
		cout<<"-----------7、退出-------------------"<<endl;
		cin>>m;

		switch(m) {
			case 1:
				b.createaccount();
				system("pause");
				break;
			case 2:
				b.deleteaccount();
				system("pause");
				break;
			case 3:
				b.cunkuan();
				system("pause");
				break;
			case 4:
				b.quqian();
				system("pause");
				break;
			case 5:
				b.check();
				system("pause");
				break;
			case 6:
				b.guashi(); 
				return;
			case 7:
				return;	
			default:
				cout << "输入有误,请重新输入" << endl;
				break;
		}
	}
}

int main() {
	menu();
	return 0;
}

程序运行演示:

相关文章:

  • C++面向对象程序设计:地铁自动售票系统
  • t.k.x's ACM(3)---险过的网上预赛
  • 计算机网络实验: 使用Wireshark抓包工具进行应用层和传输层网络协议分析(TCP部分)
  • t.k.x's ACM(5)---平静的上海
  • 计算机网络实验: 使用Wireshark抓包工具进行应用层和传输层网络协议分析(HTTP部分)
  • t.k.x's ACM(6)---总结
  • 数据库理论:计算机数据库技术在信息管理中的应用分析
  • 郁闷的一天
  • 数据结构:参数化循环链表的C++实现(实现异常捕获)
  • 编译原理:TINY语言的语法、词法单元与文法的最全总结
  • ACCESS在NTFS中只能读不能修改问题
  • 学期结束前的聚餐
  • 常见运算符缩写的含义总结:ASSIGN、EQ、LT、GT、PLUS、MINUS、TIMES、OVER、LPAREN、RPAREM、SEMI
  • C++程序设计:三角形图形输出
  • 中国十大名茶及鉴别方法
  • 【node学习】协程
  • Android系统模拟器绘制实现概述
  • angular组件开发
  • exports和module.exports
  • Linux下的乱码问题
  • markdown编辑器简评
  • PAT A1092
  • select2 取值 遍历 设置默认值
  • Selenium实战教程系列(二)---元素定位
  • SpiderData 2019年2月13日 DApp数据排行榜
  • vue-router 实现分析
  • 案例分享〡三拾众筹持续交付开发流程支撑创新业务
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 对象管理器(defineProperty)学习笔记
  • 对象引论
  • 飞驰在Mesos的涡轮引擎上
  • 服务器之间,相同帐号,实现免密钥登录
  • 解析带emoji和链接的聊天系统消息
  • 开源SQL-on-Hadoop系统一览
  • 聊聊redis的数据结构的应用
  • 面试题:给你个id,去拿到name,多叉树遍历
  • 使用 QuickBI 搭建酷炫可视化分析
  • 使用putty远程连接linux
  • 思否第一天
  • 一文看透浏览器架构
  • 应用生命周期终极 DevOps 工具包
  • HanLP分词命名实体提取详解
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • ​中南建设2022年半年报“韧”字当头,经营性现金流持续为正​
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • #define 用法
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (27)4.8 习题课
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (九十四)函数和二维数组
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • ***利用Ms05002溢出找“肉鸡
  • **python多态
  • .FileZilla的使用和主动模式被动模式介绍