Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "simpleDate.h"
- #include <iostream>
- #include <vector>
- using namespace std;
- simpleDate::simpleDate(int day = 1, int month = 1, int year = 2018)
- : m_day{ day }, m_month{ month }, m_year{ year }
- {
- is_leap_year(m_year);
- is_valid(m_year, m_month, m_day);
- }
- int simpleDate::day() const
- {
- return m_day;
- }
- int simpleDate::month() const
- {
- return m_month;
- }
- int simpleDate::year() const
- {
- return m_year;
- }
- bool simpleDate::is_leap_year(int year)
- {
- if ((year % 4 == 0 && year % 100 != 0) || (year % 4 == 0 && year % 100 == 0 && year % 400 == 0))
- return true;
- else
- return false;
- }
- int simpleDate::month_days(int month, int year)
- {
- vector<int> mon = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
- if (is_leap_year(year))
- mon[1] = 29;
- return mon[month-1];
- }
- void simpleDate::is_valid(int year, int month, int day)
- {
- if ((year < 2018 || year > 2020) || (month < 1 || month > 12) || (day < 1 || day > 31))
- throw invalid_argument("invalid argument");
- if (day > month_days(month, year))
- throw invalid_argument("invalid argument");
- }
- void simpleDate::addDays(int added_days)
- {
- vector<int> days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31};
- if (added_days > 0)
- {
- while (added_days > 0)
- {
- if (is_leap_year(m_year))
- days_in_month[1] = 29;
- if (added_days > days_in_month[m_month - 1] - m_day)
- {
- added_days -= days_in_month[m_month - 1] - m_day + 1;
- m_month++;
- m_day = 1;
- if (m_month > 12)
- {
- m_year++;
- m_month = 1;
- }
- }
- else
- {
- m_day += added_days;
- added_days = 0;
- }
- }
- }
- else if (added_days < 0)
- {
- while (added_days < 0)
- {
- if (is_leap_year(m_year))
- days_in_month[1] = 29;
- else
- days_in_month[1] = 28;
- if (m_day + added_days <= 0)
- {
- added_days += m_day;
- m_month--;
- if (m_month < 1)
- {
- m_year--;
- m_month = 12;
- }
- m_day = days_in_month[m_month-1];
- }
- else
- {
- m_day += added_days;
- added_days = 0;
- }
- }
- }
- is_valid(m_year, m_month, m_day);
- }
- void simpleDate::print() const
- {
- cout << m_year << '-' << m_month << '-' << m_day << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement