代码:
#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; }