Kios

W3

Dec 19th, 2017
45
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 13.60 KB | None | 0 0
  1. //fale 2-3 zadnje funkcije.
  2.  
  3. #include<iostream>
  4. using namespace std;
  5.  
  6.  
  7. class Uposlenik {
  8.  
  9.     int _sifra; //Automatski uvecavati za 1 za svakog novog uspolenika.
  10.     char _ime[30];
  11.     char _prezime[30];
  12.     char* _radnoMjesto;
  13.     static const char* _kompanija;
  14.     static int brojac;
  15. public:
  16.  
  17.  
  18.     //Implementirati potrebne konstruktor i destruktor funkcije
  19.     Uposlenik(char* ime = " n/a", char* prezime = "n/A", char* radnoMjesto = "n/a") :_sifra(brojac++)
  20.     {
  21.  
  22.         strncpy_s(_ime, ime, _TRUNCATE);
  23.         strncpy_s(_prezime, prezime, _TRUNCATE);
  24.  
  25.         int vel = strlen(radnoMjesto) + 1;
  26.         _radnoMjesto = new char[vel];
  27.         strcpy_s(_radnoMjesto, vel, radnoMjesto);
  28.     }
  29.     Uposlenik(const Uposlenik& orginal)
  30.     {
  31.         _sifra = orginal._sifra;
  32.         strcpy_s(_ime, 30, orginal._ime);
  33.         strcpy_s(_prezime, 30, orginal._prezime);
  34.         int vel = strlen(orginal._radnoMjesto) + 1;
  35.         _radnoMjesto = new char[vel];
  36.         strcpy_s(_radnoMjesto, vel, orginal._radnoMjesto);
  37.     }
  38.     //void Postavi(const Uposlenik& orginal)
  39.     //{
  40.     //  _sifra = orginal._sifra;
  41.     //  strcpy_s(_ime, 30, orginal._ime);
  42.     //  strcpy_s(_prezime, 30, orginal._prezime);
  43.     //  if (_radnoMjesto != nullptr)
  44.     //      delete[] _radnoMjesto;
  45.     //  int vel = strlen(orginal._radnoMjesto) + 1;
  46.     //  _radnoMjesto = new char[vel];
  47.     //  strcpy_s(_radnoMjesto, vel, orginal._radnoMjesto);
  48.     //}
  49.  
  50.     ~Uposlenik()
  51.     {
  52.         delete[] _radnoMjesto;
  53.         _radnoMjesto = NULL;
  54.     }
  55.  
  56.     //Ostale funkcije dodati po potrebi
  57.     const char* getIme() const
  58.     {
  59.         return _ime;
  60.     }
  61.     const char* getPrezime() const
  62.     {
  63.         return _prezime;
  64.     }
  65.     int getSifra()
  66.     {
  67.         return _sifra;
  68.     }
  69.  
  70.     void Info()
  71.     {
  72.         cout << "Sifra: " << _sifra << endl;
  73.         cout << "Ime i prezime: " << _ime << " " << _prezime << endl;
  74.         cout << "Radno mjesto: " << _radnoMjesto << endl;
  75.         cout << "Kompanija: " << _kompanija << endl;
  76.     }
  77.  
  78.  
  79. };
  80. int Uposlenik::brojac = 1;
  81. const char* Uposlenik::_kompanija = "Fakultet Informacijskih Tehnologija";
  82.  
  83.  
  84.  
  85. class Aktivnost {
  86.     char* _naziv;
  87.     bool _zavrsena;
  88.     int* _trajanje; //Izrazeno u danima
  89.     Uposlenik* _uposlenici[5];
  90. public:
  91.     //Implementirati potrebne konstruktor i destruktor funkcije
  92.     //konstruktor defaultni
  93.     Aktivnost()
  94.     {
  95.         _naziv = nullptr;
  96.         _zavrsena = false;
  97.         _trajanje = nullptr;
  98.         for (int i = 0; i < 5; i++)
  99.         {
  100.             _uposlenici[i] == nullptr;
  101.         }
  102.     }
  103.     //destruktor
  104.     ~Aktivnost()
  105.     {
  106.         delete[] _naziv;
  107.         _naziv = nullptr;
  108.         delete _trajanje;
  109.         _trajanje = nullptr;
  110.  
  111.         for (int i = 0; i < 5; i++)
  112.         {
  113.  
  114.             delete _uposlenici[i];
  115.             _uposlenici[i] = nullptr;
  116.         }
  117.  
  118.     }
  119.  
  120.  
  121.     void kreiraj_aktivnost(char* naziv, bool status, int dana)
  122.     {
  123.         int velicina = strlen(naziv) + 1;
  124.         _naziv = new char[velicina];
  125.         strcpy_s(_naziv, velicina, naziv);
  126.         _zavrsena = status;
  127.         _trajanje = new int(dana);
  128.     }
  129.     void postavi(const Aktivnost& a)
  130.     {
  131.  
  132.         if (_naziv != nullptr)
  133.             delete[] _naziv;
  134.         int velicina = strlen(a._naziv) + 1;
  135.         _naziv = new char[velicina];
  136.         strcpy_s(_naziv, velicina, a._naziv);
  137.         _zavrsena = a._zavrsena;
  138.         if (_trajanje != nullptr)
  139.             delete _trajanje;
  140.         _trajanje = new int(*a._trajanje);
  141.         for (int i = 0; i < 5; i++)
  142.         {
  143.             if (a._uposlenici[i] != nullptr)
  144.             {
  145.                
  146.                 _uposlenici[i] = new Uposlenik(*a._uposlenici[i]);
  147.             }
  148.  
  149.             else
  150.                 _uposlenici[i] = nullptr;
  151.         }
  152.  
  153.     }
  154.     const char* getIme() const
  155.     {
  156.         return _naziv;
  157.     }
  158.     void setAktivnostClosed()
  159.     {
  160.         _zavrsena = false;
  161.     }
  162.     bool getStatus() const
  163.     {
  164.         return _zavrsena;
  165.     }
  166.     void Ispis()
  167.     {
  168.         /*
  169.         char* _naziv;
  170.         bool _zavrsena;
  171.         int* _trajanje; //Izrazeno u danima
  172.         Uposlenik* _uposlenici[5];
  173.         */
  174.         cout << "Naziv Projekte aktivnosti: " << _naziv << endl;
  175.         if (_zavrsena == false)
  176.             cout << "Projekta aktivnost je u toku " << endl;
  177.         else
  178.             cout << "Projekta aktivnost je zavrsila!" << endl;
  179.  
  180.         cout << "Projektna aktivnost traje: " << *_trajanje << endl;
  181.         cout << "Uposlenici na projektnoj aktivnosti: " << endl;
  182.         for (int i = 0; i < 5; i++)
  183.         {
  184.             if (_uposlenici[i] != nullptr)
  185.             {
  186.                 _uposlenici[i]->Info();
  187.                 cout << endl;
  188.             }
  189.         }
  190.     }
  191.     //Funkciju koja omogucava angazovanje uposlenika na projektnoj aktivnosti. Funkcija treba da vrati vrijednost tipa
  192.     //bool za uspjesno, odnosno neuspjesno dodavanje uposlenika. Nije moguce dodati istog uposlenika vise puta. Nije moguce
  193.     //angazovati uposlenike na vec zavrsenoj aktivnosti.
  194.     bool dodajUposlenika(const Uposlenik& u)
  195.     {
  196.         if (_zavrsena == true)
  197.         {
  198.             cout << "Projekta aktivnost je zavrsena!" << endl;
  199.             return false;
  200.         }
  201.         for (int a = 0; a < 5; a++)
  202.         {
  203.             if (_uposlenici[a] == nullptr)
  204.                 break;
  205.             if (_uposlenici[a] != nullptr)
  206.             {
  207.                 if (strcmp(_uposlenici[a]->getIme(), u.getIme()) == 0 && strcmp(_uposlenici[a]->getPrezime(), u.getPrezime()) == 0)
  208.                 {
  209.                     cout << "Uposleni je vec dodan na projektu aktivnost!" << endl;
  210.                     return false;
  211.                 }
  212.             }
  213.  
  214.         }
  215.         for (int i = 0; i < 5; i++)
  216.         {
  217.             if (_uposlenici[i] == nullptr)
  218.             {
  219.                 _uposlenici[i] = new Uposlenik(u);
  220.                 cout << "Uposlenik dodan!" << endl;
  221.                 return true;
  222.             }
  223.         }
  224.         cout << "Nema vise mjesta za pohranu radnika!" << endl;
  225.         return false;
  226.  
  227.     }
  228.  
  229.     //Funkciju koja uklanja uposlenika na aktivnosti sa sifrom proslijedjenom kao parametar.
  230.     bool ukloniUposlenog(int ID)
  231.     {
  232.         for (int i = 0; i < 5; i++)
  233.         {
  234.             if (_uposlenici[i] != nullptr)
  235.             {
  236.                 if (_uposlenici[i]->getSifra() == ID)
  237.                 {
  238.                     delete _uposlenici[i];
  239.                     _uposlenici[i] = nullptr;
  240.                     cout << "Uposlenik  izbrisan " << endl;
  241.                     return true;
  242.                 }
  243.             }
  244.         }
  245.         cout << "Uposlenik za datim ID, ne postoji!" << endl;
  246.         return false;
  247.  
  248.  
  249.  
  250.         /*  for (int i = 0; i < 5; i++)
  251.         {
  252.         if (_uposlenici[i]->getSifra() == ID)
  253.         {
  254.         for (; i < 4; i++)
  255.         {
  256.         _uposlenici[i] = _uposlenici[i + 1];
  257.         }
  258.         cout << "Uposlenik  izbrisan " << endl;
  259.         return true;
  260.         }
  261.         }
  262.         cout << "Uposlenik za datim ID, ne postoji!" << endl;
  263.         return false;*/
  264.         /*ID;
  265.         if (ID > 0 && ID <= 5)
  266.         {
  267.  
  268.         for (int i = 0; i < 5; i++)
  269.         {
  270.         if (ID == _uposlenici[i]->getSifra())
  271.         {
  272.         delete _uposlenici[i];
  273.         for (int i = ID; i < 5; i++)
  274.         _uposlenici[i] = _uposlenici[i + 1];
  275.         }
  276.         }
  277.         }*/
  278.     }
  279.  
  280.     //Funkciju koja uklanja sve uposlenike angazovane na aktivnosti.
  281.     void deleteALL()
  282.     {
  283.         cout << "Ovim postupkom brisete sve zaposlene!!!" << endl;
  284.         for (int i = 0; i < 5; i++)
  285.         {
  286.             if (_uposlenici[i] != nullptr)
  287.                 cout << _uposlenici[i]->getIme() << " izbrisan!" << endl;
  288.             delete _uposlenici[i];
  289.             _uposlenici[i] = nullptr;
  290.         }
  291.  
  292.     }
  293.     Uposlenik** getUposlenici()
  294.     {
  295.         return _uposlenici;
  296.     }
  297. #pragma region radni
  298. };
  299.  
  300. class Projekat {
  301.     char* _naziv;
  302.     char* _oblast;
  303.     int _trajanje; //Izrazeno u mjesecima
  304.     Aktivnost* _aktivnosti;
  305.     int _brojAktivnosti;
  306. public:
  307.  
  308.     //Implementirati potrebne konstruktor i destruktor funkcije.
  309.     Projekat()
  310.     {
  311.         _naziv = nullptr;
  312.         _oblast = nullptr;
  313.         _trajanje = 0;
  314.         _aktivnosti = nullptr;
  315.         _brojAktivnosti = 0;
  316.     }
  317.     ~Projekat()
  318.     {
  319.         delete[] _naziv;
  320.         _naziv = nullptr;
  321.         delete[] _oblast;
  322.         _oblast = nullptr;
  323.         /*if (_aktivnosti != nullptr)*/
  324.         delete[] _aktivnosti;
  325.         _aktivnosti = nullptr;
  326.     }
  327.     void kreirajProjekat(char* naziv, char* oblast, int trajanje)
  328.     {
  329.         int velicina = strlen(naziv) + 1;
  330.         _naziv = new char[velicina];
  331.         strcpy_s(_naziv, velicina, naziv);
  332.         velicina = strlen(oblast) + 1;
  333.         _oblast = new char[velicina];
  334.         strcpy_s(_oblast, velicina, oblast);
  335.         _trajanje = trajanje;
  336.     }
  337.  
  338.  
  339.  
  340.     //Funkciju za dodavanje projektnih aktivnosti. Sprijeciti dodavanje vise aktivnosti sa istim nazivom.
  341.     //Za potrebe poredjenja aktivnosti kreirati funkciju unutar klase Aktivnosti.
  342.     bool dodajAktivnost(const Aktivnost& akt)
  343.     {
  344.  
  345.         if (_brojAktivnosti == 0)
  346.         {
  347.             _aktivnosti = new Aktivnost[_brojAktivnosti + 1];
  348.             _aktivnosti[_brojAktivnosti++].postavi(akt);
  349.             return true;
  350.         }
  351.         for (int i = 0; i < _brojAktivnosti; i++)
  352.         {
  353.             if (strcmp(_aktivnosti[i].getIme(), akt.getIme()) == 0)
  354.             {
  355.                 cout << "Postoji dodana aktivnost" << endl;
  356.                 return false;
  357.             }
  358.         }
  359.         Aktivnost * temp = new Aktivnost[_brojAktivnosti + 1];
  360.         for (int i = 0; i < _brojAktivnosti; i++)
  361.         {
  362.             temp[i].postavi(_aktivnosti[i]);
  363.         }
  364.         temp[_brojAktivnosti++].postavi(akt);
  365.         if (_aktivnosti != nullptr);
  366.         delete[] _aktivnosti;
  367.         _aktivnosti = temp;
  368.         cout << "Aktivnost dodana" << endl;
  369.         return true;
  370.     }
  371.  
  372.     //Funkciju koja oznacava aktivnost kao zavrsenu. Funkcija kao parametar prima naziv aktivnosti.
  373.     bool setAktivnostClosed(const char* naziv)
  374.     {
  375.         for (int i = 0; i < _brojAktivnosti; i++)
  376.         {
  377.             if (strcmp(_aktivnosti[i].getIme(), naziv) == 0)
  378.             {
  379.                 if (_aktivnosti[i].getStatus() == false)
  380.                 {
  381.                     cout << "Aktivnost je zavrsena!" << endl;
  382.                     return false;
  383.                 }
  384.                 else
  385.                 {
  386.                     _aktivnosti[i].setAktivnostClosed();
  387.                     cout << "Aktivnost je set to zavrsena!" << endl;
  388.                     return true;
  389.                 }
  390.             }
  391.  
  392.         }
  393.     }
  394.  
  395.     //Funkciju koja treba da postojecoj aktivnosti dodijeli novog uposlenika.
  396.     bool dodajZaposlenika(const char* naziv, const Uposlenik& u)
  397.     {
  398.         for (int i = 0; i < _brojAktivnosti; i++)
  399.         {
  400.             if (strcmp(_aktivnosti[i].getIme(), naziv) == 0)
  401.             {
  402.                 cout << "Uposlenik dodan na projektu aktivnost!" << endl;
  403.                 return _aktivnosti[i].dodajUposlenika(u);
  404.             }
  405.  
  406.         }
  407.         return false;
  408.        
  409.     }
  410.  
  411.     //Funkciju koja treba da vrati sve uposlenike angazovane na odredjenoj aktivnosti. Ulazni parametar je naziv aktivnosti.
  412.     Uposlenik** vratiSveUposlene(const char* naziv)
  413.     {
  414.         for (int i = 0; i < _brojAktivnosti; i++)
  415.         {
  416.             if (strcmp(_aktivnosti[i].getIme(), naziv) == 0)
  417.             {
  418.                 return _aktivnosti[i].getUposlenici();
  419.                
  420.             }
  421.  
  422.         }
  423.         return nullptr;
  424.     }
  425.  
  426.     //Funkciju koja uklanja odredjenog uposlenika na aktivnosti. Ulazni parametri funkcije su naziv aktivnosti i sifra uposlenika.
  427.     bool ukloniZaposlenika(const char* naziv, const int& id)
  428.     {
  429.         for (int i = 0; i < _brojAktivnosti; i++)
  430.         {
  431.             if (strcmp(_aktivnosti[i].getIme(), naziv) == 0)
  432.             {
  433.                 cout << "Brisanje zaposlenika sa " << id << " otpocinje"<< endl;
  434.                 _aktivnosti[i].ukloniUposlenog(id);
  435.                 return true;
  436.             }
  437.         }
  438.         return false;
  439.     }
  440.  
  441.     //Funkciju koja uklanja sve uposlenike angazovane na aktivnosti sa nazivom proslijedjenim kao parametar.
  442.     bool ukloniSveZaposlene(const char* naziv)
  443.     {
  444.         for (int i = 0; i < _brojAktivnosti; i++)
  445.         {
  446.             if (strcmp(_aktivnosti[i].getIme(), naziv) == 0)
  447.             {
  448.                 cout << "Brisanje svih zaposlenih incijalizirano!" << endl;
  449.                 _aktivnosti[i].deleteALL();
  450.                 return true;
  451.             }
  452.         }
  453.         return false;
  454.     }
  455.  
  456.     //Funkciju koja pronalazi uposlenika sa najvecim brojem angazmana na aktivnostima.
  457.  
  458.  
  459.     //Funkciju koja pronalazi 3 uposlenika koja su angazovana na najvecem broju nezavrsenih aktivnosti.
  460.  
  461.     //Funkciju koja ispisuje sve završene aktivnosti na projektu.
  462.     void IspisiZavrseneAktivnosti()
  463.     {
  464.         cout << "\nZavrsene aktivnosti\n";
  465.         for (int i = 0; i < _brojAktivnosti; i++)
  466.             if (_aktivnosti[i].getStatus()==true)
  467.                 cout << "-" << _aktivnosti[i].getIme() << endl;
  468.     }
  469.  
  470.     //Funkciju koja ispisuje sve zavrsene aktivnosti na projektu.
  471.     void ispis()
  472.     {
  473.  
  474.         cout << "Naziv projekta: " << _naziv << endl;
  475.         cout << "Naziv oblasti: " << _oblast << endl;
  476.         cout << "Trajanje projekta: " << _trajanje << endl;
  477.         if (_brojAktivnosti == 0)
  478.             return;
  479.         for (int i = 0; i < _brojAktivnosti; i++)
  480.         {
  481.             _aktivnosti[i].Ispis();
  482.             cout << endl;
  483.         }
  484.     }
  485.  
  486. };
  487.  
  488.  
  489. /*Kreirati globalnu funkciju koja pronalazi najuspjesnijeg usposlenika na projektima proslijedjenim kao parametar.
  490. Uposlenik se smatra najuspjesnijim ako je angazovan na najvecem broju zavrsenih aktivnosti. Ako vise uposlenika
  491. ima isti broj zavrsenih aktivnosti, uspjesnijim se smatra onaj cije su aktivnosti trajale duze.
  492. */
  493.  
  494.  
  495. #pragma endregion radni
  496. int main()
  497. {
  498.     //Testirati sve dostupne funkcionalnosti
  499.     Uposlenik Nedzad("Nedzad", "Neziri", "Pravnik");
  500.     Uposlenik Nadzida("Nadzida", "Koljenovic", "I.T");
  501.     Uposlenik Fatima("Fatima", "Fata", "Direktor");
  502.     Uposlenik Gibboni("Gibboni", "Stipesic", "Direktor");
  503.     //Nedzad.Info();
  504.     Aktivnost Posao;
  505.     Posao.kreiraj_aktivnost("Studiranje", true, 300);
  506.     Aktivnost Odmor;
  507.     Odmor.kreiraj_aktivnost("Odmaranje", false, 10);
  508.     if (Posao.dodajUposlenika(Nedzad))
  509.         cout << "Uspjesno dodan zaposlenik!" << endl;
  510.     if (Posao.dodajUposlenika(Nadzida))
  511.         cout << "Uspjesno dodan zaposlenik!" << endl;
  512.     if (Posao.dodajUposlenika(Fatima))
  513.         cout << "Uspjesno dodan zaposlenik!" << endl;
  514.     if (Posao.dodajUposlenika(Nedzad))
  515.         cout << "Uspjesno dodan zaposlenik!" << endl;
  516.     if (Posao.dodajUposlenika(Gibboni))
  517.         cout << "Uspjesno dodan zaposlenik!" << endl;
  518.     if (Odmor.dodajUposlenika(Gibboni))
  519.         cout << "Uspjesno dodan zaposlenik!" << endl;
  520.  
  521.     Odmor.Ispis();
  522.     //Posao.ukloniUposlenog(4);
  523.     //  //Posao.Ispis();
  524.     ////    Posao.deleteALL();
  525.     //  //Posao.Ispis();
  526.     Projekat PolozitiPRIII;
  527.     PolozitiPRIII.kreirajProjekat("PRIII_poloziti", "IT", 2);
  528.     PolozitiPRIII.ispis();
  529.     if (PolozitiPRIII.dodajAktivnost(Posao) == true)
  530.         cout << "Uspjesno dodana projektna aktivnost!" << endl;
  531.     if (PolozitiPRIII.dodajAktivnost(Odmor) == true)
  532.         cout << "Uspjesno dodana projektna aktivnost!" << endl;
  533.     if (PolozitiPRIII.dodajAktivnost(Posao) == true)
  534.         cout << "Uspjesno dodana projektna aktivnost!" << endl;
  535.  
  536.     if (PolozitiPRIII.dodajZaposlenika("Odmaranje", Gibboni)==true)
  537.         cout << "Uspjesno dodan zaposlenik na projektu aktivnost!" << endl;
  538.     if (PolozitiPRIII.ukloniSveZaposlene("Odmaranje")==true)
  539.         cout << "Obrisani svi zaposleni!!!" << endl;
  540.     if (PolozitiPRIII.ukloniZaposlenika("Studiranje",4) == true)
  541.         cout << "Obrisan ZAPOSLENIK!!!" << endl;
  542.  
  543.     cout << "------------------------------------------" << endl;
  544.     PolozitiPRIII.IspisiZavrseneAktivnosti();
  545.     cout << "------------------------------------------" << endl;
  546.     PolozitiPRIII.ispis();
  547.     system("pause");
  548.     return 0;
  549. }
Add Comment
Please, Sign In to add comment