问题及代码:
/*
*Copyright (c) 2014,烟台大学计算机学院
*ALL right reserved
*文件名:日期结构体
*作者;童宇
*完成日期:2014年12月23日
*版本号v1.0
*问题描述:定义一个结构体变量(包括年、月、日)
*输入描述:输入一个日期和时间
*程序输出:该日是该年的第几天。该时间是该天的多少秒。
*/
#include <iostream>
using namespace std;
int dAys(int,int,int);
int dSeconds(int,int,int);
struct Date
{
int year;
int month;
int day;
int hour;
int minute;
int second;
};
void aDddate (int);
Date date;
int main()
{
int days,dseconds,newdays,rootyear;
cout<<"请输入一个日期和时间(生日输入格式为年,月,日,时(24时计时法),分,秒):\n\t";
cin>>date.year>>date.month>>date.day>>date.hour>>date.minute>>date.second;
while(date.month>12||date.day>31||date.hour>23||date.minute>59||date.second>59||date.month<0||date.day<0||date.hour<0||date.minute<0||date.second<0)
{
cout<<"请重新正确输入时间!\n\t";
cin>>date.year>>date.month>>date.day>>date.hour>>date.minute>>date.second;
}
days=dAys(date.year,date.month,date.day);
rootyear=date.year;
dseconds=dSeconds(date.hour,date.minute,date.second);
cout<<"\t该日期是该年的第"<<days<<"天\n";
cout<<"\t该时间是该天的"<<dseconds<<"秒\n";
cout<<"\t该时间是该年的"<<days*24*3600+dseconds<<"秒\n";
cout <<"\n\t请输入一个天数,我帮你算算这么多天后的日期\n\t";
cin>>newdays;
aDddate (newdays);
cout<<"\t"<<newdays<<"天后的日期为:"<<date.year<<" "<<date.month<<" "<<date.day<<"\n\t距离该日期 "<<date.year-rootyear<<"年"<<endl;
return 0;
}
int dAys(int y,int m,int d)
{
int s=0;
while(m>1)
{
m--;
switch(m)
{
case 2:
s=s+28;
break;
case 4:
case 6:
case 9:
case 11:
s=s+30;
break;
default:
s=s+31;
break;
}
}
s=s+d;
if((y%4==0&&y%100!=0)||y%400==0)
{
s=s+1;
}
return s;
}
int dSeconds(int h,int m,int s)
{
int a=0;
while(h>0)
{
a=a+3600;
h--;
}
while(m>0)
{
a=a+60;
m--;
}
a=a+s;
return a;
}
void aDddate (int newdays)
{
date.day=date.day+newdays;
while(date.day>31)
{
date.day-=31;
switch(date.month)
{
case 2:
{
if((date.year%4==0&&date.year%100!=0)||date.year%400==0)
{
date.day+=2;
}
else
{
date.day+=3;
}
};
break;
case 4:
case 6:
case 9:
case 11:
date.day++;
break;
}
date.month++;
while(date.month>12)
{
date.month-=12;
date.year++;
}
}
}
运行结果: