第17周项目5-玩日期时间(v1.0)

来源:互联网 发布:中国网络墙之父 编辑:程序博客网 时间:2024/05/16 19:14

问题及代码:

/* *Copyright(c)2014,烟台大学计算机学院 *Allrights reserved. *文件名称:MADE85.cpp *作    者:孙化龙 *完成日期:2014年12月22日 *版 本 号:v1.0 * *问题描述:定义一个表示时间的结构体,实现下列各功能*/#include <iostream>using namespace std;struct Time{    int year;    int month;    int day;    int hour;    int minute;    int second;};void input(Time &t);int days(Time date);int dsec(Time s);int ysec(int d,int s);void after(Time &t,int d);int doy(Time t);int dom(int m,int y);int main(){    Time t1;    int day,sec1,sec2,d;    cout<<"输入时间(年、月、日、时、分、秒):";    input(t1);//输入时间    day=days(t1);    cout<<"该日在本年中是第"<<day<<"天。"<<endl;    sec1=dsec(t1);    cout<<"这是这一天中的第"<<sec1<<"秒。"<<endl;    sec2=ysec(day,sec1);    cout<<"这是这一年中的第"<<sec2<<"秒"<<endl;    cout<<"输入天数:";    cin>>d;    after(t1,d);    cout<<d<<"天后为"<<t1.year<<"年"<<t1.month<<"月"<<t1.day<<"日"<<t1.hour<<"时"<<t1.minute<<"分"<<t1.second<<"秒"<<endl;    return 0;}void input(Time &t){    cin>>t.year>>t.month>>t.day>>t.hour>>t.minute>>t.second;    return;}int days(Time date){    int days=0,i;    for(i=1;i<date.month;i++)        switch(i)    {        case 2:days+=(((date.year%4==0&&date.year%100!=0)||date.year%400==0)?29:28);break;        case 4:        case 6:        case 9:        case 11:days+=30;break;        default:days+=31;break;    }    days+=date.day;    return days;}int dsec(Time s){    return s.hour*60*60+s.minute*60+s.second;}int ysec(int d,int s){    return (d-1)*24*60*60+s;}void after(Time &t,int d){    int day=days(t)+d;    t.month=0;    t.day=0;    while(day>=doy(t))    {        t.year++;        day-=doy(t);    }    while(day>=dom(t.month,t.year))    {        t.month++;        day-=dom(t.month,t.year);    }    t.day=day;}int doy(Time t){    if((t.year%4==0&&t.year%100!=0)||t.year%400==0)        return 366;    else        return 365;}int dom(int m,int y){    int days;    switch(m)    {    case 1:    case 3:    case 5:    case 7:    case 8:    case 10:    case 12:        days=31;        break;    case 4:    case 6:    case 9:    case 11:        days=30;        break;    case 2:        if((y%4==0&&y%100!=0)||y%400==0)            days=29;        else            days=28;    }    return days;}


运行结果:


0 0
原创粉丝点击