6-4 静态成员应用

/*
* 作    者: 霍雨佳
* 完成日期:2014 年4月1日
* 版 本 号:v1.0
* 问题描述:设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据
* 样例输入:
* 样例输出:
* 问题分析:时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,
*           适合作为类中的静态数据成员。
*/
#include <iostream>

using namespace std;
class Time
{
public:
    Time(int h=0,int m=0,int s=0):hour(h),minute(m),sec(s) {};
    void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
    void add_seconds(); //增加n秒钟
    void add_minutes(); //增加n分钟
    void add_hours(); //增加n小时
    static void change24(bool m)  //改变静态成员is_24,在12和24时制之间转换
    {
        is_24=m;
    }
    static void changefrom0(bool n)  //改变静态成员from0,切换是否前导0
    {
        from0=n;
    }
private:
    static bool is_24; //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5 pm
    static bool from0; //为true时,前导0,8:23:5显示为08:23:05
    int hour;
    int minute;
    int sec;
};
bool Time::is_24=true;
bool Time::from0=true;
void Time::show_time( ) //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
{
    if(Time::is_24)
    {
        cout<<"24小时制"<<" ";
        cout<<hour<<":"<<minute<<":"<<sec<<endl;//24小时制
    }
    else if(Time::from0)//前导0
    {
        cout<<"12小时制且前导0:"<<" ";
        if(hour<10)
            cout<<"0"<<hour;
            else
           cout<<hour<<":";
        if(minute<10)
            cout<<":0"<<minute;
            else
           cout<<minute<<":";
        if(sec<10)
            cout<<":0"<<sec<<endl;
            else
           cout<<":"<<sec<<endl;;
    }
    else
    {
        cout<<"12小时制"<<" ";
        if(hour>12)
        {
            hour=hour-12;
            cout<<hour<<":"<<minute<<":"<<sec<<" pm"<<endl;
        }
        else
        {
            cout<<hour<<":"<<minute<<":"<<sec<<" am"<<endl;//12小时制
        }
    }
}
void Time::add_seconds() //增加n秒钟
{
    int h=0,m=0,s=0,i,j,l,b;
    /*s=sec;
    m=minute;
    h=hour;*/
    cout<<"请输入要增加的秒数";
    cin>>b;
    s=s+b;
    cout<<"增加"<<b<<"秒钟后时间为:"<<endl;
    for(i=0; s>=60; i++)
    {
        if(s<60)
        {
            s+=1;
        }
        else
        {
            s=s-60;
            if((m+1)<60)
            {
                m+=1;
            }
            else
            {
                for(j=0; m>=60; j++)
                {
                    m=m-60;
                    if((h+1)<24)
                        h+=1;
                    else
                        for(l=0; h>=24; l++)
                        {
                            h=h-24;
                        }
                }
            }
        }
    }
    hour=h;
    minute=m;
    sec=s;
}
void Time::add_minutes() //增加n分钟
{
    int h,m,s,i,j,b;
    s=sec;
    m=minute;
    h=hour;
    cout<<"请输入要增加的分钟数";
    cin>>b;
    m+=b;
    cout<<"增加"<<b<<"分钟后时间为:"<<endl;
    if(m<60)
    {
        m=m;
    }
    else
    {
        for(i=1; m>=60; i++)
        {
            m=m-60;
            if((h+1)<24)
                h+=1;
            else
                for(j=0; h>=24; j++)
                {
                    h=h-24;
                }
        }
    }
    hour=h;
    minute=m;
    sec=s;
}
void Time::add_hours() //增加n小时
{
    int h,m,s,l,i;
    s=sec;
    m=minute;
    h=hour;
    cout<<"请输入要增加的小时";
    cin>>l;
    h=h+l;
    cout<<"增加"<<l<<"小时后时间为:"<<endl;
    if(h<24)
        h=h;
    else
    {
        for(i=1; h>=24; i++)
        {
            h=h-24;
        }
    }
    hour=h;
    minute=m;
    sec=s;
}
int main()
{
    Time t;
    t.change24(true);
    t.show_time( );
    t.add_seconds(); //增加n秒钟
    t.change24(false);
    t.show_time( );
    t.add_minutes(); //增加n分钟
    t.change24(true);
    t.show_time( );
    t.add_hours(); //增加n小时
    t.change24(false);
    t.changefrom0(false);
    t.show_time( );
    return 0;
}


运行结果:

 

 

       要好好研究下静态变量了……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值