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 main
Code:// 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_H
Code:// 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