第十八周项目五 日期结构体——第几秒及b天后的日期

本文介绍了一个用C++实现的万年历程序,能够计算特定日期是一年中的第几天,并支持查询输入日期之后的任意天数对应的日期。该程序考虑了闰年和平年的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题及代码

/*  
*ALL rights reserved.      
*文件名称:shibazhouxiangmu5(1)      
*作者:李长鸿      
*完成时间:2014.12.23    
06.*问题描述:万年历    
*/       
#include <iostream>
using namespace std;
void W(int,int,int,int,int,int);
int days(int,int,int);
void F(int,int);
bool R(int);
struct Date
{
    int year;
    int mouth;
    int day;
    int hour;
    int minute;
    int second;
} date1 ,date2,date;
int d[13]= {0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    long seconds,dy;
    cout<<"请依次输入年,月,日,时,分,秒:"<<endl;
    cin>>date1.year>>date1.mouth>>date1.day>>date1.hour>>date1.minute>>date1.second;
    W(date1.year,date1.mouth,date1.day,date1.hour,date1.minute,date1.second);
    date=date1;
    dy=days(date.year,date.mouth,date.day);
    seconds=date1.hour*3600+date1.minute*60+date1.second;
    cout<<date.year<<"年"<<date.mouth<<"月"<<date.day<<"日是"<<date.year<<"年的第"<<dy<<"天"<<endl;
    cout<<"这是这一天的第:"<<seconds<<"秒"<<endl;
    cout<<"这是这一年的第:"<<dy*24*3600+seconds<<"秒"<<endl;
    int a,b;
    cout<<"输入你想知道的你原先输入的时间多少天后的日期:"<<endl;
    cin>>b;
    a= 365-days(date1.year,date1.mouth,date1.day);
    if(R(date.year))
        a+=1;
    if(b<d[date.mouth]-date.day)
        date.day=date.day+b;
    else
        F(a,b);
    date2=date;
    cout<<"您想知道的日期是:"<<date.year<<"年"<<date.mouth<<"月"<<date.day<<"日"<<endl;
    return 0;
}

int days(int a,int b,int c)
{
    int days=0,i;
    for(i=1; i<b; i++)
        days=days+d[i];
    days=days+c;
    if(R(a)&&b>2)
        days=days+1;
    return days;
}



bool R(int x)
{
    if((x%4==0&&x%100!=0)||(x%400==0))
        return 1;
    else return 0;
}

void W(int y,int m,int t,int h,int f,int s)
{
    while(m>12||m<0||t>d[m]||t<0||(m==2&&t>29)||h>24||h<0||f>60||f<0||s>60||s<0)
    {
        cout<<"输入有误,请再次输入正确的日期:"<<endl;
        cin>>y>>m>>t>>h>>f>>s;
    }
}


void F(int a,int b)
{
    int i;
    if(b>a)
    {
        date.mouth=1;
        date.year+=1;
        b=b-a;
        while(b>364)
        {
            if(R(date.year))
                if(b>365)
                {
                    date.year+=1;
                    b-=366;
                }
                else break;
            else if(b>364)
            {
                date.year+=1;
                b-=365;
            }
        }
    }
    else
    {
        b=b-d[date.mouth]+date.day;
        date.mouth+=1;
    }
    for(i=date.mouth; b>d[i]; i++)
    {
        date.mouth++;
        b=b-d[i];
    }
    if(b==0)date.day=1;
    date.day=b;
}


总结:,,,,,,,,,,,,,,。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值