码迷,mamicode.com
首页 > 其他好文 > 详细

第五周项目四 -静态成员应用 由老师版本的完善版

时间:2015-04-11 10:23:14      阅读:141      评论:0      收藏:0      [点我收藏+]

标签:

【项目4-静态成员应用】
设计含有静态数据成员和成员函数的Time类。静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是“影响全局”的设置,适合作为类中的静态数据成员。
技术分享

  1. class Time{  
  2. public:  
  3.     Time(int=0,int=0,int=0);  
  4.     void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm  
  5.     void add_seconds(int); //增加n秒钟  
  6.     void add_minutes(int); //增加n分钟    
  7.     void add_hours(int); //增加n小时    
  8.     static void change24();  //改变静态成员is_24,在12和24时制之间转换  
  9.     static void changefrom0();   //改变静态成员from0,切换是否前导0  
  10.  private:  
  11.     static bool is_24; //为true时,24小时制,如20:23:5;为flase,12小时制,显示为8:23:5 pm   
  12.     static bool from0; //为true时,前导0,8:23:5显示为08:23:05  
  13.     int hour;  
  14.     int minute;  
  15.     int sec;  
  16. };  
  17. //下面写出静态成员的初始化及各成员函数的定义……  
  18. int main( )   
  19. {  }  

[参考解答]

#include <iostream>

using namespace std;

class Time
{
public:
    Time(int=0,int=0,int=0);
    void show_time( ); //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
    void add_seconds(int); //增加n秒钟
    void add_minutes(int); //增加n分钟
    void add_hours(int); //增加n小时
    void change();
    void work();
    void add_time();
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=false;

Time::Time(int h,int m,int s): hour(h), minute(m), sec(s) {}

void Time::show_time( ) //根据is_24和from0,输出适合形式-20:23:5/8:23:5 pm/08:23:05 pm
{
    change();
    int h=(is_24)?hour:hour%12;
    cout<<h<<":";
    if(minute<10&&from0)cout<<"0";
    cout<<minute<<":";
    if(sec<10&&from0)cout<<"0";
    cout<<sec;
    if(!is_24)
        cout<<((hour>12)? " pm":" am");
    cout<<endl;
    work();
}
//这一部分值得我们好好学习一下这样的写法。
void Time::add_seconds(int n) //增加n秒钟
{
    sec+=n;
    if (sec>59)
    {
        add_minutes(sec/60);
        sec%=60;
    }
}

void Time::add_minutes(int n) //增加n分钟
{
    minute+=n;
    if (minute>59)
    {
        add_hours(minute/60);
        minute%=60;
    }
}

void Time::add_hours(int n) //增加n小时
{
    hour+=n;
    if (hour>23)
        hour%=24;

}

void Time::change()
{
    cout<<"请选择你要输出的格式。"<<endl;
    cout<<"是否为24小时制(Y/N):";
    char ch;
    cin>>ch;
    is_24=(ch=='Y'?true:false);
    cout<<"是否为前导‘0’(Y/N):";
    char n;
    cin>>n;
    from0=(n=='Y'?true:false);
}
void Time::add_time()
{
    cout<<"秒钟增加的时间:";
    int s;
    cin>>s;
    add_seconds(s);
    cout<<"分钟增加的时间:";
    int m;
    cin>>m;
    add_minutes(m);
    cout<<"时钟增加的时间:";
    int h;
    cin>>h;
    add_hours(h);
    work();
}
void Time::work()
{
    cout<<"有以下功能供您选择:"<<endl;
    cout<<"1. 增加时间   2. 输出时间  "<<endl;
    int x;
    while(cin>>x)
    {
        switch(x)
        {
        case 1:
            add_time();
            break;
        case 2:
            show_time();
            break;
        }


    }
}
int main()
{
    int h,m,s;
    cin>>h>>m>>s;
    Time t1(h,m,s);
    t1.show_time();
    t1.work();

    return 0;
}

技术分享

在这个程序中实现了人与程序的交流。

第五周项目四 -静态成员应用 由老师版本的完善版

标签:

原文地址:http://blog.csdn.net/wh201458501106/article/details/44992857

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!