Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

Please correct this code to print the names of the holidays and not the dates. Also, please add a sorting algorithm (bubble sort, or selection

Please correct this code to print the names of the holidays and not the dates. Also, please add a sorting algorithm (bubble sort, or selection sort) to the holiday dates in ascending order. Here is the output and the three files below the output: Date.cpp, Date.h, main.cpp. (Please use the code provided).

image text in transcribed

// main.cpp

//Header Files

#include "Date.cpp" // Function Diffinitions

#include // For input and output

using namespace std;

// Start of main

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

int year = 0;

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

holidays[0] = easterSunday;

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

holidays[1] = mothersDay;

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

holidays[2] = memorialDay;

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

holidays[3] = fathersDay;

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

holidays[4] = independenceDay;

// Prompt the user for current year

cout

cin >> year; // Read in year

// Search for the date of Thanks Giving and add it to

// the holiday array

Date giveThanks = giveThanks.thanksGiving(year);

holidays[5] = giveThanks;

// Assign days to weekDay array

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;

}// End of main

// Date.cpp

#include "Date.h"

Date::Date() {

//constructor to assign todays date to date

char data[9]; //holder for the date

_strdate_s(data); //gets the current date mm/dd/yy

string date=data; //copy to a string for parsing

month=stoi(date.substr(0,2)); //gets characters 0 and 1 of date and converts to int

day=stoi(date.substr(3,2)); //gets characters 3 and 4 of date and converts to int

year=stoi(date.substr(6,2))+2000; //gets characters 6 and 7 of date and converts to int

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

for(int m=0;m

}//constructor for today

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

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

if(y

if(m12) valid=false;

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

if(ddays2[m]) valid=false;

return valid;

}//validDate

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);

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

for(int m=0;m

}//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

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;

}

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

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();

}

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;

}

// 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];

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

Date thanksGiving(int year); // Constructor for Thanks Giving

//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

G:\Montgomery CollegeC++ ProgramsAssignments'HolidaysNHoliday:DebudHolidays.exe Please enter the current year: 2018 4/1/2018 falls on a Sunday 5/13/2018 falls on a Sunday 5/28/2018 falls on a Monday 6/17/2018 falls on a Sunday 7/4/2018 falls on a Wednesday 11/22/2018 falls on a Thursday Press any key to continue . I1 Pre 100 Sum Ever Mer 0 Warnings 0 M

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

Professional SQL Server 2012 Internals And Troubleshooting

Authors: Christian Bolton, Justin Langford

1st Edition

1118177657, 9781118177655

Students also viewed these Databases questions

Question

Define state variables.

Answered: 1 week ago

Question

=+6 Why is there no term for Q4?

Answered: 1 week ago