第17周项目5-玩日期时间

来源:互联网 发布:最快的网络借款 编辑:程序博客网 时间:2024/05/01 03:37
/* *Copyright (c) 2014, 烟台大学计算机学院 *All rights reserved. *文件名称:week17-project5.cpp *作者:高赞 *完成日期:2014年 12 月 19 日 *版本号:v1.0 * */#include <iostream>using namespace std;struct time{    int year;    int month;    int day;    int hour;    int minute;    int second;} ;void cintime(time*);int days(int,int,int);int dseconds(int,int,int);int yseconds(int,int);time passdays(time *,int,int);void passseconds(time *,int,int);void defferdays(int,int,int,int);void defferseconds(int,int,int,int);int main(){    int d,s,sumdays1,sumdays2,dayseconds1,dayseconds2,yearseconds1,yearseconds2;    time t,t1,t2;    cintime(&t);//输入一个时间并判断取值范围是否正确    sumdays1=days(t.year,t.month,t.day);//求该日是本年的第几天     cout<<"该日在本年是第"<<sumdays1<<"天。"<<endl;    dayseconds1=dseconds(t.hour,t.minute,t.second);//求此时是这一天的第几秒      cout<<"此时是这一天的第"<<dayseconds1<<"秒。"<<endl;    yearseconds1=yseconds(sumdays1,dayseconds1);//求此时是这一年的第几秒    cout<<"此时是这一年的第"<<yearseconds1<<"秒。"<<endl;    cout<<"输入一个天数:";    cin>>d;    t1=passdays(&t,d,sumdays1);//求输入d天后是哪年哪月哪日    cout<<d<<"天后日期是"<<t1.year<<"年"<<t1.month<<"月"<<t1.day<<"日。"<<endl;       cout<<"输入一个秒数:";    cin>>s;    passseconds(&t,s,yearseconds1);//求输入秒数后计算是何年何月何日 何时何分何秒    cout<<endl<<"再输入一个时间。。。"<<endl;    cintime(&t2);//输入第二个时间并判断取值范围是否正确    sumdays2=days(t2.year,t2.month,t2.day);//求该日是本年的第几天    defferdays(t.year,t2.year,sumdays1,sumdays2);//两时间相差的天数    dayseconds2=dseconds(t2.hour,t2.minute,t2.second);//求此时是这一天的第几秒     yearseconds2=yseconds(sumdays2,dayseconds2);//求此时是这一年的第几秒     defferseconds(t.year,t2.year,yearseconds1,yearseconds2);//两时间相差的秒数    return 0;}void cintime(time *p)//输入一个时间并判断取值范围是否正确{    int monthlimit(int,int);    cout<<"请输入年、月、日:";    cin>>p->year>>p->month>>p->day;    int num=monthlimit(p->month,p->year);    while(p->year<0||p->month<=0||p->month>12||p->day<=0||p->day>num)    {        cout<<"输入范围有误,重新输入时分秒:";        cin>>p->year>>p->month>>p->day;    }    cout<<"请输入时、分、秒:";    cin>>p->hour>>p->minute>>p->second;    while(p->hour<0||p->hour>24||(p->hour==24&&p->minute==0&&p->second==0)            ||p->minute<0||p->minute>=60||p->second<0||p->second>=60)    {        cout<<"输入范围有误,重新输入时分秒:";        cin>>p->hour>>p->minute>>p->second;    }}int monthlimit(int m,int y)//设置每月的天数上限{    int s;    switch (m)    {    case 2:    {        if (((y%4 == 0 && y%100 != 0) || y%400 == 0))            s=29;        else s=28;    }    break;    case 4:    case 6:    case 9:    case 11:        s=30;        break;    case 1:    case 3:    case 5:    case 7:    case 8:    case 10:    case 12:        s=31;        break;    }    return s;}int days(int y, int m, int d)//求该日是本年的第几天{    int i,sumdays;    for (i=1; i<=m; ++i)    {        switch (i)        {        case 1:            sumdays=0;            break;        case 3:        {            if (((y%4 == 0 && y%100 != 0) || y%400 == 0))                sumdays+=29;            else sumdays+=28;        }        break;        case 2:        case 4:        case 6:        case 8:        case 9:        case 11:            sumdays+=31;            break;        case 5:        case 7:        case 10:        case 12:            sumdays+=30;            break;        }    }    sumdays+=d;    return sumdays;}int dseconds(int h,int m,int s)//求此时是这一天的第几秒{    int se=(3600*h+60*m+s);    return se;}int yseconds(int d,int s)//求此时是这一年的第几秒{    int sum=3600*24*(d-1)+s;    return sum;}time passdays(time *t,int d,int s)//求输入d天后是哪年哪月哪日{    time newt;    newt.year=t->year;    newt.month=1;    newt.day=1;    s+=d-1;    int n1,n2=31;    if (((newt.year%4 == 0 && newt.year%100 != 0) || newt.year%400 == 0))        n1=366;    else n1=365;    while(s>=n1)    {        s-=n1;        ++newt.year;        if (((newt.year%4 == 0 && newt.year%100 != 0) || newt.year%400 == 0))            n1=366;        else n1=365;    }    while(s>=n2)    {        s-=n2;        ++newt.month;        n2=monthlimit(newt.month,newt.year);    }    newt.day+=s;    return newt;}void passseconds(time *t,int se,int s)//求输入秒数后计算是何年何月何日 何时何分何秒{    time newt;    newt.year=t->year;    newt.month=1;    newt.day=1;    s+=se;    newt=passdays(&newt,0,s/(3600*24));    s=s%(3600*24);    newt.hour=0;    newt.minute=0;    newt.second=0;    while (s>=3600)    {        s-=3600;        newt.hour++;    }    while (s>=60)    {        s-=60;        newt.minute++;    }    newt.second=s;    cout<<se<<"秒后的时间是"<<newt.year<<"年"<<newt.month<<"月"<<newt.day<<"日"        <<newt.hour<<"时"<<newt.minute<<"分"<<newt.second<<"秒。"<<endl;}void defferdays(int y1,int y2,int d1,int d2)//两时间相差的天数{    int i,j,days=0;    if(y1>y2)    {        i=y2;        j=y1;        days=d1-d2;    }    else    {        i=y1;        j=y2;        days=d2-d1;    }    for(; i<j; ++i)    {        days+=365;        if (((i%4 == 0 && i%100 != 0) || i%400 == 0))            days++;    }    cout<<"两时间相差"<<days<<"天。"<<endl;}void defferseconds(int y1,int y2,int s1,int s2)//两时间相差的秒数{     int i,j,seconds=0;    if(y1>y2)    {        i=y2;        j=y1;        seconds=s1-s2;    }    else    {        i=y1;        j=y2;        seconds=s2-s1;    }    for(; i<j; ++i)    {        seconds+=(3600*24*365);        if (((i%4 == 0 && i%100 != 0) || i%400 == 0))            seconds+=(3600*24);    }    cout<<"两时间相差"<<seconds<<"秒。"<<endl;}


 

0 0
原创粉丝点击