【id:124】【20分】A. 一、会员积分(期末模拟)

该文描述了一个C++编程问题,涉及会员系统的实现,包括普通会员和贵宾会员。会员类包含编号、姓名和积分属性,支持积分累加和兑换操作。贵宾会员类继承普通会员,增加了累加比例和兑换比例属性,并重定义了积分累加和兑换方法。程序需采用继承和虚函数实现多态性,通过指针调用不同会员类型的方法进行操作。
摘要由CSDN通过智能技术生成

题目描述

某电商网站的会员分为:普通、贵宾两个级别

普通会员类Member,包含编号、姓名、积分三个属性,编号和积分是整数,姓名是字符串

操作包括构造、打印、积分累加、积分兑换,操作定义如下:

1、积分累加add,是根据消费金额累加积分,无返回值,参数是消费金额(整数),积分根据消费金额按1比1的比例累加。

2、积分兑换exchange,是按照每100积分换1元的比例,把积分兑换成现金。参数是要兑换的积分数量,返回值是兑换的现金数量。

注意:兑换积分数量不足100的部分是不能兑换的,例如会员原有500积分,要兑换积分数量为450,则450/100=4,最终用400积分兑换4元,会员余100积分。

3、打印是输出会员信息,格式参考输出样例

贵宾会员类VIP,继承了普通会员的属性与操作,新增两个属性:累加比例(整数)、兑换比例(整数)。并且重定义了所有操作:

1、积分累加中,积分按累加比例进行累加。例如累加比例是2,消费金额100元,则累加积分=100*2=200

2、积分兑换中,按照兑换比例的数值把积分抵扣消费金额。例如兑换比例是90,会员原有500积分,要兑换积分数量为420,则420/90=4,最终用360积分兑换4元,会员余140积分。

3、打印是输出会员信息,格式参考输出样例

程序要求

1、采用继承机制实现上述会员关系

2、打印、积分累加和积分兑换都采用虚函数方式,来实现运行多态性

3、派生的构造函数必须考虑基类属性的构造。

4、必须采用以下代码框架,在提示的地方增加代码,其他地方不能修改。

上述所有类属性都不是public,用面向对象思想和C++语言实现上述要求

----参考代码----

// 普通会员类class Member 
{  
	// ....代码自行编写
};

// 贵宾会员类class VIP .... 
{  
	// ....代码自行编写
};

int main()
{
	// 创建一个基类对象指针
	Member* pm;
	// ....其他变量自行编写

	// 输入数据,创建普通会员对象mm
	// 使用指针pm执行以下操作:
	// 1、pm指向普通会员对象mm
	// 2、输入数据,通过pm执行积分累加和积分兑换
	// 3、通过pm调用打印方法输出

	// 输入数据,创建贵宾会员对象vv
	// 使用指针pm执行以下操作:
	// 1、pm指向贵宾会员对象vv
	// 2、输入数据,通过pm执行积分累加和积分兑换
	// 3、通过pm调用打印方法输出

	return0;
}

输入

第一行输入普通会员的三个信息:编号、姓名、积分

第二行输入两个操作信息:消费金额、积分兑换数量,表示普通会员执行一次积分累加,一次积分兑换

第三行输入贵宾会员的五个信息:编号、姓名、积分、累加比例、兑换比例

第四行输入两个操作信息:消费金额、积分兑换数量,表示贵宾会员执行一次积分累加,一次积分兑换

输出

第一行输出普通会员执行两个操作后的信息,要求调用打印方法

第二行输出贵宾会员执行两个操作后的信息,要求调用打印方法

样例查看模式

正常显示查看格式

输入样例1 <-复制

输出样例1

#include<iostream>
using namespace std;
class Member
{
    //包含编号、姓名、积分三个属性,编号和积分是整数,姓名是字符串
protected:
    int num;
    int ji;
    string name;
public:
    //构造、打印、积分累加、积分兑换,操作定义如下
    Member() {};
    Member(int num, string name, int ji)
    {
        this->num = num;
        this->ji = ji;
        this->name = name;
    }
    //参数是消费金额(整数),积分根据消费金额按1比1的比例累加。
    virtual void add(int m)
    {
        ji += m;
    }
    virtual int exchange(int j)
    {
        //参数是要兑换的积分数量,返回值是兑换的现金数量。
        int money;
        if (j % 100 != 0)//不满足要求
        {
            j -= j % 100;//得到要减的整数部分
            ji -= j;
            money = j / 100;
        }
        else
        {
            ji -= j;
            money = j / 100;
        }
        return money;
    }
    virtual void print()
    {
        cout << "普通会员" << num << "--" << name << "--" << ji << endl;
    }
};
//贵宾会员类VIP,继承了普通会员的属性与操作,新增两个属性:累加比例(整数)、兑换比例(整数)。并且重定义了所有操作:
class vip:public Member
{//累加比例、兑换比例
private:
    int addrate;
    int ecrate;
public:
    vip() {};
    vip(int n, string na, int i, int add, int exg) :Member(n, na, i)
    {
        addrate = add;
        ecrate = exg;
    }
    virtual void add(int money)
    {
        ji += (money * addrate);
    }
    virtual int exchange(int j)
    {
        //参数是要兑换的积分数量,返回值是兑换的现金数量。
        int money;
        if (j % ecrate != 0)//不满足要求
        {
            j -= j % ecrate;//得到要减的整数部分
            ji -= j;
            money = j / ecrate;
        }
        else
        {
            ji -= j;
            money = j / ecrate;
        }
        return money;
    }
    virtual void print()
    {
        cout << "贵宾成员" << num << "--" << name << "--" << ji << endl;
    }
};
int main()
{
    // 创建一个基类对象指针
    Member* pm;
    // ....其他变量自行编写
    int num, ji, addrate, ecrate, add, ec;
    string name;
    cin >> num;
    cin >> name;
    cin >> ji;//第一行输入
    cin >> add;
    cin >> ec;
    // 输入数据,创建普通会员对象mm
    Member mm(num, name, ji);
    // 使用指针pm执行以下操作:
    // 1、pm指向普通会员对象mm
    pm = &mm;
    // 2、输入数据,通过pm执行积分累加和积分兑换
    pm->add(add);
    pm->exchange(ec);
    // 3、通过pm调用打印方法输出
    pm->print();
    // 输入数据,创建贵宾会员对象vv
    cin >> num;
    cin >> name;
    cin >> ji >> addrate >> ecrate;
    vip vv(num, name, ji, addrate, ecrate);
    // 使用指针pm执行以下操作:
    // 1、pm指向贵宾会员对象vv
    pm = &vv;
    // 2、输入数据,通过pm执行积分累加和积分兑换
    cin >> add >> ec;
    pm->add(add);
    pm->exchange(ec);
    // 3、通过pm调用打印方法输出
    pm->print();
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值