题目:----求两个日期之间相差的天数
设计一个日期类Date,包括日期的年份、月份和日号,编写一个友元函数,求两个日期之间相差的天数。该类中设计有3个友元函数;count_day()函数,它有两个参数,第2个参数是一个标志,当其值等于1 时,计算一年的开始到某日期的天数;否则计算某日期到年尾的天数。leap()函数用于判断指定的年份是否为闰年。subs()函数用于计算两个日期之间的天数。 当时间输入不正确时,输出“time error!”
#include<iostream>
using namespace std;
int sum;
int i;
int leap(int year);
class Date {
private:
int year,month,day;
public:
void set(int y,int m,int d) {
year = y;
month = m;
day = d;
}
friend int count_day(Date d,int flag);
friend int leap(int y);
friend int subs(Date rect,Date rect1);
};
int count_day(Date d,int flag) {
int day_leap[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int day_nleap[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
if(leap(d.year)) {
if( flag ) {
sum = d.day;
for( i=0; i<d.month-1; i++ ) {
sum = sum + day_leap[i];
}
} else {
sum = day_leap[d.month-1] - d.day;
for( i=d.month; i<12; i++ ) {
sum = sum + day_leap[i];
}
}
} else {
if( flag ) {
sum = d.day;
for( i=0; i<d.month-1; i++ ) {
sum = sum + day_leap[i];
}
} else {
sum = day_nleap[d.month-1] - d.day;
for( i=d.month; i<12; i++ ) {
sum = sum + day_nleap[i];
}
}
}
return sum;
}
int leap(int y) {
int x;
if( (y%4 ==0 && y%100!=0) || (y%100==0 && y%400==0) ) {
//cout<<y<<" Is Leap Year"<<endl;//Test
x = 1;
} else {
//cout<<y<<" Is Not Leap Year"<<endl;//Test
x = 0;
}
return x;
}
int subs(Date rect,Date rect1) {
int y,days;
if( rect.year!=rect1.year ) {
days = count_day(rect,0);
for( y=rect.year+1; y<=rect1.year; y++ ) {
if(leap(y)) {
days = days + 366;
} else {
days = days + 365;
}
}
days = days - count_day(rect1,0);
} else if( rect.year==rect1.year && rect.month!=rect1.month ) {
days = count_day(rect,0) - count_day(rect1,0);
} else if( rect.year==rect1.year && rect.month==rect1.month && rect.day!=rect1.day) {
days = rect1.day - rect.day;
}
return days;
}
int main(int argc,char *argv[]) {
int y,m,d,y1,m1,d1;
int flag = 1;
Date rect,rect1;
cin>>y>>m>>d;
cin>>y1>>m1>>d1;
if((y>y1)||(m>m1)||(d>d1)||(y<0)||(y1<0)||(m<=0)||(m1<=0)||(d<=0)||(d1<=0)||(m>12)||(m1>12)||(d>31)||(d1>31)) {
flag = 0;
}
if( flag == 0 ) {
cout<<"time error!"<<endl;
} else {
rect.set(y,m,d),rect1.set(y1,m1,d1);
sum = subs(rect,rect1);
cout<<sum<<endl;
}
return 0;
}