Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- struct Date
- {
- enum err { OK, DAY, MONTH, YEAR};
- uint8_t day;
- uint8_t month;
- uint16_t year;
- void print();
- int make(int8_t pDay, int8_t pMonth, int16_t pYear);
- static void printError(int pErr);
- static int isLeapYear(int16_t year);
- static int daysInMonth(int8_t pMonth, int8_t pYear);
- };
- void Date::print()
- {
- std::cout << (int)day << '.' << (int)month << '.' << year << '\n';
- }
- int Date::isLeapYear(int16_t pYear)
- {
- return ((pYear % 4 == 0) and (pYear % 100 != 0 or pYear % 400 == 0));
- }
- int Date::daysInMonth(int8_t pMonth, int8_t pYear)
- {
- return 30 + ((pMonth < 8 and pMonth % 2 != 0) or (pMonth >= 8 and pMonth % 2 == 0)) + (pMonth == 2)*-2 + isLeapYear(pYear);
- }
- int Date::make(int8_t pDay, int8_t pMonth, int16_t pYear)
- {
- if (pDay < 1 or pDay > 31) { return Date::err::DAY; }
- if (pMonth < 1 or pMonth > 12 ) { return Date::err::MONTH; }
- if (pYear < 1) { return Date::err::YEAR; }
- if (pDay > daysInMonth(pMonth,pYear)) { return Date::err::DAY; }
- day = pDay;
- month = pMonth;
- year = pYear;
- return Date::err::OK;
- }
- void Date::printError(int pErr)
- {
- if (pErr == Date::err::DAY) { std::cout << "Bad day!\n"; }
- if (pErr == Date::err::MONTH) { std::cout << "Bad month!\n"; }
- if (pErr == Date::err::YEAR) { std::cout << "Bad year!\n"; }
- }
- int main()
- {
- std::cout << "Size of Date struct is: " << sizeof(Date) << '\n'; //No additional bytef for err enum!!! :)
- Date d1{};
- if (auto dateErr = d1.make(29, 2, 2004) > Date::err::OK)
- {
- Date::printError(dateErr);
- };
- d1.print();
- Date d2{};
- if (auto dateErr = d1.make(29, 2, 2005) > Date::err::OK)
- {
- Date::printError(dateErr);
- };
- d2.print();
- int testMonth = 2;
- int testYear = 2004;
- std::cout << "Is " << testYear << " leap year? " << Date::isLeapYear(2004) << '\n'; //Call static member function without instance
- std::cout << "How much days are in " << testMonth << " month of " << testYear << " year? " << Date::daysInMonth(2,2004) << '\n'; //Call static member function without instance
- }
Advertisement
Add Comment
Please, Sign In to add comment