Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdexcept>
- #include <vector>
- #include <iostream>
- using namespace std;
- class Date{
- private:
- int day, month, year;
- public:
- Date(const int& d, const int& m, const int& y) {
- if (((d >= 1) && (m >= 1) && (y >= 1970)) &&
- ((d <= 31) && (m <= 12) && (y <=2099))) {
- if ((m == 1) || (m == 3) || (m ==5) || (m == 7) || (m == 8) || (m == 10) || (m == 12)) {
- day = d;
- month = m;
- year = y;
- }
- else if ((m == 4) || (m == 6) || (m == 9) || (m == 11)) {
- if (d <= 30) {
- day = d;
- month = m;
- year = y;
- } else {
- throw std::invalid_argument("invalid_argument");
- }
- } else if (m == 2) {
- if ((y % 4 == 0 && y % 100 != 0) || (y % 400 == 0)) {
- if (d <= 29) {
- day = d;
- month = m;
- year = y;
- } else {
- throw std::invalid_argument("invalid_argument");
- }
- } else if (d <= 28) {
- day = d;
- month = m;
- year = y;
- } else {
- throw std::invalid_argument("invalid_argument");
- }
- }
- } else {
- throw std::invalid_argument("invalid_argument");
- }
- }
- size_t GetDay() const {
- return day;
- }
- size_t GetMonth() const {
- return month;
- }
- size_t GetYear() const {
- return year;
- }
- void operator++ () {
- if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
- if (day == 31) {
- if (month == 12) {
- day = 1;
- month = 1;
- ++year;
- } else {
- day = 1;
- ++month;
- }
- } else {
- ++day;
- }
- } else if (month == 4 || month == 6 || month == 9 || month == 11) {
- if (day == 30) {
- day = 1;
- ++month;
- } else {
- ++day;
- }
- } else if (month == 2) {
- if (((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)) {
- if (day == 29) {
- day = 1;
- ++month;
- } else {
- ++day;
- }
- } else {
- if (day == 28) {
- day = 1;
- ++month;
- }
- else {
- ++day;
- }
- }
- }
- }
- void operator--() {
- if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
- if (day == 1 && month == 3) {
- if ((((year % 4 == 0 && year % 100 != 0) || year % 400 == 0))) {
- day = 29;
- month = 2;
- } else {
- day = 28;
- month = 2;
- }
- } else if (day == 1 && month == 8) {
- day = 31;
- month = 7;
- } else if (day == 1 && month == 1) {
- day = 31;
- month = 12;
- --year;
- } else if (day == 1) {
- day = 30;
- --month;
- } else {
- --day;
- }
- } else {
- if (day == 1) {
- day = 31;
- --month;
- } else {
- --day;
- }
- }
- }
- Date operator- (int& d) {
- Date a(day, month, year);
- while (d != 0) {
- if ((month <= 7 && month % 2 == 1) || (month >= 8 && month % 2 == 0)) {
- if (a.day > d) {
- a.day -= d;
- d = 0;
- } else {
- if (a.month == 3) {
- if ((((a.year % 4 == 0 && a.year % 100 != 0) || a.year % 400 == 0))) {
- d -= a.day;
- a.day = 29;
- --a.month;
- } else {
- d -= a.day;
- a.day = 28;
- --a.month;
- }
- } else if (a.month == 8) {
- d -= a.day;
- a.day = 31;
- a.month = 7;
- } else if (a.month == 1) {
- d -= a.day;
- a.day = 31;
- a.month = 12;
- --a.year;
- } else {
- d -= a.day;
- a.day = 30;
- --a.month;
- }
- }
- } else {
- d -= a.day;
- a.day = 31;
- --a.month;
- }
- }
- return a;
- }
- };
- int main() {
- Date a(2, 3, 2012);
- --a;
- cout << a.GetDay() << '\t' << a.GetMonth() << '\t' << a.GetYear() << '\n';
- Date b = a - 5;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement