Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.51 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. char * AlocirajNizKaraktera(const char * sadrzaj) {
  5. if (sadrzaj == nullptr)
  6. return nullptr;
  7. int vel = strlen(sadrzaj) + 1;
  8. char * temp = new char[vel];
  9. strcpy_s(temp, vel, sadrzaj);
  10. return temp;
  11. }
  12.  
  13. template<class T, int max>
  14. class Kolekcija
  15. {
  16. T* _elementi[max];
  17. int _trenutnoElemenata;
  18. public:
  19. //Implementirati potrebne funkcije za rad sa kolekcijom.
  20. Kolekcija() {
  21. _trenutnoElemenata = 0;
  22. for (int i = 0; i < max; i++) {
  23. _elementi[i] = nullptr;
  24. }
  25. }
  26. Kolekcija(const Kolekcija& k) {
  27. _trenutnoElemenata = k._trenutnoElemenata;
  28. for (int i = 0; i < _trenutnoElemenata; i++)
  29. {
  30. _elementi[i] = new T(*k._elementi[i]);
  31. }
  32. }
  33. ~Kolekcija() {
  34. for (int i = 0; i < _trenutnoElemenata; i++)
  35. {
  36. delete _elementi[i];
  37. _elementi[i] = nullptr;
  38. }
  39. }
  40. bool operator= (const Kolekcija& k) {
  41. if (this != &k) {
  42. for (int i = 0; i < k._trenutnoElemenata; i++)
  43. {
  44. delete _elementi[i];
  45. _elementi[i] = nullptr;
  46. }
  47. _trenutnoElemenata = k._trenutnoElemenata;
  48. for (int i = 0; i < _trenutnoElemenata; i++)
  49. {
  50. _elementi[i] = new T(*k._elementi[i]);
  51. }
  52. return true;
  53. }
  54. return false;
  55. }
  56. bool AddElement(T broj) {
  57. if (_trenutnoElemenata == max)
  58. return false;
  59. _elementi[_trenutnoElemenata] = new T(broj);
  60. _trenutnoElemenata++;
  61. //*_elementi[_trenutnoElemenata++] = broj;
  62. return true;
  63. }
  64. friend ostream& operator<< <>(ostream& cout, const Kolekcija<T, max>& k);
  65. int GetTrenutno()const {
  66. return _trenutnoElemenata;
  67. }
  68. T** GetNiz() { return _elementi; }
  69. T& GetElement(int lokacija) {
  70. return *_elementi[lokacija];
  71. }
  72. };
  73. template<class T, int max>
  74. ostream& operator<< <>(ostream& cout, const Kolekcija<T, max>& k) {
  75. for (int i = 0; i < k._trenutnoElemenata; i++) {
  76. cout << k._elementi[i] << endl;
  77. }
  78. return cout;
  79. }
  80. class Prisustvo
  81. {
  82. char* _brojIndeksa;
  83. int _brojSati;
  84. public:
  85. Prisustvo() {
  86. _brojIndeksa = nullptr;
  87. _brojSati = 0;
  88. }
  89. Prisustvo(const char* brojIndeksa, int brojSati) : _brojSati(brojSati)
  90. {
  91. int size = strlen(brojIndeksa) + 1;
  92. _brojIndeksa = new char[size];
  93. strcpy_s(_brojIndeksa, size, brojIndeksa);
  94. }
  95. Prisustvo(const Prisustvo& p) :_brojSati(p._brojSati) {
  96. int size = strlen(p._brojIndeksa) + 1;
  97. _brojIndeksa = new char[size];
  98. strcpy_s(_brojIndeksa, size, p._brojIndeksa);
  99. }
  100. bool operator= (const Prisustvo& p) {
  101. if (this != &p) {
  102. delete[]_brojIndeksa;
  103. _brojSati = p._brojSati;
  104. int size = strlen(p._brojIndeksa) + 1;
  105. _brojIndeksa = new char[size];
  106. strcpy_s(_brojIndeksa, size, p._brojIndeksa);
  107. return true;
  108. }
  109. return false;
  110. }
  111. ~Prisustvo()
  112. {
  113. delete[] _brojIndeksa;
  114. _brojIndeksa = nullptr;
  115. }
  116. void operator+=(int povecaj) {
  117. _brojSati += povecaj;
  118. }
  119. void operator+ (int povecaj) {
  120. _brojSati += povecaj;
  121. }
  122. bool operator== (Prisustvo p) {
  123. if (strcmp(_brojIndeksa, p._brojIndeksa) == 0)
  124. return true;
  125. return false;
  126. }
  127. bool operator< (Prisustvo p) {
  128. int brojIndex = atoi(_brojIndeksa);
  129. int brojIndex1 = atoi(p._brojIndeksa);
  130. if (brojIndex < brojIndex1)
  131. return true;
  132. return false;
  133. }
  134. char *GetIndex() {
  135. return _brojIndeksa;
  136. }
  137.  
  138. friend ostream& operator<< (ostream& cout, Prisustvo& p);
  139. };
  140. ostream& operator<<(ostream& cout, Prisustvo& p) {
  141. cout << "Broj indexa--> " << p._brojIndeksa << " Broj sati--> " << p._brojSati << endl;
  142. return cout;
  143. }
  144. class Nastava
  145. {
  146. char _datum[12];
  147. char _tipNastave; //P ili V
  148. int _odrzanoSati;
  149. Prisustvo* _prisutni;
  150. int _brojStudenata;
  151. public:
  152. Nastava() {
  153. _prisutni = nullptr;
  154. _brojStudenata = 0;
  155. _odrzanoSati = 0;
  156. }
  157. Nastava(const char* datum, char tip, int odrzanoSati) {
  158. strcpy_s(_datum, 12, datum);
  159. _tipNastave = tip;
  160. _odrzanoSati = odrzanoSati;
  161. _prisutni = nullptr;
  162. _brojStudenata = 0;
  163. }
  164. Nastava(const Nastava& n) {
  165. strcpy_s(_datum, 12, n._datum);
  166. _tipNastave = n._tipNastave;
  167. _odrzanoSati = n._odrzanoSati;
  168. _brojStudenata = n._brojStudenata;
  169. _prisutni = new Prisustvo[_brojStudenata];
  170. for (int i = 0; i < _brojStudenata; i++)
  171. {
  172. _prisutni[i] = n._prisutni[i];
  173. }
  174. }
  175. ~Nastava() {
  176. delete[]_prisutni;
  177. _prisutni = nullptr;
  178. }
  179. bool operator= (const Nastava& n) {
  180. if (this != &n) {
  181. delete[]_prisutni;
  182. strcpy_s(_datum, 12, n._datum);
  183. _tipNastave = n._tipNastave;
  184. _odrzanoSati = n._odrzanoSati;
  185. _brojStudenata = n._brojStudenata;
  186. _prisutni = new Prisustvo[_brojStudenata];
  187. for (int i = 0; i < _brojStudenata; i++)
  188. {
  189. _prisutni[i] = n._prisutni[i];
  190. }
  191. return true;
  192. }
  193. return false;
  194. }
  195. void Sortiraj() {
  196. bool promjena = true;
  197. while (promjena) {
  198. promjena = false;
  199. for (int i = 0; i < _brojStudenata - 1; i++)
  200. {
  201. if (_prisutni[i] < _prisutni[i + 1]) {
  202. Prisustvo temp = _prisutni[i];
  203. _prisutni[i] = _prisutni[i + 1];
  204. _prisutni[i + 1] = temp;
  205. promjena = true;
  206. }
  207. }
  208. }
  209. }
  210. bool operator+= (Prisustvo p) {
  211. for (int i = 0; i < _brojStudenata; i++)
  212. {
  213. if (_prisutni[i] == p)
  214. return false;
  215. }
  216. Prisustvo *temp = new Prisustvo[_brojStudenata + 1];
  217. for (int i = 0; i < _brojStudenata; i++)
  218. {
  219. temp[i] = _prisutni[i];
  220. }
  221. temp[_brojStudenata++] = p;
  222. delete[]_prisutni;
  223. _prisutni = temp;
  224. Sortiraj();
  225. return true;
  226. }
  227. void operator-= (const char* index) {
  228. Prisustvo *temp = new Prisustvo[_brojStudenata - 1];
  229. int j = 0;
  230. for (int i = 0; i < _brojStudenata; i++)
  231. {
  232. if (strcmp(_prisutni[i].GetIndex(), index) != 0) {
  233. temp[j] = _prisutni[i];
  234. j++;
  235. }
  236. }
  237. delete[]_prisutni;
  238. _prisutni = temp;
  239. _brojStudenata--;
  240. Sortiraj();
  241. }
  242. Prisustvo& operator[] (const char* index) {
  243. for (int i = 0; i < _brojStudenata; i++)
  244. {
  245. if (strcmp(_prisutni[i].GetIndex(), index) == 0)
  246. return _prisutni[i];
  247. }
  248. }
  249. void operator() (const char* index, int povecaj) {
  250. for (int i = 0; i < _brojStudenata; i++)
  251. {
  252. if (strcmp(_prisutni[i].GetIndex(), index) == 0) {
  253. _prisutni[i] += povecaj;
  254. return;
  255. }
  256. }
  257. }
  258. friend Nastava operator+ (Nastava& l, Nastava& d);
  259. friend ostream& operator<< (ostream& cout, const Nastava& n);
  260. int BrojStud() {
  261. return _brojStudenata;
  262. }
  263. char *GetDatum() {
  264. return _datum;
  265. }
  266. char GetTip() {
  267. return _tipNastave;
  268. }
  269. Prisustvo* getniz()
  270. {
  271. return _prisutni;
  272. }
  273. Prisustvo &GetPrisutni(int lok)
  274. {
  275. return _prisutni[lok];
  276. }
  277. int GetOdrzanoSati() {
  278. return _odrzanoSati;
  279. }
  280. };
  281. Nastava operator+ (Nastava& l, Nastava& d) {
  282. Nastava n;
  283. if (l._tipNastave != d._tipNastave) {
  284. cout << "Razlicit tip nastave. " << endl;
  285. return l;
  286. }
  287. n._brojStudenata = l._brojStudenata + d._brojStudenata;
  288. int j = 0;
  289. for (int i = 0; i < n._brojStudenata; i++)
  290. {
  291. if (i < l._brojStudenata) {
  292. n._prisutni[i] = l._prisutni[i];
  293. }
  294. else {
  295. n._prisutni[i] = d._prisutni[j];
  296. j++;
  297. }
  298. }
  299.  
  300. for (int i = 0; i < n._brojStudenata; i++)
  301. {
  302. Prisustvo p = n._prisutni[i];
  303. for (int j = 0; j < n._brojStudenata; j++)
  304. {
  305. if (n._prisutni[j] == p) {
  306. cout << "GRESKA" << endl;
  307. return l;
  308. }
  309. }
  310. }
  311. strcpy_s(n._datum, 12, l._datum);
  312. n._odrzanoSati = l._odrzanoSati;
  313. n._tipNastave = l._tipNastave;
  314. return n;
  315. }
  316.  
  317. ostream& operator<< (ostream& cout, const Nastava& n) {
  318. cout << "Datum--> " << n._datum << " Broj sati--> " << n._odrzanoSati << " Tip nastave--> " << n._tipNastave << endl;
  319. for (int i = 0; i < n._brojStudenata; i++)
  320. {
  321. cout << n._prisutni[i] << endl;
  322. }
  323. return cout;
  324. }
  325.  
  326. class Predmet
  327. {
  328. char* _naziv;
  329. int _godinaStudija;
  330. Kolekcija<Nastava, 90> _odrzanaNastava;
  331. public:
  332. Predmet(const char* naziv, int godinaStudija) : _godinaStudija(godinaStudija)
  333. {
  334. _naziv = AlocirajNizKaraktera(naziv);
  335. }
  336. Predmet(const Predmet& p) {
  337. int vel = strlen(p._naziv) + 1;
  338. _naziv = new char[vel];
  339. strcpy_s(_naziv, vel, p._naziv);
  340. _godinaStudija = p._godinaStudija;
  341. _odrzanaNastava = p._odrzanaNastava;
  342. }
  343. ~Predmet()
  344. {
  345. delete[] _naziv;
  346. _naziv = nullptr;
  347. }
  348. bool operator= (const Predmet& p) {
  349. if (this != &p) {
  350. delete[]_naziv;
  351. int vel = strlen(p._naziv) + 1;
  352. _naziv = new char[vel];
  353. strcpy_s(_naziv, vel, p._naziv);
  354. _godinaStudija = p._godinaStudija;
  355. _odrzanaNastava = p._odrzanaNastava;
  356. return true;
  357. }
  358. return false;
  359. }
  360. void Evidencija(Nastava n) {
  361. _odrzanaNastava.AddElement(n);
  362. }
  363.  
  364. /*Funkciju koja na osnovu datuma i tipa održane nastave dodaje prisustvo studentu sa proslijeđenim brojem indeksa i brojem sati.
  365. Voditi računa da broj sati prisustva ne može biti veći od broja sati održane nastave.*/
  366. void DodajPrisustvo(const char* index, int brojSati, char tip, const char* datum) {
  367. Prisustvo d(index, brojSati);
  368. for (int j = 0; j < _odrzanaNastava.GetTrenutno(); j++)
  369. {
  370. if (strcmp(_odrzanaNastava.GetNiz()[j]->GetDatum(), datum) == 0 && _odrzanaNastava.GetNiz()[j]->GetTip() == tip)
  371. {
  372. _odrzanaNastava.GetElement(j) += d;
  373. }
  374. }
  375. }
  376.  
  377. /*Funkciju koja na osnovu datuma i tipa održane nastave uklanja prisustvo studentu sa proslijeđenim brojem indeksa.*/
  378.  
  379. /*Funkciju koja na osnovu broja indeksa studenta vraća sve podatke o njegovom prisustvu na nastavi*/
  380.  
  381. /*Funkciju koja na osnovu tipa nastave (P ili V) vrši ispis prisustva za sve studente (sumarno) u datom formatu:
  382. IB140001 30/40 75%, gdje je prva kolona "broj indeksa", druga kolona "broj sati prisustva / ukupan broj sati održane nastave" i
  383. treca kolona "procenat prisustva studenta na nastavi".*/
  384.  
  385. friend ostream& operator<<(ostream&, const Predmet&);
  386. };
  387.  
  388. ostream& operator<<(ostream& cout, const Predmet& p)
  389. {
  390. cout << "Predmet: " << p._naziv << endl;
  391. cout << "Godina studija: " << p._godinaStudija << endl;
  392. /*for (int i = 0; i < p._odrzanaNastava.GetTrenutno(); i++)
  393. {
  394. cout << p._odrzanaNastava.GetElement(i) << endl;
  395. }*/
  396. return cout;
  397. }
  398.  
  399. void main()
  400. {
  401. Prisustvo p("IB170121", 3);
  402. Prisustvo p1("IB170321", 4);
  403. Prisustvo p2("IB170333", 3);
  404.  
  405. Nastava n("23.09.1998.", 'V', 10);
  406. Nastava n1("23.10.1998.", 'P', 11);
  407. Nastava n2("23.12.1998.", 'V', 12);
  408.  
  409.  
  410. n += p1;
  411. n += p2;
  412. n += p;
  413. //n += p1;
  414. cout << n << endl;
  415. cout << "------------" << endl;
  416. n -= "IB170321";
  417. cout << n << endl;
  418. cout << "Podaci operator [] -->> ";
  419. cout << n["IB170121"] << endl;
  420. cout << "Uvecanje operator () -->> ";
  421. p += 10;
  422. cout << p << endl;
  423.  
  424. Predmet pred1("PRIII", 2);
  425. pred1.Evidencija(n);
  426. cout << pred1 << endl;
  427.  
  428. pred1.DodajPrisustvo("IB170333", 2, 'V', "23.12.1998.");
  429. cout << pred1 << endl;
  430. cout << "------------------------------" << endl;
  431.  
  432. system("pause");
  433. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement