继承与派生类练习plus pro pax

一、写在前面

        哈哈哈!sgq真有你的,课前发一张小图片我本来还以为是一道很简单的题,结果我怒肝400行代码我真服啦~

二、题目

题目呢就是这么个题目

 三、解析

Step1.抽象

        虽然这道题的题干已经将基类与派生类的关系整理的很清晰了,我们还是先按照步骤一步一步来,每个类的关系如下:

Step2. 构建Ac类

        代码分析那么我们就从基类:Ac类开始构建吧~

        参考代码:
class Ac {
protected:
	string id;//账号
	string name;//储户姓名
	long double balance;//余额
	double rate;//利率
public:
	Ac() { }
	Ac(const string id, const string name, const long double balance, const double rate) {
		this->id = id;
		this->name = name;
		this->balance = balance;
		this->rate = rate;
		accountquantity++;
		return;
	}
	~Ac(){  }
	void deposit() {//存款
		int cash;
		cout << "请输入要存款的金额:";
		cin >> cash;
		balance += cash;
		cout << "存款成功!当前余额为:" << cash << endl;
		return;
	}
	void withdrawal() {//取款
		int money;
		cout << "请输出要取款的金额:";
		cin >> money;
		if (balance >= money) {
			balance -= money;
			cout << "取款成功!当前账户余额为:" << balance << endl;
		}
		else {
			cerr << "余额不足!当前账户余额为:" << balance << endl;
		}
		return;
	}
	void list() {
		cout << "账号:" << id << endl;
		cout << "姓名:" << name << endl;
		cout << "余额:" << balance << endl;
		cout << "利率" << rate << endl;
	}
	void calculate(Ac account) {
		cout << "本账户余额:" << balance << endl;
		cout << "查询账户余额:" << account.balance << endl;
		if (account.balance > balance) {
			cout << "您的账户比该账户少" << account.balance - balance << "元" << endl;
			cout << "反思一下这几年有没有努力认真工作" << endl;
			return;
		}
		else if (account.balance < balance) {
			cout << "您的账户比该账户多" << balance - account.balance << "元" << endl;
			cout << "快去买花西子眉笔!" << endl;
			return;
		}
		else{
			cout << "你俩半斤半两,余额一样多" << endl;
			return;
		}
	}
	string getacid() {
		return id;
	}
};
代码分析:

        鉴于最简单的类的构建方法我们已经学习过了,每个变量名的意思已经在注释中标注出来了,这里只说一些重点~

1.变量accountquantity

        因为考虑到后续在主调函数中创建一个对象数组,用于存放多个账户对象,因此我们定义了一个全局变量accountquantity,用于统计普通用户的数量,并将它自增的操作放在了有参构造函数中,无参构造函数中不对这个变量进行任何操作,从而实现对账户数的计数操作,这一方法我们会在VIPAc类中详细讲解。后续类中也会出现莫名其妙的quantity后缀的变量,与之同理。

统计方法实现参见5.5

2.函数withdrawal()

        这是一个取钱函数,我们需要留意用户余额不足的情况,不要忘记在这里添加if-else语句进行判断,这个函数在VIPAc中会更加复杂,具体逻辑在VIPAc类中也会详细讲解。

3.函数calculate()

        这是计算两个用户余额差的函数,这个函数在一个类内,我们还需要另一个账户与之比较,因此需要传入参数与其进行比较,本类中的变量直接引用其变量名即可,传入的变量在变量名前加上类名和成员运算符即可

4.函数getACid()

        一开始写这个类的时候我们是不会考虑写这个成员函数的,但是后续主函数中需要用到类中id的值,因此需要创建一个接口,将账号传给主函数。后续的类的定义中也会遇到相同情况,都是因为在查找时用到账号作为接口进行数据交换,后续不再赘述。


Step3.构建manager类

        读题后我们留意到,VIPAc类中有一个数据成员为客户经理,因此客户经理类的定义在VIP客户类的定义前更合理,且客户经理类的构建也没什么难点,因此我们先构建客户经理类。

        参考代码:
class manager {
private:
	string num;//工号
	string managername;//姓名
	double seniority;//工龄
public:
	manager() { }
	manager(const string num,const string name,const int seniority) {//构造函数
		this->num = num;
		this->managername = name;
		this->seniority = seniority;
		managerquantity++;
		return;
	}
	string getnum(){
		return num;
	}
	string getmanagername() {
		return managername;
	}
	double getseniority() {
		return seniority;
	}
	void list() {//显示信息
		cout << "工号:" << num << endl;
		cout << "姓名" << managername << endl;
		cout << "工龄" << seniority << endl;
	}
	string getmanagerid() {
		return num;
	}
};
代码分析:
1.访问属性private

        由于manager类与其他类没有直接的联系,没有派生类,因此将数据成员的访问属性设置为private。

Step4.构建VIPAc类

        这个类有那么亿点点复杂,我们按功能拆分来看:

4.1数据成员
参考代码:
private:
	manager VIPManager;//客户经理
	int level;//等级
	long double overdraftlimit;//剩余透支额度
	long double overdraft;//已经透支额度
 代码分析:
1.变量overdraft与overdraftlimit

        虽然题干条件要求我们记录透支额度,但是我们需要记录用户已透支的数额与剩余的透支额度,因此不能只用一个变量表示,当用户透支时,我们通过动态改变overdraft和overdraftlimit的值就可以实现关于用户透支的计算,需要注意的是overdraft和overdraftlimit的和始终不变,永远等于用户最初的总透支额度,这个的计算逻辑在存取款函数中会详细讲解。

4.2存取款函数

        接下来我们趁热打铁,直接看存取款函数。

参考代码:
void deposit() {//存款
	int cash;
	cout << "请输入要存款的金额:";
	cin >> cash;
    if (overdraft == 0) {//0
	    balance += cash;
    }
	if (overdraft >= 0 && cash <= overdraft) {//1
		overdraft -= cash;
		overdraftlimit += cash;
	}
	else if (overdraft >= 0 && cash > overdraft) {//2
		balance+=cash - overdraft;
		overdraftlimit += cash - overdraft;
		overdraft = 0;
	}
	cout << "存款成功!当前余额为:" << balance << endl;
	cout << "剩余未还款" << overdraft << "元" << endl;
	return;
}
void withdrawal() {//取款
	int money;
	cout << "请输出要取款的金额:";
	cin >> money;
	if (balance >= money) {//3
		balance -= money;
		cout << "取款成功!当前账户余额为:" << balance << "元" << endl;
		cout << "您已透支" << overdraft << "元" << endl;
	}
	else if (balance + overdraftlimit >= money) {//4
		overdraftlimit -= money - balance;
		overdraft += money - balance;
		balance = 0;
		cout << "取款成功!当前账户余额为:" << balance << "元" << endl;
		cout << "您已透支" << overdraft << "元" << endl;
	}
	else {//5
		cerr << "余额不足!当前账户余额为:" << balance << "元" << endl;
	}
	return;
}
  代码分析:

        一共是六种情况,在程序中标注出来了,下面的序号对应程序中的if-else语句

情况0:

        用户没透支,直接存到存款里面。

情况1:

        用户透支,且存款数额无法还清透支数额。这里我们的操作是将所有的存款用于清偿透支金额,让overdraftlimit增加money元,overdraft减少money元。

情况2:

        用户透支,且存款数额可以清偿透支数额,甚至有富余。这里将存款抵扣全部透支款项后将剩余的存款存入余额中。这里剩下的富余就是存入的钱数(money)- 透支的钱数(overdraft)

情况3:

        用户的余额可以大于用户取款数额,可以直接从余额中取款。

情况4:

        用户的余额小于取款数额,但是加上剩余透支额度后足够支撑取款数额。这里现从余额中取钱,需要透支的金额就是取款数额(money)- 余额(balance),之后把余额清空。

情况5:

        用户透支后仍无法满足其取钱的额度,输出错误反馈:余额不足,不进行其他操作。

4.3构造析构函数

        这没啥说的,留意一下复合类的初始化和基类的初始化就好了,注意传入的参数的类型和数量,在主函数中一一对应好,一般构造函数报错就检查一下参数类型和数量是不是对应的就好了。

参考代码:
VIPAc() { }
VIPAc(const string VIPid, const string name, const long double balance, const double rate,
	const string num, const string managername, const int seniority,
	int level, long double overdraftlimit,long double overdraft):Ac(VIPid,name,balance,rate),VIPManager(num,managername,seniority){
	this->level = level;
	this->overdraftlimit = overdraft;
	this->overdraft = overdraft;
	VIPquantity++;
	return;
}
~VIPAc() {}
4.4其他函数
参考代码:
void output() {
	cout << "尊敬的VIP用户" << endl;
	list();
	cout << "等级:" << level << "级" << endl;
	cout << "透支额度:" << overdraftlimit + overdraft << "元" << endl;
	cout << "已透支:" << overdraft << "元" << endl;
	cout << "VIP客户经理信息:" << endl;
	VIPManager.list();
}
string getVIPid() {
	return id;
}
Step5.主调函数

        主调函数需要完成的事项比较多,我们将需要完成的操作罗列出来,将同类的操作写在同一个功能中,整合后我的思路如下,下面的程序也将以对应的逻辑编写,我们按功能进行讲解:        

 5.1变量定义

        数据的变量大概就是这样,首页的UI设计也一并呈现在这里了。

参考代码:
int choice,seniority;
Ac account[100];
manager VIPmanager[100];
VIPAc VIP[100];
string id, name;
long double balance, overdraft;
double rate;
//变量声明
cout << "        ----------------------------" << endl;
cout << "        欢迎进入“小小银行”管理软件" << endl;
cout << "        ----------------------------" << endl;
 5.2搜索函数

        这个函数在题干中虽然没有明确指出要写,但是我们会发现,后续用户存款取款等操作时我们都需要先检测一下用户输入的账号是否在系统内,同时比较查询的操作也需要在数组中找到对应的账户,因此我们将这两个功能的判断融合到一个函数中,用到的遍历方法还是和给定区间查找素数的方法相同,找到我们就返回下标,如果遍历结束我们还没找到我们就返回-1.这里需要注意的是,由于我们返回的是数组下标,因此没找到的情况我们不可以返回0!!!最后在开户时我们需要注册的账号不可以与已存在的任何类型的账号相同,为了减少函数的重复调用,我添加了全局查找的函数,以布尔型作为返回值的形式,分别调用这三个函数,同时返回-1是即为传入的账号不存在,我们就可以放心注册了。

参考代码:
int searchAc(Ac ac[],string number) {
	for (int i = 0; i <= accountquantity; i++) {
		if (ac[i].getacid() == number) {
			return i;
		}
		else if (i == accountquantity)
			return -1;
	}
}
int searchVIPAc(VIPAc ac[], string number) {
	for (int i = 0; i <= accountquantity; i++) {
		if (ac[i].getVIPid() == number) {
			return i;
		}
		else if (i == accountquantity)
			return -1;
	}
}
int searchmanagerAc(manager ac[], string number) {
	for (int i = 0; i <= accountquantity; i++) {
		if (ac[i].getmanagerid() == number) {
			return i;
		}
		else if (i == accountquantity)
			return -1;
	}
}
bool totalsearch(Ac ac1[], VIPAc ac2[], manager ac3[], string number) {
	if (searchAc(ac1, number) == -1 && searchVIPAc(ac2, number) == -1 && searchmanagerAc(ac3, number) == -1)
		return false;
	else return true;
}
5.3VIP类的余额差计算函数

        普通账户的余额差计算函数我们已经编写在Ac类中,但是需要传入一个对象,因此我们在类外定义计算函数,在这个函数中我们通过输入账号搜索账户,从而实现账户余额的比较。

参考代码:
void calculate(Ac account[],VIPAc VIP[]) {
	string id;
	cout << "请输入要查询比较的账号:";
	cin >> id;
	if (searchAc(account, id)!=-1|| searchVIPAc(VIP, id) != -1) {
		VIP[searchVIPAc(VIP, id)].calculate(account[searchAc(account, id)]);
	}
	else {
		cerr << "该用户不存在!" << endl;
	}
	return;
}
5.4办理业务功能

        我们有了查找函数,如果数据库中存在的话就会直接返回对应的下标,因此我们调用对应对象的成员函数时直接将查找函数作为数组的下标即可。

        同时,要办理业务,数据库中首先要有客户,因此我在前面添加了数据库中是否存在客户的判断,也很简单,用两个变量全局变量判断即可,不知道这两个全局变量代表含义的参见Step1构建Ac类的1.

        最后,我们根据我们要完成的功能依次调用对应的函数就可以了。代码虽然长,但是大多都是重复性的操作,没什么技术含量。

参考代码
case 1:
{
	int oper;
	if (accountquantity == 0 && VIPquantity == 0) {
		cout << "当前无客户,请先添加客户!" << endl;
		break;
	}
	cout << "请输入您的账号:" << endl;
	cin >> id;
	if (searchVIPAc(VIP, id) != -1) {
		cout << "尊敬的VIP用户您好!很高兴为您服务!!" << endl;//万恶的资产阶级的嘴脸,情绪价值必须拉满
		cout << "请输入您要办理的业务:" << endl;
		cout << "1:存款 2:取款 3:他人账户余额查询比较 4.输出0:返回" << endl;
		cin >> oper;
		switch (oper)
		{
		case 1:
			VIP[searchVIPAc(VIP, id)].deposit();
			break;
		case 2:
			VIP[searchVIPAc(VIP, id)].withdrawal();
			break;
		case 3:
			calculate(account, VIP);
			break;
		case 4:
			VIP[searchVIPAc(VIP, id)].list();
		case 0:
			break;
		}//endswitch
	}//endif
	else if (searchAc(account, id) != -1) {
		cout << "普通用户" << endl;
		cout << "请输入您要办理的业务:" << endl;
		cout << "1:存款 2:取款 3:他人账户余额查询比较 4.输出0:返回" << endl;
		cin >> oper;
		switch (oper)
		{
		case 1:
			account[searchAc(account, id)].deposit();
			break;
		case 2:
			account[searchAc(account, id)].withdrawal();
			break;
		case 3:
			calculate(account, VIP);
			break;
		case 4:
			account[searchAc(account, id)].list();
		case 0:
			break;
		}
	}//endcase
5.5客户账号的维护

        这步需要注意的点就是VIP用户数量的统计,这个也在VIP用户注册成功后的输出提示中有所体现。这个操作可把tjl难坏了,那就让我好好给她展示一下吧~听明白了别忘了给我加分()

        我们都知道,我们在主函数中定义一个数组的时候,空间就已经开辟出来,也就调用了构造函数。如果我们将数量统计变量在构造函数中自增就会出现这个变量的值等于数组长度的情况。因此,我想到了让开辟数组空间和开户操作调用不同的构造函数,从而达到统计的目的。

        在定义这三个类的构造函数的时候分别定义了两个构造函数,一个有参构造函数和一个无参构造函数。我们定义对象数组的时候后面不加括号,调用无参构造函数,我们在开户时,建立一个临时的对象,让它调用有参的构造函数,因为我们把数量统计变量放在了有参的构造函数中,所以每次调用有参的构造函数时,数量就会自增,从而达到我们目的。

        其他可能会出现问题的语句已做好注释。

参考代码:
case 2:
{
	int operate;
	cout << "请选择开户类型:" << endl;
	cout << "1:VIP账户 2:普通账户" << endl;
	cin >> operate;
	switch (operate) {
	case 1: {
		if (managerquantity == 0) {//没有录入客户经理时不可以录入VIP用户
			cout << "无客户经理,无法为VIP用户开户!" << endl;
			break;
		}
		cout << "请输入账号:";
	loop1:
		cin >> id;
		if (totalsearch(account, VIP, VIPmanager, id) == true) {//全局搜索,有重复的账号的话需要重新输入账号
			cerr << "该账号已存在,请重新输入:";
			goto loop1;
		}
		cout << "请输入姓名:";
		cin >> name;
		cout << "请输入利率:";
		cin >> rate;
		cout << "请输入透支额度:";
		cin >> overdraft;
		cout << "请输入客户经理工号:";
		cin >> id;
		if (searchmanagerAc(VIPmanager, id) == -1) {//没有找到对应的客户经理的情况
			cerr << "未找到对应客户经理!" << endl;
			break;
		}
		else {
			VIPAc tempVIP(id, name, 0, rate,
				VIPmanager[searchmanagerAc(VIPmanager, id)].getnum(),
				VIPmanager[searchmanagerAc(VIPmanager, id)].getmanagername(),
				VIPmanager[searchmanagerAc(VIPmanager, id)].getseniority(),
				1, overdraft, 0);
			VIP[VIPquantity] = tempVIP;
			cout << "恭喜您,成为第" << VIPquantity << "位尊贵的VIP用户!!" << endl;
			break;
		}//endelse
	}//endcase
	case 2:
		cout << "请输入账号:";
	loop2:
		cin >> id;
		if (totalsearch(account, VIP, VIPmanager, id) == true) {
			cout << "该账号已存在,请重新输入:";
			goto loop2;
		}
		cout << "请输入姓名:";
		cin >> name;
		cout << "请输入利率:";
		cin >> rate;
		Ac tempaccount(id, name, 0, rate);
		account[accountquantity] = tempaccount;
		break;
	}//endswitch
	break;
}//endcase
运行结果:

5.6 客户经理的维护和退出程序

        这里就很常规了,给个代码看看实力。

参考代码:

case 3:
{
	cout << "请输入工号:";
	cin >> managerid;
	cout << "请输入姓名:";
	cin >> name;
	cout << "请输入工龄:";
	cin >> seniority;
	manager tempmanager(managerid, name, seniority);
	VIPmanager[managerquantity] = tempmanager;
	break;
}//endcase
case 0: return 0;

四、整体代码

        这个代码一共373行,还有很多地方可以优化,放在这里方便大家修改指正,同时我也绑定了资源,大家也可以下载嘻嘻~

#include<iostream>
#include<cstring>
using namespace std;
int accountquantity = 0;
int VIPquantity = 0;
int managerquantity = 0;

class Ac {
protected:
	string id;//账号
	string name;//储户姓名
	long double balance;//余额
	double rate;//利率
public:
	Ac() { }
	Ac(const string id, const string name, const long double balance, const double rate) {
		this->id = id;
		this->name = name;
		this->balance = balance;
		this->rate = rate;
		accountquantity++;
		return;
	}
	~Ac(){  }
	void deposit() {//存款
		int cash;
		cout << "请输入要存款的金额:";
		cin >> cash;
		balance += cash;
		cout << "存款成功!当前余额为:" << balance << endl;
		return;
	}
	void withdrawal() {//取款
		int money;
		cout << "请输出要取款的金额:";
		cin >> money;
		if (balance >= money) {
			balance -= money;
			cout << "取款成功!当前账户余额为:" << balance << endl;
		}
		else {
			cerr << "余额不足!当前账户余额为:" << balance << endl;
		}
		return;
	}
	void list() {
		cout << "账号:" << id << endl;
		cout << "姓名:" << name << endl;
		cout << "余额:" << balance << endl;
		cout << "利率" << rate << endl;
	}
	void calculate(Ac account) {
		cout << "本账户余额:" << balance << endl;
		cout << "查询账户余额:" << account.balance << endl;
		if (account.balance > balance) {
			cout << "您的账户比该账户少" << account.balance - balance << "元" << endl;
			cout << "反思一下这几年有没有努力认真工作" << endl;
			return;
		}
		else if (account.balance < balance) {
			cout << "您的账户比该账户多" << balance - account.balance << "元" << endl;
			cout << "快去买花西子眉笔!" << endl;
			return;
		}
		else{
			cout << "你俩半斤半两,余额一样多" << endl;
			return;
		}
	}
	string getacid() {
		return id;
	}
};
class manager {
private:
	string num;//工号
	string managername;//姓名
	double seniority;//工龄
public:
	manager() { }
	manager(const string num,const string name,const int seniority) {//构造函数
		this->num = num;
		this->managername = name;
		this->seniority = seniority;
		managerquantity++;
		return;
	}
	string getnum(){
		return num;
	}
	string getmanagername() {
		return managername;
	}
	double getseniority() {
		return seniority;
	}
	void list() {//显示信息
		cout << "工号:" << num << endl;
		cout << "姓名" << managername << endl;
		cout << "工龄" << seniority << endl;
	}
	string getmanagerid() {
		return num;
	}
};
class VIPAc :public Ac {
private:
	manager VIPManager;//客户经理
	int level;//等级
	long double overdraftlimit;//剩余透支额度
	long double overdraft;//已经透支额度
public:
	VIPAc() { }
	VIPAc(const string VIPid, const string name, const long double balance, const double rate,
		const string num, const string managername, const int seniority,
		int level, long double overdraftlimit,long double overdraft):Ac(VIPid,name,balance,rate),VIPManager(num,managername,seniority){
		this->level = level;
		this->overdraftlimit = overdraft;
		this->overdraft = overdraft;
		VIPquantity++;
		return;
	}
	~VIPAc() {}
	void deposit() {//存款
		int cash;
		cout << "请输入要存款的金额:";
		cin >> cash;
		if (overdraft == 0) {
			balance += cash;
		}
		if (overdraft >= 0 && cash <= overdraft) {
			overdraft -= cash;
			overdraftlimit += cash;
		}
		else if (overdraft >= 0 && cash > overdraft) {
			balance+=cash - overdraft;
			overdraftlimit += cash - overdraft;
			overdraft = 0;
		}
		cout << "存款成功!当前余额为:" << balance << endl;
		cout << "剩余未还款" << overdraft << "元" << endl;
		return;
	}
	void withdrawal() {//取款
		int money;
		cout << "请输出要取款的金额:";
		cin >> money;
		if (balance >= money) {
			balance -= money;
			cout << "取款成功!当前账户余额为:" << balance << "元" << endl;
			cout << "您已透支" << overdraft << "元" << endl;
		}
		else if (balance + overdraftlimit >= money) {//剩余额度:overdraftlimit-overdraft
			overdraftlimit -= money - balance;
			overdraft += money - balance;
			balance = 0;
			cout << "取款成功!当前账户余额为:" << balance << "元" << endl;
			cout << "您已透支" << overdraft << "元" << endl;
		}
		else {
			cerr << "余额不足!当前账户余额为:" << balance << "元" << endl;
		}
		return;
	}
	void output() {
		cout << "尊敬的VIP用户" << endl;
		list();
		cout << "等级:" << level << "级" << endl;
		cout << "透支额度:" << overdraftlimit + overdraft << "元" << endl;
		cout << "已透支:" << overdraft << "元" << endl;
		cout << "VIP客户经理信息:" << endl;
		VIPManager.list();
	}
	string getVIPid() {
		return id;
	}
};


int searchAc(Ac ac[],string number) {
	for (int i = 0; i <= accountquantity; i++) {
		if (ac[i].getacid() == number) {
			return i;
		}
		else if (i == accountquantity)
			return -1;
	}
}
int searchVIPAc(VIPAc ac[], string number) {
	for (int i = 0; i <= VIPquantity; i++) {
		if (ac[i].getVIPid() == number) {
			return i;
		}
		else if (i ==VIPquantity)
			return -1;
	}
}
int searchmanagerAc(manager ac[], string number) {
	for (int i = 0; i <= managerquantity; i++) {
		if (ac[i].getmanagerid() == number) {
			return i;
		}
		else if (i == managerquantity)
			return -1;
	}
}
bool totalsearch(Ac ac1[], VIPAc ac2[], manager ac3[], string number) {
	if (searchAc(ac1, number) == -1 && searchVIPAc(ac2, number) == -1 && searchmanagerAc(ac3, number) == -1)
		return false;
	else return true;
}
void calculate(Ac account[],VIPAc VIP[]) {
	string id;
	cout << "请输入要查询比较的账号:";
	cin >> id;
	if (searchAc(account, id)!=-1|| searchVIPAc(VIP, id) != -1) {
		VIP[searchVIPAc(VIP, id)].calculate(account[searchAc(account, id)]);
	}
	else {
		cerr << "该用户不存在!" << endl;
	}
	return;
}

int main() {
	int choice, seniority;
	Ac account[100];
	manager VIPmanager[100];
	VIPAc VIP[100];
	string id, name, managerid;
	long double balance, overdraft;
	double rate;
	//变量声明
	cout << "        ----------------------------" << endl;//UI优化:居中
	cout << "        欢迎进入“小小银行”管理软件" << endl;
	cout << "        ----------------------------" << endl;
	while (1) 
	{//重复循环
		cout << "--------------------------------------------" << endl;
		cout << "1:办理业务 2:账户维护 3:经理维护 0:退出" << endl;
		cout << "--------------------------------------------" << endl;
		cin >> choice;//UI优化:列表输出后再输入choice变量
		switch (choice) {
		case 1:
		{
			int oper;
			if (accountquantity == 0 && VIPquantity == 0) {
				cout << "当前无客户,请先添加客户!" << endl;
				break;
			}
			cout << "请输入您的账号:" << endl;
			cin >> id;
			if (searchVIPAc(VIP, id) != -1) {
				cout << "尊敬的VIP用户您好!很高兴为您服务!!" << endl;//万恶的资产阶级的嘴脸,情绪价值必须拉满
				cout << "请输入您要办理的业务:" << endl;
				cout << "1:存款 2:取款 3:他人账户余额查询比较 4.输出0:返回" << endl;
				cin >> oper;
				switch (oper)
				{
				case 1:
					VIP[searchVIPAc(VIP, id)].deposit();
					break;
				case 2:
					VIP[searchVIPAc(VIP, id)].withdrawal();
					break;
				case 3:
					calculate(account, VIP);
					break;
				case 4:
					VIP[searchVIPAc(VIP, id)].list();
				case 0:
					break;
				}//endswitch
			}//endif
			else if (searchAc(account, id) != -1) {
				cout << "普通用户" << endl;
				cout << "请输入您要办理的业务:" << endl;
				cout << "1:存款 2:取款 3:他人账户余额查询比较 4.输出0:返回" << endl;
				cin >> oper;
				switch (oper)
				{
				case 1:
					account[searchAc(account, id)].deposit();
					break;
				case 2:
					account[searchAc(account, id)].withdrawal();
					break;
				case 3:
					calculate(account, VIP);
					break;
				case 4:
					account[searchAc(account, id)].list();
				case 0:
					break;
				}
			}//endcase
		case 2:
		{
			int operate;
			cout << "请选择开户类型:" << endl;
			cout << "1:VIP账户 2:普通账户" << endl;
			cin >> operate;
			switch (operate) {
			case 1: {
				if (managerquantity == 0) {
					cout << "无客户经理,无法为VIP用户开户!" << endl;
					break;
				}
				cout << "请输入账号:";
			loop1:
				cin >> id;
				if (totalsearch(account, VIP, VIPmanager, id) == true) {
					cout << "该账号已存在,请重新输入:";
					goto loop1;
				}
				cout << "请输入姓名:";
				cin >> name;
				cout << "请输入利率:";
				cin >> rate;
				cout << "请输入透支额度:";
				cin >> overdraft;
				cout << "请输入客户经理工号:";
				cin >> managerid;
				if (searchmanagerAc(VIPmanager, managerid) == -1) {
					cerr << "未找到对应客户经理!" << endl;
					break;
				}
				else {
					VIPAc tempVIP(id, name, 0, rate,
						VIPmanager[searchmanagerAc(VIPmanager, managerid)].getnum(),
						VIPmanager[searchmanagerAc(VIPmanager, managerid)].getmanagername(),
						VIPmanager[searchmanagerAc(VIPmanager, managerid)].getseniority(),
						1, overdraft, 0);
					VIP[VIPquantity] = tempVIP;
					cout << "恭喜您,成为第" << VIPquantity << "位尊贵的VIP用户!!" << endl;
					break;
				}//endelse
			}//endcase
			case 2:
				cout << "请输入账号:";
			loop2:
				cin >> id;
				if (totalsearch(account, VIP, VIPmanager, id) == true) {
					cout << "该账号已存在,请重新输入:";
					goto loop2;
				}
				cout << "请输入姓名:";
				cin >> name;
				cout << "请输入利率:";
				cin >> rate;
				Ac tempaccount(id, name, 0, rate);
				account[accountquantity] = tempaccount;
				break;
			}//endswitch
			break;
		}//endcase
		case 3:
		{
			cout << "请输入工号:";
			cin >> managerid;
			cout << "请输入姓名:";
			cin >> name;
			cout << "请输入工龄:";
			cin >> seniority;
			manager tempmanager(managerid, name, seniority);
			VIPmanager[managerquantity] = tempmanager;
			break;
		}//endcase
		case 0: return 0;
		}//endcase
		}//endswitch
	}//endwhile
}//endmain
运行结果:

       Ctrl+C,打开VS编译器,Ctrl+V,F5,编译出来是啥就是啥。

  • 13
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜜汁博哥

我是大学生,给钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值