Question
C++ Modify the Time class(attached) to be able to work with Date class. The Time object should always remain in a consistent state. Modify the
C++ Modify the Time class(attached) to be able to work with Date class. The Time object should always remain in a consistent state.
Modify the Date class(attached) to include a Time class object as a composition, a tick member function that increments the time stored in a Date object by one second, and increaseADay function to increase day, month and year when it is proper. Please use CISP400V8A4.cpp that tests the tick member function in a loop that prints the time in standard format during iteration of the loop to illustrate that the tick member function works correctly. Be aware that we are testing the following cases:
a) Incrementing into the next minute.
b) Incrementing into the next hour.
c) Incrementing into the next day (i.e., 11:59:59 PM to 12:00:00 AM).
d) Incrementing into the next month and next year.
Time class
The Time class has three private integer data members, hour (0 - 23 (24-hour clock format)), minute (0 59), and second (0 59).
It also has Time, setTime, setHour, setMinute, setSecond, getHour(), getMinute, getSecond,~Time, printUniversal, and printStandard public functions.
- The Time function is a default constructor. It takes three integers and they all have 0 as default values. It also displays "Time object constructor is called." message and calls printStandard and printUniversal functions.
- The setTime function takes three integers but does not return any value. It initializes the private data members (hour, minute and second) data.
- The setHour function takes one integer but doesnt return anything. It validates and stores the integer to the hour private data member.
- The setMinute function takes one integer but doesnt return anything. It validates and stores the integer to the minute private data member.
- The setSecond function takes one integer but doesnt return anything. It validates and stores the integer to the second private data member.
- The getHour constant function returns one integer but doesnt take anything. It returns the private data member hours data.
- The getMinute constant function returns one integer but doesnt take anything. It returns the private data member minutes data.
- The getSecond constant function returns one integer but doesnt take anything. It returns the private data member seconds data.
- The Time destructor does not take anything. It displays "Time object destructor is called." message and calls printStandard and printUniversal functions.
- The printUniversal constant function does not return or accept anything. It displays time in universal-time format.
- The printStandard constant function does not return or accept anything. It displays time in standard-time format.
Date class
The Date class has three private integer data members (month, day and year), one private Time object (time) data member and one static constant integer variable (monthsPerYear).
It has Date, print, increaseADay, tick, and ~Date public functions. It has one private checkDay function.
- The Date function is a default constructor. It takes 3 integers and one Time object. The three integers have default data (1, 2, and 1900) and the Time has (0, 0, and 0) as default data. It displays "Date object constructor for date" information when the constructor is called.
- The print constant function does not take or return data. It prints out the month day year, hour, minute and second information.
- The increaseADay function does not take or return data. It increases the private data member day by one. It also checks the day to make sure the data is accurate. If the data is not accurate it will adjust all the necessary corresponding data.
- The tick function does not takes or return data. It increases one second to the Time object of the Date class private data member. This function has to make sure that the second increased is proper or it will adjust all the necessary corresponding data.
- The ~Date function is a destructor of the Date class. It also displays "Date object destructor is called "; message and calls Time object destructor.
- The constant checkDay function takes and returns an integer. It makes sure the accuracy of day, month, and year information. This utility function to confirm proper day value based on month and year, it also handles leap years, too.
// Date.cpp #include
Date::Date( int mn, int dy, int yr ) { if ( mn > 0 && mn <= monthsPerYear ) // validate the month month = mn; else throw invalid_argument( "month must be 1-12" );
year = yr; // could validate yr day = checkDay( dy ); // validate the day cout << "Date object constructor for date "; print(); cout << endl; } // end Date constructor
void Date::print() const { cout << month << '/' << day << '/' << year; } // end function print
Date::~Date() { cout << "Date object destructor for date "; print(); cout << endl; } // end ~Date destructor
unsigned int Date::checkDay( int testDay ) const { static const array< int, monthsPerYear + 1 > daysPerMonth = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
if ( testDay > 0 && testDay <= daysPerMonth[ month ] ) return testDay;
if ( month == 2 && testDay == 29 && ( year % 400 == 0 || ( year % 4 == 0 && year % 100 != 0 ) ) ) return testDay;
throw invalid_argument( "Invalid day for current month and year" ); } // end function checkDay
// Time.cpp #include #include #include #include "Time.h" // include definition of class Time from Time.h using namespace std; Time::Time( int hour, int minute, int second ) { setTime( hour, minute, second ); // validate and set time } // end Time constructor void Time::setTime( int h, int m, int s ) { setHour( h ); // set private field hour setMinute( m ); // set private field minute setSecond( s ); // set private field second } // end function setTime void Time::setHour( int h ) { if ( h >= 0 && h < 24 ) hour = h; else throw invalid_argument( "hour must be 0-23" ); } // end function setHour void Time::setMinute( int m ) { if ( m >= 0 && m < 60 ) minute = m; else throw invalid_argument( "minute must be 0-59" ); } // end function setMinute void Time::setSecond( int s ) { if ( s >= 0 && s < 60 ) second = s; else throw invalid_argument( "second must be 0-59" ); } // end function setSecond unsigned int Time::getHour() const { return hour; } // end function getHour unsigned int Time::getMinute() const { return minute; } // end function getMinute unsigned int Time::getSecond() const { return second; } // end function getSecond
// print Time in universal-time format (HH:MM:SS) void Time::printUniversal() const { cout << setfill( '0' ) << setw( 2 ) << getHour() << ":" << setw( 2 ) << getMinute() << ":" << setw( 2 ) << getSecond(); } // end function printUniversal
// print Time in standard-time format (HH:MM:SS AM or PM) void Time::printStandard() const { cout << ( ( getHour() == 0 || getHour() == 12 ) ? 12 : getHour() % 12 ) << ":" << setfill( '0' ) << setw( 2 ) << getMinute() << ":" << setw( 2 ) << getSecond() << ( hour < 12 ? " AM" : " PM" ); } // end function printStandard
Please do not change test program.
// CISP400V10A4.cpp #include using std::cout; using std::endl;
#include "Time.h" // include Time class definition #include "Date.h" // include Date class definition
const int MAX_TICKS = 30000;
int main() { Time t(23, 59, 58);// create a time object
Date d(12, 31, 2017, t); // create date object
// output Time object t's values for ( int ticks = 1; ticks < MAX_TICKS; ++ticks ) { d.print(); // invokes print cout << endl; d.tick(); // invokes function tick } // end for d.~Date();// call Date destructor system("PAUSE"); return 0; } // end main
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started