• 时间类


    【问题描述】
    设计一个Time类,并设计多个重载的构造函数,可以设置时间、进行时间的加减运算、按12小时格式和24小时格式输出时间。
    例如:

    class Time
    {
        int hour,minute,second;
        public:
        int SecCalc(){return(hour*60+minute)*60+second;  }
        Time(int h,int m, int s=0);
        Time(int s=0);
        void SetTime(int h=0,int m=0, int s=0);
        void print_12();
        void print_24();
        Time Add(Time &);
        Time Sub(Time &);
    };
    

    其中构造函数Time::Time(int s)根据总秒数计算hour、minute、second并构造对象;
    成员函数Time::print_12()按12小时格式显示时间,如“09:20:45 AM”、“03:15:20 PM”;
    成员函数Time::print_24()按24小时格式显示时间,如“09:20:45”、“4:30:20”;
    成员函数Time::Add(Time&)用来实现两个时间对象的值进行相加;
    成员函数Time::Sub(Time&)用来实现两个时间对象的值进行相减。
    为了检验Time类的功能,主函数按如下方式设计:

    int main()
    {
        Time t1(2,34),t2,t3(3723);
        t2.SetTime(13,23,34);
        cout<<"t2:";
        t2.print_12();
        cout<<endl<<"t2:";
        t2.print_24();
        cout<<"
    t1+t2:";
        t1.Add(t2).print_24();
        cout<<"
    t1-t2:";
        t2.Sub(t1).print_24();
        cout<<endl<<"t3:";
        t3.print_24();
        return 0;
    }
    

    【输入形式】 无输入

    【输出形式】 程序运行结果

    【样例输入】

    【样例输出】
    t2:01:23:34 PM
    t2:13:23:34
    t1+t2:15:57:34
    t1-t2:10:49:34
    t3:01:02:03

    #include <iostream>
    #include <iomanip>
    #include <math.h>
    using namespace std;
    
    class Time
    {
    private:
        int hour,minute,second;
    public:
        int SecCalc(){ return(hour*60+minute)*60+second; }//返回总秒数
        Time(int h,int m,int s=0);//构造函数
        Time(int s=0);//根据总秒数计算hour、minute、second并构造对象
        void SetTime(int h=0,int m=0, int s=0);
        void print_12();//按12小时格式显示时间
        void print_24();//按24小时格式显示时间
        Time Add(Time &);//实现两个时间对象的值进行相加
        Time Sub(Time &);//实现两个时间对象的值进行相减
    };
    
    Time::Time(int h,int m,int s)//构造函数
    {
        hour = h; minute = m; second = s;
    }
    
    Time::Time(int s)//根据总秒数计算hour、minute、second并构造对象
    {
        hour = s/3600;
        minute = (s-hour*3600)/60;
        second = s-hour*3600-60*minute;
    }
    
    void Time::SetTime(int h,int m, int s)
    {
        hour = h; minute = m; second = s;
    }
    
    void Time::print_12()//按12小时格式显示时间
    {
        if(hour>12)
        {
            cout << setw(2) << setfill('0') << hour-12 << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " PM";
        }
        else
        {
            cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second << " AM";
        }
    }
    
    void Time::print_24()//按24小时格式显示时间
    {
        cout << setw(2) << setfill('0') << hour << ":" << setw(2) << setfill('0') << minute << ":" << setw(2) << setfill('0') << second;
    }
    
    Time Time::Add(Time &t)//实现两个时间对象的值进行相加
    {
        Time tt;
        tt.second = second+t.second;
        tt.minute = tt.second/60 + minute + t.minute;
        tt.second %= 60;
        tt.hour = tt.minute/60 + hour + t.hour;
        tt.minute %= 60;
        tt.hour %= 24;
        return tt;
    }
    
    Time Time::Sub(Time &t)//实现两个时间对象的值进行相减
    {
        int s = fabs( this->SecCalc() - t.SecCalc() );
        Time tt(s);
        return tt;
    }
    
    int main()
    {
        Time t1(2,34),t2,t3(3723);
        t2.SetTime(13,23,34);
        cout<<"t2:";
        t2.print_12();
        cout<<endl<<"t2:";
        t2.print_24();
        cout<<"
    t1+t2:";
        t1.Add(t2).print_24();
        cout<<"
    t1-t2:";
        t2.Sub(t1).print_24();
        cout<<endl<<"t3:";
        t3.print_24();
        return 0;
    }
    
    

    笔记:

    1. 用 cout << setw(2) << setfill(‘0’) << … 时要注意每输出一个值都要设定一次,不能一次一劳永逸
    2. setfill(‘0’) 括号里填的是’0’,是字符零;而不是数字0
    3. Time Add(Time &);//实现两个时间对象的值进行相加
      Time Sub(Time &);//实现两个时间对象的值进行相减
      这两个函数运用了不同思路的计算方法
      Add函数是直接运算取余取整得时间;而Sub函数是借助给定的SecCalc()函数把时间转换成秒数,再利用秒数构造函数得时间
    4. 主函数里可以这样写:t1.Add(t2).print_24(); 是因为 t1.Add(t2) 返回的是一个时间类对象,再用此时间类对象调用print_24()函数
    5. 带默认值的函数在函数原型声明时:void SetTime(int h=0,int m=0, int s=0);
      但在定义时:void Time::SetTime(int h,int m, int s) {…}
  • 相关阅读:
    二叉树的创建与遍历浅析
    sscanf用法简析
    DB、ETL、DW、OLAP、DM、BI关系 ZT
    惊闻企业Web应用生成平台 活字格 V4.0 免费了,不单可视化设计器免费,服务器也免费!
    商业智能BI-基础理论知识总结 ZT
    【BI学习笔记】适合集成到项目里的BI:Wyn Enterprise
    活字格 QQ 群和客户
    快速开发平台在中国的发展前景
    活字格Web应用平台学习笔记 8
    活字格Web应用平台学习笔记 7
  • 原文地址:https://www.cnblogs.com/yuzilan/p/10626154.html
Copyright © 2020-2023  润新知