代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
class CDate
{
private:
int year, month, day;
public:
CDate()
{
year = 2000;
month = 1;
day = 1;
}
CDate(int year1, int month1, int day1)
{
year = year1;
month = month1;
day = day1;
}
~CDate()
{
cout << "析构了" << endl;
}
void print()
{
cout << year << "年" << month << "月" << day << "日" << endl;
}
bool LeapYear(int year2)
{
if ((year2 % 4 == 0 && year2 % 100 != 0) || year2 % 400 == 0)
return true;
else
return false;
}
void AddOneDay()
{
if (++day > GetDays())
{
day = 1;
if (++month > 12)
{
month = 1;
year++;
}
}
}
void SubOneDay()
{
if (--day == 0)
{
if (--month == 0)
{
month = 12;
year--;
}
day = GetDays();
}
}
void AddDays(int i)
{
while (i >= 366)
{
if (LeapYear(year) && month <= 2)
{
if (month == 2 && day == 29)
{
AddOneDay();
}
i -= 366;
year++;
}
else if (LeapYear(year + 1) && month >= 3)
{
i -= 366;
year++;
}
else
{
i -= 365;
year++;
}
}
for (int t = 0; t < i; t++)
{
AddOneDay();
}
}
void SubDays(int i)
{
while (i >= 366)
{
if (LeapYear(year) && month >= 3)
{
i -= 366;
year--;
}
else if (LeapYear(year - 1) && month <= 2)
{
i -= 366;
year--;
}
else
{
i -= 365;
year--;
}
}
for (int t = 0; t < i; t++)
{
SubOneDay();
}
}
int GetDays()
{
int days = 0;
switch (month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days = 31;
break;
case 4:
case 6:
case 9:
case 11:
days = 30;
break;
case 2:
if (((year % 4 == 0) && (year % 100 != 0)) || ((year % 400) == 0))
days = 29;
else
days = 28;
}
return days;
}
};
int main()
{
cout<<"请输入当前的年月日:"<<endl;
int year,month,day;
cin>>year>>month>>day;
CDate d1(year,month,day);
//d1.AddOneDay();
d1.print();
cout<<"请输入要增加的天数"<<endl;
int add_days;
cin>>add_days;
d1.AddDays(add_days);
d1.print();
cout<<"请输入要减少的天数"<<endl;
int sub_days;
cin>>sub_days;
d1.SubDays(sub_days);
d1.print();
return 0;
}