Advertisement
Guest User

runtime

a guest
Aug 22nd, 2017
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 27.53 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include<exception>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. template<class T1, class T2, int max>
  9. class Kolekcija {
  10. T1* _elementi1[max];
  11. T2* _elementi2[max];
  12. int _trenutno;
  13. public:
  14. Kolekcija()
  15. {
  16. for (int i = 0; i < max; i++)
  17. {
  18. _elementi1[i] = nullptr;
  19. _elementi2[i] = nullptr;
  20. }
  21. _trenutno = 0;
  22. }
  23.  
  24. Kolekcija(const Kolekcija& k)
  25. {
  26. for (int i = 0; i < max; i++)
  27. {
  28. if (i < k._trenutno)
  29. {
  30. _elementi1[i] = new T1(*k._elementi1[i]);
  31. _elementi2[i] = new T2(*k._elementi2[i]);
  32. }
  33. else
  34. {
  35. _elementi1[i] = nullptr;
  36. _elementi2[i] = nullptr;
  37. }
  38. }
  39.  
  40. _trenutno = k._trenutno;
  41.  
  42. }
  43. ~Kolekcija()
  44. {
  45. for (int i = 0; i < _trenutno; i++)
  46. {
  47. delete _elementi1[i];
  48. _elementi1[i] = nullptr;
  49.  
  50. delete _elementi2[i];
  51. _elementi2[i] = nullptr;
  52. }
  53. }
  54. Kolekcija & operator=(const Kolekcija & obj) {
  55. if (this == &obj) return *this;
  56. this->~Kolekcija();
  57.  
  58. _trenutno = obj._trenutno;
  59. for (int i = 0; i < obj._trenutno; i++)
  60. {
  61. _elementi1[i] = new T1(*obj._elementi1[i]);
  62. _elementi2[i] = new T2(*obj._elementi2[i]);
  63. }
  64. }
  65. bool Dodaj(const T1& el1, const T2& el2)
  66. {
  67. if (_trenutno == max)
  68. return false;
  69.  
  70. _elementi1[_trenutno] = new T1(el1);
  71. _elementi2[_trenutno] = new T2(el2);
  72.  
  73. _trenutno++;
  74.  
  75. return true;
  76. }
  77. void RemoveLokacija(int lokacija) {
  78. for (int i = 0; i < _trenutno; i++)
  79. {
  80. if (i == lokacija) {
  81. for (int j= i+1; j< _trenutno; j++)
  82. {
  83. swap(_elementi1[j], _elementi1[j - 1]);
  84. swap(_elementi2[j], _elementi2[j - 1]);
  85. }
  86. }
  87. }
  88. delete _elementi1[_trenutno - 1]; _elementi1[_trenutno - 1] = nullptr;
  89. delete _elementi2[_trenutno - 1]; _elementi2[_trenutno - 1] = nullptr;
  90. _trenutno--;
  91. }
  92. void Remove(T1 & el1, T2 & el2) {
  93. for (int i = 0; i < _trenutno; i++)
  94. {
  95. if (*_elementi1[i]==el1 && *_elementi2[i]==el2) {
  96. for (int j = i + 1; j< _trenutno; j++)
  97. {
  98. swap(_elementi1[j], _elementi1[j - 1]);
  99. swap(_elementi2[j], _elementi2[j - 1]);
  100. }
  101. }
  102. }
  103. delete _elementi1[_trenutno - 1]; _elementi1[_trenutno - 1] = nullptr;
  104. delete _elementi2[_trenutno - 1]; _elementi2[_trenutno - 1] = nullptr;
  105. _trenutno--;
  106. }
  107. T1& GetElement1(int index)
  108. {
  109. if (index >= 0 && index < _trenutno)
  110. return *_elementi1[index];
  111.  
  112. throw exception("Vrijednost indeksa nije validna.");
  113. }
  114.  
  115. T2& GetElement2(int index)
  116. {
  117. if (index >= 0 && index < _trenutno)
  118. return *_elementi2[index];
  119.  
  120. throw exception("Vrijednost indeksa nije validna.");
  121.  
  122. }
  123.  
  124. int GetTrenutno()const { return _trenutno; }
  125. friend ostream& operator<<<>(ostream & cout, const Kolekcija<T1, T2, max> & obj);
  126.  
  127. };
  128. template<class T1, class T2, int max>
  129. ostream& operator<<<>(ostream & cout, const Kolekcija<T1, T2, max> & obj) {
  130. for (int i = 0; i < obj._trenutno; i++)
  131. {
  132. cout << *obj._elementi1[i] << " " << *obj._elementi2[i] << endl;
  133. }
  134. return cout;
  135. }
  136.  
  137. class Uplata {
  138. char* _datum;
  139. double _iznos;
  140. public:
  141. Uplata(char* datum="------", double iznos=0)
  142. {
  143. int vel = strlen(datum) + 1;
  144. _datum = new char[vel];
  145. strcpy_s(_datum, vel, datum);
  146.  
  147. _iznos = iznos;
  148. }
  149. Uplata(const Uplata & obj)
  150. {
  151. int vel = strlen(obj._datum) + 1;
  152. _datum = new char[vel];
  153. strcpy_s(_datum, vel, obj._datum);
  154.  
  155. _iznos = obj._iznos;
  156. }
  157. Uplata & operator=(const Uplata & obj) {
  158. if (this == &obj) return *this;
  159. this->~Uplata();
  160.  
  161. int vel = strlen(obj._datum) + 1;
  162. _datum = new char[vel];
  163. strcpy_s(_datum, vel, obj._datum);
  164. }
  165. ~Uplata()
  166. {
  167. delete[] _datum;
  168. _datum = nullptr;
  169. }
  170. char * getDatum() { return _datum; }
  171. double getIznos() { return _iznos; }
  172. friend ostream& operator<<(ostream&, const Uplata&);
  173. };
  174.  
  175. ostream& operator<<(ostream& cout, const Uplata& u)
  176. {
  177. cout << "Datum uplate: " << u._datum << endl;
  178. cout << "Iznos: " << u._iznos << endl;
  179.  
  180. return cout;
  181. }
  182.  
  183. class Oprema
  184. {
  185. string _naziv;
  186. string* _proizvodjac;
  187. double _cijena;
  188. int _dostupnoNaStanju;
  189. public:
  190. //Konstruktor i destruktor
  191. Oprema(string naziv="------", string proizvodjac="------", double cijena=0, int dostupno=0) {
  192. _naziv = naziv;
  193. _proizvodjac = new string(proizvodjac);
  194. _cijena = cijena;
  195. _dostupnoNaStanju = dostupno;
  196. }
  197. Oprema(const Oprema & obj){
  198. _naziv = obj._naziv;
  199. _proizvodjac = new string(*obj._proizvodjac);
  200. _cijena = obj._cijena;
  201. _dostupnoNaStanju = obj._dostupnoNaStanju;
  202. }
  203. ~Oprema() {
  204. delete _proizvodjac; _proizvodjac = nullptr;
  205. }
  206. Oprema& operator=(const Oprema & obj) {
  207. if (this == &obj) return *this;
  208. this->~Oprema();
  209.  
  210. _naziv = obj._naziv;
  211. _proizvodjac = new string(*obj._proizvodjac);
  212. _cijena = obj._cijena;
  213. _dostupnoNaStanju = obj._dostupnoNaStanju;
  214. }
  215. bool operator==(const Oprema & obj) {
  216. if (_naziv == obj._naziv && *_proizvodjac == *obj._proizvodjac && _cijena == obj._cijena && _dostupnoNaStanju == obj._dostupnoNaStanju)
  217. return true;
  218. return false;
  219. }
  220. Oprema & operator++() {
  221. ++_dostupnoNaStanju;
  222. return *this;
  223. }
  224. Oprema & operator--() {
  225. --_dostupnoNaStanju;
  226. return *this;
  227. }
  228. //Osnovne funkcije za rad sa klasom
  229. string getNaziv() { return _naziv; }
  230. string getProizvodjac() { return *_proizvodjac; }
  231. double getCijena() { return _cijena; }
  232. int getDostupnoNaStanju() { return _dostupnoNaStanju; }
  233. friend ostream & operator<<(ostream & cout, const Oprema & obj);
  234. };
  235. ostream & operator<<(ostream & cout, const Oprema & obj) {
  236. cout << "OPREMA: " << obj._naziv << endl;
  237. cout << "Proizvodjac: " << *obj._proizvodjac << endl;
  238. cout << "Cijena: " << obj._cijena << endl;
  239. cout << "Dostupno na stanju: " << obj._dostupnoNaStanju << endl;
  240. return cout;
  241. }
  242.  
  243. class Ucenik
  244. {
  245. string _imePrezime;
  246. int _godiste;
  247. bool _posjedujeOpremu;
  248. vector<Oprema>* _iznajmljenaOprema; //Trenutno iznajmljena oprema
  249. Kolekcija<Uplata, string, 100> _uplate; //Drugi parametar tipa string predstavlja svrhu uplate: trening ili oprema
  250. public:
  251. Ucenik(string imePrezime="-----", int godiste=0, bool posjedujeOpremu = false)
  252. {
  253. //Konstruktor dopuniti po potrebi
  254. _imePrezime = imePrezime;
  255. _godiste = godiste;
  256. _posjedujeOpremu = posjedujeOpremu;
  257. _iznajmljenaOprema = new vector<Oprema>;
  258. }
  259. Ucenik(const Ucenik & obj)
  260. {
  261. _imePrezime = obj._imePrezime;
  262. _godiste = obj._godiste;
  263. _posjedujeOpremu = obj._posjedujeOpremu;
  264. _iznajmljenaOprema = new vector<Oprema>(*obj._iznajmljenaOprema);
  265. _uplate = obj._uplate;
  266. }
  267. Ucenik & operator=(const Ucenik & obj) {
  268. if (this == &obj) return *this;
  269. this->~Ucenik();
  270.  
  271. _imePrezime = obj._imePrezime;
  272. _godiste = obj._godiste;
  273. _posjedujeOpremu = obj._posjedujeOpremu;
  274. _iznajmljenaOprema = new vector<Oprema>(*obj._iznajmljenaOprema);
  275. _uplate = obj._uplate;
  276. }
  277. //Destruktor
  278. ~Ucenik() {
  279. delete _iznajmljenaOprema; _iznajmljenaOprema = nullptr;
  280. }
  281. //Preklopljeni operator+= za evidenciju iznajmljene opreme.
  282. Ucenik & operator+=(Oprema & oprema) {
  283. for (int i = 0; i <_iznajmljenaOprema->size(); i++)
  284. {
  285. if ((*_iznajmljenaOprema)[i] == oprema)
  286. throw exception("Oprema vec dodana za ucenika!");
  287. }
  288. --oprema;
  289. _iznajmljenaOprema->push_back(oprema);
  290. _posjedujeOpremu = true;
  291. return *this;
  292. }
  293. //Preklopljeni operator-= za uklanjanje opreme kada se vrati.
  294. Ucenik & operator-=(Oprema & oprema) {
  295. for (int i = 0; i < _iznajmljenaOprema->size(); i++)
  296. {
  297. if ((*_iznajmljenaOprema)[i] == oprema) {
  298. ++oprema;
  299. _iznajmljenaOprema->erase(_iznajmljenaOprema->begin() + i);
  300. if (_iznajmljenaOprema->size() == 0)
  301. _posjedujeOpremu = false;
  302. return *this;
  303. }
  304. }
  305. throw exception("Oprema nije pronadjena!");
  306. }
  307. //Funkciju za dodavanje uplata.
  308. void DodajUplatu(Uplata & uplata, string svrha) {
  309. if (_uplate.GetTrenutno() == 100)
  310. throw exception("Upravo ste postali nas zlatni clan!");
  311. if (uplata.getIznos() <= 0 || svrha != "trening" || svrha != "oprema")
  312. throw exception("Naznacite pravinu svrhu!");
  313. _uplate.Dodaj(uplata, svrha);
  314. }
  315. bool operator==(const Ucenik & obj) {
  316. if (_imePrezime == obj._imePrezime && _godiste == obj._godiste)
  317. return true;
  318. return false;
  319. }
  320. bool operator<(const Ucenik & obj) {
  321. if (_godiste < obj._godiste)
  322. return true;
  323. return false;
  324. }
  325. string getImePrezime() const { return _imePrezime; }
  326. int getGodiste() const { return _godiste; }
  327. bool posjedujeOpremu() const { return _posjedujeOpremu; }
  328. vector<Oprema>* getIznajmljenaOprema() const { return _iznajmljenaOprema; }
  329. Kolekcija<Uplata, string, 100> & getUplate() { return _uplate; }
  330.  
  331. friend ostream& operator<<(ostream& cout, const Ucenik & obj);
  332. };
  333. ostream& operator<<(ostream& cout, const Ucenik & obj) {
  334. cout << "UCENIK: " << obj._imePrezime << endl;
  335. cout << "Godiste: " << obj._godiste << endl;
  336. cout << "Podjeduje opremu: " <<boolalpha<< obj._posjedujeOpremu << endl;
  337. cout << "Iznajmljena oprema: " << endl;
  338. for (int i = 0; i < obj._iznajmljenaOprema->size(); i++)
  339. {
  340. cout << "\t" << (*obj._iznajmljenaOprema)[i].getNaziv() << " Proizvodjac: " << (*obj._iznajmljenaOprema)[i].getProizvodjac() << endl;
  341. }
  342. cout << "\n";
  343. return cout;
  344. }
  345.  
  346.  
  347. enum TipTreninga { Pocetnicki, Rekreativni, Profesionalni };
  348. string stringTipTreninga[]= { "Pocetnicki", "Rekreativni", "Profesionalni" };
  349.  
  350. class SkiTrener
  351. {
  352. string _imePrezime;
  353. bool _certificiran;
  354. char _spol;
  355. TipTreninga _tipTreninga;
  356. public:
  357. //Osnovne funkcije za rad sa klasom
  358. SkiTrener(string imePrezime = "------", char spol = '/', TipTreninga tip = (TipTreninga)0, bool certifikat = false) {
  359. _imePrezime = imePrezime;
  360. _spol = spol;
  361. _certificiran = certifikat;
  362. _tipTreninga = tip;
  363. }
  364. SkiTrener(const SkiTrener & obj) {
  365. _imePrezime = obj._imePrezime;
  366. _spol = obj._spol;
  367. _certificiran = obj._certificiran;
  368. _tipTreninga = obj._tipTreninga;
  369. }
  370. ~ SkiTrener(){}
  371. SkiTrener& operator=(const SkiTrener & obj) {
  372. if (this == &obj) return *this;
  373. this->~SkiTrener();
  374.  
  375. _imePrezime = obj._imePrezime;
  376. _spol = obj._spol;
  377. _certificiran = obj._certificiran;
  378. _tipTreninga = obj._tipTreninga;
  379. }
  380. string getImePrezime() const { return _imePrezime; }
  381. bool Certifikat() const { return _certificiran; }
  382. char getSpol() const { return _spol; }
  383. TipTreninga getTipTreninga() const { return _tipTreninga; }
  384. bool operator==(const SkiTrener & obj) {
  385. if (_imePrezime == obj._imePrezime && _certificiran == obj._certificiran && _spol == obj._spol && _tipTreninga == obj._tipTreninga)
  386. return true;
  387. return false;
  388. }
  389. bool operator<(const SkiTrener & obj) {
  390. if (stringTipTreninga[_tipTreninga] < stringTipTreninga[obj._tipTreninga])
  391. return true;
  392. return false;
  393. }
  394. friend ostream & operator<<(ostream & cout, const SkiTrener & obj);
  395. };
  396. ostream & operator<<(ostream & cout, const SkiTrener & obj) {
  397. cout << "SKI TRENER: " << obj.getImePrezime() << endl;
  398. cout << "Certificiran: " << boolalpha << obj.Certifikat() << endl;
  399. cout << "Tip treninga: " << stringTipTreninga[obj.getTipTreninga()] << endl;
  400. cout << "\n";
  401. return cout;
  402. }
  403.  
  404. class Trening
  405. {
  406. string* _datum;
  407. SkiTrener* _trener;
  408. vector<Ucenik*> _ucenici;
  409. int _brojCasova;
  410. public:
  411. //Konstruktor i destruktor
  412. Trening(string datum = "------", SkiTrener & trener = SkiTrener(), int brojCasova = 0) {
  413. _datum = new string(datum);
  414. _trener = new SkiTrener(trener);
  415. _brojCasova = brojCasova;
  416. }
  417. Trening(const Trening & obj) {
  418. _datum = new string(*obj._datum);
  419. _trener = new SkiTrener(*obj._trener);
  420. _brojCasova = obj._brojCasova;
  421. for (int i = 0; i < obj._ucenici.size(); i++)
  422. {
  423. _ucenici.push_back(new Ucenik(*obj._ucenici[i]));
  424. }
  425. }
  426. ~Trening() {
  427. delete _datum; _datum = nullptr;
  428. delete _trener; _trener = nullptr;
  429. for (int i = 0; i < _ucenici.size(); i++)
  430. {
  431. delete _ucenici[i]; _ucenici[i] = nullptr;
  432. }
  433. _ucenici.clear();
  434. }
  435. Trening & operator=(const Trening & obj) {
  436. if (this == &obj) return *this;
  437. this->~Trening();
  438.  
  439. _datum = new string(*obj._datum);
  440. _trener = new SkiTrener(*obj._trener);
  441. _brojCasova = obj._brojCasova;
  442. for (int i = 0; i < obj._ucenici.size(); i++)
  443. {
  444. _ucenici.push_back(new Ucenik(*obj._ucenici[i]));
  445. }
  446. }
  447. //Operator += za dodavanje ucenika na trening.
  448. Trening & operator+=(Ucenik & ucenik) {
  449. vector<Ucenik*>::iterator it = _ucenici.begin();
  450. for (it; it != _ucenici.end(); it++)
  451. {
  452. if (**it == ucenik)
  453. throw exception("Ucenik vec dodan na trening!");
  454. }
  455. _ucenici.push_back(new Ucenik(ucenik));
  456. sort(_ucenici.begin(), _ucenici.end());
  457. }
  458. bool operator==(const Trening & obj) {
  459. if (*_datum == *obj._datum)
  460. return true;
  461. return false;
  462. }
  463. bool operator<(const Trening & obj) {
  464. if (_brojCasova < obj._brojCasova)
  465. return true;
  466. return false;
  467. }
  468. int getBrojCasova() const { return _brojCasova; }
  469. string * getDatum() const { return _datum; }
  470. SkiTrener * getTrener() const { return _trener; }
  471. vector<Ucenik*> & getUcenici() { return _ucenici; }
  472. TipTreninga getTipTreninga() { return _trener->getTipTreninga(); }
  473. //Operator za ispis.
  474. friend ostream& operator<<(ostream & cout, const Trening & obj);
  475. };
  476. ostream& operator<<(ostream & cout, const Trening & obj) {
  477. cout << "TRENING -----" << endl;
  478. cout << "Datum odrzavanja: " << *obj._datum << endl;
  479. cout << "Trener: " << obj._trener->getImePrezime() << " - " <<stringTipTreninga[obj._trener->getTipTreninga()] << endl;
  480. cout << "Ucenici: " << endl;
  481. for (int i = 0; i < obj._ucenici.size(); i++)
  482. {
  483. cout <<"\t"<< obj._ucenici[i]->getImePrezime() << " " << obj._ucenici[i]->getGodiste() << endl;
  484. }
  485. cout << "\n";
  486. return cout;
  487. }
  488.  
  489. class SkiKurs {
  490. string _periodOdrzavanja;
  491. vector<SkiTrener> _treneri;
  492. vector<Ucenik> _polaznici;
  493. vector<Trening> _treninzi;
  494. public:
  495. //Konstruktor
  496. SkiKurs(string datum = "------"){_periodOdrzavanja = datum; }
  497. //Funkciju za dodavanje trenera (bez dupliranja elemenata).
  498. void DodajTrenera(SkiTrener & trener) {
  499. vector<SkiTrener>::iterator it = _treneri.begin();
  500. for (it; it != _treneri.end(); it++)
  501. {
  502. if (*it == trener)
  503. throw exception("Trener vec dodan na SkiKurs!");
  504. }
  505. _treneri.push_back(trener);
  506. }
  507. //Funkciju za dodavanje polaznika (bez dupliranja elemenata).
  508. void DodajPolaznika(Ucenik & ucenik) {
  509. vector<Ucenik>::iterator it = _polaznici.begin();
  510. for (it; it != _polaznici.end(); it++)
  511. {
  512. if (*it == ucenik)
  513. throw exception("Ucenik vec dodan na SkiKurs!");
  514. }
  515. _polaznici.push_back(ucenik);
  516. }
  517. //Funkciju za dodavanje odrzanih treninga.
  518. void DodajTrening(Trening & trening) {
  519. vector<Trening>::iterator it = _treninzi.begin();
  520. for (it; it != _treninzi.end(); it++)
  521. {
  522. if (*it == trening)
  523. throw exception("Trening vec dodan");
  524. }
  525. _treninzi.push_back(trening);
  526. }
  527. //Funkciju za dodavanje uplate uceniku za odredjeni trening (dakle, funkcija prima 3 parametra: uplata, ucenik, trening).
  528. //Prvenstveno je potrebno provjeriti da li je ucenik uopste evidentiran na datom treningu.
  529. //Cijena jednog casa zavisi od tipa treninga na kojem je ucenik bio:
  530. //Pocetnicki - 10KM
  531. //Rekreativni - 15KM
  532. //Profesionalni - 20KM
  533. //Uplata treba da bude tacnog iznosa proracunatog na osnovu prethodne kategorizacije i broja casova odrzanog treninga.
  534. //U svim slucajevima kada je neko od ogranicenja naruseno, baciti izuzetak.
  535. void DodajUplatu(Ucenik & ucenik, Trening & trening, Uplata & uplata, string svrha) {
  536. for (int i = 0; i < _treninzi.size(); i++)
  537. {
  538. for (int j = 0; j < _treninzi[i].getUcenici().size(); j++)
  539. {
  540. if (*_treninzi[i].getUcenici()[j] == ucenik) {
  541. if (svrha == "oprema") {
  542. int size = _treninzi[i].getUcenici()[j]->getIznajmljenaOprema()->size();
  543. bool uplaceno = false;
  544. for (int k = 0; k < size; k++)
  545. {
  546. Oprema * oprema = &(*_treninzi[i].getUcenici()[j]->getIznajmljenaOprema())[k];
  547. if (oprema->getCijena() >= uplata.getIznos()) {
  548. _treninzi[i].getUcenici()[j]->DodajUplatu(uplata, svrha);
  549. uplaceno = true;
  550. return;
  551. }
  552. }
  553. if (!uplaceno) {
  554. throw exception("Niste uplatili!");
  555. return;
  556. }
  557. }
  558. else
  559. {
  560. if (trening.getTipTreninga() == Pocetnicki) {
  561. if (uplata.getIznos() == trening.getBrojCasova() * 10) {
  562. _treninzi[i].getUcenici()[j]->DodajUplatu(uplata, svrha);
  563. return;
  564. }
  565. else {
  566. throw exception("Niste uplatili dovoljno novca!");
  567. }
  568. }
  569. else if(trening.getTipTreninga()==Rekreativni)
  570. {
  571. if (uplata.getIznos() == trening.getBrojCasova() * 15) {
  572. _treninzi[i].getUcenici()[j]->DodajUplatu(uplata, svrha);
  573. return;
  574. }
  575. else {
  576. throw exception("Niste uplatili dovoljno novca!");
  577. }
  578. }
  579. else
  580. {
  581. if (uplata.getIznos() == trening.getBrojCasova() * 20) {
  582. _treninzi[i].getUcenici()[j]->DodajUplatu(uplata, svrha);
  583. return;
  584. }
  585. else {
  586. throw exception("Niste uplatili dovoljno novca!");
  587. }
  588. }
  589. }
  590. }
  591. throw exception("Nepoznat ucenik koji je zaprimljen kao parametar!");
  592. }
  593. }
  594.  
  595. }
  596. //Funkciju koja pronalazi ski trenera sa najvecim brojem odrzanih casova i ispisuje njegov ostvareni profit.
  597. SkiTrener & TrenerSaNajvecimBrojemCasova() {
  598. struct Trener
  599. {
  600. string imePrezime;
  601. int brojCasova;
  602. };
  603.  
  604. int size = _treneri.size();
  605. Trener * niz = new Trener[size];
  606.  
  607. for (int i = 0; i < size; i++)
  608. {
  609. niz[i].imePrezime = _treneri[i].getImePrezime();
  610. niz[i].brojCasova = 0;
  611. }
  612. for (int i = 0; i < _treninzi.size(); i++)
  613. {
  614. for (int j = 0; j < size; j++)
  615. {
  616. if (_treninzi[i].getTrener()->getImePrezime() == niz[j].imePrezime)
  617. niz[j].brojCasova += _treninzi[i].getBrojCasova();
  618. }
  619. }
  620. int maxCasova = niz[0].brojCasova;
  621. int index = 0;
  622.  
  623. for (int i = 0; i < size; i++)
  624. {
  625. if (niz[i].brojCasova > maxCasova) {
  626. maxCasova = niz[i].brojCasova;
  627. index = i;
  628. }
  629. }
  630.  
  631. for (int i = 0; i < _treninzi.size(); i++)
  632. {
  633. if (_treninzi[i].getTrener()->getImePrezime() == niz[index].imePrezime) {
  634. cout << "Ukupno casova: " << maxCasova << endl;
  635. cout << "Ukupna zarada: ";
  636. if (_treninzi[i].getTipTreninga() == Pocetnicki)
  637. cout << _treninzi[i].getBrojCasova() * 10 << " KM." << endl;
  638. else if (_treninzi[i].getTipTreninga() == Rekreativni)
  639. cout << _treninzi[i].getBrojCasova() * 15 << " KM." << endl;
  640. else
  641. cout << _treninzi[i].getBrojCasova() * 20 << " KM." << endl;
  642. return *_treninzi[i].getTrener();
  643. }
  644. }
  645. }
  646. //Funkciju koja pronalazi ucenika od kojeg je ostvarena najveca zarada, ukljucujuci uplate za iznajmljenu opremu.
  647.  
  648. //Funkciju koja sortira podatke o kompletnom kursu. Podaci trebaju biti sortirani na sljedeci nacin:
  649. //- treneri prema kategoriji
  650. //- treninzi prema broju ucenika koji su prisustvovali
  651. //- polaznici prema godistu.
  652. //Ovu funkciju je potrebno pozvati kreiranjem posebnog thread-a.
  653. void SortirajPodatke() {
  654. sort(_treneri.begin(), _treneri.end());
  655. sort(_treninzi.begin(), _treninzi.end());
  656. sort(_polaznici.begin(), _polaznici.end());
  657. }
  658. //Funkciju koja vrsi ispis svih podataka po kategorijama i sortirano u skladu sa zahtijevima
  659. friend ostream& operator<<(ostream & cout, const SkiKurs & obj);
  660. };
  661. ostream& operator<<(ostream & cout, const SkiKurs & obj) {
  662. cout << "\t:::::S K I K U R S:::::" << endl;
  663. cout << "\t\tDatum: " << obj._periodOdrzavanja << endl;
  664. cout << "\TRENERI" << endl;
  665. for (int i = 0; i < obj._treneri.size(); i++)
  666. {
  667. cout << "\t" << obj._treneri[i].getImePrezime() << " " <<stringTipTreninga[obj._treneri[i].getTipTreninga()] << endl;
  668. }
  669. cout << "\POLAZNICI" << endl;
  670. for (int i = 0; i < obj._polaznici.size(); i++)
  671. {
  672. cout << "\t" << obj._polaznici[i].getImePrezime() << " " <<obj._polaznici[i].getGodiste()<< endl;
  673. }
  674. cout << "\TRENINZI" << endl;
  675. for (int i = 0; i < obj._treninzi.size(); i++)
  676. {
  677. cout << "\t" << *obj._treninzi[i].getDatum() <<" Trener: "<< obj._treninzi[i].getTrener()->getImePrezime() <<" Broj ucenika: "<<obj._treninzi[i].getBrojCasova()<< endl;
  678. }
  679. cout << "\n";
  680. return cout;
  681. }
  682.  
  683.  
  684. int main() {
  685.  
  686. #pragma region Oprema
  687. Oprema pancerice("Pancerice", "Nordica", 120, 6);
  688. Oprema muska_jakna("Muska skijaska jakna", "Colmar", 230, 6);
  689. Oprema zenska_jakna("Zenska skijaska jakna", "Colmar", 230, 7);
  690. Oprema torba("Torba za pancerice", "Tecno", 15, 10);
  691. Oprema naocale("Skijaske naocale", "McKinley", 25, 15);
  692. Oprema kaciga("Kaciga za skijanje", "Rsssignol", 45, 4);
  693.  
  694. #pragma endregion
  695.  
  696. #pragma region SkiTreneri
  697. SkiTrener mirnes("Mirnes Cerimovic", 'M', Pocetnicki, true);
  698. SkiTrener adnan("Adnan Pasic", 'M', Rekreativni, true);
  699. SkiTrener eldin("Eldin Husic", 'M', Profesionalni, true);
  700.  
  701. #pragma endregion
  702.  
  703. #pragma region Ucenici
  704. Ucenik nisvet("Nisvet Mujkic", 1996);
  705. nisvet += pancerice;
  706. nisvet += kaciga;
  707. Ucenik eman("Eman Basic", 1997);
  708. eman += naocale;
  709. Ucenik mirza("Mirza Muratovic", 1995);
  710. mirza += muska_jakna;
  711. Ucenik faruk("Faruk Mujkic", 1994);
  712. faruk += kaciga;
  713. Ucenik adem("Adem Mujkic", 2000);
  714. adem += torba;
  715. Ucenik ishak("Ishak Ishakovic", 1993);
  716. ishak += pancerice;
  717.  
  718.  
  719. #pragma endregion
  720.  
  721. #pragma region Treninzi
  722. Trening trening_1("13.01.2017", mirnes, 3);
  723.  
  724. trening_1 += nisvet;
  725. trening_1 += eman;
  726.  
  727. Trening trening_2("15.01.2017", mirnes, 5);
  728. trening_2 += faruk;
  729. trening_2 += adem;
  730. trening_2 += nisvet;
  731. trening_2 += mirza;
  732. trening_2 += ishak;
  733.  
  734. Trening trening_3("17.01.2017", adnan, 9);
  735. trening_3 += mirza;
  736. trening_3 += nisvet;
  737. trening_3 += eman;
  738. trening_3 += adem;
  739.  
  740.  
  741. Uplata oprema_nm("09.01.2017", 120); // mora platiti 120 KM jer je to cijena pancerica, sve ispod baca izuzetak
  742. Uplata uplata_1("10.01.2017", 30);
  743. Uplata uplata_2("11.01.2017", 50);
  744. Uplata uplata_3("12.01.2017", 135);
  745. Uplata oprema_NM("17.01.2017", 45);
  746. #pragma endregion
  747.  
  748. SkiKurs SnowAdventure("01.01.2017 - 31.01.2017");
  749.  
  750. #pragma region Add_PolaznikaTreningaUplataTrenera
  751. SnowAdventure.DodajPolaznika(nisvet);
  752. SnowAdventure.DodajPolaznika(adem);
  753. SnowAdventure.DodajPolaznika(faruk);
  754. SnowAdventure.DodajPolaznika(mirza);
  755. SnowAdventure.DodajPolaznika(eman);
  756. SnowAdventure.DodajPolaznika(ishak);
  757.  
  758.  
  759. SnowAdventure.DodajTrening(trening_1);
  760. SnowAdventure.DodajTrening(trening_2);
  761. SnowAdventure.DodajTrening(trening_3);
  762. /*In next step when i remove try catch run time error appear.*/
  763. try
  764. {
  765. SnowAdventure.DodajUplatu(nisvet, trening_1, uplata_1, "trening");
  766. SnowAdventure.DodajUplatu(nisvet, trening_2, uplata_2, "trening");
  767. SnowAdventure.DodajUplatu(nisvet, trening_3, uplata_3, "trening");
  768. SnowAdventure.DodajUplatu(nisvet, trening_1, oprema_nm, "oprema");
  769. SnowAdventure.DodajUplatu(nisvet, trening_3, oprema_NM, "oprema");
  770.  
  771. }
  772. catch (const std::exception& obj)
  773. {
  774. obj.what();
  775. }
  776.  
  777.  
  778. SnowAdventure.DodajTrenera(mirnes);
  779. SnowAdventure.DodajTrenera(adnan);
  780. SnowAdventure.DodajTrenera(eldin);
  781. SnowAdventure.SortirajPodatke();
  782. cout << SnowAdventure << endl;
  783.  
  784.  
  785. #pragma endregion
  786. //
  787. // thread thread_1(&SkiKurs::SortirajPodatke, SnowAdventure);
  788. // SnowAdventure.SortirajPodatke();
  789. // thread_1.join();
  790. //
  791. // SnowAdventure.IspisPodatakaPoKategorijama();
  792. //
  793. // cout << "\t:::Ucenik koji je uplatio najvise novca:::\n";
  794. // Ucenik ucenik = SnowAdventure.UcenikKojiJeDaoNajviseNovca();
  795. //
  796. // cout << ucenik << crt;
  797.  
  798. cout << "\t:::Trener koji je odrzao najvise casova i pri tom najvise zaradio:::\n";
  799.  
  800. SkiTrener trener = SnowAdventure.TrenerSaNajvecimBrojemCasova();
  801.  
  802. cout << trener << endl;
  803. return 0;
  804. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement