补一

本文介绍了一个简单的C++程序,该程序通过自定义的时间(Time)和日期(Date)类来模拟时间的流逝。主要功能包括每增加一秒时日期和时间的变化处理,特别是对于特殊月份和闰年的处理。此外,还提供了两个示例测试不同情况下的日期变化。

一、问题及代码:

/*    
文件名称:program2    
作者:贺南鹏    
完成时间:2017年5月8日 
版本号:v1.0    
对任务及求解方法的描述部分:    
*输入描述:无     
*程序输出:无   
*问题分析:无    
*算法设计:无 
#include<iostream>  
#include<iomanip>  
#include<cstdlib>  
using namespace std;  
class Date; //对Date类的提前引用声明    
class Time    
{    
public:    
    Time(int,int,int);    
    void add_a_second(Date &);  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年    
    void display(Date &);  //显示时间,格式:月/日/年 时:分:秒    
private:    
    int hour;    
    int minute;    
    int sec;    
};    
class Date    
{    
public:    
    Date(int,int,int);    
    friend class Time; //Time为Date的友元类    
private:    
    int month;    
    int day;    
    int year;    
};    
    
int main( )    
{    
    Time t1(23,59,32);    
    Date d1(12,31,2013);   //测试时,再试试Date d1(2,28,2013)会如何    
    for(int i=0; i<=100; i++)    
    {    
        t1.add_a_second(d1);    
        t1.display(d1);    
    }    
    Time t2(23,59,30);  
    Date d2(2,29,2012);  
    for(i=0;i<=100;i++)  
    {  
        t2.add_a_second(d2);  
        t2.display(d2);  
    }  
    return 0;    
}    
//下面定义两个类中的成员函数,要求不得再增加成员函数    
//注意体会在Time的成员函数中可以调用Date类的私有数据成员       
Time::Time(int x,int y,int z)  
{  
    if(x<0||x>=24||y<0||y>=60||z<0||z>=60)  
    {  
        cout<<"设置时间错误!"<<endl;  
        exit(0);  
    }  
    else  
    {  
        hour=x;  
        minute=y;  
        sec=z;  
    }  
}  
Date::Date(int x,int y,int z)  
{  
    if(x==4||x==6||x==9||x==11)  
    {  
        if(y<1||y>30)  
            exit(0);  
        else  
        {  
            month=x;  
            day=y;  
            year=z;  
        }  
    }  
    else  
        if(x==2)  
        {  
            if(z%400==0||z%4==0&&z%100!=0)  
            {  
                if(y<1||y>29)  
                    exit(0);  
                else  
                {  
                    month=x;  
                    day=y;  
                    year=z;  
                }  
            }  
            else  
            {  
                if(y<1||y>28)  
                    exit(0);  
                else  
                {  
                    month=x;  
                    day=y;  
                    year=z;  
                }  
            }  
        }  
        else  
        {  
            if(y<1||y>31)  
                exit(0);  
            else  
            {  
                month=x;  
                day=y;  
                year=z;  
            }  
        }  
}  
void Time::add_a_second(Date &p)  //增加1秒,1秒后可能会到了下一天,乃到下一月、下一年    
{  
    sec++;  
    if(sec==60)  
    {  
        sec=0;  
        minute++;  
        if(minute==60)  
        {  
            minute=0;  
            hour++;  
        }  
    }  
    if(hour==24)  
    {  
        hour=0;  
        if(p.month==2)  
        {  
            if(p.year%400==0||p.year%4==0||p.year%100!=0)  
            {  
                if(p.day==29)  
                {  
                    p.day=1;  
                    p.month++;  
                }  
                else  
                    p.day++;  
            }  
            else  
            {  
                if(p.day==28)  
                {  
                    p.day=1;  
                    p.month++;  
                }  
                else  
                    p.day++;  
            }  
        }  
        else  
            if(p.month==4||p.month==6||p.month==9||p.month==11)  
            {  
                if(p.day==30)  
                {  
                    p.day=1;  
                    p.month++;  
                }  
                else  
                    p.day++;  
            }  
            else  
                if(p.month==12)  
                {  
                    if(p.day==31)  
                    {  
                        p.day=1;  
                        p.month=1;  
                        p.year++;  
                    }  
                    else  
                        p.day++;  
                }  
                else  
                {  
                    if(p.day==31)  
                    {  
                        p.day=1;  
                        p.month++;  
                    }  
                    else  
                        p.day++;  
                }  
    }  
}  
void Time::display(Date &p)  
{  
    cout<<setfill('0')<<setw(2)<<p.month<<'/'<<setfill('0')<<setw(2)<<p.day<<'/'<<p.year;  
    cout<<"    "<<setfill('0')<<setw(2)<<hour<<':'<<setfill('0')<<setw(2)<<minute<<':'<<setfill('0')<<setw(2)<<sec<<endl;  
}  
二、运行结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值