定义日期类Date,包括年、月、日3个成员变量,在其中重载运算符“+”、“-”、“++”、“--”。 注意:需要考虑每个月不同天数及闰年问题。

定义日期类Date,包括年、月、日3个成员变量,在其中重载运算符“+”、“-”、“++”、“–”。
注意:需要考虑每个月不同天数及闰年问题。
(面向对象程序设计基础)

#include<iostream>
using namespace std;
class Date {
private:
	int year, month, day;
public:
	Date(int y = 0, int m = 0, int d = 0) {
		year = y;
		month = m;
		day = d;
	}
	void Print();
	Date operator-(const Date &c); 
	Date operator+(const Date &c);
	Date operator++();
	Date operator--();
};
void Date::Print() {
	cout << "DATE:"<<year<<"/"<<month<<"/"<<day<< endl;
}
Date Date::operator-(const Date &c) {
	int temp = 0,day_y=0;
	if (c.year - year >= 1) {
		for (int n = year; n < c.year; n++) {
			if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) { day_y = day_y + 366; }
			else { day_y = day_y + 365; }
		}
	}
		for (int i = 1; i < month; i++) {
			switch (i) {
			case 1: temp += 31; break;
			case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
					else { temp += 28; break; }
			case 3:	temp += 31; break;
			case 4:	temp += 30; break;
			case 5:	temp += 31; break;
			case 6:	temp += 30; break;
			case 7:	temp += 31; break;
			case 8:	temp += 31; break;
			case 9:	temp += 30; break;
			case 10:temp += 31; break;
			case 11:temp += 30; break;
			case 12:temp += 31; break;
			}
		}
		int sum1 = temp;
		temp = 0;
		for (int i = 1; i < c.month; i++) {
			switch (i) {
			case 1: temp += 31; break;
			case 2: if ((c.year % 4 == 0 && c.year % 100 != 0) || c.year % 400 == 0) { temp += 29; break; }
					else { temp += 28; break; }
			case 3:	temp += 31; break;
			case 4:	temp += 30; break;
			case 5:	temp += 31; break;
			case 6:	temp += 30; break;
			case 7:	temp += 31; break;
			case 8:	temp += 31; break;
			case 9:	temp += 30; break;
			case 10:temp += 31; break;
			case 11:temp += 30; break;
			case 12:temp += 31; break;
			}
		}
		int sum2 = temp;
		day_y = day_y - sum1 + sum2+c.day-day;
		cout << "相隔天数"<<day_y<< endl;
		return (0, 0, 0);
};

Date Date::operator+(const Date &c) {
	int sumday = 0,temp=0,j=0,k=0;
	for (int i = 1; i < month; i++) {
		switch (i) { 
		case 1: temp += 31; break;
		case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
				else { temp += 28; break; }
		case 3:	temp += 31; break;
		case 4:	temp += 30; break;
		case 5:	temp += 31; break;
		case 6:	temp += 30; break;
		case 7:	temp += 31; break;
		case 8:	temp += 31; break;
		case 9:	temp += 30; break;
		case 10:temp += 31; break;
		case 11:temp += 30; break;
		case 12:temp += 31; break;
		}
	}
	sumday = temp + c.day+day;
	for(  k= year; sumday > 365; k++) {
		if ((k % 4 == 0 && k % 100 != 0) || k % 400 == 0) { sumday = sumday - 366; }
		else(sumday = sumday - 365);
	}
	year = k;
	for (j = 1; sumday >28; j++) {
		switch (j) {
			case 1: temp = 31; break;
			case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp = 29; break; }
					else { temp = 28; break; }
			case 3:	temp = 31; break;
			case 4:	temp = 30; break;
			case 5:	temp = 31; break;
			case 6:	temp = 30; break;
			case 7:	temp = 31; break;
			case 8:	temp = 31; break;
			case 9:	temp = 30; break;
			case 10:temp = 31; break;
			case 11:temp = 30; break;
			case 12:temp = 31; break;
		}
			sumday = sumday - temp;
	}
	return 	Date(year,j,sumday);
};

Date Date::operator++() {
	int temp = 0,i=month;
	switch (i) {
	case 1: temp += 31; break;
	case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
			else { temp += 28; break; }
	case 3:	temp += 31; break;
	case 4:	temp += 30; break;
	case 5:	temp += 31; break;
	case 6:	temp += 30; break;
	case 7:	temp += 31; break;
	case 8:	temp += 31; break;
	case 9:	temp += 30; break;
	case 10:temp += 31; break;
	case 11:temp += 30; break;
	case 12:temp += 31; break;
	}
	if (temp == day&&month!=12) {
		month++;
		day = 1;
	}
	else if (temp == day && month == 12) {
		year++;
		month = 1;
		day = 1;
	}
	else {
		day++;
	}
	return *this;
}
Date Date::operator--() {
	int temp = 0, i = month-1;
	switch (i) {
	case 0:break;
	case 1: temp += 31; break;
	case 2: if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) { temp += 29; break; }
			else { temp += 28; break; }
	case 3:	temp += 31; break;
	case 4:	temp += 30; break;
	case 5:	temp += 31; break;
	case 6:	temp += 30; break;
	case 7:	temp += 31; break;
	case 8:	temp += 31; break;
	case 9:	temp += 30; break;
	case 10:temp += 31; break;
	case 11:temp += 30; break;
	}
	if (day==1&& month != 1) {
		month--;
		day = temp;
	}
	else if (day ==1&& month == 1) {
		year--;
		month = 12;
		day = 31;
	}
	else {
		day--;
	}
	return *this;
}
int main() {
	Date d1(2004, 12,31), d2(2018, 10, 15);
	d1.Print();
	d2.Print();
	d1-d2;
	cout << endl;

	Date d3(2004, 1, 1), d4(0, 0,1928),d5;
	d5 = d3 + d4;
	d5.Print();
	
	cout<<endl<<"日期自增↓"<<endl;
	d1.Print();
	++d1 ;
	d1.Print();

	cout << endl << "日期自减" << endl;
	d1.Print();
	--d1;
	d1.Print();

	system("pause");
	return 0;
}
  • 3
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值