Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

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.

  1. 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.
  2. The setTime function takes three integers but does not return any value. It initializes the private data members (hour, minute and second) data.
  3. The setHour function takes one integer but doesnt return anything. It validates and stores the integer to the hour private data member.
  4. The setMinute function takes one integer but doesnt return anything. It validates and stores the integer to the minute private data member.
  5. The setSecond function takes one integer but doesnt return anything. It validates and stores the integer to the second private data member.
  6. The getHour constant function returns one integer but doesnt take anything. It returns the private data member hours data.
  7. The getMinute constant function returns one integer but doesnt take anything. It returns the private data member minutes data.
  8. The getSecond constant function returns one integer but doesnt take anything. It returns the private data member seconds data.
  9. The Time destructor does not take anything. It displays "Time object destructor is called." message and calls printStandard and printUniversal functions.
  10. The printUniversal constant function does not return or accept anything. It displays time in universal-time format.
  11. 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.

  1. 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.
  2. The print constant function does not take or return data. It prints out the month day year, hour, minute and second information.
  3. 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.
  4. 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.
  5. The ~Date function is a destructor of the Date class. It also displays "Date object destructor is called "; message and calls Time object destructor.
  6. 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 #include #include #include "Date.h" // include Date class definition using namespace std;

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

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Database Systems For Advanced Applications Dasfaa 2023 International Workshops Bdms 2023 Bdqm 2023 Gdma 2023 Bundlers 2023 Tianjin China April 17 20 2023 Proceedings Lncs 13922

Authors: Amr El Abbadi ,Gillian Dobbie ,Zhiyong Feng ,Lu Chen ,Xiaohui Tao ,Yingxia Shao ,Hongzhi Yin

1st Edition

3031354141, 978-3031354144

More Books

Students also viewed these Databases questions

Question

In Problems 97106, find a and b. If 2 Answered: 1 week ago

Answered: 1 week ago

Question

recognise typical interviewer errors and explain how to avoid them

Answered: 1 week ago

Question

identify and evaluate a range of recruitment and selection methods

Answered: 1 week ago

Question

understand the role of competencies and a competency framework

Answered: 1 week ago