-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDate.h
152 lines (125 loc) · 2.7 KB
/
Date.h
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
#pragma once
class Date
{
// static - ÷òîáû ìàññèâ íå êîïèðîâàëñÿ äëÿ êàæäîãî îáúåêòà (48 áàéòîâ ýòî íå ìíîãî, íî òåì íå ìåíåå)
// const - ÷òîáû íåëüçÿ áûëî ïîìåíÿòü êîëè÷åñòâî äíåé â ìåñÿöå
static const int month_days[12];
// ïåðå÷èñëåíèå íå î÷åíü-òî óäîáíî èñïîëüçîâàòü, ïîòîìó ÷òî íåëüçÿ çàïóñòèòü ïåðåáîðíûé öèêë äëÿ ïðîñìîòðà ýëåìåíòîâ ïåðå÷èñëåíèÿ
//enum md {JAN=31, FEB=28, MAR=31, APR=30};
int day;
int month;
int year;
char* weekday = nullptr;
void SetWeekday()
{
int a = (14 - month) / 12;
int y = year - a;
int m = month + 12 * a - 2;
int w = (day + (31 * m) / 12 + y + y / 4 - y / 100 + y / 400) % 7;
if (weekday != nullptr) delete[] weekday;
weekday = new char[15];
const char* days[] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" };
strcpy_s(weekday, 15, days[w]);
}
public:
Date(int day, int month, int year) // Date d(1,1,1999)
{
//cout << "c-tor param\n";
SetDate(day, month, year);
}
Date()
{
//cout << "c-tor without parameters!\n";
//SetDate(1, 1, 1970);
SYSTEMTIME st;
GetSystemTime(&st);
SetDate(st.wDay, st.wMonth, st.wYear);
}
~Date()
{
//cout << "DESTRUCTOR!\n";
if (weekday != nullptr)
delete[] weekday;
}
void SetDay(int value)
{
if (value >= 1 && value <= 31) {
day = value;
SetWeekday();
}
else {
throw "ERROR!\n";
}
}
void SetMonth(int value)
{
if (value >= 1 && value <= 12) {
month = value;
SetWeekday();
}
else {
throw "ERROR!\n";
}
}
void SetYear(int value)
{
year = value;
SetWeekday();
}
int GetDay() const
{
return day;
}
int GetMonth() const
{
return month;
}
int GetYear() const { return year; }
string GetWeekday() const
{
return weekday;
}
void Print() const
{
printf("%s, %02d.%02d.%04d\n", weekday, day, month, year);
}
void SetDate(int day, int month, int year)
{
SetDay(day);
SetMonth(month);
SetYear(year);
}
void SetDateFromKeyboard()
{
cout << "Please, enter day (1-31): ";
int value;
cin >> value;
SetDay(value);
cout << "Please, enter month (1-12): ";
cin >> value;
SetMonth(value);
cout << "Please, enter year: ";
cin >> value;
SetYear(value);
}
// êîíñòðóêòîð êîïèðîâàíèÿ
Date(const Date& original) : Date(original.day, original.month, original.year)
{
}
Date& operator= (const Date& original)
{
// ñèòóàöèÿ ñ ñàìîïðèñâàèâàíèåì (s = s)
if (this == &original) return *this;
if (weekday != nullptr)
{
delete[] weekday;
}
weekday = new char[15];
strcpy_s(weekday, 15, original.weekday);
this->day = original.day;
this->month = original.month;
this->year = original.year;
return *this;
}
};
const int Date::month_days[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 };