到所有情况就能实现日期的加减。本题与树上2类题相似处也颇多,多个知识点揉合在一起,只要分清彼此之间的关联,就能实现。 程序代码、显示结果: #include
class Date {
private:
int year, month , day,y,m,d; public: Date()
{ year=0; month=1; day=1;
cout<<\类的无参构造函数被执行!\ }
Date(int a,int b,int c) //构造函数 { year=a; month=b; day=c;
cout<<\类的有参构造函数被执行!\ }
void setDate(int y,int m,int d) {
year=y; month=m; day=d; }
void show() {
cout<<\类的输出日期函数被执行! 输出日期:\ cout< int ruinian()//判断是否为瑞年 { if(year@0==0||(year0!=0&&year%4==0)) return 1; else return 0; } int Days()//判断当月天数 { int d; switch(month) { case 2: if(ruinian()) d=29; else d=28; break; case 1: case 3: case 5: case 7: case 8: case 10: case 12:d=31;break; case 4: case 6: case 9: case 11:d=30;break; } return d; } int jurdge()//判断日期数是否合理 { cout<<\类的判断日期合法函数被执行!\ if(year<0||month<1||month>12||day<1||day>Days()) { cout< return 1; } Date Tomorrow()//求明天日期 { cout<<\类的日期加1天函数被执行!\Date jia(year,month,day); int y1=jia.year,m1=jia.month,d1=jia.day; switch(month) { case 1: case 3: case 5: case 7: case 8: case 10: { if(day==31){y1=year;m1=month+1;d1=1;} else {y1=year;m1=month;d1=day+1;} break; } case 4: case 6: case 9: case 11: { if(day==30){y1=year;m1=month+1;d1=1;} else {y1=year;m1=month;d1=day+1;} break; } case 2: { if((ruinian()&&day==29)||(!ruinian()&&day==28)) {y1=year;m1=month+1;d1=1;} else{ y1=year;m1=month;d1=day+1;} break; } case 12: { if(day==31){y1=year+1;m1=1;d1=1;} else {y1=year;m1=month;d1=day+1;} break; } } jia.setDate(y1,m1,d1); return jia; } }; void main() { cout<<\定义2个对象:\ Date date1; date1.jurdge(); date1.show(); Date date2(2010,11,1); date2.jurdge(); date2.show(); int y,m,d,i; for(i=1;i<5;i++) { cout<<\第\个对象的执行情况:\ cout<<\类的输入日期函数被执行! 请按顺序输入日期:年、月、日:\cin>>y>>m>>d; date2.setDate(y,m,d); if(date2.jurdge()) { cout<<\类的输出日期函数被执行! 输出日期:\年\月\日\ date2.Tomorrow().show(); } } } 实验结果:

