// C++年月日判断初步代码
#include <iostream>
using namespace std;
class Data
{
int year;
int month;
int day;
public:
//判断日期是否有效
bool data_check(int _year,int _month,int _day)
{
year = _year;
month = _month;
day = _day;
if(0 > year || 2018 < year) return false;
if(0 > month || 12 < month) return false;
if(0 > day || 31 < day) return false;
return true;
}
//判断是否是闰年
bool leap_year(int _year)
{
year = _year;
if(year%400 == 0 || (year%4 == 0 &&year%100 != 0))//能被4,400整除除去被100整除的都是闰年
{
return true;
}
else
{
return false;
}
}
//下一天的日期
void nextday(int _year,int _month ,int _day)
{
year = _year;
month = _month;
day = _day;
switch(month)
{
case 1:
if(31 == day)
{
month++;
day = 1;
break;
}
case 2:
if((28 == day &&!leap_year(year))||(29 == day &&leap_year(year)))
{
month++;
day = 1;
break;
}
case 3:
if(31 == day)
{
month++;
day = 1;
break;
}
case 4:
if(30 == day)
{
month++;
day = 1;
break;
}
case 5:
if(31 == day)
{
month++;
day =1;
break;
}
case 6:
if(30 == day)
{
month++;
day =1;
break;
}
case 7:
if(31 == day)
{
month++;
day = 1;
break;
}
case 8:
if(31 == day)
{
month++;
day =1;
break;
}
case 9:
if(30 == day)
{
month++;
day = 1;
break;
}
case 10:
if(31 == day)
{
month++;
day = 1;
break;
}
case 11:
if(30 == day)
{
month++;
day = 1;
break;
}
case 12:
if(31 == day)
{
year++;
month = 1;
day = 1;
break;
}
}
cout << year << "." << month << "." << day << endl;
}
//列出下n天或者前n天的日期
void nextday(int _year,int _month,int _day,int n)
{
year = _year;
month = _month;
day = _day;
if(0 < n)
{
for(n =n+1;n>0;n--)
{
switch(month)
{
case 1:
if(31 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 2:
if((28 == day &&!leap_year(year))||(29 == day &&leap_year(year)))
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 3:
if(31 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 4:
if(30 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 5:
if(31 == day)
{
month++;
day =1;
break;
}
case 6:
if(30 == day)
{
month++;
day =1;
break;
}else {
day++;
break;
}
case 7:
if(31 == day)
{
month++;
day = 1;
break;
}else day++;
case 8:
if(31 == day)
{
month++;
day =1;
break;
}else {
day++;
break;
}
case 9:
if(30 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 10:
if(31 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 11:
if(30 == day)
{
month++;
day = 1;
break;
}else {
day++;
break;
}
case 12:
if(31 == day)
{
year++;
month = 1;
day = 1;
break;
}else {
day++;
break;
}
}
cout << year << "." << month << "." << day << endl;
}
}
if(0 > n)
{
for(n =n-1;n<0;n++)
{
switch(month)
{
case 1:
if(1 == day)
{
year--;
month =12;
day = 31;
break;
}else {
day--;
break;
}
case 2:
if(1 == day)
{
month--;
day = 31;
break;
}else {
day--;
break;
}
case 3:
if(1 == day)
{
month--;
if(leap_year(year))
{
day = 29;
}else{
day = 28;
}
break;
}else {
day--;
break;
}
case 4:
if(1 == day)
{
month--;
day = 31;
break;
}else {
day--;
break;
}
case 5:
if(1 == day)
{
month--;
day =30;
break;
}else {
day--;
break;
}
case 6:
if(1 == day)
{
month--;
day =31;
break;
}else {
day--;
break;
}
case 7:
if(1 == day)
{
month--;
day = 30;
break;
}else {
day--;
break;
}
case 8:
if(1 == day)
{
month--;
day =31;
break;
}else {
day--;
break;
}
case 9:
if(1 == day)
{
month--;
day = 31;
break;
}else {
day--;
break;
}
case 10:
if(1 == day)
{
month--;
day = 30;
break;
}else {
day--;
break;
}
case 11:
if(1 == day)
{
month--;
day = 31;
break;
}else {
day--;
break;
}
case 12:
if(1 == day)
{
month--;
day = 31;
break;
}else {
day--;
break;
}
}
cout << year << "." << month << "." << day << endl;
}
}
}
};
int main()
{
Data *data = new Data;
int year = 1997;
int month = 2;
int day = 28;
int n = -137;
cout << data->data_check(year,month,day) << endl;
cout << data->leap_year(year) << endl;
data-> nextday(year,month,day);
data-> nextday(year,month,day,n);
}