Advertisement
Guest User

Untitled

a guest
Nov 20th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.73 KB | None | 0 0
  1. #include "simpleDate.h"
  2. #include <iostream>
  3. #include <vector>
  4.  
  5. using namespace std;
  6.  
  7. simpleDate::simpleDate(int day = 1, int month = 1, int year = 2018)
  8. : m_day{ day }, m_month{ month }, m_year{ year }
  9. {
  10.     is_leap_year(m_year);
  11.  
  12.     is_valid(m_year, m_month, m_day);
  13.  
  14. }
  15. int simpleDate::day() const
  16. {
  17.     return m_day;
  18. }
  19. int simpleDate::month() const
  20. {
  21.     return m_month;
  22. }
  23. int simpleDate::year() const
  24. {
  25.     return m_year;
  26. }
  27. bool simpleDate::is_leap_year(int year)
  28. {
  29.     if ((year % 4 == 0 && year % 100 != 0) || (year % 4 == 0 && year % 100 == 0 && year % 400 == 0))
  30.         return true;
  31.     else
  32.         return false;
  33. }
  34.  
  35. int simpleDate::month_days(int month, int year)
  36. {
  37.     vector<int> mon = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  38.  
  39.     if (is_leap_year(year))
  40.         mon[1] = 29;
  41.  
  42.     return mon[month-1];
  43. }
  44.  
  45. void simpleDate::is_valid(int year, int month, int day)
  46. {
  47.     if ((year < 2018 || year > 2020) || (month < 1 || month > 12) || (day < 1 || day > 31))
  48.         throw invalid_argument("invalid argument");
  49.  
  50.     if (day > month_days(month, year))
  51.         throw invalid_argument("invalid argument");
  52. }
  53.  
  54.  
  55. void simpleDate::addDays(int added_days)
  56. {
  57.     vector<int> days_in_month = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30 ,31};
  58.  
  59.     if (added_days > 0)
  60.     {
  61.         while (added_days > 0)
  62.         {
  63.             if (is_leap_year(m_year))
  64.                 days_in_month[1] = 29;
  65.  
  66.             if (added_days > days_in_month[m_month - 1] - m_day)
  67.             {
  68.                 added_days -= days_in_month[m_month - 1] - m_day + 1;
  69.                 m_month++;
  70.                 m_day = 1;
  71.                 if (m_month > 12)
  72.                 {
  73.                     m_year++;
  74.                     m_month = 1;
  75.                 }
  76.             }
  77.             else
  78.             {
  79.                 m_day += added_days;
  80.                 added_days = 0;
  81.             }
  82.         }
  83.     }
  84.  
  85.     else if (added_days < 0)
  86.     {
  87.         while (added_days < 0)
  88.         {
  89.             if (is_leap_year(m_year))
  90.                 days_in_month[1] = 29;
  91.             else
  92.                 days_in_month[1] = 28;
  93.  
  94.             if (m_day + added_days <= 0)
  95.             {
  96.                 added_days += m_day;
  97.                 m_month--;
  98.                 if (m_month < 1)
  99.                 {
  100.                     m_year--;
  101.                     m_month = 12;
  102.                 }
  103.                  m_day = days_in_month[m_month-1];
  104.             }
  105.             else
  106.             {
  107.                 m_day += added_days;
  108.                 added_days = 0;
  109.             }
  110.  
  111.         }
  112.     }
  113.  
  114.     is_valid(m_year, m_month, m_day);
  115. }
  116.  
  117. void simpleDate::print() const
  118. {
  119.     cout << m_year << '-' << m_month << '-' << m_day << endl;
  120. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement