/********************************************************************************************
date.cpp
********************************************************************************************/
#include "date.h"
#include <iostream>
using namespace std;
/* Because it's a royal pain in the neck to do the 1-12 and 1-30 sequence without going into
a bunch of if/else stuff, I just decided to STORE the day and month as if they were running
from 0 to X. The print routine simply adds one to the stored value to get "the real thing"
*/
//------- Enhanced Default Constructor -------
Date::Date(const int m, const int d, const int y) {
if ((d > 0) && (d <= 30))
day = d - 1 ;
else
day = 0;
if ((m > 0) && (m <= 12))
month = m - 1;
else
month = 0;
if (y > 0)
year = y;
else
year = 1980;
}
//------- Print the object in "pretty" format -------
void Date::print(ostream& out) const {
if (month < 9)
out << '0';
out << month + 1 << '/';
if (day < 9)
out << '0';
out << day + 1 << '/';
if (year < 1000)
out << '0';
if (year < 100)
out << '0';
if (year < 10)
out << '0';
out << year;
};
//------- "managed" addition functions -------
void Date::addYear(const int y) {
if (y > 0)
year += y;
}
void Date::addMonth(const int m) {
if (m > 0) {
int sum = month + m;
addYear(sum/12);
month = sum % 12;
}
}
void Date::addDay(const int d) {
if (d > 0) {
int sum = day + d;
addMonth(sum/30);
day = sum % 30;
}
}
void Date::addDate(const Date& D) {
addYear(D.year);
addMonth(D.month);
addDay(D.day);
}