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

来源:互联网 发布:网店管家个人版数据 编辑:程序博客网 时间:2024/04/29 12:48
定义一个表示时间(包括年、月、日、时、分、秒)的结构体,然后完成下面的功能。
提示:将各个功能分别设计成函数实现,在main函数中调用,进行测试。
要实现的功能是:
(1)输入一个时间(注意各部分数据的取值范围)将输入的时间保存在一个结构体变量中;
(2)输出该日在本年中是第几天(注意闰年问题);
(3)输出这是这一天中的第几秒;
(4)输出这是这一年中的第几秒;(不要认为这个数荒唐,在计算中需要取随机数时需要一个不会重复的“种子数”,这个秒数是常用的。)
(5)求你输入的时间d天后是哪年哪月哪日,将结果保存在一个结构体变量中输出;

(6)求你输入的时间s秒后是何日何时,将结果保存在一个结构体变量中输出;

/** Copyright (c) 2014,烟台大学计算机学院* All right reserved.* 作者:邵帅* 文件:temp.cpp* 完成时间:2014年12月20日* 版本号:v1.0*/#include<iostream>using namespace std;struct date{    int year;    int month;    int day;    int hour;    int min;    int sec;};bool year(int y);int day(int y, int m, int d);int sec(int h, int m, int s);int afterday(int y, int m, int d,int n);int aftersec(int y, int m, int d,int h, int m1, int s,int n);int main(){    date date;    int days, secs,allsecs;    int after,after1;    cout << "请输入日期:";    cin >> date.year >> date.month >> date.day;    cout  << "请输入时间:";    cin >> date.hour >> date.min >> date.sec;    days = day(date.year, date.month, date.day);    cout << date.year << "年" << date.month << "月" << date.day << "日是这一年的第" << days<< "天。" << endl;    secs = sec(date.hour, date.min, date.sec);    allsecs=((day(date.year,date.month,date.day))*86400)+secs;    cout <<date.hour << ":" << date.min << ":" << date.sec << "是今天的第" << secs << "秒," ;    cout << "今年的第" <<allsecs << "秒。" << endl;    cout<<"请输入天数:";    cin>>after;    cout<<after<<"天后的日期为:";    afterday(date.year,date.month,date.day,after);    cout<<endl;    cout<<"请输入秒数:";    cin>>after1;    cout<<after1<<"秒后的日期为:";    aftersec(date.year, date.month, date.day,date.hour, date.min, date.sec,after1);}int day(int y, int m, int d)// 一年中的第几天{    int sum;    switch (m)    {    case 1:        sum = d;        break;    case 2:        sum = d + 31;        break;    case 3:        sum = d + 59;        break;    case 4:        sum = d + 90;        break;    case 5:        sum = d + 120;        break;    case 6:        sum = d + 151;        break;    case 7:        sum = d + 181;        break;    case 8:        sum = d + 212;        break;    case 9:        sum = d + 243;        break;    case 10:        sum = d + 273;        break;    case 11:        sum = d + 304;        break;    case 12:        sum = d + 334;        break;    }    if (year(y))    {        if (m > 2)            sum--;    }    return sum;}int sec(int h, int m, int s)// 一天中的第几秒{    int secs;    secs = h * 3600 + m * 60 + s;    return secs;}int afterday(int y, int m, int d,int n) //d天后的日期{    int mon[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; //每月天数    while(n--)    //循环经过每一天,    {        d++;        if(d>mon[m-1]) //过了一个月        {            m++;            d=1;        }        if(m>12) //过了一年        {            y++;            if(year(y))                mon[1]=29;            else mon[1]=28;            m=1;        }    }    cout<<y<<"年"<<m<<"月"<<d<<"日";}int aftersec(int y, int m, int d,int h, int m1, int s,int n) //过了n秒{    int d1=0;    while (n--)    {        s++;        if (s>60)        {            m1++;            s=1;        }        if (m1>60)        {            h++;            m1=1;        }        if (h>24)        {            d1++;            h=1;        }    }    afterday(y,m,d,d1);    cout<<h<<":"<<m1<<":"<<s<<""<<endl;}bool year(int y) //布尔型,判断是否是闰年{    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0 && y % 100 == 0))        return true;    else        return false;}

运行结果:



过程中复杂的是(5)和(6),如何正确处理d天后、s秒后的日期很重要。

int afterday(int y, int m, int d,int n) //d天后的日期{    int mon[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; //每月天数    while(n--)    //循环经过每一天,    {        d++;        if(d>mon[m-1]) //过了一个月        {            m++;            d=1;        }        if(m>12) //过了一年        {            y++;            if(year(y))                mon[1]=29;            else mon[1]=28;            m=1;        }    }    cout<<y<<"年"<<m<<"月"<<d<<"日";}

s秒后的日期和时间,同上。

int aftersec(int y, int m, int d,int h, int m1, int s,int n) //过了n秒{    int d1=0;    while (n--)    {        s++;        if (s>60)        {            m1++;            s=1;        }        if (m1>60)        {            h++;            m1=1;        }        if (h>24)        {            d1++;            h=1;        }    }    afterday(y,m,d,d1);    cout<<h<<":"<<m1<<":"<<s<<""<<endl;}

同时,如何判断平年闰年。

可以使用Bool型参数。

bool year(int y) //布尔型,判断是否是闰年{    if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0 && y % 100 == 0))        return true;    else        return false;}


@ Mayuko

1 0
原创粉丝点击