Hi all,
I'm doing some practise exercises from a textbook but I've hit a snag and I can't see where I might be going wrong!
When using the nextDay() function, I'm expecting the date1 object to go into the next year. However, it doesn't reset the month value to 1 or increment the year value.
If you see where the error lies please leave a corrective suggestion.
Please see my code below:
Code:// Fig. 9.19: fig09_19.cpp // Demonstrating that class objects can be assigned // to each other using default memberwise assignment #include <iostream> #include "Date.h" // include definition of class Date from Date.h using namespace std; int main() { Date date1( 31, 12, 2004 ); cout << "date1 = "; date1.print(); date1.nextDay(); cout << "\ndate1 = "; date1.print(); } // end mainCode:// Fig. 9.17: Date.h // Date class declaration. Member function are defined in Date.cpp. // prevent multiple inclusions of header file #ifndef DATE_H #define DATE_H // class Date definition class Date { public: Date( int = 1, int = 1, int = 2000 ); // default constructor void print(); void nextDay(); int monthsDays( int ); private: int month; int day; int year; }; // end class Date #endif // DATE_HCode:// Fig. 9.18: Date.cpp // Date class member-function definitions. #include <iostream> #include "Date.h" // include definition of class Date from Date.h using namespace std; // Date constructor (should do range checking) Date::Date( int m, int d, int y ) { month = ( m > 0 && m < 13 ) ? m : 1; day = ( d > 0 && d < ( monthsDays( m ) ) ) ? d : 1; year = ( y > 1999 && y < 2199 ) ? y : 2000; } // end constructor Date // return the number of days for each month int Date::monthsDays( int m ) { switch ( m ) { case 1: return 32; break; case 2: return 29; break; case 3: return 32; break; case 4: return 31; break; case 5: return 32; break; case 6: return 31; break; case 7: return 32; break; case 8: return 32; break; case 9: return 31; break; case 10: return 32; break; case 11: return 31; break; case 12: return 32; break; } // end switch } // end function monthsDays // print Date in the format mm/dd/yyyy void Date::print() { cout << month << '/' << day << '/' << year; } // end function print // increment the day by 1 void Date::nextDay() { day++; switch ( month ) { case 1: if ( day == 32 ) { day = 1; month++; } // end if break; case 2: if ( day == 31 ) { day = 1; month++; } // end if break; case 3: if ( day == 32 ) { day = 1; month++; } // end if break; case 4: if ( day == 31 ) { day = 1; month++; } // end if break; case 5: if ( day == 32 ) { day = 1; month++; } // end if break; case 6: if ( day == 31 ) { day = 1; month++; } // end if break; case 7: if ( day == 32 ) { day = 1; month++; } // end if break; case 8: if ( day == 32 ) { day = 1; month++; } // end if break; case 9: if ( day == 31 ) { day = 1; month++; } // end if break; case 10: if ( day == 32 ) { day = 1; month++; } // end if break; case 11: if ( day == 31 ) { day = 1; month++; } // end if break; case 12: if ( day == 32 ) { day = 1; month = 1; year++; } // end if break; } // end switch } // end function nextDay