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

Класс даты - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Загрузить процесс из другого процесса http://www.cyberforum.ru/cpp-beginners/thread647477.html
Штурм google ничего не дал. Но я помню что что то было такое в книге Рихтера. Пока ищу книгу и нужную страницу, решил оформить все таки вопрос, ведь возможно не только у меня но и у кого то в будущем возникнет такой вопрос. Идея заключается вот в чем. 1). Программка №1- оболочка с красивым интерфейсом принимающая что то и по нажатию кнопки Start записывает в файл принятое и из другого файла ...
C++ Найти сумму элементов матрицы в строках с отрицательным элементом на главной диагонали Дана вещественная прямоугольная матрица. Найти сумму элементов в строках с отрицательным элементом на главной диагонали. Если сумма больше 0, то элементы последней строки возвести в квадрат. Помогите пожалуйста. http://www.cyberforum.ru/cpp-beginners/thread647463.html
C++ Вычислить методом Ньютона корень уравнения
Помогите, пожалуйста, написать программу, вычисляющую методом Ньютона: sinx - x + 0,5 = 0, интервал изоляции корня .
Массив из рандомов C++
Существует массив, его нужно заполнить рандомными цифрами от 1 до 36, так, чтобы цифры не повторялись: сам дошел до вот такого: #include "iostream" #include "cstdio" #include "cstdlib" using namespace std; int main() {
C++ Заполнение матрицы числами от 1 до n по спирали http://www.cyberforum.ru/cpp-beginners/thread647432.html
заполнение матрици по спирали, числами от 1 до n (квадрат) ну, уменя есть код ко второй но я не знаю нормально или нет)
C++ Проверка матрицы на симетричность относительно побочной диагонали проверка матрици на симетричность относительно побочной диагонали? подробнее

Показать сообщение отдельно
KostyaKulakov
Заблокирован
06.09.2012, 12:26  [ТС]     Класс даты
Date.cpp
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
#include "Date.h"
#include <iostream>
#include <iomanip>
#include <ctime>
using namespace std;
 
 
bool Date::isLeapYear()
{
    if (yyyy % 4 == 0 &&
        (yyyy % 100 != 0 || yyyy % 400 == 0) )
        return true;
    else
        return false;
}
 
bool Date::operator < (const Date& d2)
{
    return (yyyy <  d2.yyyy) ||
            (yyyy == d2.yyyy && mm <  d2.mm) ||
            (yyyy == d2.yyyy && mm == d2.mm && dd < d2.dd);
}
 
bool Date::operator >  (const Date& date2)
{
    return (yyyy >  date2.yyyy) ||
           (yyyy == date2.yyyy && mm >  date2.mm) ||
           (yyyy == date2.yyyy && mm == date2.mm && dd > date2.dd);
}
 
bool Date::operator == (const Date& date2)
{
    return (yyyy == date2.yyyy && mm == date2.mm && dd == date2.dd);
}
bool Date::operator != (const Date& date2)
{
    return (yyyy != date2.yyyy && mm != date2.mm && dd != date2.dd);
}
 
int Date::daysInMonth()
{
        if(this->mm == JAN) return 31;
        if(this->mm == FEB) return 28 + isLeapYear();
        if(this->mm == MAR) return 31;
        if(this->mm == APR) return 30;
        if(this->mm == MAY) return 31;
        if(this->mm == JUN) return 30;
        if(this->mm == JUL) return 31;
        if(this->mm == AUG) return 31;
        if(this->mm == SEP) return 30;
        if(this->mm == OCT) return 31;
        if(this->mm == NOV) return 30;
        if(this->mm == DEC) return 31; 
}
 
Date Date::getCurrentDate()
{
    Date currentDate;
 
    time_t timestamp; // Отметка времени - количество секунд после начала Unix-эпохи
    tm* ptm;          // Указатель на структуру, которая будет содержать поля
                        //  даты для числа, месяца, года и т.д.
 
    // Получаем кол-во секунд, прошедших с начала Unix-эпохи до тек. момента
    time(&timestamp); 
 
    // Заполняем структуру типа tm на основе переданной отметки времени
    ptm = gmtime(&timestamp);
 
    // Заполняем нашу переменную типа date на основе полей структуры типа tm
    currentDate.dd = ptm->tm_mday;
    currentDate.mm = (Month)(ptm->tm_mon + 1);
    currentDate.yyyy = ptm->tm_year + 1900;
 
    return currentDate;
}
 
 
Date& Date::operator ++ ()
{
    if(this->dd == daysInMonth() && this->mm != DEC)
    {
        int mm = this->mm;
        mm = (Month)mm++;   //почему не работает mm = (Month)this->mm++ или mm = this->(Month)mm++
        this->mm = (Month)mm;
        this->dd = 1;
    }
 
    else if(this->mm == DEC && this->dd == 31)
    {
        this->yyyy++;
        this->mm = JAN;
        this->dd = 1;
    }
    else
        this->dd++;
 
    return *this;
 
}
 
Date& Date::operator ++ (int)  //правильно ли использовать static в этом случае?
{
    static Date old(getDay(), (Month)getMonth(), getYear());
 
    Date::operator++ ();
 
    return old;
 
}
 
Date& Date::operator -- ()
{
    if(this->dd == 1 && this->mm != JAN)                                                                        
    {
        int mm = this->mm;
        mm = (Month)mm--;                               
        this->mm = (Month)mm;
        this->dd = daysInMonth();
    }
    else if(this->mm != JAN)
        this->dd--;
 
    if(this->dd == 1 && this->mm == JAN)
    {
        this->yyyy--;                           
        this->mm = DEC;
        this->dd = daysInMonth();
    }
        if(this->dd != 1 && this->mm == JAN)
        this->dd--;
    return *this;
 
}
 
Date&  Date::operator -- (int)
{
    static Date oldminus(getDay(), (Month)getMonth(), getYear());
 
    Date::operator-- ();
 
    return oldminus;
}
 
 
 
 
ostream& operator << (ostream& os,  Date& date)
{
    os << setfill('0');
    os << setw(2) << date.getDay() << '.'
       << setw(2) << date.getMonth() << '.'
       << setw(4) << date.getYear();
    os << setfill(' ');
    return os;
}
 
istream& operator >> (istream& is, Date& d)
{
    int day;
    int mm;
    int year;
    char c; // символ для считывания точек
 
    is  >> day >> c
        >> mm   >> c
        >> year;
 
        d.setDay(day);
        d.setMonth((Date::Month)mm);
        d.setYear(year);
 
        //объясните пожалуйста как можно избежать изначального ввода данных в переменую и перенос через set* ? 
        // почему нельзя сразу >> d.setDay()?
 
        return is;
}
Date.h
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
#ifndef DATE_H_
#define DATE_H_
 
#include <fstream>
#include <ctime>
using namespace std;
 
class Date
{
public:
    enum Month {JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG,
            SEP, OCT, NOV, DEC, MONTHS = 12};
 
private:
    int dd;
    Month mm;
    int yyyy;
 
public:
 
    Date() : dd(1), mm(Date::JAN), yyyy(1970)
    {
    }
 
    Date(int d, Month m, int y) : dd(d), mm(m), yyyy(y)
    {
    }
 
    Date(const Date& d2)
    {
        dd = d2.dd;
        mm = d2.mm;
        yyyy = d2.yyyy;
    }
 
    ~Date()
    {   
    }
 
    int getYear()
    {
        return yyyy;
    }
 
    void setYear(int year)
    {
        yyyy = year;
    }
 
    int getMonth()
    {
        return mm;
    }
 
    void setMonth(Month month)
    {
        mm = month;
    }
 
    int getDay()
    {
        return dd;
    }
 
    void setDay(int day)
    {
        dd = day;
    }
 
    // функция для определения, является ли год даты високосным
    bool isLeapYear();
 
    // функция для определения, является ли день даты последним в месяце
    int Date::daysInMonth();
 
    // операция сравнения дат
    bool operator < (const Date& d2);
    bool operator > (const Date& d2);
    bool operator != (const Date& date2);
    bool operator == (const Date& date2);
    
    // операция преинкремента. Увеличивает дату на один день
    Date& operator ++ ();
 
    // операция постинкремента. Увеличивает дату на один день
    Date& operator ++ (int);
 
    // операция предекремента. Увеличивает дату на один день
    Date& operator -- ();
 
    // операция постдекремента. Увеличивает дату на один день
    Date& operator -- (int);
        
    // функция возвращает текущую дату
    static Date getCurrentDate();
 
};
 
// операция вывода даты в поток
ostream& operator << (ostream& os,  Date& date);
istream& operator >> (istream& is,  Date& d);
 
#endif
main.cpp
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
#include <iostream>
#include "Date.h"
using namespace std;
 
int main()
{
    Date d(30, Date::SEP, 2011); // к-р с параметрами
    Date ds(30, Date::SEP, 2011); // к-р с параметрами
    Date d2(20, Date::SEP, 2099); // к-р с параметрами
 
    cout << "Function > :" << endl;
    if (d > d2)
        cout << d2;
    else
        cout << d;
    cout << endl << endl;
 
    cout << "Function < :" << endl;
    if (d < d2)
        cout << d2;
    else
        cout << d;
    cout << endl << endl;
 
    cout << "Function == :" << endl;
    if(d == ds)
        cout << "TRUE";
    else
        cout << "FALSE";
    cout << endl << endl;
 
    cout << "Function != :" << endl;
    if(d != ds)
        cout << "TRUE";
    else
        cout << "False";
    cout << endl << endl;
 
    cout << "Function ++X :" << endl;
    ++d;
    cout << d;
    cout << endl << endl;
 
    cout << "Function ((X++)++)++ :" << endl;
    ((d++)++)++;
    cout << d;
    cout << endl << endl;
 
    cout << "Function ((X++)++)++ :" << endl; // повторение проверка "static"
    ((d++)++)++;
    cout << d;
    cout << endl << endl;
 
    cout << "Function --X :" << endl;
    --d;
    cout << d;
    cout << endl << endl;
 
    cout << "Function ((X--)--)-- :" << endl;
    ((d--)--)--;
    cout << d;
    cout << endl << endl;
 
    cout << "Function ((X--)--)-- :" << endl;
    ((d--)--)--;
    cout << d;
    cout << endl << endl;
 
    cout << "Enter date in format dd.mm.yyyy: ";
    cin >> d;
    cout << d;
    cout << endl << endl;
 
    system("PAUSE");
 
    return 0;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru