#include #include #include #include class DATE_VALIDATOR { public: bool dateValidator(int year, int month, int day) { if (year < 1582 && date_in_range(year, month, day)) return true; else if (year > 1582 && date_in_range(year, month, day)) return true; else return false; } bool leapYear(int year) { if (year > 1582 && year % 4 == 0 && year % 100 != 0) return true; else if (year > 1582 && year % 400 == 0) return true; else return false; } bool date_in_range(int year, int month, int day) { std::vector::iterator day30test = find(MONTH30.begin(), MONTH30.end(), month); std::vector::iterator day31test = find(MONTH31.begin(), MONTH31.end(), month); if (year == 0 || month < 1 || month > 12 || day < 0 || day > 31) return false; else if (month == 2) { if (!leapYear(year) && day <= 28) return true; else if (leapYear(year) && day <= 29) return true; else return false; } else if (day30test != MONTH30.end() && day <= 30) return true; else if (day31test != MONTH31.end() && day <= 31) return true; else return false; } int julian_day_number(int year, int month, int day) { int dayCount = 0; for (int i = 1; i < month; ++i) { std::vector::iterator day30test = find(MONTH30.begin(), MONTH30.end(), i); std::vector::iterator day31test = find(MONTH31.begin(), MONTH31.end(), i); if (day31test != MONTH31.end()) dayCount += 31; else if (day30test != MONTH30.end()) dayCount += 30; else if (i == 2) { if (!leapYear(year)) dayCount += 28; else dayCount += 29; } } dayCount += day; return dayCount; } private: std::vector MONTH30 = { 4, 6, 9, 11 }; std::vector MONTH31 = { 1, 3, 5, 7, 8, 10, 12 }; }; int main() { DATE_VALIDATOR dv; int x = 0, year, month, day; char contPrgm = 'y'; do { std::cout << "\nPlease enter a date (yyyy mm dd): "; std::cin >> year >> month >> day; if (dv.dateValidator(year, month, day)) std::cout << "Date is valid. \nThe Julian date is " << dv.julian_day_number(year, month, day) << std::endl; else std::cout << "Date is invalid" << std::endl; std::cout << "\nTo stop, type 'n' and hit enter. "; std::cin >> contPrgm; std::cin.ignore(); } while(contPrgm != 'n'); system("pause"); return 0; }