1 #include <iostream>
2 #include <fstream>
3 #include <vector>
4 #include <set>
5 #include <algorithm>
6
7 using namespace std;
8
9 struct esemeny{
10 string kod, ido, akcio;
11 // akcio: 1- belépés, 2 - kilépés, 3 - menza, 4 - könyvtár
12 };
13
14 struct oraperc
15 {
16 int ora, perc;
17 };
18
19 void F1(vector<esemeny> &a)
20 {
21 ifstream fbe;
22 fbe.open("bedat.txt");
23 esemeny temp;
24 while(fbe >> temp.kod and fbe >> temp.ido and fbe >> temp.akcio)
25 {
26 a.push_back(temp);
27 }
28 fbe.close();
29 }
30
31 void F2(vector<esemeny> &a)
32 {
33 cout << "2. feladat" << endl;
34 cout << "Az első tanuló " << a[0].ido << "-kor lépett be a főkapun." << endl;
35 cout << "Az utolsó tanuló " << a[a.size()-1].ido << "-kor lépett ki a főkapun. " << endl;
36 }
37
38 void F3(vector<esemeny> a)
39 {
40 // 07:50 után, de legkésőbb 08:15-kor
41 string start = "07:50";
42 string vege = "08:15";
43 ofstream fki;
44 fki.open("kesok.txt");
45 for(auto akc:a)
46 {
47 if(akc.akcio == "1" && (akc.ido > start && akc.ido <= vege))
48 {
49 fki << akc.ido << " " << akc.kod << endl;
50 }
51 }
52 fki.close();
53
54 }
55
56 void F4(vector<esemeny> a)
57 {
58 cout << "4. feladat" << endl;
59 int fo=0;
60 for(auto akc:a)
61 {
62 if(akc.akcio == "3") fo++;
63 }
64 cout << "A menzán aznap " << fo << " tanuló ebédelt. " << endl;
65 }
66
67 void F5(vector<esemeny> a)
68 {
69 cout << "5. feladat" << endl;
70 set<string> konyvtar;
71 for(auto akc:a)
72 {
73 if(akc.akcio == "4") konyvtar.insert(akc.kod);
74 }
75 cout << "Aznap " << konyvtar.size() << " tanuló kölcsönzött a könyvtárban." << endl;
76 vector<string> menza;
77 for(auto akc:a)
78 {
79 if(akc.akcio == "3") menza.push_back(akc.kod);
80 }
81 if(konyvtar.size()>menza.size())
82 {
83 cout << "Többen voltak, mint a menzán." << endl;
84 }
85 else
86 {
87 cout << "Nem voltak többen, mint a menzán." << endl;
88 }
89 }
90 bool kodszerint(esemeny a, esemeny b)
91 {
92 return a.kod < b.kod;
93 }
94
95 void F6(vector<esemeny> a)
96 {
97 cout << "6. feladat" << endl;
98 cout << "Az érintett tanulók:" << endl;
99
100 set<string> diakok;
101 for(auto akc:a)
102 {
103 diakok.insert(akc.kod);
104 }
105 string start = "10:50"; // hátsó kapu zárása
106 string vege = "11:00"; // szünet vége
107
108 sort(a.begin(), a.end(),kodszerint);
109 bool szabalytalan;
110 vector<string> tmp;
111 int be, ki;
112 for(auto diak:diakok)
113 {
114 tmp.clear();
115 szabalytalan = false;
116 for(auto akc:a)
117 {
118 if(akc.kod == diak && (akc.akcio == "1" or akc.akcio == "2"))
119 {
120 tmp.push_back(akc.akcio);
121 if(akc.akcio == "1" && (akc.ido > start && akc.ido < vege)) szabalytalan = true;
122 }
123 }
124 be = count(tmp.begin(), tmp.end(), "1");
125 ki = count(tmp.begin(), tmp.end(), "2");
126 if(be > ki && szabalytalan) cout << diak << " ";
127 }
128 cout << endl;
129 }
130
131 oraperc ido(string k, string v)
132 {
133 oraperc tmp;
134 int k_ora = stoi(k.substr(0,2));
135 int v_ora = stoi(v.substr(0,2));
136 int k_perc = stoi(k.substr(3,2));
137 int v_perc = stoi(v.substr(3,2));
138 tmp.ora = ((v_ora * 60 + v_perc) - (k_ora * 60 + k_perc)) / 60;
139 tmp.perc = ((v_ora * 60 + v_perc) - (k_ora * 60 + k_perc)) % 60;
140 return tmp;
141 }
142
143 void F7(vector<esemeny> a)
144 {
145 cout << "7. feladat" << endl;
146 string diak, be, ki;
147 oraperc it;
148 bool van = false;
149 cout << "Egy tanuló azonosítója = ";
150 cin >> diak;
151 int i=0;
152 while(i < a.size() && a[i].kod != diak) i++;
153 if(i < a.size())
154 {
155 van = true;
156 be = a[i].ido;
157 }
158 i = a.size()-1;
159 while(i >= 0 && a[i].kod != diak) i--;
160
161 if(van)
162 {
163 ki = a[i].ido;
164 it = ido(be, ki);
165 cout << "A tanuló érkezése és távozása között " << it.ora << " óra " << it.perc << " perc telt el." << endl;
166 }
167 else
168 {
169 cout << "Ilyen azonosítójú tanuló aznap nem volt az iskolában." << endl;
170 }
171 }
172
173 int main()
174 {
175 setlocale(LC_ALL, "");
176
177 vector<esemeny> akciok;
178 F1(akciok);
179 F2(akciok);
180 F3(akciok);
181 F4(akciok);
182 F5(akciok);
183 F6(akciok);
184 F7(akciok);
185
186 return 0;
187 }