第十七周 【项目5-玩日期时间】(改进版 5)

问题及代码:
/*
 *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++;
        }
    }
}


运行结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ah_ty

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值