From d3c133e918cb85933c961c31871d038cace6b638 Mon Sep 17 00:00:00 2001 From: Angel Dimitriev Date: Tue, 29 Mar 2022 20:00:49 +0300 Subject: Add files via upload --- Sem. 06/Event/Time.cpp | 126 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 Sem. 06/Event/Time.cpp (limited to 'Sem. 06/Event/Time.cpp') diff --git a/Sem. 06/Event/Time.cpp b/Sem. 06/Event/Time.cpp new file mode 100644 index 0000000..5c8fe44 --- /dev/null +++ b/Sem. 06/Event/Time.cpp @@ -0,0 +1,126 @@ +#include "Time.h" + +Time::Time(size_t hours, size_t mins, size_t seconds) +{ + setHours(hours); + setMins(mins); + setSeconds(seconds); +} + +Time::Time() : Time(0, 0, 0) +{} + +Time::Time(size_t seconds) +{ + hours = seconds / 3600; + seconds %= 3600; + + mins = seconds / 60; + seconds %= 61; + + this->seconds = seconds; +} + + +size_t Time::getSeconds() const +{ + return seconds; +} +size_t Time::getMins() const +{ + return mins; +} +size_t Time::getHours() const +{ + return hours; +} + +void Time::setSeconds(size_t seconds) +{ + if (seconds > 59) + seconds = 59; + this->seconds = seconds; +} +void Time::setMins(size_t mins) +{ + if (mins > 59) + mins = 59; + this->mins = mins; +} +void Time::setHours(size_t hours) +{ + if (hours > 23) + hours = 23; + this->hours = hours; +} + +void Time::tick() +{ + size_t seconds = convertToSeconds(); + seconds++; + Time newObj(seconds); + + *this = newObj; //копие +} + +int Time::compare(const Time& other) const +{ + size_t mySeconds = convertToSeconds(); + size_t otherSeconds = other.convertToSeconds(); + + if (mySeconds > otherSeconds) + return 1; + else if (mySeconds < otherSeconds) + return -1; + else + return 0; +} +Time Time::getDiff(const Time& other) const +{ + size_t mySeconds = convertToSeconds(); + size_t otherSeconds = other.convertToSeconds(); + + size_t diff; + + if (mySeconds > otherSeconds) + diff = mySeconds - otherSeconds; + else + diff = otherSeconds - mySeconds; + + return Time(diff); +} + +Time Time::getToMidnight() const +{ + Time midnight(23, 59, 59); + Time diff = getDiff(midnight); + diff.tick(); + return diff; +} +bool Time::isDinnerTime() const +{ + Time lowerBound(20, 30, 0); + Time upperBound(22, 0, 0); + return compare(lowerBound) >= 0 && compare(upperBound) <= 0; +} +bool Time::isPartyTime() const +{ + Time lowerBound(23, 0, 0); + Time upperBound(6, 0, 0); + return compare(lowerBound) >= 0 || compare(upperBound) <= 0; +} + +void Time::print(bool is12hoursclock) const +{ + if (hours < 10) + std::cout << 0; + std::cout << ((is12hoursclock && hours > 12) ? hours - 12 : hours) << ":"; + if (mins < 10) + std::cout << 0; + std::cout << mins << ":"; + if (seconds < 10) + std::cout << 0; + std::cout << seconds; + if (is12hoursclock) + std::cout << ((hours > 12) ? "PM" : "AM"); +} \ No newline at end of file -- cgit v1.3.1-23-gd82d