Advertisement
Guest User

Untitled

a guest
Nov 13th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.28 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #pragma warning(disable:4996)
  5. const char *crt = "\n-------------------------------------------\n";
  6. enum eRazred { PRVI = 1, DRUGI, TRECI, CETVRTI };
  7. const char* razred[] = { "Prvi", "Drugi", "Treci", "Cetvrti" };
  8. const float minimalan_prosjek = 4.5;
  9.  
  10. char * AlocirajNizKaraktera(const char * sadrzaj) {
  11. if (sadrzaj == nullptr)
  12. return nullptr;
  13. int vel = strlen(sadrzaj) + 1;
  14. char * temp = new char[vel];
  15. strcpy_s(temp, vel, sadrzaj);
  16. return temp;
  17. }
  18.  
  19. template<class T1, class T2>
  20. class Kolekcija {
  21. T1 * _elementi1;
  22. T2 * _elementi2;
  23. int _trenutno;
  24. public:
  25. Kolekcija() {
  26. _elementi1 = nullptr;
  27. _elementi2 = nullptr;
  28. _trenutno = 0;
  29. }
  30.  
  31. Kolekcija(Kolekcija &temp) {
  32. _trenutno = temp._trenutno;
  33. _elementi1 = new T1[_trenutno];
  34. _elementi2 = new T2[_trenutno];
  35. for (int i = 0; i < _trenutno; i++) {
  36. _elementi1[i] = temp._elementi1[i];
  37. _elementi2[i] = temp._elementi2[i];
  38. }
  39. }
  40.  
  41. Kolekcija& operator=(Kolekcija &temp) {
  42. if (this != &temp) {
  43. _trenutno = temp._trenutno;
  44. if (_elementi1 != nullptr) delete[] _elementi1;
  45. if (_elementi2 != nullptr) delete[] _elementi2;
  46. _elementi1 = new T1[_trenutno];
  47. _elementi2 = new T2[_trenutno];
  48. for (int i = 0; i < _trenutno; i++) {
  49. _elementi1[i] = temp._elementi1[i];
  50. _elementi2[i] = temp._elementi2[i];
  51. }
  52. }
  53. return *this;
  54. }
  55.  
  56. ~Kolekcija() {
  57. delete[]_elementi1; _elementi1 = nullptr;
  58. delete[]_elementi2; _elementi2 = nullptr;
  59.  
  60. }
  61.  
  62. void AddElement(T1 first, T2 second) {
  63. T1 *tempElementi1 = new T1[_trenutno + 1];
  64. T2 *tempElementi2 = new T2[_trenutno + 1];
  65.  
  66. for (int i = 0; i < _trenutno; i++) {
  67. tempElementi1[i] = _elementi1[i];
  68. tempElementi2[i] = _elementi2[i];
  69. }
  70.  
  71. tempElementi1[_trenutno] = first;
  72. tempElementi2[_trenutno] = second;
  73. _trenutno++;
  74.  
  75. delete[] _elementi1;
  76. delete[] _elementi2;
  77.  
  78. _elementi1 = tempElementi1;
  79. _elementi2 = tempElementi2;
  80. }
  81.  
  82.  
  83. void SortOpadajuciByT2() {
  84. for (int i = 0; i < _trenutno - 1; i++) {
  85. int minIndex = i;
  86. for (int j = i + 1; j < _trenutno; j++)
  87. if (_elementi2[minIndex] < _elementi2[j])
  88. minIndex = j;
  89.  
  90. if (minIndex != i) {
  91. T1 temp = _elementi1[minIndex];
  92. _elementi1[minIndex] = _elementi1[i];
  93. _elementi1[i] = temp;
  94.  
  95. T2 temp2 = _elementi2[minIndex];
  96. _elementi2[minIndex] = _elementi2[i];
  97. _elementi2[i] = temp2;
  98. }
  99. }
  100. }
  101.  
  102. T1& getElement1(int lokacija) { return _elementi1[lokacija]; }
  103. T2& getElement2(int lokacija) { return _elementi2[lokacija]; }
  104. int getTrenutno() { return _trenutno; }
  105. friend ostream& operator<< (ostream &COUT, Kolekcija &obj) {
  106. for (size_t i = 0; i < obj._trenutno; i++)
  107. COUT << obj.getElement1(i) << " " << obj.getElement2(i) << endl;
  108. return COUT;
  109. }
  110. };
  111.  
  112. class DatumVrijeme {
  113. int *_dan, *_mjesec, *_godina, *_sati, *_minuti;
  114. public:
  115. DatumVrijeme(int dan = 1, int mjesec = 1, int godina = 2000, int sati = 0, int minuti = 0) {
  116. _dan = new int(dan);
  117. _mjesec = new int(mjesec);
  118. _godina = new int(godina);
  119. _sati = new int(sati);
  120. _minuti = new int(minuti);
  121. }
  122.  
  123. DatumVrijeme(DatumVrijeme &temp) {
  124. cout << "ulaz u konst kopije za datum" << endl;
  125. _dan = new int(*temp._dan);
  126. cout << "dan" << endl;
  127. _mjesec = new int(*temp._mjesec);
  128. cout << "mjesec" << endl;
  129. _godina = new int(*temp._godina);
  130. cout << "godina" << endl;
  131. _sati = new int(*temp._sati);
  132. cout << "sati" << endl;
  133. _minuti = new int(*temp._minuti);
  134. cout << "minuti" << endl;
  135.  
  136. cout << "KonstruktorKopijeDatum" << endl;
  137.  
  138. }
  139.  
  140. DatumVrijeme& operator=(DatumVrijeme &temp) {
  141. if (this != &temp) {
  142. *_dan = *temp._dan;
  143. *_mjesec = *temp._mjesec;
  144. *_godina = *temp._godina;
  145. *_sati = *temp._sati;
  146. *_minuti = *temp._minuti;
  147. }
  148. return *this;
  149. }
  150.  
  151. ~DatumVrijeme() {
  152. cout << "datum pocetak" << endl;
  153. delete _dan; _dan = nullptr;
  154. delete _mjesec; _mjesec = nullptr;
  155. delete _godina; _godina = nullptr;
  156. delete _sati; _sati = nullptr;
  157. delete _minuti; _minuti = nullptr;
  158. cout << "datum kraj" << endl;
  159. }
  160. friend ostream& operator<< (ostream &COUT, DatumVrijeme &obj) {
  161. COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << " " << *obj._sati << ":" << *obj._minuti << endl;
  162. return COUT;
  163. }
  164. };
  165.  
  166. class Predmet {
  167. char * _naziv;
  168. int _ocjena;
  169. char* _napomena;
  170. public:
  171. Predmet(const char * naziv, int ocjena, const char* napomena = "") :_ocjena(ocjena) {
  172. _naziv = AlocirajNizKaraktera(naziv);
  173. _napomena = AlocirajNizKaraktera(napomena);
  174. }
  175.  
  176. Predmet(Predmet &temp) : _ocjena(temp._ocjena) {
  177. _naziv = new char(strlen(temp._naziv) + 1);
  178. strcpy(_naziv, temp._naziv);
  179.  
  180. _napomena = new char(strlen(temp._napomena) + 1);
  181. strcpy(_napomena, temp._napomena);
  182. cout << "KonstruktorKopijePredmet" << endl;
  183.  
  184. }
  185.  
  186. Predmet& operator=(Predmet &temp) {
  187. if (this != &temp) {
  188.  
  189. delete[] _naziv;
  190. delete[] _napomena;
  191.  
  192. _naziv = new char(strlen(temp._naziv) + 1);
  193. strcpy(_naziv, temp._naziv);
  194.  
  195. _napomena = new char(strlen(temp._napomena) + 1);
  196. strcpy(_napomena, temp._napomena);
  197.  
  198. _ocjena = temp._ocjena;
  199. }
  200.  
  201. return *this;
  202. }
  203.  
  204. ~Predmet() {
  205. delete[] _naziv; _naziv = nullptr;
  206. if (_napomena != nullptr) delete[] _napomena;
  207. }
  208.  
  209. friend ostream& operator<< (ostream &COUT, Predmet &obj) {
  210. COUT << obj._naziv << " (" << obj._ocjena << ") " << obj._napomena << endl;
  211. return COUT;
  212. }
  213. char * GetNaziv() { return _naziv; }
  214. char* GetNapomena() { return _napomena; }
  215.  
  216. friend bool operator==(Predmet &first, Predmet& second) { //testiraj da li su dva predmeta jednaka po nazivu
  217. return !(strcmp(first.GetNaziv(), second.GetNaziv()));
  218. }
  219.  
  220. //Format napomena: napomena1; napomena2; napomena3;
  221. void DodajNapomenu(const char* napomena) {
  222. char *novaNapomena = new char[strlen(_napomena) + strlen(napomena) + 3];
  223. strcpy(novaNapomena, _napomena);
  224. strcat(novaNapomena, napomena);
  225. strcat(novaNapomena, "; ");
  226.  
  227. delete[] _napomena;
  228. _napomena = novaNapomena;
  229. }
  230.  
  231. };
  232. struct Uspjeh {
  233. eRazred _razred;
  234. //datumvrijeme se odnosi na vrijeme evidentiranja polozenog predmeta
  235. Kolekcija<Predmet*, DatumVrijeme> * _predmeti;
  236. public:
  237. Uspjeh() : _predmeti(new Kolekcija<Predmet*, DatumVrijeme>) {};
  238.  
  239. Uspjeh(eRazred razred) :_razred(razred), _predmeti(new Kolekcija<Predmet*, DatumVrijeme>()) {}
  240.  
  241. Uspjeh(Uspjeh &temp) : _razred(temp._razred), _predmeti(nullptr) {
  242. if (temp._predmeti != nullptr) {
  243. _predmeti = new Kolekcija<Predmet*, DatumVrijeme>();
  244. for (int i = 0; i < temp._predmeti->getTrenutno(); i++)
  245. _predmeti->AddElement(new Predmet(*temp._predmeti->getElement1(i)), temp._predmeti->getElement2(i));
  246. }
  247. }
  248.  
  249. Uspjeh& operator=(Uspjeh &temp) {
  250. if (this != &temp) {
  251. if(_predmeti != nullptr)
  252. for (int i = 0; i < _predmeti->getTrenutno(); i++)
  253. delete _predmeti->getElement1(i);
  254.  
  255. _razred = temp._razred;
  256. if (temp._predmeti != nullptr) {
  257. if (_predmeti == nullptr)
  258. _predmeti = new Kolekcija<Predmet*, DatumVrijeme>;
  259. for (int i = 0; i < temp._predmeti->getTrenutno(); i++)
  260. _predmeti->AddElement(new Predmet(*temp._predmeti->getElement1(i)), temp._predmeti->getElement2(i));
  261. }
  262. }
  263. return *this;
  264. }
  265.  
  266. ~Uspjeh() {
  267. for (size_t i = 0; i < _predmeti->getTrenutno(); i++)
  268. delete _predmeti->getElement1(i);
  269. delete _predmeti; _predmeti = nullptr;
  270. }
  271.  
  272. void DodajPredmet(Predmet &tempPredmet, DatumVrijeme &tempDatumVrijeme) {
  273. cout << "DodajPredmet" << endl;
  274. _predmeti->AddElement(new Predmet(tempPredmet), tempDatumVrijeme);
  275. }
  276.  
  277. eRazred GetRazred() { return _razred; }
  278. Kolekcija<Predmet*, DatumVrijeme> * GetPredmeti() { return _predmeti; }
  279.  
  280. friend ostream& operator<< (ostream &COUT, const Uspjeh &obj) {
  281. COUT << razred[obj._razred - 1] << *obj._predmeti << endl;
  282. return COUT;
  283. }
  284. };
  285.  
  286. class Kandidat {
  287. char * _imePrezime;
  288. char* _brojTelefona;
  289. int _trenutno;
  290. Uspjeh * _uspjeh;
  291. public:
  292.  
  293. Kandidat(char * imePrezime, char* brojTelefona) :_trenutno(0), _uspjeh(nullptr) {
  294. _imePrezime = AlocirajNizKaraktera(imePrezime);
  295. _brojTelefona = AlocirajNizKaraktera(brojTelefona);
  296. }
  297.  
  298. Kandidat(const char * imePrezime, const char* brojTelefona) :_trenutno(0), _uspjeh(nullptr) {
  299. _imePrezime = AlocirajNizKaraktera(imePrezime);
  300. _brojTelefona = AlocirajNizKaraktera(brojTelefona);
  301. }
  302.  
  303. Kandidat(Kandidat &temp) : _trenutno(temp._trenutno) {
  304. _imePrezime = AlocirajNizKaraktera(temp._imePrezime);
  305. _brojTelefona = AlocirajNizKaraktera(temp._brojTelefona);
  306.  
  307. _uspjeh = new Uspjeh[temp._trenutno];
  308.  
  309. for (int i = 0; i < temp._trenutno; i++)
  310. _uspjeh[i] = temp._uspjeh[i];
  311. }
  312.  
  313. Kandidat& operator=(Kandidat &temp) {
  314. delete[] _imePrezime;
  315. delete[] _brojTelefona;
  316. delete[] _uspjeh;
  317.  
  318. _trenutno = temp._trenutno;
  319. _uspjeh = new Uspjeh[_trenutno];
  320. for (size_t i = 0; i < _trenutno; i++)
  321. _uspjeh[i] = temp._uspjeh[i];
  322.  
  323. return *this;
  324. }
  325.  
  326. void DodajUspjeh(eRazred tempRazred) {
  327. bool postojiRazred = false;
  328. for (size_t i = 0; i < _trenutno; i++)
  329. if (_uspjeh[i].GetRazred() == tempRazred)
  330. postojiRazred = true;
  331.  
  332. if (!postojiRazred) {
  333. Uspjeh *tempUspjeh = new Uspjeh[_trenutno + 1];
  334. for (int i = 0; i < _trenutno; i++)
  335. tempUspjeh[i] = _uspjeh[i];
  336.  
  337. Uspjeh noviUspjeh(tempRazred);
  338. tempUspjeh[_trenutno] = noviUspjeh;
  339. _trenutno++;
  340.  
  341. delete[] _uspjeh;
  342. _uspjeh = tempUspjeh;
  343. }
  344. }
  345.  
  346. bool AddPredmet(eRazred tempRazred, Predmet &noviPredmet, DatumVrijeme &tempDatum) {
  347. DodajUspjeh(tempRazred);
  348.  
  349. int index = (-1);
  350. for (int i = 0; i < _trenutno; i++)
  351. if (_uspjeh[i].GetRazred() == tempRazred)
  352. index = i;
  353.  
  354. /*
  355. if (_uspjeh[index].GetPredmeti()->getTrenutno() == 6) return false; //vise od 6 ne moze
  356.  
  357.  
  358. if(_uspjeh[index].GetPredmeti() != nullptr)
  359. for (int i = 0; i < _uspjeh[index].GetPredmeti()->getTrenutno(); i++) {//prodi kroz svaki predmet
  360. Predmet *trenutniPredmet = _uspjeh[index].GetPredmeti()->getElement1(i);
  361. if (*trenutniPredmet == noviPredmet) return false;
  362. }
  363. */
  364.  
  365. _uspjeh[index].DodajPredmet(noviPredmet, tempDatum);
  366.  
  367.  
  368. return true;
  369. }
  370.  
  371. ~Kandidat() {
  372. delete[] _imePrezime; _imePrezime = nullptr;
  373. delete[] _uspjeh;
  374. }
  375.  
  376. friend ostream& operator<< (ostream &COUT, Kandidat &obj) {
  377. COUT << obj._imePrezime << " " << obj._brojTelefona << endl;
  378. for (size_t i = 0; i < obj._trenutno; i++)
  379. COUT << obj._uspjeh[i] << endl;
  380. return COUT;
  381. }
  382. Uspjeh * GetUspjeh() { return _uspjeh; }
  383.  
  384. };
  385.  
  386. void main() {
  387. /****************************************************************************
  388. 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  389. 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  390. 3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URAÐENOG ZADATKA
  391. 4. PROGRAMSKI CODE SE TAKOÐER NALAZI U FAJLU CODE.TXT
  392. 5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTICNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUCAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOCNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  393. 6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNACENO.
  394. ****************************************************************************/
  395.  
  396. DatumVrijeme temp,
  397. datum19062018_1015(19, 6, 2018, 10, 15),
  398. datum20062018_1115(20, 6, 2018, 11, 15),
  399. datum30062018_1215(30, 6, 2018, 12, 15),
  400. datum05072018_1231(5, 7, 2018, 12, 31),
  401. datum20062018_1115_Copy(datum20062018_1115);
  402. cout << datum20062018_1115;
  403.  
  404.  
  405. //const int kolekcijaTestSize = 10;
  406. //Kolekcija<int, int> kolekcija1;
  407. //for (size_t i = 0; i < kolekcijaTestSize; i++)
  408. // kolekcija1.AddElement(i + 1, i * i);
  409. //cout << kolekcija1 << endl;
  410.  
  411. //Kolekcija<int, int> kolekcija2 = kolekcija1;
  412. //cout << kolekcija2 << crt;
  413. //Kolekcija<int, int> kolekcija3;
  414. //kolekcija3 = kolekcija1;
  415. //kolekcija3.SortOpadajuciByT2(); //od najvece prema najmanjoj vrijednosti
  416. //cout << kolekcija3 << crt;
  417.  
  418.  
  419. ////napomena se moze dodati i prilikom kreiranja objekta
  420. Predmet Matematika("Matematika", 5, "Ucesce na takmicenju"), Fizika("Fizika", 5), Hemija("Hemija", 2), Engleski("Engleski", 5);
  421. Fizika.DodajNapomenu("Pohvala za ostvareni uspjeh"); // dodaje novu napomenu
  422. Fizika.DodajNapomenu("Pohvala za uspjeh na takmicenju!");
  423. cout << Fizika << endl;
  424. cout << Matematika << endl;
  425.  
  426. Kandidat jasmin("Jasmin Azemovic", "033 281 172");
  427. Kandidat adel("Adel Handzic", "033 281 170");
  428.  
  429. cout << "proslo 1" << endl;
  430.  
  431. /*
  432. uspjeh (tokom srednjoskolskog obrazovanja) se dodaje za svaki predmet na nivou razreda.
  433. tom prilikom onemoguciti:
  434. - dodavanje vise od 6 predmeta za jedan razred
  435. - dodavanje istoimenih predmeta na nivou jednog razreda,
  436. razredi (predmeti ili uspjeh) ne moraju biti dodavani sortiranim redoslijedom (npr. prvo se moze dodati uspjeh za II
  437. razred, pa onda za I razred i sl.). Funkcija vraca true ili false u zavisnosti od (ne)uspjesnost izvrsenja
  438. */
  439.  
  440.  
  441. if (jasmin.AddPredmet(DRUGI, Fizika, datum20062018_1115))
  442. cout << "Predmet uspjesno dodan!" << crt;
  443. else
  444. cout << "Fizika nije uspjesno dodana!" << endl;
  445.  
  446.  
  447.  
  448. /*if (jasmin.AddPredmet(DRUGI, Hemija, datum30062018_1215))
  449. cout << "Predmet uspjesno dodan!" << crt;
  450. else
  451. cout << "predmet nije uspjesno dodan" << endl;*/
  452. //cout << "vani" << endl;
  453.  
  454. //cout << "proslo 2" << endl;
  455. //
  456. //
  457. //if (jasmin.AddPredmet(PRVI, Engleski, datum19062018_1015))
  458. // cout << "Predmet uspjesno dodan!" << crt;
  459.  
  460. //cout << "proslo 3" << endl;
  461.  
  462. //if (jasmin.AddPredmet(PRVI, Matematika, datum20062018_1115))
  463. // cout << "Predmet uspjesno dodan!" << crt;
  464.  
  465. //cout << "proslo 4" << endl;
  466.  
  467. ////ne treba dodati Matematiku jer je vec dodana u prvom razredu
  468. //if (jasmin.AddPredmet(PRVI, Matematika, datum05072018_1231))
  469. // cout << "Predmet uspjesno dodan!" << crt;
  470.  
  471. //cout << "proslo 5" << endl;
  472.  
  473. //if (jasmin.AddPredmet(PRVI, Fizika, datum20062018_1115_Copy))
  474. // cout << "Predmet uspjesno dodan!" << crt;
  475. //
  476. //cout << "proslo 6" << endl;
  477. //
  478.  
  479. ///*pretpostavka je da na nivou jednog razreda kandidati imaju 6 predmeta.
  480. //upravo zbog toga, nakon evidentiranja 6 predmeta na nivou jednog razreda kandidatu se evidentira uspjeh za odredjeni razred
  481. //*/
  482.  
  483. ///*
  484. //Uspjeh * u = jasmin(PRVI);//vraca uspjeh kandidata ostvaren u prvom razredu
  485. //if (u != nullptr)
  486. // cout << *u << endl;
  487. //*/
  488.  
  489. system("pause");
  490. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement