Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <fstream>
- #include <cstdlib>
- #include <sstream>
- #include <iterator>
- using namespace std;
- class Pracownik
- {
- public:
- string imie, nazwisko;
- int rok_urodzenia;
- public:
- Pracownik(string im="brak", string na="brak", int ro=0)
- {
- imie = im;
- nazwisko = na;
- rok_urodzenia = ro;
- }
- ~Pracownik()
- {
- }
- virtual void wyswietl()=0;
- virtual string konwersja()=0;
- };
- class Programista : public Pracownik
- {
- public:
- int staz_pracy=0;
- vector <string> technologie;
- public:
- Programista(string im, string na, int ro, int sp, vector <string> &te) : Pracownik(im, na, ro)
- {
- staz_pracy = sp;
- technologie = te;
- }
- ~Programista()
- {
- }
- virtual void wyswietl()
- {
- cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << staz_pracy << ", " << endl;
- }
- string konwersja()
- {
- string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
- string staz_pracy = to_string(Programista::staz_pracy);
- return (imie+" "+nazwisko+" "+rok_urodzenia+", "+staz_pracy+"\n");
- }
- };
- class Kierownik : public Pracownik
- {
- int lata_doswiadczenia=0;
- vector <string> szkolenia;
- public:
- Kierownik(string im, string na, int ro, int ld, vector <string> &sz) : Pracownik(im, na, ro)
- {
- lata_doswiadczenia = ld;
- szkolenia = sz;
- }
- ~Kierownik()
- {
- }
- virtual void wyswietl()
- {
- cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << lata_doswiadczenia << ", " << endl;
- }
- string konwersja()
- {
- string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
- string lata_doswiadczenia = to_string(Kierownik::lata_doswiadczenia);
- return (imie+" "+nazwisko+" "+rok_urodzenia+", "+lata_doswiadczenia+"\n");
- }
- };
- class Handlowiec : public Pracownik
- {
- int liczba_sprzedanych=0;
- vector <string> jezyki;
- public:
- Handlowiec(string im, string na, int ro, int ls, vector <string> &je) : Pracownik(im, na, ro)
- {
- liczba_sprzedanych = ls;
- jezyki = je;
- }
- ~Handlowiec()
- {
- }
- virtual void wyswietl()
- {
- cout << imie << " " << nazwisko << ", " << rok_urodzenia << ", " << liczba_sprzedanych << ", " << endl;
- }
- string konwersja()
- {
- string rok_urodzenia = to_string(Pracownik::rok_urodzenia);
- string liczba_sprzedanych = to_string(Handlowiec::liczba_sprzedanych);
- return (imie+" "+nazwisko+" "+rok_urodzenia+", "+liczba_sprzedanych+"\n");
- }
- };
- Pracownik* generator_klas(string text)
- {
- int rok, staz;
- istringstream iss(text);
- vector<string> results((istream_iterator<string>(iss)),
- istream_iterator<string>());
- size_t const half_size = 5;
- vector<string> split_lo(results.begin(), results.begin() + half_size);
- vector<string> split_hi;
- split_hi.push_back("");
- Pracownik *pracownik;
- if (split_lo[0] == "P:")
- {
- rok = atoi(split_lo[3].c_str());
- staz = atoi(split_lo[4].c_str());
- pracownik = new Programista(split_lo[1], split_lo[2], rok, staz, split_hi);
- }
- else if (split_lo[0] == "K:")
- {
- rok = atoi(split_lo[3].c_str());
- staz = atoi(split_lo[4].c_str());
- pracownik = new Kierownik(split_lo[1], split_lo[2], rok, staz, split_hi);
- }
- else if (split_lo[0] == "H:")
- {
- rok = atoi(split_lo[3].c_str());
- staz = atoi(split_lo[4].c_str());
- pracownik = new Handlowiec(split_lo[1], split_lo[2], rok, staz, split_hi);
- }
- else
- {
- cout << "BLAD: nieznany typ rekordu! - linia: " << text;
- exit(0);
- }
- return pracownik;
- }
- vector<Pracownik*> zaladuj_dane(string nazwa_pliku)
- {
- vector<Pracownik*> pracownicy;
- fstream plik;
- string linia;
- plik.open(nazwa_pliku.c_str());
- if(plik.good()==false)
- {
- cout << "BLAD: nieznaleziono danych!";
- exit(0);
- }
- while(!plik.eof())
- {
- getline(plik, linia);
- pracownicy.push_back(generator_klas(linia));
- }
- plik.close();
- return pracownicy;
- }
- vector<Pracownik*> sortuj_po_nazwiskach(vector<Pracownik*> &praco)
- {
- for(int j=0; j < praco.size()-1; j++)
- for(int i=0; i < praco.size()-1; i++)
- if (praco[i]->nazwisko > praco[i+1]->nazwisko) swap (praco[i], praco[i+1]);
- return praco;
- }
- vector<Pracownik*> sortuj_po_urodzeniach(vector<Pracownik*> &praco)
- {
- for(int j=0; j < praco.size()-1; j++)
- for(int i=0; i < praco.size()-1; i++)
- if (praco[i]->rok_urodzenia > praco[i+1]->rok_urodzenia) swap (praco[i], praco[i+1]);
- return praco;
- }
- void zapisz_dane(vector<Pracownik*> pracownicy)
- {
- fstream plik;
- plik.open("raport.txt", ios::out);
- for(int i=0; i < pracownicy.size(); i++)
- {
- plik << pracownicy[i]->konwersja();
- }
- plik.close();
- }
- int main()
- {
- setlocale(LC_ALL, "polish");
- vector<Pracownik*> pracownicy = zaladuj_dane("dane.txt");
- vector<Pracownik*> pracownicy2 = sortuj_po_urodzeniach(pracownicy);
- for(int i=0; i < pracownicy2.size(); i++)
- {
- pracownicy2[i]->wyswietl();
- }
- cout << " " << endl;
- vector<Pracownik*> pracownicy3 = sortuj_po_nazwiskach(pracownicy);
- for(int i=0; i < pracownicy3.size(); i++)
- {
- pracownicy3[i]->wyswietl();
- }
- cout << " " << endl;
- zapisz_dane(pracownicy2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement