07-D. 生日打折(复合类构造)

07-拷贝构造函数与复合类-

题目描述
定义一个日期类Date,包含数据成员year\month\day,还包含构造函数及其他函数(根据需要自己添加)

定义一个会员类VIP,包含数据成员id和birth,其中id是整数表示会员编号;birth是Date类型表示生日。

类VIP包含构造函数和其他函数(根据需要自己添加),还包含一个折扣函数Discount。函数Discount返回结果为浮点数表示折扣,函数包含1个参数为日期类型,函数功能是判断参数日期是否会员生日,是则折扣为0.5,不是则折扣为0.95

编写程序实现上述类功能并实现输入输出的要求

输入
第一行输入年、月、日,表示今天日期

第二行输入t表示有t个会员

第三行输入第1个会员的ID、生日的年、月、日

第四行输入第1个会员的消费金额

依次类推输入下一个会员的两行数据…


输出
根据会员的消费金额,调用Discount函数判断今天是否会员生日并得到折扣,然后计算会员打完折的消费金额

每一行先输出会员编号,再输出会员打完折的消费金额,消费金额只需要输出整数部分

提示把浮点数转整数

double x = 123.456

cout<<int(x)<<endl;

输入样例
2017 4 20
2
1111 2000 4 20
136
2222 2000 3 30
125

1111’s consumption is 68
2222’s consumption is 118

#include<iostream>
using namespace std;

class date
{
    int year;
    int month;
    int day;
public:
    date()
    {year=0;month=0;day=0;}
    date(int y,int m,int d)
    {year=y;month=m;day=d;}
    int gety()
    {return year;}
    int getm()
    {return month;}
    int getd()
    {return day;}
    void setdate(int y,int m,int d)
    {year=y;month=m;day=d;}
};

class vip
{
    date birth;
    int id;
public:
    vip():id(0),birth(0,0,0){}
    vip(int i,int y,int m,int d):birth(y,m,d),id(i){}
    int getid()
    {return id;}
    double discout(date &p,double m)
    {
        if(p.getm()==birth.getm()&&p.getd()==birth.getd())
            return m*0.5;
        else
            return m*0.95;
    }
    
};

int main()
{
    int t,y,m,d;
    date p;//供比较
    cin>>y>>m>>d;
    p.setdate(y, m, d);
    cin>>t;
    while(t--)
    {
        int i,y1,m1,d1;
        cin>>i>>y1>>m1>>d1;
        vip v(i,y1,m1,d1);
        
        double mon;
        cin>>mon;
        double x=v.discout(p,mon);
        cout<<v.getid()<<"'s consumption is "<<int(x)<<endl;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值