Advertisement
aaa213

Lik_uradio_Denisovo

Feb 7th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 22.90 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3. #include<string>
  4. #include<regex>
  5. #include<vector>
  6. template<class T1, class T2>
  7. class Kolekcija{
  8. T1 * _elementi1;
  9. T2 * _elementi2;
  10. int _trenutnoElemenata;
  11. public:
  12. Kolekcija()
  13. {
  14. _trenutnoElemenata = 0;
  15. _elementi1 = new T1[_trenutnoElemenata + 1];
  16. _elementi2 = new T2[_trenutnoElemenata + 1];
  17. }
  18. Kolekcija(const Kolekcija<T1, T2> &org)
  19. {
  20. _trenutnoElemenata = org._trenutnoElemenata;
  21. _elementi1 = new T1[_trenutnoElemenata + 1];
  22. _elementi2 = new T2[_trenutnoElemenata + 1];
  23. for (int i = 0; i < _trenutnoElemenata; i++)
  24. {
  25. _elementi1[i] = org._elementi1[i];
  26. _elementi2[i] = org._elementi2[i];
  27. }
  28. }
  29. ~Kolekcija()
  30. {
  31. delete[] _elementi1;
  32. delete[] _elementi2;
  33. }
  34. Kolekcija<T1, T2>& operator=(const Kolekcija<T1, T2>& org)
  35. {
  36. if (this != &org)
  37. {
  38. _trenutnoElemenata = org._trenutnoElemenata;
  39. delete[]_elementi1;
  40. delete[]_elementi2;
  41. _elementi1 = new T1[_trenutnoElemenata + 1];
  42. _elementi2 = new T2[_trenutnoElemenata + 1];
  43. for (int i = 0; i < _trenutnoElemenata; i++)
  44. {
  45. _elementi1[i] = org._elementi1[i];
  46. _elementi2[i] = org._elementi2[i];
  47. }
  48. }
  49. return *this;
  50. }
  51. bool AddElement(T1& ele1, T2& ele2)
  52. {
  53. if (_trenutnoElemenata == 0)
  54. {
  55. _elementi1[_trenutnoElemenata] = ele1;
  56. _elementi2[_trenutnoElemenata] = ele2;
  57. _trenutnoElemenata++;
  58. return true;
  59. }
  60. for (int i = 0; i < _trenutnoElemenata; i++)
  61. {
  62. if (_elementi1[i] == ele1 && _elementi2[i] == ele2)
  63. {
  64. return false;
  65. }
  66. }
  67. T1* temp1 = new T1[_trenutnoElemenata + 1];
  68. T2*temp2 = new T2[_trenutnoElemenata + 1];
  69. for (int i = 0; i < _trenutnoElemenata; i++)
  70. {
  71. temp1[i] = _elementi1[i];
  72. temp2[i] = _elementi2[i];
  73. }
  74. delete[]_elementi1;
  75. delete[]_elementi2;
  76. _elementi1 = temp1;
  77. _elementi2 = temp2;
  78. _elementi1[_trenutnoElemenata] = ele1;
  79. _elementi2[_trenutnoElemenata] = ele2;
  80. _trenutnoElemenata++;
  81. return true;
  82. }
  83. bool RemoveElement(T1 &ele1)
  84. {
  85. for (int i = 0; i < _trenutnoElemenata; i++)
  86. {
  87. if (_elementi1[i] == ele1)
  88. {
  89. for (int j = i; j < _trenutnoElemenata - 1; j++)
  90. {
  91. _elementi1[j] = _elementi1[j + 1];
  92. _elementi2[j] = _elementi2[j + 1];
  93. }
  94. _trenutnoElemenata--;
  95. return true;
  96. }
  97. }
  98. return false;
  99. }
  100. Kolekcija<T1, T2> operator+(Kolekcija<T1, T2> &obj)
  101. {
  102. Kolekcija<T1, T2> temp;
  103. for (int i = 0; i < _trenutnoElemenata; i++)
  104. {
  105. temp.AddElement(_elementi1[i], _elementi2[i]);
  106. }
  107. for (int i = 0; i < obj._trenutnoElemenata; i++)
  108. {
  109. temp.AddElement(obj._elementi1[i], obj._elementi2[i]);
  110. }
  111. return temp;
  112. }
  113. int getTrenutno()
  114. {
  115. return _trenutnoElemenata;
  116. }
  117. T1 & getElement1(int indeks)
  118. {
  119. return _elementi1[indeks];
  120. }
  121. T2 & getElement2(int indeks)
  122. {
  123. return _elementi2[indeks];
  124. }
  125. void setElement2(int indeks, string unos)
  126. {
  127. _elementi2[indeks] += unos;
  128. }
  129. friend ostream & operator<< <>(ostream& cout, const Kolekcija<T1, T2>& obj);
  130. /*1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Osigurati automatsko prosiranje kolekcije prilikom dodavanja svakog novog elementa, te onemoguciti ponavljanje elemenata.
  131. 2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije i smanjuje velicinu niza. Ukoliko je potrebno, prilikom uklanjanja elementa izvrsiti dealokaciju. Prilikom uklanjanja elemenata ocuvati redoslijed njihovog dodavanja.
  132. 3. operator+ :: vraca objekat tipa Kolekcija koji u sebi sadrzi sve elemente objekta koji je
  133. pozvao funkciju i objekta koji je proslijedjen kao parametar (takodjer tipa Kolekcija), pri cemu se elementi unutar kreirane kolekcije ne smiju ponavljati (ne smiju postojati dva ista elementa).*/
  134. };
  135. template<class T1,class T2>
  136. ostream & operator<< (ostream& cout, const Kolekcija<T1, T2>& obj)
  137. {
  138. for (int i = 0; i < obj._trenutnoElemenata; i++)
  139. {
  140. cout << obj._elementi1[i] << " : " << obj._elementi2[i] << endl;
  141. }
  142. return cout;
  143. }
  144.  
  145. class Student{
  146. const int _brojIndeksa;
  147. static int brojIndeksa;
  148. string _ime;
  149. string _prezime;
  150. string _korisnickomIme;
  151. string _lozinka;
  152. /*1. potrebne funkcije
  153. NAPOMENE:
  154. 2. lozinka mora postovati sljedeca pravila:
  155. 2.a: sadrzi kombinaciju slova, brojeva i nekog od specijalnih znakova
  156. 2.b: ne smije sadrzavati niti ime niti prezime
  157. 2.c: sadrzi minimalno 6 znakova
  158. postivanje navedenih pravila se mora osigurati prije kreiranje objekta tipa Student*/
  159. public:
  160. Student(string ime="Temp",string prezime="Temp",string korisnickoIme="Temp"
  161. ,string lozinka="Temp2*or") :_brojIndeksa(brojIndeksa++)
  162. {
  163. _ime = ime;
  164. _prezime = prezime;
  165. _korisnickomIme = korisnickoIme;
  166. _lozinka = lozinka;
  167. }
  168.  
  169. Student(const Student& org) :_brojIndeksa(org._brojIndeksa)
  170. {
  171. _ime = org._ime;
  172. _prezime = org._prezime;
  173. _korisnickomIme = org._korisnickomIme;
  174. _lozinka = org._lozinka;
  175. }
  176. Student& operator=(const Student& org)
  177. {
  178. if (this != &org)
  179. {
  180. _ime = org._ime;
  181. _prezime = org._prezime;
  182. _korisnickomIme = org._korisnickomIme;
  183. _lozinka = org._lozinka;
  184. }
  185. return *this;
  186. }
  187. bool operator==(Student& org)//porediti po imenu?
  188. {
  189. if (strcmp(_ime.c_str(), org._ime.c_str())==0)
  190. return true;
  191. return false;
  192. }
  193. friend ostream& operator<<(ostream& cout, const Student& obj);
  194. };
  195. int Student::brojIndeksa = 1;
  196. ostream& operator<<(ostream& cout, const Student& obj)
  197. {
  198. cout << "Ime: " << obj._ime << " Prezime: " << obj._prezime << endl;
  199. cout << "Broj indeksa: " << obj._brojIndeksa << " Korisnicko ime: " << obj._korisnickomIme << endl;
  200. cout << "lozinka: " << obj._lozinka << endl;
  201. return cout;
  202. }
  203. class Ispit{
  204. protected:
  205. char * _opis;//npr. PR2::Integralni::30.01.2015
  206. /*tip string u kolekciji sluzi kao napomena vezana za ponasanje studenta na ispitu gdje ce se evidentirati utisci dezurnog nastavnika npr. kasnio, dosao bez indeksa, izbacen zbog prepisivanja*/
  207. Kolekcija<Student, string> * _listaStudenata;
  208. /*1. AddStudent :: dodaje podatke o studentu koji je pristupio ispitu
  209. uz odgovarajucu napomenu (napomena nije obavezna).
  210. Studentu nije dozvoljeno da dva puta pristupi istom ispitu,
  211. a u slucaju da pokusa pristupiti automatski
  212. se dodaje adekvatna napomena (npr. ponovo pokusao pristupiti). */
  213. public:
  214. Ispit(char* opis = " ")
  215. {
  216. int vel = strlen(opis) + 1;
  217. _opis = new char[vel];
  218. strcpy_s(_opis, vel, opis);
  219. _listaStudenata = new Kolekcija<Student, string>();
  220. }
  221. ~Ispit()
  222. {
  223. delete[]_opis;
  224. _opis = NULL;
  225. delete _listaStudenata;
  226. _listaStudenata = NULL;
  227. }
  228. Ispit(const Ispit& org)
  229. {
  230. int vel = strlen(org._opis) + 1;
  231. _opis = new char[vel];
  232. strcpy_s(_opis, vel,org._opis);
  233. _listaStudenata = new Kolekcija<Student, string>;
  234. *_listaStudenata = *org._listaStudenata;
  235. }
  236. bool AddStudent(Student novi, string napomena=" ")
  237. {
  238. for (int i = 0; i < _listaStudenata->getTrenutno(); i++)
  239. {
  240. if (_listaStudenata->getElement1(i) == novi)
  241. {
  242. _listaStudenata->setElement2(i,",ponovo pokusao pristupiti");
  243. return false;
  244. }
  245. }
  246. _listaStudenata->AddElement(novi, napomena);
  247. return true;
  248. }
  249. Ispit& operator=(const Ispit &org)
  250. {
  251. if (this != &org)
  252. {
  253. int vel = strlen(org._opis) + 1;
  254. delete[] _opis;
  255. _opis = new char[vel];
  256. strcpy_s(_opis, vel, org._opis);
  257. delete _listaStudenata;
  258. _listaStudenata = new Kolekcija<Student, string>();
  259. *_listaStudenata = *org._listaStudenata;
  260. }
  261. return *this;
  262. }
  263. bool operator ==(Ispit & org)
  264. {
  265. if (strcmp(_opis, org._opis) == 0)
  266. return true;
  267. return false;
  268. }
  269. int getListaStudenataTrenutno()
  270. {
  271. return _listaStudenata->getTrenutno();
  272. }
  273. Kolekcija<Student, string>* getlistaStudenata()
  274. {
  275. return _listaStudenata;
  276. }
  277. friend ostream& operator<<(ostream& cout, Ispit& obj);
  278. };
  279. ostream& operator<<(ostream& cout, Ispit& obj)
  280. {
  281. cout << "Opis: " << obj._opis << endl;
  282. cout << "Lista studenata: " << endl;
  283. cout <<* obj._listaStudenata << endl;
  284. return cout;
  285. }
  286. class Predmet{
  287. char * _nazivPredmeta;
  288. char * _profesor;
  289. //1. potrebne funkcije
  290. public:
  291. Predmet(char* nazivPredmeta="Temp", char* profesor="Temp")
  292. {
  293. int vel = strlen(nazivPredmeta) + 1;
  294. _nazivPredmeta = new char[vel];
  295. strcpy_s(_nazivPredmeta, vel, nazivPredmeta);
  296. vel = strlen(profesor) + 1;
  297. _profesor = new char[vel];
  298. strcpy_s(_profesor, vel, profesor);
  299. }
  300. Predmet(const Predmet& org)
  301. {
  302. int vel = strlen(org._nazivPredmeta) + 1;
  303. _nazivPredmeta = new char[vel];
  304. strcpy_s(_nazivPredmeta, vel, org._nazivPredmeta);
  305. vel = strlen(org._profesor) + 1;
  306. _profesor = new char[vel];
  307. strcpy_s(_profesor, vel,org._profesor);
  308. }
  309. ~Predmet()
  310. {
  311. delete[] _nazivPredmeta;
  312. _nazivPredmeta = NULL;
  313. delete[] _profesor;
  314. _profesor = NULL;
  315. }
  316. Predmet& operator=(const Predmet& org)
  317. {
  318. if (this != &org)
  319. {
  320. int vel = strlen(org._nazivPredmeta) + 1;
  321. delete[]_nazivPredmeta;
  322. _nazivPredmeta = new char[vel];
  323. strcpy_s(_nazivPredmeta, vel, org._nazivPredmeta);
  324. vel = strlen(org._profesor) + 1;
  325. delete[]_profesor;
  326. _profesor = new char[vel];
  327. strcpy_s(_profesor, vel, org._profesor);
  328. }
  329. return*this;
  330. }
  331. bool operator==(Predmet& org)
  332. {
  333. if (strcmp(_nazivPredmeta, org._nazivPredmeta) == 0)
  334. return true;
  335. return false;
  336. }
  337. friend ostream& operator<<(ostream& cout, Predmet& obj);
  338. };
  339. ostream& operator<<(ostream& cout, Predmet& obj)
  340. {
  341. cout << "Naziv Predmeta: " << obj._nazivPredmeta << endl;
  342. cout << "Profesor: " << obj._profesor << endl;
  343. return cout;
  344. }
  345. class SkolskaGodina{
  346. char * _skolskaGodina;//npr.2014/2015
  347. Kolekcija<Predmet, Ispit> * _odrzaniIspiti;
  348. public:
  349. SkolskaGodina(char* skolskaGodina="2000")
  350. {
  351. int vel = strlen(skolskaGodina) + 1;
  352. _skolskaGodina = new char[vel];
  353. strcpy_s(_skolskaGodina, vel, skolskaGodina);
  354. _odrzaniIspiti = new Kolekcija < Predmet, Ispit > ;
  355. }
  356. SkolskaGodina(const SkolskaGodina& org)
  357. {
  358. int vel = strlen(org._skolskaGodina) + 1;
  359. _skolskaGodina = new char[vel];
  360. strcpy_s(_skolskaGodina, vel, org._skolskaGodina);
  361. _odrzaniIspiti = new Kolekcija < Predmet, Ispit >;
  362. *_odrzaniIspiti = *org._odrzaniIspiti;
  363. }
  364. ~SkolskaGodina()
  365. {
  366. delete _odrzaniIspiti;
  367. delete[] _skolskaGodina;
  368. _skolskaGodina = NULL;
  369.  
  370. }
  371. bool AddIspit(Predmet a,Ispit b)
  372. {
  373. _odrzaniIspiti->AddElement(a, b);
  374. return true;
  375. }
  376. bool RemoveIspit(Ispit& b)
  377. {
  378. for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
  379. {
  380. if (_odrzaniIspiti->getElement2(i) == b)
  381. {
  382. if (_odrzaniIspiti->getElement2(i).getListaStudenataTrenutno() != 0)
  383. {
  384. return false;
  385.  
  386. }
  387. (*_odrzaniIspiti).RemoveElement(_odrzaniIspiti->getElement1(i));
  388. return true;
  389. }
  390. }
  391. return false;
  392. }
  393. int GetBrojIzlazakaByPredmet(Student a, Predmet b)
  394. {
  395. int brojac = 0;
  396. for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
  397. {
  398. if (_odrzaniIspiti->getElement1(i) == b)
  399. {
  400. for (int j = 0; j < _odrzaniIspiti->getElement2(i).getListaStudenataTrenutno();j++)
  401. {
  402. if (_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement1(j) == a)
  403. {
  404. brojac++;
  405. }
  406. }
  407.  
  408. }
  409.  
  410. }
  411. return brojac;
  412. }
  413. vector<Student> operator()(string napomena)
  414. {
  415. vector<Student> sa_napomenom;
  416. for (int i = 0; i < _odrzaniIspiti->getTrenutno(); i++)
  417. {
  418. for (int j = 0; j < _odrzaniIspiti->getElement2(i).getListaStudenataTrenutno(); j++)
  419. {
  420. if (strstr(_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement2(j).c_str(), napomena.c_str()) != 0)
  421. {
  422. sa_napomenom.push_back(_odrzaniIspiti->getElement2(i).getlistaStudenata()->getElement1(j));
  423. }
  424. }
  425. }
  426. return sa_napomenom;
  427. }
  428. friend ostream& operator<<(ostream& cout, SkolskaGodina& obj);
  429. /*1. AddIspit::dodate podatke o odrzanom ispitu na odredjenom predmetu
  430. 2. RemoveIspit::uklanja podatke o odrzanom ispitu, ali samo pod uslovom da tom ispitu nije pristupio niti jedan student
  431. 3. GetBrojIzlazakaByPredmet::vraca podatak o tome koliko je puta trazeni student izasao na ispit iz odredjenog predmeta u toku skolske godine
  432. 4. operator()::vraca sve studente koji u napomeni posjeduju sadrzaj koji je proslijedjen kao parametar (npr.listu svih studenata koji u napomeni posjeduju sadrzaj "bez indeksa")
  433. 5. operator<<::ispisuje sve dostupne podatke o odrzanim ispitima i studentima koji su im pristupili*/
  434. };
  435. ostream& operator<<(ostream& cout, SkolskaGodina& obj)
  436. {
  437. cout << "Skolska Godina: " << obj._skolskaGodina << endl;
  438. cout << "Odrzani ispiti: " << endl;
  439. cout <<* obj._odrzaniIspiti;
  440. return cout;
  441. }
  442. void main(){
  443. //izbjegavajte koristenje vlastitog imena i prezimena
  444. //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti na objektu tipa SkolskaGodina
  445.  
  446. Student marko("Marko", "Markic", "Muke", "Temp3;ds");
  447. Student hasim("Hasim", "Hasimovic", "Haso", "ERes2*ds");
  448. Student kogi("Kim", "Krimic", "Kenju", "trDF5/as");
  449. Student sem("Sem", "Semic", "Semi", "trDF5/as");
  450. Ispit parcijalni("PR2::Integralni::30.01.2015");
  451. parcijalni.AddStudent(marko, "sve udure");
  452. /*parcijalni.AddStudent(hasim, "Nije ovjeren semestar");
  453. parcijalni.AddStudent(kogi);
  454. parcijalni.AddStudent(hasim);
  455. parcijalni.AddStudent(sem, "ovjeren semestar");*/
  456. Ispit integralni("Integrala");
  457. cout << ".........................." << endl;
  458. //cout << parcijalni << endl;
  459. cout << ".........................." << endl;
  460. Predmet prog("Uvod u baze podataka", "Jasmin Azemovic");
  461. Predmet prog2("Baze podataka", "Serif Azemovic");
  462. Predmet prog3("Statistika", "Larisa Dedovic");
  463. //cout << prog << prog2 << prog3;
  464. cout << ".........................." << endl;
  465. SkolskaGodina trenutna("2014/2015");
  466. trenutna.AddIspit(prog, parcijalni);
  467. trenutna.AddIspit(prog2, parcijalni);
  468. trenutna.AddIspit(prog3, parcijalni);
  469. trenutna.AddIspit(prog, integralni);
  470. cout << trenutna;
  471. cout << ".........................." << endl;
  472. trenutna.RemoveIspit(integralni);
  473. cout << trenutna;
  474. cout << ".........................." << endl;
  475. system("pause");
  476.  
  477. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement