第十七周 项目五--玩日期时间

问题及代码:

/*
 *Copyright (C) 2014,烟台大学计算机学院
 *All rights reserved.
 *文件名称 :mian.cpp
 *作    者 :吴胜男
 *完成日期 :2014年12月23日
 *版 本 号 :v1.0
 *
 *问题描述 :定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能
             提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。可以设计一个函数,即刻进行测试,以降低复杂度。
             要实现的功能是:
            (1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
            (2)输出该日在本年中是第几天(注意闰年问题);
            (3)输出这是这一天中的第几秒;
            (4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
            (5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;(你的万天日期靠这个功能了)——插讲一个故事。当年老贺由小孩儿过百日,想到自己的万日在哪天。编程计算,结果刚过了十几天,那个懊恼啊。第二个万日得再等26年多(现在离第二个万日靠近了),第三个万日,谁敢说一定能过上?20岁左右的你,要算清楚了。在第(1)问中输入你的生日及时辰,d值取为10000,可以算出你的万日,大概在26岁多。
            (6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;
            (7)用结构体变量给定两个时间,求相差多少天?相差多少秒?
*输入描述 :年,月,日,时,分,秒,要加的天数,要加的秒数
*程序输出 :按要求输出
*/
#include <iostream>
using namespace std;
struct time1
{
    int year;
    int month;
    int day;
    int hour;
    int minite;
    int second;
};
struct time2
{
    int year;
    int month;
    int day;
};
struct time3
{
    int day;
    int hour;
};
time1 stu1;
time2 stu2;
time3 stu3;
int yd(time1 stu1);
void ds(time1 stu1);
void ys(time1 stu1);
void ymd(time2 stu2,int u);
void dh(time3 stu3,int p);
int sum;//sum是全局变量,在计算一年中的第几秒时用得到。
int main( )
{
    int y,mo,d,h,mi,s,u,p;
    cout<<"请输入一个时间(年、月、日、时、分、秒):"<<endl;
    cin>>y>>mo>>d>>h>>mi>>s;
    stu1.year=y;
    stu1.month=mo;
    stu1.day=d;
    stu1.hour=h;
    stu1.minite=mi;
    stu1.second=s;
    sum=yd(stu1);
    cout<<"这是本年的第"<<sum<<"天"<<endl;
    ds(stu1);
    ys(stu1);
    cout<<endl;
    cout<<"请输入天数:"<<endl;
    cin>>u;
    ymd(stu2,u);
    cout<<endl;
    cout<<"请输入秒数:"<<endl;
    cin>>p;
    dh(stu3,p);
    return 0;
}

int yd(time1 stu1)
{
    int sum=stu1.day;
    int i;
    for(i=1; i<stu1.month; i++)
    {
        switch(i)
        {
        case 2:
        {
            if((stu1.year%4==0&&stu1.year%100!=0)||(stu1.year%400==0))
                sum+=29;
            else
                sum+=28;
        }
        break;
        case 4:
        case 6:
        case 9:
        case 11:
            sum+=30;
            break;
        default :
            sum+=31;
        }
    }
    return sum;
}

void ds(time1 stu1)
{
    int i;
    i=stu1.hour*60*60+stu1.minite*60+stu1.second;
    cout<<"这是一天中的第"<<i<<"秒"<<endl;
}
void ys(time1 stu1)
{
    int i;
    i=(sum-1)*24*60*60+stu1.hour*60*60+stu1.minite*60+stu1.second;
    cout<<"这是本年的第"<<i<<"秒"<<endl;
}

void ymd(time2 stu2,int u)
{
    int m,t,h,n;
    if(stu1.month==1||stu1.month==3||stu1.month==7||stu1.month==8||stu1.month==10||stu1.month==12)
    {
        m=stu1.day+u;
        if(m>31)
        {
            n=m/31;
            t=n+stu1.month;
            if(t>=12)
            {
                h=t/12;
                stu2.year=stu1.year+h;
                stu2.month=t%12;
                stu2.day=m%31;
            }
            else
            {
                stu2.year=stu1.year;
                stu2.month=t;
                stu2.day=m%31;
            }
        }
        else
        {
            stu2.year=stu1.year;
            stu2.month=stu1.month;
            stu2.day=stu1.day+u;
        }
    }
    else if(stu1.month==4||stu1.month==6||stu1.month==9||stu1.month==11)
    {
        m=stu1.day+u;
        if(m>30)
        {
            n=m/30;
            t=n+stu1.month;
            if(t>=12)
            {
                h=t/12;
                stu2.year=stu1.year+h;
                stu2.month=t%12;
                stu2.day=m%30;
            }
            else
            {
                stu2.year=stu1.year;
                stu2.month=t;
                stu2.day=m%30;
            }
        }
        else
        {
            stu2.year=stu1.year;
            stu2.month=stu1.month;
            stu2.day=stu1.day+u;
        }
    }
    else
    {
        m=stu1.day+u;
        if((stu1.year%4==0&&stu1.year%100!=0)||(stu1.year%400==0))
        {
            if(m>29)
            {
                n=m/29;
                t=n+stu1.month;
                if(t>=12)
                {
                    h=t/12;
                    stu2.year=stu1.year+h;
                    stu2.month=t%12;
                    stu2.day=m%29;
                }
                else
                {
                    stu2.year=stu1.year;
                    stu2.month=t;
                    stu2.day=m%29;
                }
            }
            else
            {
                stu2.year=stu1.year;
                stu2.month=stu1.month;
                stu2.day=stu1.day+u;
            }
        }
        else
        {
            if(m>28)
            {
                n=m/28;
                t=n+stu1.month;
                if(t>=12)
                {
                    h=t/12;
                    stu2.year=stu1.year+h;
                    stu2.month=t%12;
                    stu2.day=m%28;
                }
                else
                {
                    stu2.year=stu1.year;
                    stu2.month=t;
                    stu2.day=m%28;
                }
            }
            else
            {
                stu2.year=stu1.year;
                stu2.month=stu1.month;
                stu2.day=stu1.day+u;
            }
        }
    }
    cout<<u<<"天后是"<<stu2.year<<"年"<<stu2.month<<"月"<<stu2.day<<"日"<<endl;
}

void dh(time3 stu3,int p)

{
    int m,t,n;
    if((p+stu1.second)>60)
    {
        m=(p+stu1.second)/60;
        m=m+stu1.minite;
        if(m>=60)
        {
            n=m/60;
            n=n+stu1.hour;
            if(n>24)
            {
                t=n/24;
                stu3.day=stu1.day+t;
                stu3.hour=n%24;
            }
            else
            {
                stu3.day=stu1.day;
                stu3.hour=n;
            }
        }
        else
        {
            stu3.day=stu1.day;
            stu3.hour=stu1.hour;
        }
    }
    else
    {
        stu3.day=stu1.day;
        stu3.hour=stu1.hour;
    }
    cout<<p<<"秒后是"<<stu3.day<<"日"<<stu3.hour<<"时"<<endl;
}

运行结果:

知识点总结:多种函数的定义,以及结构体,我不会返回结构体的值,所以在自定义函数中直接输出。

学习心得:这个程序我编了一下午,虽然编出来了但是运行错误,真的感觉好累,特别难过,也许自己就是抗打击能力特别差。不想发牢骚,可是不发牢骚,老觉得心里不平衡,到最后还是得复制粘贴别人的,唉~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值