设计一个程序,完成以下对日期的操作,包括以下函数:
Date AddDay(Date d, int days):对日期增加days天数,然后返回得到的日期
Date AddMonth(Date d, int months):对日期增加months月数,然后返回得到的日期
Date AddYear(Date d, int years):对日期增加years年数,然后返回得到的日期
int DayInYear(Date d):计算日期是所在年中第几天,然后返回天数
输入说明 :
1:AddDay
2:AddMonth
3:AddYear
4: DayInYear
5:Subtract
第二行为该操作需要的数据。
比如输入:
表示将进行AddDay操作,输入日期为2016年1月1日,加31天。
程序输出结果日期,按年月日格式输出,中间以一个空格分隔。
输出说明 :
程序输出相应计算结果。
对于AddDay、AddMonth、AddYear三种操作,输出结果日期,按年月日格式输出,中间以一个空格分隔。
对于Subtract,结果仅输出一个整数,表示相距的天数。
Date AddDay(Date d, int days)
{
for(int i=days; i; --i)
{
if(d.day==31)
{
if(d.month-12)
{
d.month++;
d.day=1;
}
else
{
d.year++;
d.month=1;
d.day=1;
}
continue;
}
if(d.day==30)
{
if(d.month==4||d.month==6||d.month==9||d.month==11)
{
d.month++;
d.day=1;
}
else
d.day++;
continue;
}
if(d.day==29&&d.month==2)
{
d.month++;
d.day=1;
continue;
}
if(d.day==28&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
d.day++;
else
{
d.month++;
d.day=1;
}
continue;
}
d.day++;
}
return d;
}
Date AddMonth(Date d, int months)
{
d.year+=(d.month+months)/12;
d.month=(d.month+months)%12;
if(d.day==31)
{
if(d.month==1||d.month==3||d.month==5||d.month==7||d.month==8||d.month==10||d.month==12)
return d;
if(d.month==4||d.month==6||d.month==9||d.month==11)
{
d.day=30;
return d;
}
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
{
d.day=29;
return d;
}
d.day=28;
return d;
}
if(d.day==30&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
{
d.day=29;
return d;
}
d.day=28;
return d;
}
if(d.day==29&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
return d;
d.day=28;
return d;
}
return d;
}
Date AddYear(Date d, int years)
{
d.year+=years;
if(d.day==29&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
return d;
d.day=28;
return d;
}
return d;
}
int DayInYear(Date d)
{
int Long = 0;
int DAY[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
DAY[1]=29;
for(int i=0; i
int Subtract(Date d1, Date d2)
{
if(d1.year==d2.year&&d1.month==d2.month)
{
return d1.day-d2.day;
}
else if(d1.year==d2.year)
{
return DayInYear(d1) - DayInYear(d2);
}
else
{
int a,b,c=0;
Date temp;
int flag=0;
if(d1.year>d2.year)
{
temp=d1;
d1=d2;
d2=temp;
flag=1;
}
if(((d1.year%4==0)&&(d1.year%100!=0))||(d1.year%400==0))
a=366-DayInYear(d1);
else
a=365-DayInYear(d1);
b=DayInYear(d2);
for(int i=d1.year+1; i
#include
using namespace std;
typedef struct Date
{
int year,month,day;
} Date;
Date AddDay(Date d, int days)
{
for(int i=days; i; --i)
{
if(d.day==31)
{
if(d.month-12)
{
d.month++;
d.day=1;
}
else
{
d.year++;
d.month=1;
d.day=1;
}
continue;
}
if(d.day==30)
{
if(d.month==4||d.month==6||d.month==9||d.month==11)
{
d.month++;
d.day=1;
}
else
d.day++;
continue;
}
if(d.day==29&&d.month==2)
{
d.month++;
d.day=1;
continue;
}
if(d.day==28&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
d.day++;
else
{
d.month++;
d.day=1;
}
continue;
}
d.day++;
}
return d;
}
Date AddMonth(Date d, int months)
{
d.year+=(d.month+months)/12;
d.month=(d.month+months)%12;
if(d.day==31)
{
if(d.month==1||d.month==3||d.month==5||d.month==7||d.month==8||d.month==10||d.month==12)
return d;
if(d.month==4||d.month==6||d.month==9||d.month==11)
{
d.day=30;
return d;
}
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
{
d.day=29;
return d;
}
d.day=28;
return d;
}
if(d.day==30&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
{
d.day=29;
return d;
}
d.day=28;
return d;
}
if(d.day==29&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
return d;
d.day=28;
return d;
}
return d;
}
Date AddYear(Date d, int years)
{
d.year+=years;
if(d.day==29&&d.month==2)
{
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
return d;
d.day=28;
return d;
}
return d;
}
int DayInYear(Date d)
{
int Long = 0;
int DAY[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
if(((d.year%4==0)&&(d.year%100!=0))||(d.year%400==0))
DAY[1]=29;
for(int i=0; id2.year)
{
temp=d1;
d1=d2;
d2=temp;
flag=1;
}
if(((d1.year%4==0)&&(d1.year%100!=0))||(d1.year%400==0))
a=366-DayInYear(d1);
else
a=365-DayInYear(d1);
b=DayInYear(d2);
for(int i=d1.year+1; i>op)
{
Date d1, d2;
int n;
switch(op)
{
case 1:
cin>>d1.year>>d1.month>>d1.day>>n;
d2=AddDay(d1, n);
cout<>d1.year>>d1.month>>d1.day>>n;
d2=AddMonth(d1, n);
cout<>d1.year>>d1.month>>d1.day>>n;
d2=AddYear(d1, n);
cout<>d1.year>>d1.month>>d1.day;
n=DayInYear(d1);
cout<>d1.year>>d1.month>>d1.day>>d2.year>>d2.month>>d2.day;
n=Subtract(d1, d2);
cout<