第十七周项目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;
}



运行展示:



学习心得:

我也是醉了,做的要吐,晕死了,还是借鉴了一下才弄出来的。。。。。。。。。。。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值