问题及代码:
/*
*Copyright(c)2014,烟台大学计算机学院
*Allrights reserved.
*文件名称:MADE85.cpp
*作 者:孙化龙
*完成日期:2014年12月22日
*版 本 号:v1.0
*
*问题描述:定义一个表示时间的结构体,实现下列各功能
*/
#include <iostream>
using namespace std;
struct Time
{
int year;
int month;
int day;
int hour;
int minute;
int second;
};
void input(Time &t);
int days(Time date);
int dsec(Time s);
int ysec(int d,int s);
void after(Time &t,int d);
int doy(Time t);
int dom(int m,int y);
int main()
{
Time t1;
int day,sec1,sec2,d;
cout<<"输入时间(年、月、日、时、分、秒):";
input(t1);//输入时间
day=days(t1);
cout<<"该日在本年中是第"<<day<<"天。"<<endl;
sec1=dsec(t1);
cout<<"这是这一天中的第"<<sec1<<"秒。"<<endl;
sec2=ysec(day,sec1);
cout<<"这是这一年中的第"<<sec2<<"秒"<<endl;
cout<<"输入天数:";
cin>>d;
after(t1,d);
cout<<d<<"天后为"<<t1.year<<"年"<<t1.month<<"月"<<t1.day<<"日"<<t1.hour<<"时"<<t1.minute<<"分"<<t1.second<<"秒"<<endl;
return 0;
}
void input(Time &t)
{
cin>>t.year>>t.month>>t.day>>t.hour>>t.minute>>t.second;
return;
}
int days(Time date)
{
int days=0,i;
for(i=1;i<date.month;i++)
switch(i)
{
case 2:days+=(((date.year%4==0&&date.year%100!=0)||date.year%400==0)?29:28);break;
case 4:
case 6:
case 9:
case 11:days+=30;break;
default:days+=31;break;
}
days+=date.day;
return days;
}
int dsec(Time s)
{
return s.hour*60*60+s.minute*60+s.second;
}
int ysec(int d,int s)
{
return (d-1)*24*60*60+s;
}
void after(Time &t,int d)
{
int day=days(t)+d;
t.month=0;
t.day=0;
while(day>=doy(t))
{
t.year++;
day-=doy(t);
}
while(day>=dom(t.month,t.year))
{
t.month++;
day-=dom(t.month,t.year);
}
t.day=day;
}
int doy(Time t)
{
if((t.year%4==0&&t.year%100!=0)||t.year%400==0)
return 366;
else
return 365;
}
int dom(int m,int y)
{
int days;
switch(m)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
days=31;
break;
case 4:
case 6:
case 9:
case 11:
days=30;
break;
case 2:
if((y%4==0&&y%100!=0)||y%400==0)
days=29;
else
days=28;
}
return days;
}
运行结果: