Advertisement
Deriterath

Untitled

Jan 18th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <fstream>
  4. #include <cstdlib>
  5. #include <sstream>
  6. #include <iterator>
  7.  
  8. using namespace std;
  9.  
  10. class Pracownik
  11. {
  12.     public:
  13.  
  14.     string imie, nazwisko;
  15.     int rok_urodzenia;
  16.  
  17.     public:
  18.  
  19.     Pracownik(string im="brak", string na="brak", int ro=0)
  20.     {
  21.         imie = im;
  22.         nazwisko = na;
  23.         rok_urodzenia = ro;
  24.     }
  25.  
  26.     ~Pracownik()
  27.     {
  28.     }
  29.  
  30.     virtual void wyswietl()=0;
  31.     virtual string konwersja()=0;
  32. };
  33.  
  34. class Programista : public Pracownik
  35. {
  36.     public:
  37.  
  38.     int staz_pracy=0;
  39.     vector <string> technologie;
  40.  
  41.     public:
  42.  
  43.     Programista(string im, string na, int ro, int sp, vector <string> &te) : Pracownik(im, na, ro)
  44.     {
  45.         staz_pracy = sp;
  46.         technologie = te;
  47.     }
  48.     ~Programista()
  49.     {
  50.     }
  51.     virtual void wyswietl()
  52.     {
  53.         cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << staz_pracy << ", " << endl;
  54.     }
  55.  
  56.     string konwersja()
  57.     {
  58.         string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
  59.         string staz_pracy = to_string(Programista::staz_pracy);
  60.         return (imie+" "+nazwisko+" "+rok_urodzenia+", "+staz_pracy+"\n");
  61.     }
  62. };
  63.  
  64. class Kierownik : public Pracownik
  65. {
  66.     int lata_doswiadczenia=0;
  67.     vector <string> szkolenia;
  68.  
  69.     public:
  70.  
  71.     Kierownik(string im, string na, int ro, int ld, vector <string> &sz) : Pracownik(im, na, ro)
  72.     {
  73.         lata_doswiadczenia = ld;
  74.         szkolenia = sz;
  75.     }
  76.     ~Kierownik()
  77.     {
  78.     }
  79.     virtual void wyswietl()
  80.     {
  81.         cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << lata_doswiadczenia << ", " << endl;
  82.     }
  83.  
  84.     string konwersja()
  85.     {
  86.         string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
  87.         string lata_doswiadczenia = to_string(Kierownik::lata_doswiadczenia);
  88.         return (imie+" "+nazwisko+" "+rok_urodzenia+", "+lata_doswiadczenia+"\n");
  89.     }
  90. };
  91.  
  92. class Handlowiec : public Pracownik
  93. {
  94.     int liczba_sprzedanych=0;
  95.     vector <string> jezyki;
  96.  
  97.     public:
  98.  
  99.     Handlowiec(string im, string na, int ro, int ls, vector <string> &je) : Pracownik(im, na, ro)
  100.     {
  101.         liczba_sprzedanych = ls;
  102.         jezyki = je;
  103.     }
  104.     ~Handlowiec()
  105.     {
  106.     }
  107.     virtual void wyswietl()
  108.     {
  109.         cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << liczba_sprzedanych << ", " << endl;
  110.     }
  111.     string konwersja()
  112.     {
  113.         string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
  114.         string liczba_sprzedanych = to_string(Handlowiec::liczba_sprzedanych);
  115.         return (imie+" "+nazwisko+" "+rok_urodzenia+", "+liczba_sprzedanych+"\n");
  116.     }
  117. };
  118.  
  119. Pracownik* generator_klas(string text)
  120. {
  121.     int rok, staz;
  122.  
  123.     istringstream iss(text);
  124.     vector<string> results((istream_iterator<string>(iss)),
  125.         istream_iterator<string>());
  126.  
  127.     size_t const half_size = 5;
  128.     vector<string> split_lo(results.begin(), results.begin() + half_size);
  129.  
  130.     vector<string> split_hi;
  131.     split_hi.push_back("");
  132.  
  133.     Pracownik *pracownik;
  134.  
  135.     if (split_lo[0] == "P:")
  136.     {
  137.         rok = atoi(split_lo[3].c_str());
  138.         staz = atoi(split_lo[4].c_str());
  139.         pracownik = new Programista(split_lo[1], split_lo[2], rok, staz, split_hi);
  140.     }
  141.     else if (split_lo[0] == "K:")
  142.     {
  143.         rok = atoi(split_lo[3].c_str());
  144.         staz = atoi(split_lo[4].c_str());
  145.         pracownik = new Kierownik(split_lo[1], split_lo[2], rok, staz, split_hi);
  146.     }
  147.     else if (split_lo[0] == "H:")
  148.     {
  149.         rok = atoi(split_lo[3].c_str());
  150.         staz = atoi(split_lo[4].c_str());
  151.         pracownik = new Handlowiec(split_lo[1], split_lo[2], rok, staz, split_hi);
  152.     }
  153.     else
  154.     {
  155.         cout << "BLAD: nieznany typ rekordu! - linia: " << text;
  156.         exit(0);
  157.     }
  158.     return pracownik;
  159. }
  160.  
  161. vector<Pracownik*> zaladuj_dane(string nazwa_pliku)
  162. {
  163.     vector<Pracownik*> pracownicy;
  164.     fstream plik;
  165.     string linia;
  166.     plik.open(nazwa_pliku.c_str());
  167.     if(plik.good()==false)
  168.     {
  169.         cout << "BLAD: nieznaleziono danych!";
  170.         exit(0);
  171.     }
  172.         while(!plik.eof())
  173.         {
  174.             getline(plik, linia);
  175.             pracownicy.push_back(generator_klas(linia));
  176.         }
  177.         plik.close();
  178.  
  179.         return pracownicy;
  180. }
  181.  
  182. vector<Pracownik*> sortuj_po_nazwiskach(vector<Pracownik*> &praco)
  183. {
  184.         for(int j=0; j < praco.size()-1; j++)
  185.             for(int i=0; i < praco.size()-1; i++)
  186.                 if (praco[i]->nazwisko > praco[i+1]->nazwisko) swap (praco[i], praco[i+1]);
  187.  
  188.         return praco;
  189. }
  190.  
  191. vector<Pracownik*> sortuj_po_urodzeniach(vector<Pracownik*> &praco)
  192. {
  193.         for(int j=0; j < praco.size()-1; j++)
  194.             for(int i=0; i < praco.size()-1; i++)
  195.                 if (praco[i]->rok_urodzenia > praco[i+1]->rok_urodzenia) swap (praco[i], praco[i+1]);
  196.  
  197.         return praco;
  198. }
  199.  
  200. void zapisz_dane(vector<Pracownik*> pracownicy)
  201. {
  202.     fstream plik;
  203.     plik.open("raport.txt", ios::out);
  204.  
  205.     for(int i=0; i < pracownicy.size(); i++)
  206.             {
  207.                 plik << pracownicy[i]->konwersja();
  208.             }
  209.  
  210.     plik.close();
  211. }
  212.  
  213. int main()
  214. {
  215.     setlocale(LC_ALL, "polish");
  216.  
  217.     vector<Pracownik*> pracownicy = zaladuj_dane("dane.txt");
  218.  
  219.     vector<Pracownik*> pracownicy2 = sortuj_po_urodzeniach(pracownicy);
  220.  
  221.         for(int i=0; i < pracownicy2.size(); i++)
  222.             {
  223.                 pracownicy2[i]->wyswietl();
  224.             }
  225.             cout << " " << endl;
  226.  
  227.     vector<Pracownik*> pracownicy3 = sortuj_po_nazwiskach(pracownicy);
  228.  
  229.         for(int i=0; i < pracownicy3.size(); i++)
  230.             {
  231.                 pracownicy3[i]->wyswietl();
  232.             }
  233.             cout << " " << endl;
  234.  
  235.     zapisz_dane(pracownicy2);
  236.  
  237.     return 0;
  238. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement