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  }