The two given programs are pasted here Dateh Date class de


The two given programs are pasted here:

// Date.h
// Date class definition with overloaded increment operators.
#ifndef DATE_H
#define DATE_H

#include <iostream>
using namespace std;

class Date
{
friend ostream &operator<<( ostream &, const Date & );

public:
Date( int m = 1, int d = 1, int y = 1900 ); // default constructor
void setDate( int, int, int ); // set month, day, year
Date & operator++(); // prefix increment operator
Date operator++( int ); // postfix increment operator
const Date &operator+=( int ); // add days, modify object
static bool leapYear( int ); // is date in a leap year?
bool endOfMonth( int ) const; // is date at the end of month?
private:
int month;
int day;
int year;

static const int days[]; // array of days per month
void helpIncrement(); // utility function for incrementing date
}; // end class Date

#endif
// Date.h
// Date class definition with overloaded increment operators.
#ifndef DATE_H
#define DATE_H

#include <iostream>
using namespace std;

class Date
{
friend ostream &operator<<( ostream &, const Date & );

public:
Date( int m = 1, int d = 1, int y = 1900 ); // default constructor
void setDate( int, int, int ); // set month, day, year
Date & operator++(); // prefix increment operator
Date operator++( int ); // postfix increment operator
const Date &operator+=( int ); // add days, modify object
static bool leapYear( int ); // is date in a leap year?
bool endOfMonth( int ) const; // is date at the end of month?
private:
int month;
int day;
int year;

static const int days[]; // array of days per month
void helpIncrement(); // utility function for incrementing date
}; // end class Date

#endif


// Date.cpp
// Date class member- and friend-function definitions.
#include <iostream>
#include <string>
#include \"Date.h\"
using namespace std;

// initialize static member; one classwide copy
const int Date::days[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

// Date constructor
Date::Date( int m, int d, int y )
{
setDate( m, d, y );
} // end Date constructor

// set month, day and year
void Date::setDate( int mm, int dd, int yy )
{
month = ( mm >= 1 && mm <= 12 ) ? mm : 1;
year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900;

// test for a leap year
if ( month == 2 && leapYear( year ) )
day = ( dd >= 1 && dd <= 29 ) ? dd : 1;
else
day = ( dd >= 1 && dd <= days[ month ] ) ? dd : 1;
} // end function setDate

// overloaded prefix increment operator
Date & Date::operator++()
{
helpIncrement(); // increment date
return *this;
// in C++, \"this\" is a pointer to the calling object
// *this dereferences the pointer

} // end function operator++


// overloaded postfix increment operator; note that the
// dummy integer parameter does not have a parameter name

Date Date::operator++( int )
{
Date temp = *this; // hold current state of object
// temp has a day, a month, and year
// *this has a day, a month, and a year
// the assignment operator does \"memberwise\" assignment
// temp.day = *this.day
// temp.month = *this.month
// temp.year = *this.year
helpIncrement();

// return unincremented, saved, temporary object
return temp; // value return; not a reference return
} // end function operator++

// add specified number of days to date

// Date d1(10, 12, 2016);
// d1 += 2;

// add two days to the date in d1
// the left operand is the calling object
// the right operand is the parameter

// cout << ( d1 += 2 );

const Date & Date::operator+=( int additionalDays )

{
for ( int i = 0; i < additionalDays; i++ )
helpIncrement();

return *this; // enables cascading
} // end function operator+=

// if the year is a leap year, return true; otherwise, return false
bool Date::leapYear( int testYear )
{
if ( testYear % 400 == 0 ||
( testYear % 100 != 0 && testYear % 4 == 0 ) )
return true; // a leap year
else
return false; // not a leap year
} // end function leapYear

// determine whether the day is the last day of the month
bool Date::endOfMonth( int testDay ) const
{
if ( month == 2 && leapYear( year ) )
return testDay == 29; // last day of Feb. in leap year
else
return testDay == days[ month ];
} // end function endOfMonth

// function to help increment the date
void Date::helpIncrement()
{
// day is not end of month
if ( !endOfMonth( day ) )
day++;
else
if ( month < 12 )
{
month++;
day = 1;
}
else // last day of year
{
year++; // increment year
month = 1; // first month of new year
day = 1; // first day of new month
} // end else
} // end function helpIncrement

// overloaded output operator
ostream &operator<<( ostream &output, const Date &d )
{
static string monthName[ 13 ] = { \"\", \"January\", \"February\",
\"March\", \"April\", \"May\", \"June\", \"July\", \"August\",
\"September\", \"October\", \"November\", \"December\" };
output << monthName[ d.month ] << \' \' << d.day << \", \" << d.year;
return output; // enables cascading
} // end function operator<<
// Date.cpp
// Date class member- and friend-function definitions.
#include <iostream>
#include <string>
#include \"Date.h\"
using namespace std;

// initialize static member; one classwide copy
const int Date::days[] =
{ 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

// Date constructor
Date::Date( int m, int d, int y )
{
setDate( m, d, y );
} // end Date constructor

// set month, day and year
void Date::setDate( int mm, int dd, int yy )
{
month = ( mm >= 1 && mm <= 12 ) ? mm : 1;
year = ( yy >= 1900 && yy <= 2100 ) ? yy : 1900;

// test for a leap year
if ( month == 2 && leapYear( year ) )
day = ( dd >= 1 && dd <= 29 ) ? dd : 1;
else
day = ( dd >= 1 && dd <= days[ month ] ) ? dd : 1;
} // end function setDate

// overloaded prefix increment operator
Date & Date::operator++()
{
helpIncrement(); // increment date
return *this;
// in C++, \"this\" is a pointer to the calling object
// *this dereferences the pointer

} // end function operator++


// overloaded postfix increment operator; note that the
// dummy integer parameter does not have a parameter name

Date Date::operator++( int )
{
Date temp = *this; // hold current state of object
// temp has a day, a month, and year
// *this has a day, a month, and a year
// the assignment operator does \"memberwise\" assignment
// temp.day = *this.day
// temp.month = *this.month
// temp.year = *this.year
helpIncrement();

// return unincremented, saved, temporary object
return temp; // value return; not a reference return
} // end function operator++

// add specified number of days to date

// Date d1(10, 12, 2016);
// d1 += 2;

// add two days to the date in d1
// the left operand is the calling object
// the right operand is the parameter

// cout << ( d1 += 2 );

const Date & Date::operator+=( int additionalDays )

{
for ( int i = 0; i < additionalDays; i++ )
helpIncrement();

return *this; // enables cascading
} // end function operator+=

// if the year is a leap year, return true; otherwise, return false
bool Date::leapYear( int testYear )
{
if ( testYear % 400 == 0 ||
( testYear % 100 != 0 && testYear % 4 == 0 ) )
return true; // a leap year
else
return false; // not a leap year
} // end function leapYear

// determine whether the day is the last day of the month
bool Date::endOfMonth( int testDay ) const
{
if ( month == 2 && leapYear( year ) )
return testDay == 29; // last day of Feb. in leap year
else
return testDay == days[ month ];
} // end function endOfMonth

// function to help increment the date
void Date::helpIncrement()
{
// day is not end of month
if ( !endOfMonth( day ) )
day++;
else
if ( month < 12 )
{
month++;
day = 1;
}
else // last day of year
{
year++; // increment year
month = 1; // first month of new year
day = 1; // first day of new month
} // end else
} // end function helpIncrement

// overloaded output operator
ostream &operator<<( ostream &output, const Date &d )
{
static string monthName[ 13 ] = { \"\", \"January\", \"February\",
\"March\", \"April\", \"May\", \"June\", \"July\", \"August\",
\"September\", \"October\", \"November\", \"December\" };
output << monthName[ d.month ] << \' \' << d.day << \", \" << d.year;
return output; // enables cascading
} // end function operator<<
Concepts and Syntax inheritance creating a new class that absorbs (inherits) an existing class\'s capabilities, then customizes or enhances them. Base Class (also called parent class or superclass) the existing class Derived Class (also called the child class or subclass) the new class \"is a\" relationship: phrase that indicates inheritance Private private members of a class are only accessible in the member functions of the class where they are defined. private members of a base class are inherited, but not directly accessible in a derived class. Public public members of a class are accessible in any function. Class Hierarchy a diagram showing the inheritance relationships among classes

Solution

Longdate.h:
----------------

#ifndef Date_h
#define Date_h

#include \"date.h\"

const char monthNames[] PROGMEM = \"Error\\0January\\0February\\0March\\0April\\0May\\0June\\0July\\0August\\0September\\0October\\0November\\0December\";
const byte monthNameIndex[] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
const char monthNamesShort[] PROGMEM = \"Err\\0Jan\\0Feb\\0Mar\\0Apr\\0May\\0Jun\\0Jul\\0Aug\\0Sep\\0Oct\\0Nov\\0Dec\";
const char dayNames[] PROGMEM = \"Error\\0Sunday\\0Monday\\0Tuesday\\0Wednesday\\0Thursday\\0Friday\\0Saturday\";
const byte dayNameIndex[] = {0, 3, 9, 13, 20, 26, 29 };
const char dayNamesShort[] PROGMEM = \"Err\\0Sun\\0Mon\\0Tue\\0Wed\\0Thu\\0Fri\\0Sat\";

class Longdate
{
private: //private decleration
int _year, _month, _day, _hour, _minute, _second, _millisec;
int parse(char number);
int parse(char* number, int characters);

String& getProgMemString(const char *progMemString, byte index);

public: //public decleration
enum Period { Year, Month, Day, Hour, Minute, Second, millisec };
enum DayOfWeek { Error, Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday };
enum TimeSource { Compiler, NTP };
  
Longdate(); //LongDate function
Longdate(char* date, char* time, Longdate::TimeSource source);
Longdate(int year, int month, int day, int hour, int minute, int second, int millisec);

int year() const;
int month() const;
int day() const;
int hour() const;
int minute() const;
int second() const;
int millisec() const;
  
int hourTens() const;
int hourUnits() const;
int minuteTens() const;
int minuteUnits() const;

void add(int interval, Period period);
int daysInMonth();
byte monthFromString(char* string);
unsigned long totalmillisecs() const;
Longdate::DayOfWeek dayOfWeek() const;
Longdate toLocal();
boolean isLeapYear() const;
boolean isApproximatelyEqualTo(const Longdate &other) const;
  
boolean isEarlierThan(const Longdate &other) const;
boolean isEqualTo(const Longdate &other) const;
  
static void getDaylightSavingsDates(Longdate forDate, Longdate &utcStartDate, Longdate &utcEndDate);

boolean operator == (const Longdate &other) const;
boolean operator < (const Longdate &other) const;
boolean operator <= (const Longdate &other) const;
boolean operator > (const Longdate &other) const;
boolean operator >= (const Longdate &other) const;
  
String& toString();
String& monthToString();
String& monthToString(int month);
String& monthToShortString();
String& monthToShortString(int month);
String& dayOfWeekToString();
String& dayOfWeekToString(DayOfWeek day);
String& dayOfWeekToShortString();
String& dayOfWeekToShortString(DayOfWeek day);
};

#endif


LongDate.cpp:

#include \"LongDate.h\"   

LongDate origin();

LongDate::LongDate() { //LongDate function
_year = 2000;
_month = 1;
_day = 1;
_hour = 0;
_minute = 0;
_second = 0;
_millisec = 0;
}

LongDate::LongDate(int year, int month, int day, int hour, int minute, int second, int millisec) { //Decleration part
_year = year;
_month = month;
_day = day;
_hour = hour;
_minute = minute;
_second = second;
_millisec = millisec;
}

LongDate::LongDate(char* date, char* time, LongDate::TimeSource source) {
switch (source) { //switch cases
case Compiler:
_year = parse((date + 7), 4);
_month = monthFromString(date);
_day = parse((date + 4), 2);
_hour = parse(time, 2);
_minute = parse(time + 3, 2);
_second = parse(time + 6, 2);
_millisec = 0;
break;
case NTP:
_year = 2000 + parse(date + 4, 2);
_month = parse(date + 2, 2);
_day = parse(date, 2);
_hour = parse(time, 2);
_minute = parse(time + 2, 2);
_second = parse(time + 4, 2);
_millisec = parse(time + 7, 3);
break;
}
}

byte LongDate::monthFromString(char* string) { // Using monthFromString() here
switch (*string) { //switch cases
case \'A\':
return (*(++string) == \'p\') ? 4 : 8;
break;
case \'D\':
return 12;
break;
case \'F\':
return 2;
break;
case \'J\':
return (*(++string) == \'a\') ? 1 : ((*(++string) == \'l\') ? 7 : 6); //case J
return 0;
break;
case \'M\':
return (*(string + 2) == \'r\') ? 3 : 5;
break;
case \'N\':
return 11;
break;
case \'O\':
return 10;
break;
case \'S\':
return 9;
break;
}
}

int LongDate::year() const {
return _year;
}

int LongDate::month() const {
return _month;
}

int LongDate::day() const {
return _day;
}

int LongDate::hour() const {
return _hour;
}

int LongDate::minute() const {
return _minute;
}

int LongDate::second() const {
return _second;
}

int LongDate::millisec() const {
return _millisec;
}

int LongDate::hourTens() const {
return _hour/10;
}

int LongDate::hourUnits() const {
return _hour%10;
}

int LongDate::minuteTens() const {
return _minute/10;
}

int LongDate::minuteUnits() const {
return _minute%10;
}

void LongDate::add(int interval, Period period) {
// This Should accept a positive or negative interval for any period.
if (period == millisec) {
int magnitude = this->millisec() + interval;
interval = magnitude / 1000;
_millisec = magnitude % 1000;
if (this->millisec() < 0) {
_millisec += 1000;
interval -= 1;
}
if (interval != 0) period = Second;
}
if (period == Second) {
int magnitude = this->second() + interval;
interval = magnitude / 60;
_second = magnitude % 60;
if (this->second() < 0) {
_second += 60;
interval -= 1;
}
if (interval != 0) period = Minute;
}
if (period == Minute) {
int magnitude = this->minute() + interval;
interval = magnitude / 60;
_minute = magnitude % 60;
if (this->minute() < 0) {
_minute += 60;
interval -= 1;
}
if (interval != 0) period = Hour;
}
if (period == Hour) {
int magnitude = this->hour() + interval;
interval = magnitude / 24;
_hour = magnitude % 24;
if (this->hour() < 0) {
_hour += 24;
interval -= 1;
}
if (interval != 0) period = Day;
}
if (period == Day) { //If period is same as Day
while(interval) {
int magnitude = this->day() + interval;
int daysInMonth = this->daysInMonth(); //daysInMonth() used
if (magnitude > daysInMonth) {
_day = 1;
add(1, LongDate::Month);
interval = magnitude - daysInMonth - 1;
} else if (magnitude < 1) {
int tempDay = day();
_day = 1;
add(-1, LongDate::Month);
_day = this->daysInMonth();
interval = interval + tempDay; //new interval value
} else {
_day += interval;
interval = 0;
}
}
}
if (period == Month) { //If period is same as Month
int magnitude = this->month() + interval; // 1 -1 = 0
interval = magnitude / 12;
_month = magnitude % 12;
if (!_month) { //If month is not = 12
_month = 12;
interval--;
}
if (interval != 0) period = Year;
}
if (period == Year) _year += interval;
}

int LongDate::daysInMonth() { //Using daysInMonth() function

switch (month()) { //switch cases with month()
case 1:
return 31;
break;
case 2:
return isLeapYear() ? 29 : 28; // isLeapYear() function
break;
case 3:
return 31;
break;
case 4:
return 30;
break;
case 5:
return 31;
break;
case 6:
return 30;
break;
case 7: //case 7
return 31;
break;
case 8:
return 31;
break;
case 9:
return 30;
break;
case 10:
return 31;
break;
case 11:
return 30;
break;
case 12:
return 31;
break;
}
}

int LongDate::parse(char* number, int characters) {
int result = 0;
int index = characters;
for (int index = 0; index < characters; index++) {
result *= 10;
result += parse(*(number + index)); //This will fetch the result
}
return result;
}

int LongDate::parse(char number) { //Parse
if (number == \' \') number = \'0\';
return number - 48;
}

boolean LongDate::isEarlierThan(const LongDate &other) const {
if (this->year() < other.year()) return true;
if (this->year() > other.year()) return false;
if (this->month() < other.month()) return true;
if (this->month() > other.month()) return false;
if (this->day() < other.day()) return true;
if (this->day() > other.day()) return false;
if (this->hour() < other.hour()) return true;
if (this->hour() > other.hour()) return false;
if (this->minute() < other.minute()) return true;
if (this->minute() > other.minute()) return false;
if (this->second() < other.second()) return true;
if (this->second() > other.second()) return false;
if (this->millisec() < other.millisec()) return true;
if (this->millisec() > other.millisec()) return false;
return false;
}

boolean LongDate::isEqualTo(const LongDate &other) const {
return (this->year() == other.year() &&
this->month() == other.month() &&
this->day() == other.day() &&
this->hour() == other.hour() &&
this->minute() == other.minute() &&
this->second() == other.second() &&
this->millisec() == other.millisec());
}

boolean LongDate::operator == (const LongDate &other) const {
return this->isEqualTo(other);
}

boolean LongDate::operator < (const LongDate &other) const {
return this->isEarlierThan(other);
}

boolean LongDate::operator <= (const LongDate &other) const {
return this->isEarlierThan(other) || this->isEqualTo(other);
}

boolean LongDate::operator > (const LongDate &other) const {
return other.isEarlierThan(*this);
}

boolean LongDate::operator >= (const LongDate &other) const {
return other.isEarlierThan(*this) || other.isEqualTo(*this);
}

LongDate LongDate::toLocal() {
LongDate local(*this);
LongDate dstStart;
LongDate dstEnd;
LongDate::getDaylightSavingsDates(*this, dstStart, dstEnd);
if (this->isEarlierThan(dstStart) && (dstEnd.isEarlierThan(*this) || (dstEnd.isEqualTo(*this))))
local.add(10, LongDate::Hour);
else
local.add(11, LongDate::Hour);
return local;
}

boolean LongDate::isLeapYear() const {

int year = this->year();
return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

void LongDate::getDaylightSavingsDates(LongDate forDate, LongDate &utcStartDate, LongDate &utcEndDate) { //getDaylightSavingsDates() function
int year = forDate.year();
utcStartDate = LongDate(year, 10, 1, 16, 0, 0, 0);
utcEndDate = LongDate(year, 4, 1, 16, 0, 0, 0);
if (utcStartDate.dayOfWeek() == 0)
utcStartDate.add(-1, LongDate::Day);
else
utcStartDate.add(6 - utcStartDate.dayOfWeek(), LongDate::Day);
if (utcEndDate.dayOfWeek() == 0)
utcEndDate.add(-1, LongDate::Day);
else
utcEndDate.add(6 - utcEndDate.dayOfWeek(), LongDate::Day);
}

LongDate::DayOfWeek LongDate::dayOfWeek() const {

// To calculate only for the 2000-2099 century
int century = 6;
int monthFactors[12] = { 0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; //MonthsFactors declared here
int monthFactorsLeap[12] = { 6, 2, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5 }; //MonthsFactorsLeap declared here
int twoDigitYear = this->year()%100;
int yearOverFour = twoDigitYear/4;
int month = this->isLeapYear() ? monthFactorsLeap[this->month() - 1] : monthFactors[this->month() - 1];
int sum = century + twoDigitYear + yearOverFour + month + this->day();
return (LongDate::DayOfWeek)(sum % 7 + 1);
}

boolean LongDate::isApproximatelyEqualTo(const LongDate &other) const {

LongDate alpha;
LongDate alphaOne;
LongDate omega;
if (this->isEarlierThan(other)) {
alpha = (*this);
omega = other; //if omega=other
} else {
alpha = other; //omega = other
omega = (*this);
}
alphaOne = alpha; // When alphaOne = alpha
alphaOne.add(1, LongDate::Day);
if (((alpha.year() != omega.year())
|| (alpha.month() != omega.month())
|| (alpha.day() != omega.day())) // not same day
&& ((alphaOne.year() != omega.year())
|| (alphaOne.month() != omega.month())
|| (alphaOne.day() != omega.day()))) // not consecutive days
return false;
if ((omega.totalmillisecs() - alpha.totalmillisecs()) > 2000) return false;
return true;
}

unsigned long LongDate::totalmillisecs() const {
unsigned long result = 0;
result += millisec();
result += second() * 1000UL; //result in sec
result += minute() * 60UL * 1000; //result in mints
result += hour() * 60UL * 60 * 1000; //result in hrs
return result; //result will be fetched here
}

String& LongDate::toString() {

static String* output;
if (output) delete(output); //output deleted here
output = new String(); //new string accepted here
*output += dayOfWeekToShortString();
*output += \' \';
if (_day < 10) *output += \'0\'; //if day < 10
*output += _day;
*output += \' \';
*output += monthToShortString();
*output += \' \';
*output += _year;
*output += \' \';
if (_hour < 10) *output += \'0\';
*output += _hour;
*output += \':\';
if (_minute < 10) *output += \'0\';
*output += _minute;
*output += \':\';
if (_second < 10) *output += \'0\';
*output += _second;
*output += \'.\';
if (_millisec < 100) *output += \'0\';
if (_millisec < 10) *output += \'0\';
*output += _millisec;
return *output;
}

String& LongDate::monthToString() {
return monthToString(_month);
}

String& LongDate::monthToString(int month) {
return getProgMemString(monthNames, monthNameIndex[month]);
}

String& LongDate::monthToShortString() {
return monthToShortString(_month);
}


String& LongDate::monthToShortString(int month) {
return getProgMemString(monthNamesShort, (month * 4));
}

String& LongDate::dayOfWeekToString() {
return dayOfWeekToString(dayOfWeek());
}


String& LongDate::dayOfWeekToString(DayOfWeek day) {
return getProgMemString(dayNames, dayNameIndex[day]);
}

String& LongDate::dayOfWeekToShortString() {
return dayOfWeekToShortString(dayOfWeek());
}


String& LongDate::dayOfWeekToShortString(DayOfWeek day) {
return getProgMemString(dayNamesShort, (day * 4));
}

String& LongDate::getProgMemString(const char *progArray, byte index) { //getProgMemString()
char ramBuffer[10];
char* progMemCString = (char*)(progArray + (index));
strcpy_P(ramBuffer, progMemCString); // strcpy function used here
static String* output;
delete(output);
output = new String(ramBuffer);
return *output; //output fetched
}

 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost
 The two given programs are pasted here: // Date.h // Date class definition with overloaded increment operators. #ifndef DATE_H #define DATE_H #include <iost

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site