慕课_中国矿业大学课后练习题

1 日期类(50分)

题目内容:

设计一个日期类(Date),用来实现日期的操作。包括一个空构造函数,三个成员函数,其余所需自行决定。

 用成员函数setDate()用来给Date类设置日期。

 用成员函数isLeapYear()用来判断是否是闰年。

 用成员函数getSkip(Date o)用来计算两个日期之间相差的天数。

输入格式:

 输入两个日期,输入格式参考样例。

输出格式:

 判断两个日期是否是闰年,以及两个日期的间隔天数,输出格式参考样例。

输入样例:

        2012 10 20

        2017 11 07

输出样例:

       2012 is leap year.

       2017 is not leap year.

       The skip of two date is 1844.

 

#include<iostream>
#include<cmath>
using namespace std;
class Date
{
public:
Date() { };
void setDate();
int isLeapYear();
int getSkip(Date o);

int year;
int month;
int day;
};
int m(Date o);
void Date:: setDate()
{
cin >>this->year>> this->month >> this->day;
}
int Date::isLeapYear()
{
if (year % 400 == 0 || year % 4 == 0 && year % 100 != 0)
return 1;
else return 0;
}
bool f(int i)
{
if (i % 400 == 0 || i % 4 == 0 &&i % 100 != 0)
return true;
else return false;
}
int Date::getSkip(Date o)
{
int sum = 0;
if (this->year == o.year)
{
sum = abs(m(*this) - m(o));
return sum;
}
if (this->year > o.year)
{
if (o.isLeapYear() == 1)
{
sum += 366 - m(o);
}
else sum += 365 - m(o);
for (int i = o.year+1; i <= this->year;i++)
{
if (f(i)==true&&i!=this->year)
{
sum += 366;
}
if (f(i)==false&&i!=this->year)
{
sum += 365;
}
if (i == this->year)
{
sum += m(*this);
}
}
}
if (this->year < o.year)
{
if (this->isLeapYear() == 1)
{
sum += 366 - m(*this);
}
else sum+= 365 - m(*this);
for (int i = this->year + 1; i <= o.year;i++)
{
if (f(i) == true && i!=o.year)
{
sum += 366;
}
if (f(i) == false && i != o.year)
{
sum += 365;
}
if (i == o.year)
{
sum += m(o);
}
}
}
return sum;
}
int m(Date o)
{
int sum = 0;
for (int i = 1; i <= o.month;i++)
{
if (i == 1 && o.month != 1)
{
sum += 31;
}
if (i == 2 && o.month != i && o.isLeapYear() == 1)
{
sum += 29;
}
if (i == 2 && o.month != i && o.isLeapYear()==0)
{
sum += 28;
}
if (i == 3 && o.month != i)
{
sum += 31;
}
if (i == 4 && o.month != i)
{
sum += 30;
}
if (i == 5 && o.month != i)
{
sum += 31;
}
if (i == 6 && o.month != i)
{
sum += 30;
}
if (i == 7 && o.month != i)
{
sum += 31;
}
if (i == 8 && o.month != i)
{
sum += 31;
}
if (i == 9 && o.month != i)
{
sum += 30;
}
if (i == 10 && o.month != i)
{
sum += 31;
}
if (i == 11 && o.month != i)
{
sum += 30;
}
if (i == 12 && o.month != i)
{
sum += 31;
}
if (i == o.month)
{
sum += o.day;
}
}
return sum;
}
int main()
{
Date d1, d2;
d1.setDate();
d2.setDate();
if (d1.isLeapYear() == 1)
{
cout << d1.year << " " << "is" << " " << "leap" << " " <<"year"<< endl;
}
if (d1.isLeapYear() == 0)
{
cout << d1.year << " " << "is" <<" "<<"not" << " " << "leap" <<" "<<"year" << endl;
}
if (d2.isLeapYear() == 1)
{
cout << d2.year << " " << "is" << " " << "leap" << " " << "year" <<endl;
}
if (d2.isLeapYear() == 0)
{
cout << d2.year << " " << "is" << " " << "not" << " " << "leap" << " " << "year" << endl;
}
cout<<"The"<<" "<<"skip"<<" "<<"of"<<" "<<"two"<<" "<<"date"<<" "<<"is"<<" " << d2.getSkip(d1);
return 0;
}

上一篇:通过格式化日期输出当天的年月日星期几.例如2021年10月10日星期三


下一篇:js编写判断是否平年闰年