This program displays the information of an input file containing dates and strings, the output is in the following form On day, January 1, 1800 The first day begins. [number of days since 1/1/1800; (1)]. My problem is implementing a correct switch statement to display the Day of the week. The day ot the week is found using the number of days since 1.1.1800, here's the code and an attached file. Also I' not sure if the correct output in the number of days is right. If someone could check my code, I would appreciate it.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;

// DaysFrom1800 Class Definition
	class DaysFrom1800 {
	public:
	DaysFrom1800();
	int numDaysFrom1800 (int day, int month, int year);
	int fillDaysArray (int numberOfDates, int day[], int month[], int year[], string textArray[], DaysFrom1800 numbers []);
	void DaysFrom1800::printDaysSince1800 () {
	cout << daysSince;
	}


	private:
	int daysSince;
	};

// Prototypes
	bool leapCheck (int year);
	void prettyPrint (int numberOfDates, string textArray[], DaysFrom1800 numbers[], int month[], int day[], int year[]);


	int main () {
		int day[200];
		int month [200];
		int year [200];
		int numberOfDates = 0;
		DaysFrom1800 numbers[200];
		DaysFrom1800 dummy;
		string textArray [200];

		numberOfDates = dummy.fillDaysArray (numberOfDates, day, month, year, textArray, numbers);

		prettyPrint(numberOfDates, textArray, numbers, month, day, year );
		return 0;
		}
	int DaysFrom1800::fillDaysArray (int numberOfDates, int day[], int month[], int year[], string textArray[], DaysFrom1800
	numbers []) {

		ifstream inStream;
		inStream.open("io.txt");

			if (inStream.fail()) {
			cerr << "Can't open file!\n";
			exit(1);
			}


		int i=0;

		char temp [100];

			while (!inStream.eof()) {
			inStream >> month[i] >> day[i] >> year[i];
			inStream.get(temp,100, '\n');
			textArray[i]=temp;
			i++;


		numberOfDates = i;
		for (i=0; i<numberOfDates; i++) {
		numbers[i].daysSince = numDaysFrom1800 (day[i], month[i], year[i]);

		}
	}

return numberOfDates;

}

// Defualt Constructer for DaysFrom1800 Class
DaysFrom1800::DaysFrom1800() : daysSince (0) {
// Nothing to be done here...
}
int DaysFrom1800::numDaysFrom1800 (int day, int month, int year) {
// Declare leapCount variable to keep track of number of leap years and days variable
//    to store number of days

  bool thisYear = leapCheck(year);
	int StartOfYear (int year);
		{
		int leapCount =0;
		int days = 0;
		// For loop to find the number of leap years
		for (int i=1800; i < year; i++){
			if (leapCheck(i))
				leapCount ++;
		}

	//Find the Number of Days From Complete Years
	days = ((year-1800-leapCount)*365) + (leapCount*366);
	switch (month) {
		case 1:
			days = days + day;
				break;
		case 2:
			if (day < 28)
				days = days + 31 + day;
					if (thisYear)
						days = days + 31 + 29;
			break;
		case 3:
			if (thisYear)
				days = days +31+29+ day;
			else
				days = days + 31 + 28 + day;
			break;
		case 4:
			if (thisYear)
				days = days + 31 + 29 + 31 + day;
			else
				days = days + 31 + 28 + 31 + day;
			break;
		case 5:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + day;
			else
				days = days +31 + 28 + 31 + 30 + day;
			break;
		case 6:
			if (thisYear)
				days = days +31 + 29 + 31 + 30 + 31 + day;
			else
				days = days + 31 + 28 + 31 + 29 + 31 + day;
			break;
		case 7:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + day;
			break;
		case 8:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + 31 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
			break;
		case 9:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day;
			break;
		case 10:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
			break;
		case 11:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
			break;
		case 12:
			if (thisYear)
				days = days + 31 + 29 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
			else
				days = days + 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
			break;
		}

return days;

	}

}

	bool leapCheck(int year){
		// if the year is not 0 mod 4 then it is not a leap year
		if ((year % 4) != 0)
		return false;
		// every 4'th century IS a leap year
		if ((year % 400) == 0)
		return true;
		// every 4'th year that is not a century year is a leap year
		if ((year % 100) != 0)
		return true;
		else
		return false;
		}

	void prettyPrint (int numberOfDates, string textArray[], DaysFrom1800 numbers[], int month[], int day[], int year[]) {
		for (int i=0; i<numberOfDates; i++) {
		cout << "On " ;
		switch (numberOfDates% 7) {
			case 1:cout <<	"Wenesday"; break;
			case 2: cout << "Thursday"; break;
			case 3: cout<< "Friday"; break;
			case 4: cout<< "Saturday"; break;
			case 5: cout<< "Sunday"; break;
			case 6: cout<<"Monday"; break;
			case 7: cout<<"Tuesday"; break;
			}
		cout<<","<< " ";
		switch(month[i]){
			case 1:   cout << "January"; break;
			case 2:   cout << "February";  break;
			case 3:   cout << "March";     break;
			case 4:   cout << "April";     break;
			case 5:   cout << "May";       break;
			case 6:   cout << "June";      break;
			case 7:   cout << "July";      break;
			case 8:   cout << "August";    break;
			case 9:   cout << "September"; break;
			case 10:  cout << "October";  break;
			case 11:  cout << "November";  break;
			case 12:  cout <<"December";  break;
			}
		cout<<" "<<setw(2)<< day[i] << "," <<" "<< year[i];
		// Call function to print date from day number
		cout << textArray[i] << '(';
		numbers[i].printDaysSince1800();
		cout << ')' << endl;
		}
	}
Attachments
1 1 1800 the first day.
9 11 2001 the Twin Towers in New York were attacked.
12 7 1941 Japan attacked Pearl Harbor.
11 22 1963 Lee H. Oswald assassinated John F. Kennedy.
11 21 2004 Test.

I fixed one error in the switch statement, it should be 0-6, wen. is the first day (1,1,1800). But my problem still isn't fixed, the output is a repeated day, "Sunday". The program should execute the number of days since 1/1/1800 and then divide that number by 7, and finally use the remainder as the switch for the correct output. (%) Please help, need to turn program in today. My next assignment is due Friday and I need this program completed first before preceding to it.

switch (numberOfDates% 7) {
                        case 1:cout <<  "Wenesday"; break;
                        case 2: cout << "Thursday"; break;
                        case 3: cout<< "Friday"; break;
                        case 4: cout<< "Saturday"; break;
                        case 5: cout<< "Sunday"; break;
                        case 6: cout<<"Monday"; break;
                        case 0: cout<<"Tuesday"; break;
                        }
// Prototypes
        bool leapCheck (int year);
        void prettyPrint (int numberOfDates, string textArray[], 		  DaysFrom1800 numbers[], int month[], int day[], int year[]);

Needed to be put into public and made friend functions. In order to use the switch statement for days. The switch should of have been daysSince and not what I had.

for (int i=0; i<numberOfDates; i++) {
cout << "On " ;
switch (numbers[i].daysSince % 7) {
case 1:cout <<	"Wednesday"; break;
case 2: cout << "Thursday"; break;
case 3: cout<< "Friday"; break;
case 4: cout<< "Saturday"; break;
case 5: cout<< "Sunday"; break;
case 6: cout<<"Monday"; break;
case 0: cout<<"Tuesday"; break;

}

Now i need to work on the computational errors I made.

This article has been dead for over six months. Start a new discussion instead.