第十七周项目5-玩日期时间
/*
*Copyright(c)2014,烟台大学计算机学院
*All rights reserved.
*文件名称:test.cpp
*作者:满星辰
*完成日期:2014年 月 日
*版本号:v1.0
* 问题描述:定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能(可以在一个main函数中完成,也可以用函数求解,main函数调用即可):
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个 功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。 编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多,第三个万日,谁敢说 一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000 ,可以算出你的万日,大概在26岁多。
(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出。
(7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
* 输入描述:输入年月日时分秒,
* 程序输出:按照要求输出。
*/
#include <iostream>
using namespace std;
struct Date
{
int year;
int month;
int day;
int hour;
int minute;
int second;
};
void in_put(Date &date);
void adddays_ymd(Date date,int addays);
void addseconds_ymd(Date date,int addseconds);
int days_intheyear(Date date);
int year_days(Date date);
long long int seconds_intheday(Date date);
long long int seconds_intheyear(Date date);
bool days_judge(Date date);
bool Israin(Date date);
int comparedays(Date time1,Date time2);
int compareseonds(Date time1,Date time2);
int main()
{
Date date,time1,time2;
int addays,addseconds;
in_put(date);
cout<<"Now time is:\n";
cout<<date.year<<"/ "<<date.month<<"/ "<<date.day<<"/ "<<date.hour<<"/ "<<date.minute<<"/ "<<date.second<<endl;
cout<<"\ndays in the year:"<<days_intheyear(date)<<endl;
cout<<"seconds in the day:"<<seconds_intheday(date)<<endl;
cout<<"seconds in the year:"<<seconds_intheyear(date)<<endl;
cout<<"\nplease input add-days:";
cin>>addays;
adddays_ymd(date,addays);
cout<<"\nplease input add-seconds:";
cin>>addseconds;
addseconds_ymd(date,addseconds);
cout<<"please input two time:\n";
in_put(time1);
in_put(time2);
cout<<"differ time1 from time2"<<comparedays(time1,time2)<<"days\n";
cout<<"differ time1 from time2"<<compareseonds(time1,time2)<<"seconds";
return 0;
}
void in_put(Date &date) //对date取地址 可以使输入的数保存到Date date里
{
cout<<"input year:";
cin>>date.year;
cout<<"input month:";
cin>>date.month;
while(date.month>12||date.month<1)
{
cout<<"input 'month' is wrong!please input again:";
cin>>date.month;
}
cout<<"input days:";
cin>>date.day;
while(days_judge(date))
{
cout<<"input 'days' is wrong!please input again:";
cin>>date.day;
}
cout<<"input hour:";
cin>>date.hour;
while(date.hour>24||date.hour<0)
{
cout<<"input 'hour' is wrong!please input again:";
cin>>date.hour;
}
cout<<"input minute:";
cin>>date.minute;
while((date.minute>60||date.minute<0)||(date.hour==24&&date.minute>0))
{
cout<<"input 'minute' is wrong!please input again:";
cin>>date.minute;
}
cout<<"input second:";
cin>>date.second;
while((date.second>60||date.second<0)||(date.minute==60&&date.second>0))
{
cout<<"input 'second' is wrong!please input again:";
cin>>date.second;
}
return;
}
int days_intheyear(Date date)
{
int days=date.day;
int day[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0; i<date.month; ++i)
days+=day[i];
if(Israin(date)&&date.month>2)
++days;
return days;
}
long long int seconds_intheday(Date date) //秒太大了,用long long型
{
int seconds;
seconds=date.hour*60*60+date.minute*60+date.second;
return seconds;
}
long long int seconds_intheyear(Date date) //秒太大了,用long long型
{
int seconds;
seconds=(days_intheyear(date)-1)*24*60*60+date.hour*60*60+date.minute*60+date.second;
return seconds;
}
void adddays_ymd(Date date,int addays)
{
Date date1=date;
int d=addays+days_intheyear(date);
date1.month=1;
date1.day=0;
int day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
while(d>year_days(date1))
{
d-=year_days(date1);
++date1.year;
}
while(d>day[date1.month])
{
d-=day[date1.month];
++date1.month;
}
date1.day=d;
cout<<"After add "<<addays<<" days,now time is:\n";
cout<<date1.year<<"/ "<<date1.month<<"/ "<<date1.day<<"/ "<<date1.hour<<"/ "<<date1.minute<<"/ "<<date1.second<<endl;
}
void addseconds_ymd(Date date,int addseconds)
{
int day[12]= {31,28,31,30,31,30,31,31,30,31,30,31};
Date date1=date;
int s=addseconds+seconds_intheyear(date);
date1.month=1;
date1.day=1;
date1.hour=0;
date1.minute=0;
date1.second=0;
while(s>year_days(date1)*24*60*60)
{
s-=year_days(date1)*24*60*60;
++date1.year;
}
while(s>day[date1.month]*24*60*60)
{
s-=day[date1.month]*24*60*60;
++date1.month;
}
while(s>24*60*60)
{
s-=24*60*60;
++date1.day;
}
while(s>60*60)
{
s-=60*60;
++date1.hour;
}
while(s>60)
{
s-=60;
++date1.minute;
}
date1.second=s;
cout<<"After add "<<addseconds<<" seconds,now time is:\n";
cout<<date1.year<<"/ "<<date1.month<<"/ "<<date1.day<<"/ "<<date1.hour<<"/ "<<date1.minute<<"/ "<<date1.second<<endl;
}
bool days_judge(Date date)
{
bool smalljudge=false;
if((date.month==1||date.month==3||date.month==5||date.month==7||date.month==8||date.month==10||date.month==12)&&(date.day>31||date.day<1))
smalljudge=true;
if((date.month==4||date.month==6||date.month==9||date.month==11)&&(date.day>30||date.day<1))
smalljudge=true;
if(((date.month==2)&&(date.day>28||date.day<1))&&(Israin(date)!=true))
smalljudge=true;
if(((date.month==2)&&(date.day>29||date.day<1))&&(Israin(date)==true))
smalljudge==true;
return smalljudge;
}
bool Israin(Date date)
{
if(((date.year%4==0&&date.year%100!=0)||date.year%400==0))
return true;
else
return false;
}
int year_days(Date date)
{
if(((date.year%4==0&&date.year%100!=0)||date.year%400==0))
return 366;
else
return 365;
}
int comparedays(Date time1,Date time2)
{
Date time3;
int sum,i,m=0;
if(time1.year>time2.year)
{
time3=time1;
time1=time2;
time2=time3;
}
for(i=time1.year; i<time2.year; ++i)
{
if ((i%4==0&&i%100!=0)||i%400==0)
m++;
}
sum=(time2.year-time1.year)*365+m+days_intheyear(time2)-days_intheyear(time1);
return sum;
}
int compareseonds(Date time1,Date time2)
{
Date time3;
int sum;
if(time1.year>time2.year)
{
time3=time1;
time1=time2;
time2=time3;
}
sum=comparedays(time1,time2)*24*3600+seconds_intheday(time2)-seconds_intheday(time1);
return sum;
}
运行展示:
学习心得:
我也是醉了,做的要吐,晕死了,还是借鉴了一下才弄出来的。。。。。。。。。。。
还没有评论,来说两句吧...