Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
RG21
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 8
#1

Разработать класс Date для работы с датами - C++

08.06.2014, 09:27. Просмотров 276. Ответов 0
Метки нет (Все метки)

Как исправить ошибку в программе.

Разработать класс Date для работы с датами. В классе должно быть три поля:
год, месяц и день. Для представления месяцев определить в классе
перечислимый тип month. Перегрузить операцию operator+ для вычисления даты
через заданное количество дней. Перегрузить операции инкремента operator++
и декремента operator-- для вычисления следующей и предыдущей дат.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include "stdafx.h"
#include <iostream>
using namespace std;
 
struct date
{
    int Year,Month,Day;
    date(){}
    date(int yy, int mm, int dd):Year(yy),Month(mm),Day(dd){}
    bool Less(const date &d1,const date &d2)
    {
        return Less(d1,d2,"");
    }
    bool Less(const date &d1,const date &d2,char *p)
    {
        size_t end=strlen(p);
        if (d1.Year < d2.Year && !find(p,p+end,'y'))return true;
        if (d1.Month < d2.Month &&!find(p,p+end,'m'))return true;
        if (d1.Day < d2.Day && !find(p,p+end,'d'))return true;
        return false;
    }
    int operator-(date d2)
    {
        date d1(*this);
        if (Less(d2,d1))swap(d1,d2);
        int diff=0;
        int from=d1.Month, to=d2.Month;
        int diffyear=abs(d2.Year - d1.Year);
        if (diffyear==0)
            for (int i=from; i < to; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
        else
        {
            for (int i=from; i <= 12; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
            for (int i=1; i < to; i++)
            {
                switch(i)
                {
                    case 1:diff+=31; break;
                    case 2:diff+=28; break;
                    case 3:diff+=31; break;
                    case 4:diff+=30; break;
                    case 5:diff+=31; break;
                    case 6:diff+=30; break;
                    case 7:diff+=31; break;
                    case 8:diff+=31; break;
                    case 9:diff+=30; break;
                    case 10:diff+=31; break;
                    case 11:diff+=30; break;
                    case 12:diff+=31; break;
                }
            }
        }
        diff-=d1.Day;
        diff+=d2.Day;
        diff+=((diffyear > 1)?(diffyear - 1):(0))*365;
        diff+=diffyear/4;
        for (int i=d2.Year-diffyear;i<=d2.Year;i++)
        {
            if (((i%4==0) && !(i%100==0))||(i%400==0))
            {
            diff+=1; break;
            }
        }
        return diff;
    }
};
ostream &operator<<(ostream &out,const date &d)
{
        out << d.Year << '-' << d.Month << '-' << d.Day;
        return out;
}
istream &operator>>(istream &in,date &d)
{
    char c;
    in >> d.Year;
    in >> c;
    if (c=='-')
    {
        in >> d.Month;
        in >> c;
        if (c=='-') in >> d.Day;
        else cout << "wrong date format, excepted '-' after month, variable is not complete\n";
    }
    else cout << "wrong date format, excepted '-' after years, variable is not complete\n";
    return in;
}
int main()
{
    date D1,D2;
    cout << "Enter some date yy-mm-dd: ";
    cin >> D1;
    cout << "Enter some other date yy-mm-dd: ";
    cin >> D2;
    cout << "first date " << D1 << ", second date " << D2 << '\n';
    cout << D1-D2 << " days betwin dates\n";
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2014, 09:27
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Разработать класс Date для работы с датами (C++):

Создать класс Date для работы с датами в формате «год.месяц.день» - C++
Создать класс Date для работы с датами в формате «год.месяц.день». Дата представляется структурой с тремя полями типа unsigned int: для...

Создать класс Date для работы с датами в формате "год.месяц.день" / C++ для начинающих - C++
&quot;Создать класс Date для работы с датами в формате «год.месяц.день». Дата представляется структурой с тремя нолями типа unsigned Int.* для...

Создать класс Date для работы с датами в формате "год. месяц. день" - C++
Всем доброго времени суток. Задали задачу на С++, но не могу её осилить. Может быть у кого-нибудь есть возможность помочь. Вот условие:...

Создать класс для хранения календарных дат. Обеспечить возможность работы с датами в различных форматах - C++
2. Создать класс для хранения календарных дат. Обеспечить возможность работы с датами в различных форматах, изменения даты на заданное...

Разработать класс для работы со стеком - C++
Как можно разработать класс для работы со стеком. Элемент стека – символ. Использовать стек для проверки правильности расстановки скобок...

Разработать класс String для работы со строками - C++
Разработать программу, демонстрирующую работу с производным от приведенного в примере класса. Класс должен включать три метода работы со...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2014, 09:27
Привет! Вот еще темы с ответами:

Разработать класс для описания и работы с треугольником - C++
Здравствуйте! Вы не могли бы помочь разработать класс для описания и работы с треугольником . Поля класса должны описывать углы и стороны...

Разработать класс String для работы со строками - C++
/*Разработать класс String для работы со строками. Класс должен содержать: - Конструктор по умолчанию, позволяющий создать строку...

Разработать класс String для работы со строками - C++
разработать класс String для работы со строками. Класс должен содержать контср по умолчанию, контсруктор копирования. Перегрузить в этом...

Разработать класс Complex для работы с комплексными числами - C++
Ребята,помогите пожалуйста разработать класс по работе с комплексными числами. Задание во вложении Запрещено размещать задания и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru