Question
I need a pseudocode, flowchart and UML class Diagram. C ++ Project 1: main function: Holidays.cpp #include Date.h // Function Definitions #include // For input
I need a pseudocode, flowchart and UML class Diagram.
C ++ Project 1:
main function: Holidays.cpp
#include "Date.h" // Function Definitions
#include
using namespace std;
// Start of main
void bubbleSort(Date date[], int n)//d is an array of dates, n is the size of the array
{
int i, j;
for (i = 0; i < n - 1; i++)
// Last i elements are already in place
for (j = 0; j < n - i - 1; 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 << "Please enter the current year: ";
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;
holidaysDescription[5] = "Thanksgiving";
bubbleSort(holidays, COUNT);//Sort the list of array
cout << "Holidays in sorted order are: ";
for (int index = 0; index < COUNT; index++)
{
// Display the holiday
int day = holidays[index].weekday();
cout << holidaysDescription[index] << " is on " << holidays[index] << " which falls on a ";
// Display the day
switch (day) {
case 0: cout << "Sunday" << endl; break;
case 1: cout << "Monday" << endl; break;
case 2: cout << "Tuesday" << endl; break;
case 3: cout << "Wednesday" << endl; break;
case 4: cout << "Thursday" << endl; break;
case 5: cout << "Friday" << endl; break;
case 6: cout << "Saturday" << endl; break;
}
}
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];
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<(const Date& otherDate); //a date is < another date if it is earlier
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 << (ostream &output, const Date &d);
friend istream& operator >> (istream &input, Date &d);
Date thanksGiving(int year);
};
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"
#include
Date::Date() {
//constructor to assign todays date to date
char data[9]; //holder for the date
_strdate(data); //gets the current date mm/dd/yy
string date(data); //copy to a string for parsing
if (date[0] == '0')
month = stoi(date.substr(1, 1));
else
month = stoi(date.substr(0, 2));
//gets characters 0 and 1 of date and converts to int
if (date[3] == '0')
day = stoi(date.substr(4, 1));
else
day = stoi(date.substr(3, 2));
//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<13; m++) days[m] = days2[m];
}//constructor for today
bool validDate(int m, int d, int y) {
bool valid = true; //assume it is valid until found to be invalid
if (y<1000) valid = false;
if (m<1 || m>12) valid = false;
if (leapYear(y)) days2[2] = 29; else days2[2] = 28;
if (d<1 || d>days2[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
} //not valid: set to default valid date
for (int m = 0; m<13; m++) days[m] = days2[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<13; m++) days[m] = days2[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<3; 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]; } //no error else { month = day = 1; year = 1970; //Unix time starting point } //not valid: set to default valid date for (int m = 0; m<13; m++) days[m] = days2[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<13; m++) other.days[m] = days2[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 < 3; 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 << month << "/" << day << "/" << year; return oss.str(); } bool Date::operator==(const Date& otherDate) { return (month == otherDate.month && day == otherDate.day && year == otherDate.year); }//operator == bool Date::operator<(const Date& otherDate) { //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 << (ostream &output, const Date &d) { output << d.toString(); 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; }
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