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

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

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

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

08.06.2014, 09:27. Просмотров 265. Ответов 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 для работы с датами
Посмотрите здесь:

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

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

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

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

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

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

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

Разработать класс DateTime для работы с датой/временем - C++
В качестве основы взять функции и структуры для работы с временем из стандартной библиотеки (struct tm, time, localtime, mktime) ...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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