题目描述
定义一个日期类Tdate,其中包括私有属性年月日,并按照输入输出要求完善日期类。(要求成员函数在类外定义,并且不能出现普通函数)
主函数如下:
int main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
Date s;
s.set(a,b,c);
s.nextDay();
s.print();
}
}
不得更改主函数
输入
每一行分别为年月日。
输出
输出当前日期加一天后的结果。
输入样例1
2019 2 28
2019 3 31
2019 3 30
输出样例1
2019/3/1
2019/4/1
2019/3/31
思路分析
考查类的定义和类的数据成员引用以及类的成员函数使用。
一般把数据成员定义为私有型,把成员函数定义为公有型。
然后我们来看这道题,主要就是实现计算日期的下一天的功能。
我们首先分成两大类,一是闰年,二是不是闰年。
然后大类里面分成五种情况,首先是下一天到了下一个月的情况,二月特殊先判断,然后判断天数为31天的月份,然后是天数为30天的月份,然后是下一天到了下一年的情况,之后是一般情况就直接day加一完事。
AC代码
#include"iostream"
#include"iomanip"
#include"cmath"
using namespace std;
//-----类定义------
class Date
{
private:
int year,month,day;
public:
void set(int year,int month,int day);
void nextDay();
void print();
};
//-----类实现------
void Date::set(int year,int month, int day)
{
this->year=year;
this->month=month;
this->day=day;
}
void Date::nextDay()
{
if(year%100!=0&&year%4==0||year%400==0)
{
if(month==2&&day==28)
{
day++;
return;
}
if(month==1||month==3||month==5||month==7||month==8||month==10)
{
if(day==31)
{
month++;
day=1;
return;
}
}
if(month==4||month==6||month==8||month==9||month==11)
{
if(day==30)
{
month++;
day=1;
return;
}
}
if(month==12&&day==31)
{
year++;
month=1;
day=1;
return;
}
day++;
}
else
{
if(month==2&&day==28)
{
month++;
day=1;
return;
}
if(month==1||month==3||month==5||month==7||month==8||month==10)
{
if(day==31)
{
month++;
day=1;
return;
}
}
if(month==4||month==6||month==8||month==9||month==11)
{
if(day==30)
{
month++;
day=1;
return;
}
}
if(month==12&&day==31)
{
year++;
month=1;
day=1;
return;
}
day++;
}
}
void Date::print()
{
cout<<year<<'/'<<month<<'/'<<day<<endl;
}
//-----主函数------
int main()
{
int a,b,c;
while(cin>>a>>b>>c)
{
Date s;
s.set(a,b,c);
s.nextDay();
s.print();
}
}