В библиотеке для каждого заказывающего книгу читателя заполняется карточка: фамилия, дата заказа, дата выдачи книги. Определить: 1) самый маленький срок, за который нашли книгу; 2) сколько заказов было не удовлетворено; 3) кто чаще всего берет книги;
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
| #include <iostream>
#include <climits> //for INT_MAX
#include <map>
#include <string>
using namespace std;
struct Date {
int d;
int m;
int y;
};
int isLeapYear(int n) { //високосный ли год
int k = 0;
if (n/4 == 0) k++;
if (n/100 == 0) k--;
if (n/400 == 0) k++;
return k;
}
int daysInMonth(int year, int month) {//возвращает количество дней в месяцe
switch (month) {
case 1: return 31;
case 2: if(isLeapYear(year)) return 29;
else return 28;
case 3: return 31;
case 4: return 30;
case 5: return 31;
case 6: return 30;
case 7: return 31;
case 8: return 31;
case 9: return 30;
case 10: return 31;
case 11: return 30;
case 12: return 31;
}
}
int operator-(Date &d1, Date &d2) {
int d1days = d1.y * 365 + d1.y/4 - d1.y/100 + d1.y/400 + d1.d;
for (int i = 1; i <= d1.m; ++i)
d1days += daysInMonth(d1.y,i);
int d2days = d2.y * 365 + d2.y/4 - d2.y/100 + d2.y/400 + d2.d;
for (int i = 1; i <= d2.m; ++i)
d1days += daysInMonth(d2.y,i);
return d1days - d2days;
}
istream& operator>>(istream & is, Date & dt) {//переопределяем оператор ввода, чтоб можно было сразу из cin считывать в экземпляр Date
is >> dt.y >> dt.m >> dt.d;
}
struct Card {
string surname;
Date dateOfOrder;
Date dateOfOutput;
};
int main() {
Card temp;
int n;
cout << "Enter number of cards: ";
cin >> n;
int SmallestPeriod = INT_MAX;
int NeUd = 0;
map<string,int> readers;
for (int i = 0; i< n; ++i) {
cout << "Enter surname(one word): ";
cin >> temp.surname;
cout << "Enter date of order(yyyy mm dd): ";
cin >> temp.dateOfOrder;
cout << "Enter date of book's output(yyyy mm dd) \nor 0 0 0, if order was not satisfied: ";
cin >> temp.dateOfOutput;
cin.get();
if (temp.dateOfOutput.y == 0)
NeUd++;
else {
int t = temp.dateOfOutput-temp.dateOfOrder;
if (SmallestPeriod > t ) {
SmallestPeriod = t;
}
}
readers[temp.surname]++; //массив хранит пары (фамилия, количество Прочитанных Книг)
}
cout << "\n\n";
cout << "1: " << SmallestPeriod << "days \n";
cout << "2: " << NeUd << " orders not satisfied\n";
map<string,int>::iterator it;
string str;
int max = 0;
for (it = readers.begin(); it != readers.end(); ++it) {
if (it->second > max) {
max = it->second;
str = it->first;
}
}
cout << "3: " << str << " has taken " << max << " books \n";
} |
|
Ругается на эту строчку, не могу понять в чем дело..
C++ |
1
2
3
| istream& operator>>(istream & is, Date & dt) {//переопределяем оператор ввода, чтоб можно было сразу из cin считывать в экземпляр Date
is >> dt.y >> dt.m >> dt.d;
} |
|