C + + class and object 1.3: time class

Request:

Extend the function of class in original program

(1) Please add the following member functions (which will be built-in member functions) to the original class

Add a sec() / / increase by 1 second
Add a minute() / / increase by 1 minute
Add an hour() / / increase by 1 hour

In the main() number, call the newly added member function to test the expanded function.


(2) add three more member functions, which need to be declared in the class and defined outside the class.

add_seconds(int) / / increase by n seconds
Add minutes (int) / / add n minutes
Add hours (int) / / add n hours

Tips:

Consider the case of exceeding the value range after adding;
After n seconds is increased, the number of seconds may exceed 60. Adjust the number of seconds and call the member function to increase the number of minutes to make the time legal. Similarly, increasing the number of minutes has similar problems.

Origin:

#include <iostream>
using namespace std;

class Time{
private:
    bool is_time(int, int, int);
    int hour;
    int minute;
    int sec;
public:
    void set_time();
    void show_time();
};

void Time::set_time(){
    char c1, c2;
    cout<<"Please enter the time (format hh:mm:ss): ";
    while(1){
        cin>>hour>>c1>>minute>>c2>>sec;
        if(c1!=':' || c2!=':')
            cout<<"Incorrect format, please re-enter"<<endl;
        else if(!is_time(hour, minute, sec))
            cout<<"Illegal time, please re-enter"<<endl;
        else
            break;
    }
}

void Time::show_time(){
    cout<<hour<<':'<<minute<<':'<<sec<<endl;
}

bool Time::is_time(int h, int m, int s){
   if(h<0 || h>24 || m<0 || m>60 || s<0 || s>60)
        return false;
    return true;
}

int main(){
    Time T1;
    T1.set_time();
    T1.show_time();
    return 0;
}

Solution:

#include <iostream>
using namespace std;

class Time{
private:
    bool is_time(int, int, int);
    int hour;
    int minute;
    int sec;
public:
    void set_time();
    void show_time();
    void add_a_sec();
    void add_a_min();
    void add_an_hour();
    void add_seconds(int);
    void add_minutes(int);
    void add_hours(int);
};

void Time::set_time(){
    char c1, c2;
    cout<<"Please enter the time (format hh:mm:ss): ";
    while(1){
        cin>>hour>>c1>>minute>>c2>>sec;
        if(c1!=':' || c2!=':')
            cout<<"Incorrect format, please re-enter ";
        else if(!is_time(hour, minute, sec))
            cout<<"Illegal time, please re-enter ";
        else
            break;
    }
}

void Time::show_time(){
    cout<<hour<<':'<<minute<<':'<<sec<<endl;
}

bool Time::is_time(int h, int m, int s){
   if(h<0 || h>23 || m<0 || m>59 || s<0 || s>59)
        return false;
    return true;
}

void Time::add_a_sec(){
    if(sec<59)
        sec++;
    else{
        sec=0;
        add_a_min();
    }
    cout<<"add one second later: ";
}

void Time::add_a_min(){
    if(minute<59)
        minute++;
    else{
        minute=0;
        add_an_hour();
    }
    cout<<"add one minute later: ";
}

void Time::add_an_hour(){
    if(hour<23)
        hour++;
    else
        hour=0;
    cout<<"add one hour later: ";
}

void Time::add_seconds(int ss){
    int seconds,minutes,hours;
    if(ss<60){
        seconds=sec+ss;
        if(seconds<60)
            sec=seconds;
        else{
            sec=seconds-60;
            minute++;
        }
        if(minute>59){
            minute-=60;
            hour++;
            if(hour>23)
                hour-=24;
        }
    }
    else if(ss==60)
        add_a_min();
    else if(ss>60 && ss<3600){
        seconds=sec+ss%60;
        if(seconds<60)
            sec=seconds;
        else{
            sec=seconds-60;
            minute++;
        }
        if(minute>59){
            minute-=60;
            hour++;
            if(hour>23)
                hour-=24;
        }
    }
    else if(ss==3600)
        add_an_hour();
    else if(ss>3600){
        seconds=sec+(ss%3600)%60;
        if(seconds<60)
            sec=seconds;
        else{
            sec=seconds-60;
            minute++;
        }
        minutes=minute+(ss%3600)/60;
        if(minutes<60)
            minute=minutes;
        else{
            minutes=minutes-60;
            hour++;
        }
        hours=hour+ss/3600;
        if(hours<24)
            hour=hours;
        else{
            do
                hour=hours-24;
            while(hour<24);
        }
    }
    cout<<"add seconds later: ";
}

void Time::add_minutes(int mm){
    int minutes,hours;
    if(mm<60){
        minutes=minute+mm;
        if(minutes<60)
            minute=minutes;
        else{
            minute=minutes-60;
            hour++;
            if(hour>23)
                hour-=24;
        }
    }
    if(mm==60)
        add_an_hour();
    if(mm>60){
        minutes=minute+mm%60;
        if(minutes<60)
            minute=minutes;
        else{
            minute=minutes-60;
            hour++;
        }
        hours=hour+mm/60;
        if(hours<24)
            hour=hours;
        else{
            do
                hour=hours-24;
            while(hour<24);
        }
    }
    cout<<"add minutes later: ";
}

void Time::add_hours(int hh){
    int hours;
    hours=hour+hh%24;    //The number of hours actually increased is 0-23, i.e. hh%24
    if(hours<24)
        hour=hours;
    else{
            do
                hour=hours-24;
            while(hour<24);
        }
    cout<<"add hours later: ";
}

int main(){
    Time T1;
    T1.set_time();
    T1.show_time();

    T1.add_a_sec();
    T1.show_time();

    T1.add_a_min();
    T1.show_time();

    T1.add_an_hour();
    T1.show_time();

    T1.add_seconds(5);
    T1.show_time();

    T1.add_minutes(5);
    T1.show_time();

    T1.add_hours(6);
    T1.show_time();
    return 0;
}

 Result:

 

Posted by crazytoon on Wed, 27 Nov 2019 07:44:09 -0800