C++编程||日期类,日期相减,实现日期的下一天 两个日期 相减 日期 + 天数 得到的日期

 日期类,日期相减,实现日期的下一天
                两个日期  相减
                日期 + 天数 得到的日期
                具体要求:实现类date,其中
                构造函数包括year,month,day三个参数
                重载两个date类之间的-,以及date类的+=,-=
                使用int year(),int month(),int day()返回三个参数
 

#include <iostream>

using namespace std;

class date {
    private:
        int y;
        int m;
        int d;

    public:
        date(int, int, int);

        int year();

        int month();

        int day();

        date operator++ ();

        date operator++ (int);

        date operator-- ();

        date operator-- (int);

        friend int operator- (const date &dt1, const date &dt2);

        friend void operator+= (date &dt, const int n);

        friend void operator-= (date &dt, const int n);

};

date::date(int year = 0, int month = 0, int day = 0) {
    y = year;
    m = month;
    d = day;
}

int date::year() {
    return y;
}

int date::month() {
    return m;
}

int date::day() {
    return d;
}

date date::operator++ () {

    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
        days[1]++;
    }

    if (d != days[m - 1]) {
        d++;
    } else {
        d = 1;
        if (m != 12) {
            m++;
        } else {
            m = 1;
            y++;
        }
    }

    return * this;
}

date date::operator++ (int day) {

    date dt(*this);

    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
        days[1]++;
    }

    if (d != days[m - 1]) {
        d++;
    } else {
        d = 1;
        if (m != 12) {
            m++;
        } else {
            m = 1;
            y++;
        }
    }

    return dt;
}

date date::operator-- () {
    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
        days[1]++;
    }

    if(d == 1) {
        if (m == 1) {
            d = 31;
            m = 12;
            y--;
        } else {
            m--;
            d = days[m - 1];
        }
    } else {
        d--;
    }

    return * this;
}

date date::operator-- (int day) {
    date dt(*this);

    int days[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    if ((y % 400 == 0) || (y % 4 == 0 && y % 100 != 0)) {
        days[1]++;
    }

    if(d == 1) {
        if (m == 1) {
            d = 31;
            m = 12;
            y--;
        } else {
            m--;
            d = days[m - 1];
        }
    } else {
        d--;
    }

    return dt;
}

int operator- (const date &dt1, const date &dt2) {

    date dtemp(dt2);

    int count = 0;

    while (dt1.y != dtemp.y || dt1.m != dtemp.m || dt1.d != dtemp.d) {
        count++;
        dtemp++;
    }

    return count;
}

void operator+= (date &dt, const int n) {
    for (int i = 0; i < n; i++) {
        dt++;
    }
}

void operator-= (date &dt, const int n) {
    for (int i = 0; i < n; i++) {
        dt--;
    }
}


int main(void) {
    using std::cin;
    using std::cout;
    using std::endl;
    date D1,D2;
    int year;
    int month;
    int day;
    cin >> year >> month >> day; //shu ru di yi ge ri qi
    D1 = date(year, month, day);
    cin >> year >> month >> day;  //shu ru di er ge ri qi
    D2 = date(year, month, day);
    cout << D2 - D1 << endl;
    cin >> day;  //shu ru yao jia jian de tian shu,
    D1 += day;
    D2 -= day;
    cout << D1.year() << " " << D1.month() << " " << D1.day() << endl;
    cout << D2.year() << " " << D2.month() << " " << D2.day() << endl;
    return 0;
}

  • 11
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小嘤嘤怪学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值