Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

For some reason it is not compiling. It gives me this : 1>------ Rebuild All started: Project: ProjectHolidays, Configuration: Debug Win32 ------ 1> Holidays.cpp 1>c:usersownerdesktopprojectholidaysholidays.cpp(71):

For some reason it is not compiling. It gives me this :

1>------ Rebuild All started: Project: ProjectHolidays, Configuration: Debug Win32 ------ 1> Holidays.cpp 1>c:\users\owner\desktop\projectholidays\holidays.cpp(71): error C2039: 'thanksGiving': is not a member of 'Date' 1> c:\users\owner\desktop\projectholidays\date.h(9): note: see declaration of 'Date' 1> Date1.cpp 1> Date.cpp 1>c:\users\owner\desktop\projectholidays\date.cpp(218): error C2039: 'thanksGiving': is not a member of 'Date' 1> c:\users\owner\desktop\projectholidays\date.h(9): note: see declaration of 'Date' 1> Generating Code... ========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

I need the output to look like this:

image text in transcribed

Main.cpp:

/*

Name: Jean Maravi

Project Name: Holidays

*/

#include "Date.h"

#include

using namespace std;

// Start of main

void bubbleSort(Date date[], int n)//is an array of dates and is the size of the array

{

int i, j;

for (i = 0; i

// Last i elements are already in place

for (j = 0; j

if (date[j] > date[j + 1])

{

Date temp = date[j];

date[j] = date[j + 1];

date[j + 1] = temp;

}

}

int main() {

// Declare arrays and variables

const int SIZE = 7; // Size of array elements

const int COUNT = 6; // Number of holidays

Date weekDays[SIZE]; // Weekday array

Date holidays[COUNT]; // Holiday array

string holidaysDescription[COUNT];

int year = 0;

Date easterSunday(04, 01, 2018); // Easter Sunday

holidays[0] = easterSunday;

holidaysDescription[0] = "Easter Sunday";

Date mothersDay(05, 13, 2018); // Mother's Day

holidays[1] = mothersDay;

holidaysDescription[1] = "Mother's Day";

Date memorialDay(05, 28, 2018); // Memorial Day

holidays[2] = memorialDay;

holidaysDescription[2] = "Memorial Day";

Date fathersDay(06, 17, 2018); // Fathers Day

holidays[3] = fathersDay;

holidaysDescription[3] = "Father's Day";

Date independenceDay(07, 04, 2018); // Independence Day

holidays[4] = independenceDay;

holidaysDescription[4] = "Independence Day";

// Prompt the user for current year

cout

cin >> year;// Read in year

cout

// Search for the date of Thanksgiving and add it to

// the holiday array

Date giveThanks = giveThanks.thanksGiving(year);

holidays[5] = giveThanks;

holidaysDescription[5] = "Thanksgiving";

bubbleSort(holidays, COUNT);//Sort the list of the array

cout

for (int index = 0; index

{

// Display the holiday

int day = holidays[index].weekday();

cout

// Display the day

switch (day) {

case 0: cout

case 1: cout

case 2: cout

case 3: cout

case 4: cout

case 5: cout

case 6: cout

}

}

system("pause");

return 0;

}

Date.h:

#ifndef Date_H

#define Date_H

#include

#include

#include

#include

using namespace std;

class Date {

private:

int month, day, year;

int days[13];

void setDays();

public:

//constructors

Date(); //constructor for todays date

Date(int m, int d, int y); //constructor to assign date

Date(string str); //constructor for todays date as "mm/dd/year

Date(int gregorian); //constructor to convert a Gregorian date to Date

//methods

int getMonth() const; //returns the private variable month

int getDay() const; //returns the private variable day

int getYear() const; //returns the private variable year

string toString() const; //returns the string mm/dd/yyyy

bool leapYear() const; //determines if the year is a leap year

int dayofYear() const; //returns the day of the year: ie 2/1/???? is the 32 day of year

int julian() const;

int weekday() const; //returns 0 for Sunday, 1 for Monday, etc.

//overloaded operators

bool operator==(const Date& otherDate); //2 dates are equal if month, day and year are equal

bool operator

bool operator>(const Date& otherDate); //a date is > another date if it is later

Date operator=(const Date& otherDate); //let's you copy one date to another.

Date operator+(int); //Assign new values to the date after adding the number of days

friend ostream& operator

friend istream& operator >> (istream &input, Date &d);

};

bool validDate(int m, int d, int y); //test other date

bool leapYear(int y); //let's you test any year, not just the year for the instance

int julian(int m, int d, int y); //convert any date to Julian

void gregorian(int jd, int &mth, int &d, int &y);

static int days2[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

#endif

Date.cpp

#include "Date.h"

Date::Date() {

time_t t = time(0); // get time now

struct tm * now = localtime(&t);

month = now->tm_mon + 1;

day = now->tm_mday;

year = now->tm_year + 1900;

setDays();

}//constructor for today: cross platform

/*Date::Date() {

struct tm newtime;

__time64_t long_time;

char timebuf[26];

errno_t err;

// Get time as 64-bit integer.

_time64( &long_time );

// Convert to local time.

err = _localtime64_s( &newtime, &long_time );

month=newtime.tm_mon+1;

day=newtime.tm_mday;

year=newtime.tm_year+1900;

setDays();

}//constructor for today for Visual Studio

*/

bool validDate(int m, int d, int y) {

int days2[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

bool valid = true; //assume it is valid until found to be invalid

if (y

if (m12) valid = false;

if (valid) {

if (leapYear(y)) days2[2] = 29;

if (ddays2[m]) valid = false;

}

return valid;

}//validDate

void Date::setDays(void) {

int days2[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };

for (int m = 0; m

if (leapYear()) days[2] = 29;

}

Date::Date(int m, int d, int y) {

//constructor to assign values to month day and year

if (validDate(m, d, y)) {

month = m;

day = d;

year = y;

}

else {

month = day = 1;

year = 1970; //Unix time starting point

} /ot valid: set to default valid date

for (int m = 0; m

} //constructor with assigned values

Date::Date(int julian) {

//Fliegel-Van Flandern algorithm to convert Julian date to Gregorian number month, day, and year

gregorian(julian, month, day, year);

setDays();

}//Date Julian

Date::Date(string str) { //constructor for todays date as "mm/dd/year

//Parse str by adding one char at a s time to the token until a "/" is encounter.

//When "/" is encountered start the next token

//int p=0;

int count = 0;

int num[3];

string token[3];

int len = str.length();

for (int p = 0; p

if (str.substr(p, 1) == "/") count++;

else token[count] += str.substr(p, 1);

}//parse str to create array of tokens

bool error = false;

for (int p = 0; p

try {

num[p] = stoi(token[p]);

}//try to convert to int

catch (invalid_argument&) {

num[p] = -1;

error = true;

} //catch

}//each of the 3 tokens

if (!error && validDate(num[0], num[1], num[2])) {

month = num[0];

day = num[1];

year = num[2];

} /o error

else {

month = day = 1;

year = 1970; //Unix time starting point

} /ot valid: set to default valid date

for (int m = 0; m

}//constructor with string such as "10/31/2016"

Date Date::operator=(const Date& otherDate) {

//assigns another instance of the date class to this.

month = otherDate.month;

day = otherDate.day;

year = otherDate.year;

return *this; //allows date1=date=date3;

}//overloaded operator =

Date Date::operator+(int numDays) {

//Adds the number of days to the Julian date.

Date other(month, day, year); //make copy of the date

int jd = other.julian(); //find the Julian date

jd += numDays; //add the number of days to the Julian date

gregorian(jd, other.month, other.day, other.year); //Convert the Julian date back to Gregorian

if (other.leapYear()) days2[2] = 29; else days2[2] = 28;

for (int m = 0; m

return other;

} //operator +

int Date::dayofYear() const {

//returns the day of the year, ie 2/1/???? is the 32 day of the year

int total = day;

for (int m = 1; m

return total;

}//dayofYear

static void gregorian(int julian, int &mth, int &d, int &y) {

//Fliegel-Van Flandern algorithm to convert Julian date to Gregorian month, day, and year

int p, q, r, s, t, u, v;

p = julian + 68569;

q = 4 * p / 146097;

r = p - (146097 * q + 3) / 4;

s = 4000 * (r + 1) / 1461001;

t = r - 1461 * s / 4 + 31;

u = 80 * t / 2447;

v = u / 11;

y = 100 * (q - 49) + s + v;

mth = u + 2 - 12 * v;

d = t - 2447 * u / 80;

} //Gregorian

int Date::julian() const {

int jd = day - 32075 + 1461 * (year + 4800 + (month - 14) / 12) / 4 +

367 * (month - 2 - (month - 14) / 12 * 12) / 12 - 3 * ((year + 4900 + (month - 14) / 12) / 100) / 4;

return jd;

}//julian

bool Date::leapYear() const {

bool leap = false;

if (year % 4 == 0) leap = true;

if (year % 100 == 0 && year % 400 != 0) leap = false;

return leap;

}//leapYear

static bool leapYear(int yr) {

bool leap = false;

if (yr % 4 == 0) leap = true;

if (yr % 100 == 0 && yr % 400 != 0) leap = false;

return leap;

}//leapYear

int Date::weekday() const {

//returns 0 for Sunday, 1 for Monday, etc.

static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };

int y = year;

y -= month

return (y + y / 4 - y / 100 + y / 400 + t[month - 1] + day) % 7;

}//weekday

int Date::getMonth() const {

//private variables cannot be accessed directly but require "getter" functions

return month;

}//getMonth

int Date::getDay() const {

return day;

}//

int Date::getYear() const {

return year;

}//getYear

string Date::toString() const {

stringstream oss; //a stream to append the values

oss

return oss.str();

}//toString

bool Date::operator==(const Date& otherDate) {

return (month == otherDate.month && day == otherDate.day && year == otherDate.year);

}//operator ==

bool Date::operator

//A date is less than another date if is earlier

bool result = false; //assume false until proven true

if (year

else if (year == otherDate.year && month

else if (year == otherDate.year && month == otherDate.month && day

return result;

}//operator

bool Date::operator>(const Date& otherDate) {

//Convert both dates to Julian and compare the Julian dates

int jd1 = julian();

int jd2 = otherDate.julian();

return jd1>jd2;

}//operator>

ostream& operator

output

return output;

} // operator

istream& operator >> (istream &input, Date &d) {

string s;

input >> s;

Date other(s); //create a new Date

d = other; //assign the new Date to d

return input;

} // operator >>

Date Date::thanksGiving(int year)

{

Date turkeyDay(11, 01, year);

while (turkeyDay.weekday() != 4)

{

turkeyDay = turkeyDay + 1;

}

turkeyDay = turkeyDay + 21;

return turkeyDay;

}

CAUserslownerDesktop\ProjectHolidaysDebugProject Holidays.exe Please enter the current year: 2018 The holidays are sorted by date: Easter Sunday is on 4/1/2018 which falls on a Sunday Mother's Day is on 5/13/2018 which falls on a Sunday MemorialDay is on5/28/2018 which falls on a Monday Father's Day is on 6/17/2018 which falls on a Sundajy Independence Day is on 2/4/2018 which falls on a Wednesday Thanksgiving is on 11/22/2018 which falls on a Thursday

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access with AI-Powered 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