#include <iostream> #include <cmath> #include <conio.h> using namespace std; class Date{ int day,month,year; void IncDay(); int DayCalc(); public: Date(int y=1900,int m=1,int d=1); void SetDate(int yy,int mm,int dd); bool IsLeapYear();//是否闰年 bool IsEndofMonth();//是否月末 void print_ymd(); void print_mdy(); void AddDay(int); int Daysof2Date(Date ymd);//两个日期之间的天数 }; Date::Date(int y,int m,int d){ SetDate(y,m,d); } void Date::SetDate(int yy,int mm,int dd){ month=(mm>=1&&mm<=12)?mm:1; year=(yy>=1900&&yy<=2100)?yy:1900; switch(month){ case 4: case 6: case 9: case 11: day=(dd>=1&&dd<=30)?dd:1;break; case 2: if(IsLeapYear()) day=(dd>=1&&dd<=29)?dd:1; else day=(dd>=1&&dd<=28)?dd:1; break; default: day=(dd>=1&&dd<=31?dd:1); } } void Date::AddDay(int days){ for(int i=0;i<days;i++) IncDay(); } bool Date::IsLeapYear(){ if(year%400==0||(year%100!=0&&year%4==0)) return true; else return false; } bool Date::IsEndofMonth(){ switch(month){ case 4: case 6: case 9: case 11: return day==30; case 2: if(IsLeapYear()) return day==29; else return day==28; default: return day==31; } } void Date::IncDay(){ if(IsEndofMonth()) if(month==12){ day=1; month=1; year++; } else{ day=1; month++; } else day++; } void Date::print_ymd(){ cout<<year<<"-"<<month<<"-"<<day<<endl; } void Date::print_mdy(){ char *monthName[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"}; cout<<monthName[month-1]<<' '<<day<<","<<year<<endl; } int Date::DayCalc(){ int days; int yy=year-1900; days=yy*365; if(yy) days+=(yy-1)/4; switch(month){ case 12:days=days+30; case 11:days=days+31; case 10:days=days+30; case 9:days=days+31; case 8:days=days+31; case 7:days=days+30; case 6:days=days+31; case 5:days=days+30; case 4:days=days+31; case 3: if(IsLeapYear()) days=days+29; else days=days+28; case 2:days=days+31; default:break; } days=days+day; return days; } int Date::Daysof2Date(Date ymd){ int days; days=abs(DayCalc()-ymd.DayCalc()); return days; } int main(){ Date date1,date2; date1.print_ymd(); date1.print_mdy(); date1.SetDate(2006,4,8); cout<<"the current date is:"; date1.print_ymd(); date2=date1; date1.AddDay(365); cout<<"After 365 days,the date is:"; date1.print_ymd(); cout<<"And after "<<date2.Daysof2Date(Date(2008,8,8))<<" days,the Beijing Olympic Games will open."<<endl; getch(); return 0; }