1个回答
展开全部
#include <iostream> using namespace std; class Date { private: int year; int month; int day; friend void inputDate(Date& d); friend int goday(Date& d); friend void frontDate(Date& d); friend void backDate(Date& d); friend int distanceDate(Date& d1,Date& d2); public: Date(int y=0,int m=0,int d=0):year(y),month(m),day(d) {} void print() { cout<<year<<"\t"<<month<<"\t"<<day<<"\t"; } }; void inputDate(Date& d) { cout<<"Please input year:"<<"\t"; cin>>d.year; cout<<"Please input month:"<<"\t"; cin>>d.month; cout<<"Please input day:"<<"\t"; cin>>d.day; } int goday(Date& d) { if((d.year%4==0&&d.year%100!=0)||d.year%400==0) { if(d.month<=2) return (d.month-1)*31+d.day; else if(d.month>2&&d.month<=7) { if(d.month%2==1) return 60+d.day+61*(d.month-3)/2; else if(d.month%2==0) return 60+d.day+61*(d.month-4)/2+31; } else if(d.month>7) { if(d.month%2==0) return 213+d.day+61*(d.month-8)/2; else if(d.month%2==1) return 213+d.day+61*(d.month-9)/2+31; } } else { if(d.month<=2) return (d.month-1)*31+d.day; else if(d.month>2&&d.month<=7) { if(d.month%2==1) return 59+d.day+61*(d.month-3)/2; else if(d.month%2==0) return 59+d.day+61*(d.month-4)/2+31; } else if(d.month>7) { if(d.month%2==0) return 212+d.day+61*(d.month-8)/2; else if(d.month%2==1) return 212+d.day+61*(d.month-9)/2+31; } } } void frontDate(Date& d) { if(d.month==1&&d.day==1) { --d.year; d.month=12; d.day=31; } else if(d.month==2&&d.day==1) { d.month=1; d.day=31; } else if(d.month==3&&d.day==1) { if(d.year%4==0&&d.year%100!=0||d.year%400==0) { d.month=2; d.day=29; } else { d.month=2; d.day=28; } } else if(d.month>3&&d.month<=7&&d.day==1) { if(d.month%2==0) { --d.month; d.day=31; } else { --d.month; d.day=30; } } else if(d.month==8&&d.day==1) { --d.month; d.day=31; } else if(d.month>8&&d.day==1) { if(d.month%2==0) { --d.month; d.day=30; } else { --d.month; d.day=31; } } else if(d.day!=1) { --d.day; } cout<<d.year<<"\t"<<d.month<<"\t"<<d.day<<"\t"; } void backDate(Date& d) { if(d.month==12) { if(d.day==31) { ++d.year; d.month=1; d.day=1; } else { ++d.day; } } else if(d.month==1) { if(d.day==31) { ++d.year; d.month=2; d.day=1; } else ++d.day; } else if(d.month=2) { if(d.year%4==0&&d.year%100!=0||d.year%400==0) { if(d.day==29) { d.day=1; d.month=3; } else { ++d.day; } } else { if(d.day==28) { d.day=1; d.month=3; } else { --d.day; } } } else if(d.month!=2&&d.month!=12) { if(d.month<=7) { if(d.month%2==1) { if(d.day==31) { d.day=1; ++d.month; } else { ++d.day; } } else { if(d.day==30) { d.day=1; ++d.month; } else { ++d.day; } } } else if(d.month>7) { if(d.month%2==0) { if(d.day==31) { d.day=1; ++d.month; } else { ++d.day; } } else { if(d.day==30) { d.day=1; ++d.month; } else { ++d.day; } } } } cout<<d.year<<"\t"<<d.month<<"\t"<<d.day<<"\t"; } int distanceDate(Date& d1,Date& d2) { int m,n; m=goday(d1); n=goday(d2); if((d2.year-d1.year)>=0) { if((d2.year-d1.year)%4==0) return 1461*(d2.year-d1.year)/4+n-m; if((d2.year-d1.year)%4==1) { if(d1.year%4==0&&d1.year%100!=0||d1.year%400==0) return 1461*(d2.year-d1.year-1)/4+n-m+366; else return 1461*(d2.year-d1.year-1)/4+n-m+365; } if((d2.year-d1.year)%4==2) { if((d1.year%4==0&&d1.year%100!=0||d1.year%400==0)||((d1.year+1)%4==0&&(d1.year+1)%100!=0||(d1.year+1)%400==0)) return 1461*(d2.year-d1.year-2)/4+n-m+365+366; else return 1461*(d2.year-d1.year-2)/4+n-m+365+365; } if((d2.year-d1.year)%4==3) { if((d1.year%4==0&&d1.year%100!=0||d1.year%400==0)||((d1.year+1)%4==0&&(d1.year+1)%100!=0||(d1.year+1)%400==0)||((d1.year+2)%4==0&&(d1.year+2)%100!=0||(d1.year+2)%400==0)) return 1461*(d2.year-d1.year-3)/4+n-m+366+365+365; else return 1461*(d2.year-d1.year-3)/4+n-m+365+365+365; } } else { if((d1.year-d2.year)%4==0) return 1461*(d1.year-d2.year)/4+m-n; if((d1.year-d2.year)%4==1) { if(d2.year%4==0&&d2.year%100!=0||d2.year%400==0) return 1461*(d1.year-d2.year-1)/4+m-n+366; else return 1461*(d1.year-d2.year-1)/4+m-n+365; } if((d1.year-d2.year)%4==2) { if((d2.year%4==0&&d2.year%100!=0||d2.year%400==0)||((d2.year+1)%4==0&&(d2.year+1)%100!=0||(d2.year+1)%400==0)) return 1461*(d1.year-d2.year-2)/4+m-n+365+366; else return 1461*(d1.year-d2.year-2)/4+m-n+365+365; } if((d1.year-d2.year)%4==3) { if((d2.year%4==0&&d2.year%100!=0||d2.year%400==0)||((d2.year+1)%4==0&&(d2.year+1)%100!=0||(d2.year+1)%400==0)||((d2.year+2)%4==0&&(d2.year+2)%100!=0||(d2.year+2)%400==0)) return 1461*(d1.year-d2.year-3)/4+m-n+366+365+365; else return 1461*(d1.year-d2.year-3)/4+m-n+365+365+365; } } } int main() { Date d1,d2,d; int m; inputDate(d1); inputDate(d2); d1.print(); d2.print(); m=distanceDate(d1,d2); cout<<"d2 distance d1 is:"<<"\t"; cout<<m<<endl; cout<<"distance from the year's first day is:"<<"\t"; cout<<goday(d1)<<endl; cout<<"The front of date d1 is:"<<"\t"; frontDate(d1); cout<<"The date d1 is:"<<"\t"; backDate(d1); cout<<"The back of date d1 is:"<<"\t"; backDate(d1); }
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询