内存:128  时间:1

题目描述

设计日期类(Date),重载下列运算符实现相关操作
(1) 使用成员函数重载 “-”, 实现求两个日期相差的天数
(2) 使用成员函数重载 “+”,实现日期和天数的相加 (加的天数最多31天)

 注意:为了降低该题的难度,程序的运行都在是以下输入限定下进行:
 (1)输入的年月日都是合法的年月日
 (2)进行两个日期相减操作时,输入的第一个日期大于第二个日期,从而得到的天数都是正的
 (3)日期和天数相加时,输入的天数大于等于0且小于等于31

请在下面的程序段基础上根据要求完成设计,只提交begin到end部分的代码

注意:Date类的数据成员以及部分成员函数已经给出,请给Date类添加其余成员函数来完成相应功能
 

# include <iostream>
using namespace std;

//****************begin**************************

class Date
{
public:
 Date(int y=2000,int m=1,int d=1); //带三个参数的声明造函数声明
  void show(); //按照“年-月-日”的方式显示日期的函数声明
  //添加其它成员函数声明,并在类外进行定义
private:
  int year,month,day;
};
 

//*******************end*********************

Date::Date(int y,int m,int d) //带有三个参数的构造函数,给出的三个参数是合法的年月日
{
 year=y;
 month=m;
 day=d;
}

void Date::show()  //按照“年-月-日”的方式显示日期
{
 cout<<year<<"-"<<month<<"-"<<day<<endl;
}

int main()
{
 int year1,month1,day1;
 int year2,month2,day2;
    int days;

 cin>>year1>>month1>>day1; //输入第一个日期的年、月、日
    Date d1(year1,month1,day1); //创建第一个日期对象
 
 cin>>year2>>month2>>day2; //输入第二个日期的年、月、日

    Date d2(year2,month2,day2); //创建第二个日期对象
 
 cout<<(d1-d2)<<endl; //输出两个日期的相差的天数

 cin>>days; //输入第一个日期要加的天数(days大于等于0且小于等于31)
 d1=d1+days;  //实现日期和天数的相加操作
 d1.show();  //按照“年-月-日”的方式显示日期

    return 0;
}

输入

输入日期1的年、月、日
输入日期2的年、月、日
输入日期1要加的天数(大于等于0且小于等于31)

输出

输出日期1和日期2之间相差的天数
输出日期1和天数相加后新日期的年、月、日

样例输入

2005 4 3
2004 1 28
28

样例输出

431
2005-5-1

提示

代码如下


# include <iostream>
using namespace std;

//****************begin**************************

class Date
{
public:
 Date(int y=2000,int m=1,int d=1); //带三个参数的声明造函数声明
  void show(); //按照“年-月-日”的方式显示日期的函数声明
  friend Date operator+(Date &d1,Date &d2);
  friend int operator-(Date &d1,Date &d2);//添加其它成员函数声明,并在类外进行定义
  int year,month,day;
};

Date operator+(Date &d1,int day)
{

	Date d;

	d.year=d1.year;
   d.month=d1.month;
	int i;
     d.day=d1.day;
	for(i=1;i<=day;i++)
	{

		d.day=d.day+1;


		if(d.month==1 || d.month==3 || d.month==5 || d.month==7 || d.month==8 || d.month==10 || d.month==12)
		{
			if(d.day==32)
			{
				d.month=d.month+1;

				d.day=1;
			}
		}
			if(d.month==4 || d.month==6 || d.month==9 || d.month==11)
		{
			if(d.day==31)
			{
				d.month=d.month+1;

				d.day=1;
			}
		}


			if(d.month==2)
			{

				if(d1.year%4==0 && d1.year%100!=0 || d1.year%100==0)
				{
					if(d.day==30)
					{
						d.month=d1.month+1;
						d.day=1;


					}
				}


				else
				{
						if(d.day==29)
					{
						d.month=d.month+1;
						d.day=1;


					}
				}
			}

			if(d.month==13)
            {


                d.year=d.year+1;

                d.month=1;
            }
	}


	return d;




	}


int  operator-(Date &d1,Date &d2)
{

	int day=0;

	int i;

	day=d1.day-d2.day;

		for(i=d2.year;i<d1.year;i++)
		{
			if(i%4==0 && i%100!=0 || i%400==0)
			{
				day=day+366;
			}
			else
			{
				day=day+365;
			}
		}


				for(i=d2.month;i<d1.month;i++)
				{
					switch(i)
					{
						case 1:
						case 3:
						case 5:
						case 7:
						case 8:
						case 10:
						case 12:

						day=day+31;

						break;

						case 4:
						case 6:
						case 9:
						case 11:
						day=day+30;

						break;


						case 2:

							if(d1.year%4==0 && d1.year%100!=0 || d1.year%400==0)
							{
								day=day+29;
							}

							else
							{
								day=day+28;
							}

							break;
					}
				}


				return day;
}
 

//*******************end*********************

Date::Date(int y,int m,int d) //带有三个参数的构造函数,给出的三个参数是合法的年月日
{
 year=y;
 month=m;
 day=d;
}

void Date::show()  //按照“年-月-日”的方式显示日期
{
 cout<<year<<"-"<<month<<"-"<<day<<endl;
}


int main()
{
 int year1,month1,day1;
 int year2,month2,day2;
    int days;

 cin>>year1>>month1>>day1; //输入第一个日期的年、月、日
    Date d1(year1,month1,day1); //创建第一个日期对象
 
 cin>>year2>>month2>>day2; //输入第二个日期的年、月、日

    Date d2(year2,month2,day2); //创建第二个日期对象
 
 cout<<(d1-d2)<<endl; //输出两个日期的相差的天数

 cin>>days; //输入第一个日期要加的天数(days大于等于0且小于等于31)
 d1=d1+days;  //实现日期和天数的相加操作
 d1.show();  //按照“年-月-日”的方式显示日期

    return 0;
}


代码来源于互联网,仅供参考!