第17周【项目 5-玩日期时间】

问题描述:

定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在 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;
};
Date me1,me;
int myday(int a,int b,int c)
{
    int sum=0;
    int s[12]={0,31,28,31,30,31,30,31,31,30,31,30};
    if((a%4==0&&a%100!=0)||(a%400==0))
        s[2]++;
    while (b>0)
        sum+=s[--b];
    sum+=c;
    return  sum;
}
int daysOfMonth(int a,int b)
{
    int s[12]={0,31,28,31,30,31,30,31,31,30,31,30};
    if((b%4==0&&b%100!=0)||(b%400==0))
        s[2]++;
    return s[a];
}
int dsecond(int a,int b,int c)
{
    return a=a*3600+b*60+c;
}
int ysecond(int a,int b,int c,int d,int e,int f)
{
    return a=(myday(a,b,c)-1)*3600*24+dsecond(d,e,f);
}
void mydate(int a,int b,int c,int d)
{
    me1.month=1;
    me1.day=0;
    me1.year=0;
    int i;
    d=d+myday(a,b,c);
    i=d/1461;
    me1.year=a+4*i+(d-i*1461)/365;
    d=d-i*1461;
    d=d-(d/365)*365;
     while(d>daysOfMonth(me1.month,me1.year))
    {
        d-=daysOfMonth(me1.month,me1.year);
        ++me1.month;
    }
    me1.day+=d;
}
void mysecond(int second)
{
    int i;
    me1.hour=me.hour;
    me1.minute=me.minute;
    me1.second=me.second;
    i=second/(3600*24);
    mydate(me.year,me.month,me.day,i);
    second-=i*3600*24;
    i=second/3600;
    me1.hour+=i;
    if(me1.hour>24)
        me1.day++,me1.hour-=24;
    second=second-i*3600;
    i=second/60;
    me1.minute+=i;
    second=second-i*60;
    if(me1.minute>60)
        me1.hour++,me1.minute-=60;
    me1.second+=second;
    if(me1.second>60)
        me1.minute++,me1.second-=60;
}
int main()
{
    int day,second,day1,day2,sum=0,i;
    cout<<"input your year month day hour minute second"<<'\n';
    cin>>me.year>>me.month>>me.day>>me.hour>>me.minute>>me.second;
    cout<<"这是本年的第"<<myday(me.year,me.month,me.day)<<"天"<<'\n';
    cout<<"这是当天的第"<<dsecond(me.hour,me.minute,me.second)<<"秒"<<'\n';
    cout<<"这是当年的第"<<ysecond(me.year,me.month,me.day,me.hour,me.minute,me.second)<<"秒"<<'\n';
    cout<<"请输入一个天数";
    cin>>day;
    mydate(me.year,me.month,me.day,day);
    cout<<day<<"天过后是"<<me1.year<<"年"<<me1.month<<"月"<<me1.day<<"日"<<'\n';
    cout<<"请输入一个秒数";
    cin>>second;
    mysecond(second);
    cout<<second<<"秒数后是"<<me1.year<<"年"<<me1.month<<"月"<<me1.day<<"日"<<me1.hour<<"时"<<me1.minute<<"分"<<me1.second<<"秒"<<'\n';
    cout<<"输入2个不同的日期:"<<'\n';
    cin>>me.year>>me.month>>me.day>>me.hour>>me.minute>>me.second;
    cin>>me1.year>>me1.month>>me1.day>>me1.hour>>me1.minute>>me1.second;
    day1=myday(me.year,me.month,me.day);
    day2=myday(me1.year,me1.month,me1.day);
    sum=day2-day1;
    sum=sum>0?sum:-sum;
    i=me.year-me1.year;
    i=i>0?i:-i;
    sum+=i*365;
    if (i>=4)
        sum+=i/4;
    else for(i=me.year+1; i<me1.year; i++)
        {
            if((i%4==0&&i%100!=0)||(i%400==0))
                sum++;
        }
    cout<<"这两个时间相差"<<sum<<"天."<<endl;
    cout<<"这两个时间相差"<<sum*3600*24<<"秒."<<endl;
    return 0;
}


运行结果:
学习心得:
  4个小时的人生就这样度过了!!!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值