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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Односвязные списки: нужно ли при выходе из функции возвращать голову? http://www.cyberforum.ru/cpp-beginners/thread1202399.html
Здравствуйте. Верю, что когда-то здесь на этот вопрос давался ответ, но я не нашел. Скажите, пожалуйста, вот у меня изначально голова указывает на NULL.Чтобы добавить элемент в конец я прохожу по...
C++ Найти цифру числа, проверить делимость Приветствую Вас уважаемые форумчане, прошу вашей помощи в решении данного примерчика, ибо чайник: 1.Дано натуральное число: • найти вторую (сначала) цифру этого числа; • верно ли, что данное число... http://www.cyberforum.ru/cpp-beginners/thread1202398.html
C++ Найти ошибочку. Нахождение суммы цифр вещественного числа
Всем привет! Создал функцию нахождения суммы цифр вещественного числа. Функция практически работает, но, когда я кладу в переменную число н-р: "1.256" почему-то добавляются к числу девятки т.е....
C++ Создать класс Time для работы со временем
Нужно исправить ошибки в программе.Срочно. Создать класс Time для работы со временем в формате «час:минута:секунда». Класс должен включать в себя три конструктора инициализации: числами, ...
C++ Нарисовать круг и квадрат http://www.cyberforum.ru/cpp-beginners/thread1202372.html
Нарисовать круг и квадрат!!!у меня имеется прямоугольник и овал,как переделать +++++++++++++++++++ class Rect:public Shape { public: void draw() { line(x1,y1,x2,y1); ...
C++ Статические и виртуальные функции Составить программу с одним родительским классом и двумя потомками. Все поля должны быть закрытыми. Потомки должны содержать виртуальные функции. Для родительского объекта создать статическую... подробнее

Показать сообщение отдельно
RG21
0 / 0 / 0
Регистрация: 04.05.2013
Сообщений: 8

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

08.06.2014, 09:27. Просмотров 284. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru