mramine364

date.cpp

Mar 12th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.07 KB | None | 0 0
  1. #include "date.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. date::date() {
  7.     init();
  8. }
  9.  
  10. date::date(int y) {
  11.     init();
  12.     setYear(y);
  13. }
  14.  
  15. date::date(int m, int y) {
  16.     init();
  17.     setMonth(m);
  18.     setYear(y);
  19. }
  20.  
  21. date::date(int d, int m, int y) {
  22.     init();
  23.     setYear(y);
  24.     setMonth(m);
  25.     setDay(d);
  26. }
  27.  
  28. date::date(date const &d) {
  29.     init();
  30.     day = d.day;
  31.     month = d.month;
  32.     year = d.year;
  33. }
  34.  
  35. bool date::isBissextile() {
  36.     return year % 4 == 0 && year % 100 != 0 || year % 400 == 0;
  37. }
  38.  
  39. int date::getWday() {
  40.     int sd=1; date date1(1,1,1900); // Monday
  41.     if( *this<date1 ){
  42.         while( *this!=date1 ){
  43.             date1.decrement();
  44.             sd = (sd==0) ? 6 : sd-1;
  45.         }
  46.     }else{
  47.         while( *this!=date1 ){
  48.             date1.increment();
  49.             sd = (sd==6) ? 0 : sd+1;
  50.         }
  51.     }
  52.     return sd;
  53. }
  54.  
  55. void date::PrintDate() {
  56.     string Days[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
  57.     string Months[] = {"Janvier", "Fevrier", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre",
  58.                        "Decembre"};
  59.     int tm_wday = getWday();  // days since sunday
  60.     cout << Days[tm_wday] << " " << day << " " << Months[month - 1] << " " << year << endl;
  61. }
  62.  
  63. void date::increment() {
  64.     if (month == 12 && day == months_days[month - 1]) {
  65.         setYear(year+1);
  66.         month = 1;
  67.         day = 1;
  68.     }
  69.     else if (day == months_days[month - 1]) {
  70.         month++;
  71.         day = 1;
  72.     }
  73.     else
  74.         day++;
  75. }
  76.  
  77. date date::operator+=(int d) {
  78.     while (d > 0) {
  79.         increment();
  80.         d--;
  81.     }
  82.     return *this;
  83. }
  84.  
  85. date date::operator+(int d) {
  86.     date date1(day, month, year);
  87.     return date1 += d;
  88. }
  89.  
  90. void date::decrement() {
  91.     if (month == 1 && day == 1) {
  92.         setYear(year-1);
  93.         month = 12;
  94.         day = months_days[month - 1];
  95.     }
  96.     else if (day == 1) {
  97.         month--;
  98.         day = months_days[month - 1];
  99.     }
  100.     else
  101.         day--;
  102. }
  103.  
  104. date date::operator-=(int d) {
  105.     while (d > 0 && year > 0) {
  106.         decrement();
  107.         d--;
  108.     }
  109.     return *this;
  110. }
  111.  
  112. date date::operator-(int d) {
  113.     date date1(day, month, year);
  114.     return date1 -= d;
  115. }
  116.  
  117. date date::operator--() {
  118.     decrement();
  119.     return *this;
  120. }
  121.  
  122. date date::operator++() {
  123.     increment();
  124.     return *this;
  125. }
  126.  
  127. date date::operator--(int) {
  128.     date date1 = *this;
  129.     decrement();
  130.     return date1;
  131. }
  132.  
  133. date date::operator++(int) {
  134.     date date1 = *this;
  135.     increment();
  136.     return date1;
  137. }
  138.  
  139. bool date::operator==(date const &d) {
  140.     return year == d.year && month == d.month && day == d.day;
  141. }
  142.  
  143. bool date::operator!=(date const &d) {
  144.     return !(*this == d);
  145. }
  146.  
  147. bool date::operator<(date const &d) {
  148.     if (year == d.year) if (month == d.month)
  149.         return day < d.day;
  150.     else return month < d.month;
  151.     else return year < d.year;
  152. }
  153.  
  154. bool date::operator<=(date const &d) {
  155.     return *this < d || *this == d;
  156. }
  157.  
  158. bool date::operator>(date const &d) {
  159.     return !(*this <= d);
  160. }
  161.  
  162. bool date::operator>=(date const &d) {
  163.     return !(*this < d);
  164. }
  165.  
  166. int date::operator-(date const &d) {
  167.     date date1(d);
  168.     int res = 0;
  169.     if (*this > date1) {
  170.         while (date1 != *this) {
  171.             date1.increment();
  172.             res++;
  173.         }
  174.     } else {
  175.         while (date1 != *this) {
  176.             date1.decrement();
  177.             res++;
  178.         }
  179.     }
  180.     return res;
  181. }
  182.  
  183. ostream &operator<<(ostream &out, date const &d) {
  184.     out << d.day << "/" << d.month << "/" << d.year;
  185.     return out;
  186. }
  187.  
  188. void date::init() {
  189.     months_days = new int[12];
  190.     months_days[0]=31; months_days[1]=(isBissextile()) ? 29 : 28; months_days[2]=31; months_days[3]=30;
  191.     months_days[4]=31; months_days[5]=30; months_days[6]=31; months_days[7]=31;
  192.     months_days[8]=30; months_days[9]=31; months_days[10]=30; months_days[11]=31;
  193.     year = month = day = 1;
  194. }
  195.  
  196. void date::update_months_days() {
  197.     months_days[1]=(isBissextile()) ? 29 : 28;
  198. }
Advertisement
Add Comment
Please, Sign In to add comment