一、题目描述
下面是一个日期类的定义,请在类外实现其所有的方法,并在主函数中生成对象测试之。
二、输入与输出
1.输入
测试数据的组数t
第一组测试数据的年 月 日
…
要求第一个日期的年月日初始化采用构造函数,第二个日期的年月日初始化采用setDate方法,第三个日期又采用构造函数,第四个日期又采用setDate方法,以此类推。
4
2012 1 3
2012 2 28
2012 3 31
2012 4 30
2.输出
输出今天的日期
输出明天的日期
Today is 2012/01/03
Tomorrow is 2012/01/04
Today is 2012/02/28
Tomorrow is 2012/02/29
Today is 2012/03/31
Tomorrow is 2012/04/01
Today is 2012/04/30
Tomorrow is 2012/05/01
C++中设置填充字符的代码参考如下:
cout << setfill(‘0’) << setw(2) << month; //设置宽度为2,前面补’0’
需要头文件#include
三、参考代码
#include <iostream>
#include <iomanip>
#include <string.h>
#include <cmath>
using namespace std;
class date
{
private:
int year,mon,day;
public:
date();
date(int year1,int mon1,int day1);
int gety();
int getm();
int getd();
void setdate(int y,int m,int d);
void print();
void add();
};
date::date(int year1,int mon1,int day1)
{
year=year1;
mon=mon1;
day=day1;
}
int date::gety()
{
return year;
}
int date::getm()
{
return mon;
}
int date::getd()
{
return day;
}
void date::add()
{
int flag=0;
if((year%4==0&&year%100!=0)||(year%400==0))
{
flag=1;
}
else flag=0;
if(mon==1||mon==3||mon==5||mon==7||mon==8||mon==10)
{
if(day==31)
{
mon++;
day=1;
}
else day++;
}
else if(mon==12)
{
if(day==31)
{
year++;
mon=1;
day=1;
}
else
{
day++;
}
}
else if(mon==4||mon==6||mon==9||mon==11)
{
if(day==30)
{
day=1;
mon++;
}
else
{
day++;
}
}
else if(mon==2)
{
if(flag&&day==29)
{
mon++;
day=1;
}
else if(flag&&(day<=28))
{
day++;
}
else if((-flag)&&(day<=27))
{
day++;
}
else
{
mon++;
day=1;
}
}
}
void date::print()
{
cout <<year<<"/"<< setfill('0') << setw(2)<<"/"<<mon<<"/"<<day<<endl;
}
int main() {
int t;
cin>>t;
int year,mon,day;
while(t--)
{
cin>>year>>mon>>day;
date a(year,mon,day);
cout<<"Today is ";
a.print();
a.add();
cout<<"Tomorrow is ";
a.print();
}
return 0;
}
四、题解思路
注意要判断跨年以及闰年的情况!