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

【项目4-静态成员应用】

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

[cpp] view
plain
copyprint?

  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;
}

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

时间: 2024-08-06 11:34:17

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

第五周项目四 静态成员应用

[项目4-静态成员应用] 设计含有静态数据成员和成员函数的Time类.静态数据成员是类中所有的对象共有的数据,在下面的设计中,时钟要采用12小时制,还是要使用24小时制,显示时,不足两位的数字前是否前导0,都是"影响全局"的设置,适合作为类中的静态数据成员. [cpp] view plaincopyprint? class Time{ public: Time(int=0,int=0,int=0); void show_time( ); //根据is_24和from0,输出适合形式-2

第五周 项目四-静态成员应用

问题 设计含有静态数据成员和成员函数的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),second

HeyWeGo第五周项目总结

HeyWeGo第五周项目总结 项目内容 使用java程序开发一款扫雷游戏 游戏项目规划: 确定游戏中方块格子的个数 确定游戏中地雷的个数(初始10个),完成布雷 计算每个方块周围的雷数,在方块周围本身没有地雷的情况下,统计周围地雷的个数 若周围没有地雷则翻开周围的空白方格,直到周围有附近地雷的格子 设计一个检测是否挖完所有的雷的方法 设定左键点击为翻开 设定右键点开为标记 项目进展 整合并调试修改各队员分段编写的代码,游戏已实现,已经修补上周不能右键标记部分. 完整代码 import java.

十五周 项目1 工资数据的输入

/* 输入员工工资1000-10000之间,并按从大到小输出*/ #include <iostream> using namespace std; int main( ) { double salarys[500]; int n=0; double t; while(cin>>salarys[n]) { n++; //从cin流读取数据 } //将n名职工的工资排序后输出 for(int i=0; i<n; i++) for(int j=0; j<n-1; j++) {

16周(项目四 动态数组)

/* *copyright(c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:16周(项目四 动态数组) *作者:王忠 *完成日期:2014.12.15 *版本号:v1.0 * *问题描述:新增一个恰当长度的动态数组,将原数组中的数据"复制"到新数组,接着再输入新的数据.增加新数据后的数组,成为保存数据的新数组. *输入描述:输入成绩,学生数 *程序输出:新增的学生数 成绩 #include <iostream> using nam

五周第四次课(1月11日) 8.6 管道符和作业控制 8.7/shell变量 8.8 shell变量 8.9 环境变量配置文件

五周第四次课(1月11日)8.6 管道符和作业控制8.7/shell变量8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719 简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html 关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command

Linux20180423五周第四次课(4月23日)

五周第四次课(4月23日) 8.6 管道符和作业控制8.7/8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environ

第十一周 项目四 类族的设计】

项目4 - 类族的设计] 按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试: (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试: (3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类

第11周 项目四-类族的设计

按以下的提示,由基类的设计和测试开始,逐渐地完成各个类的设计,求出圆格柱体的表面积.体积并输出并且完成要求的计算任务: (1)先建立一个Point(点)类,包含数据成员x,y(坐标点),实现需要的成员函数,并设计main函数完成测试: (2)以Point为基类,派生出一个Circle(圆)类,增加数据成员r(半径),以及求面积的成员函数area,实现其他需要的成员函数,设计main函数完成测试: (3)再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h(高),