Attached Files: Using the classes extDateType and dayType (both provided), desig
ID: 669099 • Letter: A
Question
Attached Files:
Using the classes extDateType and dayType (both provided), design the class calendarType so that, given the month and the year, we can print the calendar for that month. To print a monthly calendar, you must know the first day of the month and the number of days in that month. Thus, you must store the first day of the month, which is of the form dayType, and the month and the year of the calendar. Clearly, the month and the year can be stored in an object of the form extDateType by setting the day component of the date to 1 and the month and year as specified by the user. Thus, the class calendarType has two member variables: an object of the type dayType and an object of the type extDateType. Design the class calendarType so that the program can print a calendar for any month starting January 1, 1500. Note that the day for January 1 of the year 1500 is a Monday. To calculate the first day of a month, you can add the appropriate days to Monday of January 1, 1500.
For the class calendarType, include the following operations:
Determine the first day of the month for which the calendar will be printed. Call this operation firstDayOfMonth.
Set the month.
Set the year.
Return the month.
Return the year.
Print the calendar for the particular month.
Add the appropriate constructors to initialize the member variables.
Write the definitions of the member functions of the class calendarType to implement the operations of the class calendarType.
You are being provided with:
dayType.h
dayTypeImp.cpp
dateType.h
dateTypeImp.cpp
extDateType.h
extDateTypeImp.cpp
calendarType.h
UML Diagram for calendarType
You will turn in:
calendarTypeImp.cpp
A test driver
Your test driver should produce output similar to the following:
September 2017
Sun Mon Tue Wed Thu Fri Sat
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
To print another calendar enter month and year.
Enter 0 0 to quit.
2 2016
February 2016
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29
To print another calendar enter month and year.
Enter 0 0 to quit.
2 2017
February 2017
Sun Mon Tue Wed Thu Fri Sat
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28
To print another calendar enter month and year.
Enter 0 0 to quit.
0 0
Please look at the grading rubric for details on how the project will be graded.
Explanation / Answer
#include <iostream>
#include <cstdlib>
#include <iomanip>
using namespace std;
bool isLeapYear (int);
int firstDayofnewyearMonth (int );
int numOfDaysInMonth (int, bool);
void printHeader (int);
void printMonth (int, int&);
void skip (int);
void skipToDay (int);
void disaster ();
int main ()
{
system ("color f1 ");
int year, firstDayInCurrentMonth;
int currentMonth = 1;
int numDays;
bool leap;
cout << "year you want calendar for? ";
cin >>year;
cout<<endl;
firstDayInCurrentMonth=firstDayofnewyearMonth(year);
leap = isLeapYear(year);
skip(9);
cout << year << endl;
while (currentMonth <= 12)
{
numDays = numOfDaysInMonth(currentMonth, leap);
printHeader(currentMonth);
printMonth(numDays, firstDayInCurrentMonth);
cout << endl << endl << endl;
currentMonth = currentMonth + 1;
}
cout << endl;
}
bool isLeapYear (int year)
{
return ((year%4==0) && (year%100 !=0))||(year%400==0) ;
}
int firstDayofnewyearMonth(int year)
{
int day_start;
int x1, x2, x3;
x1 = (year - 1)/ 4;
x2 = (year - 1)/ 100;
x3 = (year - 1)/ 400;
day_start = (year + x1 - x2 + x3) %7;
return day_start;
}
int numOfDaysInMonth (int m, bool leap)
{
if (m == 1) return(31);
else if (m == 2) if (leap) return(29);else return(28);
else if (m == 3) return(31);
else if (m == 4) return(30);
else if (m == 5) return(31);
else if (m == 6) return(30);
else if (m == 7) return(31);
else if (m == 8) return(31);
else if (m == 9) return(30);
else if (m == 10) return(31);
else if (m == 11) return(30);
else if (m == 12) return(31);
else disaster();
}
void printHeader (int m)
{
if (m == 1)
{
skip(7);
cout << "January" << endl;
}
else if (m == 2) { skip(7); cout << "February" << endl;
}
else if (m == 3) { skip(7); cout << "March" << endl;
}
else if (m == 4) { skip(7); cout << "April" << endl;
}
else if (m == 5) { skip(7); cout << "May" << endl;
}
else if (m == 6) { skip(7); cout << "June" << endl;
}
else if (m == 7) { skip(7); cout << "July" << endl;
}
else if (m == 8) { skip(7); cout << "August" << endl;
}
else if (m == 9) { skip(7); cout << "September" << endl;
}
else if (m == 10) { skip(7); cout << "October" << endl;
}
else if (m == 11) { skip(7); cout << "November" << endl;
}
else if (m == 12) { skip(7); cout << "December" << endl;
}
else disaster();
cout << " S M T W T F S" <<endl;
cout << "____________________" << endl;
}
void skip (int i)
{
while (i > 0)
{
cout << " ";
i = i - 1;
}
}
void printMonth (int numDays, int &weekDay)
{
int day = 1;
skipToDay(weekDay);
while (day <= numDays)
{
cout << setw(2) << day << " ";
if (weekDay == 6)
{
cout << endl;
weekDay = 0;
}
else weekDay = weekDay + 1;
day = day + 1;
}
}
void skipToDay (int d)
{
return skip(3*d);
}
void disaster ()
{
cout << "Disaster! Exiting ..." << endl;
exit ( -1);
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.