商旅信用卡(多重继承)
题目描述
某旅游网站(假设旅程网)和某银行推出旅游综合服务联名卡—旅程信用卡,兼具旅程会员卡和银行信用卡功能。
旅程会员卡,有会员卡号(int)、旅程积分(int),通过会员卡下订单,按订单金额累计旅程积分。
信用卡,有卡号(int)、姓名(string)、额度(int)、账单金额(float)、信用卡积分(int)。------请注意数据类型。
信用卡消费金额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<cstring>
#include<cmath>
using namespace std;
class VIP//旅程会员卡
{
public:
VIP(int number1,int score1)
{
number=number1;
score=score1;
}
int add(float m)//旅程积分增加
{
score+=m;
return score;
}
protected:
int number;
static int score; //旅程积分
};
int VIP::score=0;
class Creditcard//信用卡
{
public:
Creditcard(int number1,string name1,int sum1,float pay1,int score1)
{
number3=number1;
name=name1;
sum=sum1;
pay=pay1;
score3=score1;
}
void use(float m)//m为信用卡消费金额
{
if(m+pay>sum)
{
}
else
{
pay+=m;
score3=score3+m;
}
}
void showpay()
{
cout<<pay<<endl;
}
void back(float m)
{
pay-=m;
score3=score3-m;
}
int add(float m)//信用卡积分增加
{
score3=score3+m;
return score3;
}
protected:
int number3;
string name;
int sum;//额度
float pay;//账单金额
static float score3;//信用卡积分
};
float Creditcard::score3=0;
class Tripcreditcard:public VIP,public Creditcard//旅程信用卡
{
public:
Tripcreditcard(int number1,int number2,string name1,int sum1,float pay1,int score1,int score2):Creditcard(number2,name1,sum1,pay1,score2),VIP(number1,score1)
{
}
void add(float m)
{
int s1,s2,s3;
s1=VIP::add(m);
s2=Creditcard::add(m);
pay+=m;
}
void change(float m)
{
int s1,s2,s3;
s2=m/2;
score=score+s2;
score3=score3-m;
}
void display()
{
cout<<number<<" ";
cout<<score<<endl;
cout<<number3<<" "<<name<<" "<<pay<<" "<<int(score3)<<endl;
}
} ;
int main()
{
int number1,number2;
string name1;
float m;
int sum1;
int t,i;
char a;
cin>>number1>>number2>>name1>>sum1;
Tripcreditcard Tripcreditcard1(number1,number2,name1,sum1,0,0,0);
cin>>t;
for(i=0;i<t;i++)
{
cin>>a>>m;
if(a=='o')
{
Tripcreditcard1.add(m);
}
else if(a=='c')
{
Tripcreditcard1.use(m);
}
else if(a=='q')
{
Tripcreditcard1.back(m);
}
else if(a=='t')
{
Tripcreditcard1.change(m);
}
}
Tripcreditcard1.display();
return 0;
}