【id:76】【20分】B. 商旅信用卡(多重继承)

【id:76】【20分】B. 商旅信用卡(多重继承)_第1张图片

 

题目描述

某旅游网站(假设旅程网)和某银行推出旅游综合服务联名卡—旅程信用卡,兼具旅程会员卡和银行信用卡功能。

旅程会员卡,有会员卡号(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
using namespace std;

//旅程会员卡,有会员卡号(int)、旅程积分(int),通过会员卡下订单,按订单金额累计旅程积分。
class vip
{
protected:
    int number;
    int fen;
public:
    vip() {};
    //初始化赋值
    vip(int n)
    {
        number = n;
        fen = 0;
    }
};


//信用卡,有卡号(int)、姓名(string)、额度(int)、账单金额(float)、信用卡积分(int)。------请注意数据类型
class credic
{
protected:
    int number;
    string name;
    int edu;
    float jin;
    int fen;
public:
    credic() {};
    //初始化赋值
    credic(int n, string na, int e)
    {
        number = n;
        name = na;
        edu = e;
        jin = 0;
        fen = 0;
    }
    void sub(float money)
    {
        if (money < edu)
        {
            //单金额+m,额度-m,信用卡积分按消费金额累加。
            jin += money;
            edu -= money;
            fen += money;
        }
    }
    void withdraw(float m)
    {
        //信用卡退款m,账单金额-m,信用卡积分减去退款金额。
        jin -= m;
        fen -= m;
    }
};

//创建一个子类 继承两个父类
class vip1 :public credic, public vip
{
private:
    // 旅程积分:信用卡积分= 1:2    的比例将信用卡积分兑换为旅程积分。
public:
    //通过旅程信用卡在旅程网下单,旅程积分和信用卡积分双重积分(即旅程积分和信用卡积分同时增加)。
    vip1() {};
    //初始化赋值 
    vip1(int number1, int number2, string name, int edu) :vip(number1), credic(number2, name, edu)
    {

    }
    void add(float m)//通过旅程信用卡在旅程网下单,旅程积分和信用卡积分双重积分(即旅程积分和信用卡积分同时增加)。
                                  // o   m(旅程网下订单,订单金额m)
    {
        //即旅程积分和信用卡积分同时增加
        vip::fen += m;
        credic::fen += m;
        jin += m;
    }

    void change(float m)
    {
        credic::fen -= m;
        vip::fen += m / 2;
    }
    void print()
    {
        cout << vip::number << " ";
        cout << vip::fen << endl;
        cout << credic::number << " " << name << " " << jin << " " << int(credic::fen) + 1 << endl;
    }
};
int main()
{
    int number1, number2;
    string name;
    int edu;
    int n;
    cin >> number1 >> number2 >> name >> edu;//输入旅程会员卡号 信用卡号 姓名 额度
    vip1 v1(number1, number2, name, edu);//创建子类对象v1并且赋值
    cin >> n;//测试次数n
    char a;
    float w;
    for (int i = 0; i < n; i++)
    {
        cin >> a >> w;//操作  金额或积分
      /*  o   m(旅程网下订单,订单金额m)
        c   m(信用卡消费,消费金额m)
        q   m(信用卡退款,退款金额m)
        t    m(积分兑换,m信用卡积分兑换为旅程积分)*/

        if (a == 'o')// o   m(旅程网下订单,订单金额m)
        {
            v1.add(w);
        }
        else if (a == 'c')
        {
            v1.sub(w);
        }
        else if (a == 'q')
        {
            v1.withdraw(w);
        }
        else
        {
            v1.change(w);
        }
    }
    v1.print();
    return 0;
}

你可能感兴趣的:(oj,c++,数学建模)