/******************************************************************************************** date.cpp Jim Millard for CO211/Fall 1999 Implementation of the date class ********************************************************************************************/ #include <iostream.h> #include "date.h" bool leapyear(unsigned year); //returns true if argument is a leap year date::date() { day = 1; month = 1; year = 1; } date::date(int d, int m, int y) { if (y < 1) year = 1; else year = y; if ((m < 1) || (m > 12)) month = 1; else month = m; if (d < 1) day = 1; else switch (month) { //february case 2: if ( (d <= 28) || ((d == 29) && leapyear(year)) ) day = d; break; //april, june, september, november case 4: case 6: case 9: case 11: if (d <= 30) day = d; break; //all the other months default: if (d <= 31) day = d; } //switch } void date::print() { cout << month << '-' << day << '-' << year; } void date::tomorrow() { switch (month) { //february case 2: if ((day < 28) || ((day == 28) && leapyear(year)) ) day++; else { day = 1; month++; } break; //april, june, september, november case 4: case 6: case 9: case 11: if (day < 30) day++; else { day = 1; month++; } break; //december case 12: if (day < 31) day++; else { day = 1; month = 1; year++; } break; //all the other months default: if (day < 31) day++; else { day = 1; month++; } } } bool leapyear(unsigned year) { if (1584 > year) //too early to be a leap year return false; else if (year%4) //not divisible by 4, so it's not a leap year. return false; else if ( (!(year%100)) && (year%400)) //divisible by 100, but not by 400 return false; else return true; }