//#include "stdafx.h"
#include <iostream> 
#include <assert.h>
    using namespace std;
class calendar {
    private:
        int year;
    int month;
    int day;
    public:
        calendar(int = 0, int = 0, int = 0);
    ~calendar();
    calendar operator += (calendar & );
    calendar operator -= (calendar & );
    calendar operator = (calendar & );
    calendar operator != (calendar & );
    calendar operator > (calendar & );
    calendar operator < (calendar & );
    calendar operator >= (calendar & );
    calendar operator <= (calendar & );
    calendar operator == (calendar & );
    friend istream & operator >> (istream & , calendar & );
    friend ostream & operator << (ostream & , calendar & );
};
calendar::calendar(int y, int m, int d) {
    year = y;
    month = m;
    day = d;
}
calendar calendar::operator = (calendar & y) {
    return (year = y.year,
        month = y.month,
        day = y.day);
}
calendar calendar::operator += (calendar & y) {
    year = y.year + year;
    month = y.month + month;
    if (month > 12) {
        year++;
        month = month - 12;
    }
    day =
        y.day +
        day;
    if (month == 1 || month == 3 || month == 5 || month == 7 || month == 9 ||
        month == 11) {
        if (day > 31) {
            month++;
            day = day - 31;
        }
    }
    if (
        month == 4 || month == 6 || month == 8 || month == 10 || month == 12) {
        if (day > 30) {
            month++;
            day = day - 30;
        }
    }
    if (
        month == 2) {
        if (day > 28) {
            month++;
            day = day - 28;
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator -= (calendar & y) {
    year = y.year - year;
    month = y.month - month;
    if (month < 1) {
        year--;
        month = month + 12;
    }
    day =
        y.day -
        day;
    if (month == 1 || month == 5 || month == 7 || month == 9 || month == 11) {
        if (day < 1) {
            month--;
            day = day + 30;
        }
    }
    if (
        month == 2 || month == 4 || month == 6 || month == 8 || month == 10 ||
        month == 12) {
        if (day < 1) {
            month--;
            day = day + 31;
        }
    }
    if (
        month == 3) {
        if (day < 1) {
            month--;
            day = day + 28;
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator != (calendar & y) {
    if (year != y.year) {
        cout << "rizni daty " << endl;
    } else {
        if (month != y.month) {
            cout << "rizni daty " << endl;
        } else {
            if (day != y.day) {
                cout << "rizni daty " << endl;
            } else {
                cout << "Error. Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator == (calendar & y) {
    if (year != y.year) {
        cout << "Error. Rizni daty " << endl;
    } else {
        if (month != y.month) {
            cout << "Error. Rizni daty " << endl;
        } else {
            if (day != y.day) {
                cout << "Error. Rizni daty " << endl;
            } else {
                cout << "Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator < (calendar & y) {
    if (year > y.year) {
        cout << "Error. First date is 'bigger' " << endl;
    }
    if (
        year < y.year) {
        cout << "First date is lower" << endl;
    }
    if (
        year == y.year) {
        if (month > y.month) {
            cout << "Error. First date is 'bigger' " << endl;
        }
        if (
            month < y.month) {
            cout << "First date is lower" << endl;
        }
        if (
            month == y.month) {
            if (day > y.day) {
                cout << "Error. First date is 'bigger' " << endl;
            }
            if (
                day < y.day) {
                cout << "First date is lower" << endl;
            }
            if (
                day == y.day) {
                cout << "Error. Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator > (calendar & y) {
    if (year > y.year) {
        cout << "First date is 'bigger' " << endl;
    }
    if (
        year < y.year) {
        cout << "Error.First date is lower" << endl;
    }
    if (
        year == y.year) {
        if (month > y.month) {
            cout << "First date is 'bigger' " << endl;
        }
        if (
            month < y.month) {
            cout << "Error. First date is lower" << endl;
        }
        if (
            month == y.month) {
            if (day > y.day) {
                cout << "First date is 'bigger' " << endl;
            }
            if (
                day < y.day) {
                cout << "Error. First date is lower" << endl;
            }
            if (
                day == y.day) {
                cout << "Error. Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator <= (calendar & y) {
    if (year > y.year) {
        cout << "Error. First date is 'bigger' " << endl;
    }
    if (
        year < y.year) {
        cout << "First date is lower" << endl;
    }
    if (
        year == y.year) {
        if (month > y.month) {
            cout << "Error. First date is 'bigger' " << endl;
        }
        if (
            month < y.month) {
            cout << "First date is lower" << endl;
        }
        if (
            month == y.month) {
            if (day > y.day) {
                cout << "Error. First date is 'bigger' " << endl;
            }
            if (
                day < y.day) {
                cout << "First date is lower" << endl;
            }
            if (
                day == y.day) {
                cout << "Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
calendar calendar::operator >= (calendar & y) {
    if (year > y.year) {
        cout << "First date is 'bigger' " << endl;
    }
    if (
        year < y.year) {
        cout << "Error.First date is lower" << endl;
    }
    if (
        year == y.year) {
        if (month > y.month) {
            cout << "First date is 'bigger' " << endl;
        }
        if (
            month < y.month) {
            cout << "Error. First date is lower" << endl;
        }
        if (
            month == y.month) {
            if (day > y.day) {
                cout << "First date is 'bigger' " << endl;
            }
            if (
                day < y.day) {
                cout << "Error. First date is lower" << endl;
            }
            if (
                day == y.day) {
                cout << "Odnakovi daty" << endl;
            }
        }
    }
    return calendar(year, month, day);
}
istream & operator >> (istream & is, calendar & x) {
    char c;
    cout << "vveditj datu:" << endl;
    cin >> x.year;
    cin >> c;
    assert(c == '.');
    cin >> x.month;
    cin >> c;
    assert(c == '.');
    cin >> x.day;
    return is;
}
ostream & operator << (ostream & os, calendar & x) {
    cout << "date:" << endl;
    os << x.year << '.' << x.month << '.' << x.day << endl;
    return os;
}
calendar::~calendar() {}
int main(int argc, char * * argv) {
    calendar a(1999, 12, 9);
    calendar b(2000, 6, 20);
    cin >> b;
    cout << b << endl;
    a += b;
    cout << "addition " << a << endl;
    a > b;
    return 0;
}