cpp练习:商旅信用卡(多重继承)

题目描述

某旅游网站(假设旅程网)和某银行推出旅游综合服务联名卡—旅程信用卡,兼具旅程会员卡和银行信用卡功能。
旅程会员卡,有会员卡号(int)、旅程积分(int),通过会员卡下订单,按订单金额累计旅程积分。
信用卡,有卡号(int)、姓名(string)、额度(int)、账单金额(float)、信用卡积分(int)。------请注意数据类型
信用卡消费金额m,若超额度,则不做操作;否则,账单金额+m,额度-m,信用卡积分按消费金额累加。
信用卡退款m,账单金额-m,信用卡积分减去退款金额。
通过旅程信用卡在旅程网下单,旅程积分和信用卡积分双重积分(即旅程积分和信用卡积分同时增加)。
旅程信用卡可以按 旅程积分:信用卡积分= 1:2 的比例将信用卡积分兑换为旅程积分。
初始假设信用卡积分、旅程积分、账单金额为0。
根据上述内容,定义旅程会员卡类、信用卡类,从两者派生出旅程信用卡类并定义三个类的构造函数和其它所需函数。
生成旅程信用卡对象,输入卡信息,调用对象成员函数完成旅程网下单、信用卡刷卡、信用卡退款、信用卡积分兑换为旅程积分等操作。

输入

第一行:输入旅程会员卡号 信用卡号 姓名 额度
第二行:测试次数n
第三行到第n+2行,每行:操作 金额或积分
o m(旅程网下订单,订单金额m)
c m(信用卡消费,消费金额m)
q m (信用卡退款,退款金额m)
t m(积分兑换,m信用卡积分兑换为旅程积分)

输出

输出所有操作后旅程信用卡的信息:
旅程号 旅程积分
信用卡号 姓名 账单金额 信用卡积分

输入样例

1000 2002 lili 3000
4
o 212.5
c 300
q 117.4
t 200

输出样例

1000 312
2002 lili 395.1 195

参考代码

#include<iostream>
#include<string>
using namespace std;

//旅程会员卡
class TravelCard {
protected:
	int travel_id;
	float travel_score;
public:
	TravelCard(int t):travel_id(t),travel_score(0){}

	void addScore(float m) {
		travel_score+=m;
	}

	void printTravelCard() {
		cout << travel_id << ' ' << (int)travel_score << endl;
	}
};

//信用卡
class CreditCard {
protected:
	int credit_id;
	string name;
	float range;
	float bill;
	float credit_score;
public:
	CreditCard(int c,string n,float r):credit_id(c),name(n),range(r),bill(0),credit_score(0){}

	void swipe(float m) {
		if (m <= range) {
			bill += m;
			credit_score += m;
			range -= m;
		}
	}

	void refund(float m) {
		bill -= m;
		credit_score -= m;
		range += m;
	}

	void printCreditCard() {
		cout << credit_id << ' ' << name << ' ' << bill << ' ' << (int)credit_score << endl;
	}
};

//旅程信用卡
class TravelCreditCard :public TravelCard, public CreditCard {
public:
	TravelCreditCard(int t,int c,string name,float range):TravelCard(t),CreditCard(c,name,range){}

	//积分同时增加
	void order(float m) {
		addScore(m);
		swipe(m);
	}

	//按比例兑换
	void exchange(float m) {
		credit_score -= m;
		float travel_points = m / 2.0;
		addScore(travel_points);
	}

	void print() {
		printTravelCard();
		printCreditCard();
	}
};

int main() {
	int travel_id, credit_id;
	string name;
	float range;
	int n;
	char type;
	float m;

	cin >> travel_id >> credit_id >> name >> range;
	TravelCreditCard tcc(travel_id, credit_id, name, range);
	
	cin >> n;
	for (int i = 0; i < n; ++i) {
		cin >> type >> m;
		switch (type) {
		case'o':
			tcc.order(m);
			break;
		case'c':
			tcc.swipe(m);
			break;
		case'q':
			tcc.refund(m);
			break;
		case't':
			tcc.exchange(m);
			break;
		}
	}
	tcc.print();
	return 0;
}

笔记

多重继承,调用继承的成员函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值