Advertisement
Guest User

Untitled

a guest
Feb 19th, 2018
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.23 KB | None | 0 0
  1. #include<iostream>
  2. #include<vector>
  3. #include<string>
  4. #include<regex>
  5. #include<algorithm>
  6. #include<exception>
  7.  
  8. using namespace std;
  9.  
  10. char *crt = "\n-----------------------------------------------\n";
  11.  
  12. char *upisiString(char *tekst){
  13. int vel = strlen(tekst) + 1;
  14. char *temp = new char[vel];
  15. strcpy_s(temp, vel, tekst);
  16. return temp;
  17. }
  18.  
  19. class Izuzetak :public exception {
  20. string _datum;
  21. int _linija;
  22. public:
  23. Izuzetak(char *poruka, int linija, string datum) : exception(poruka){
  24. _linija = linija;
  25. _datum = datum;
  26. }
  27. friend ostream& operator<<(ostream&, const Izuzetak&);
  28. };
  29. ostream& operator<<(ostream& ispis, const Izuzetak& obj){
  30. ispis << "Greska: " << obj.what() << ", na " << obj._linija << ". liniji koda, datuma: " << obj._datum << endl;
  31. return ispis;
  32. }
  33.  
  34. template<class T1, class T2, int max>
  35. class Kolekcija {
  36. T1 * _elementi1[max];
  37. T2 * _elementi2[max];
  38. int * _trenutno;
  39. public:
  40. Kolekcija() {
  41. for (int i = 0; i < max; i++) {
  42. _elementi1[i] = nullptr;
  43. _elementi2[i] = nullptr;
  44. }
  45. _trenutno = new int(0);
  46. }
  47. Kolekcija(const Kolekcija& obj){
  48. _trenutno = new int(*obj._trenutno);
  49. for (int i = 0; i < *obj._trenutno; i++)
  50. {
  51. _elementi1[i] = new T1(*obj._elementi1[i]);
  52. _elementi2[i] = new T2(*obj._elementi2[i]);
  53. }
  54. }
  55. ~Kolekcija(){
  56. for (int i = 0; i < max; i++) {
  57. delete _elementi1[i]; _elementi1[i] = nullptr;
  58. delete _elementi2[i]; _elementi2[i] = nullptr;
  59. }
  60. delete _trenutno; _trenutno = nullptr;
  61. }
  62. Kolekcija &operator=(const Kolekcija& obj){
  63. if (this != &obj){
  64. for (int i = 0; i < *_trenutno; i++) {
  65. delete _elementi1[i];
  66. delete _elementi2[i];
  67. }
  68. delete _trenutno;
  69.  
  70. _trenutno = new int(*obj._trenutno);
  71. for (int i = 0; i < *obj._trenutno; i++)
  72. {
  73. _elementi1[i] = new T1(*obj._elementi1[i]);
  74. _elementi2[i] = new T2(*obj._elementi2[i]);
  75. }
  76. }
  77. return *this;
  78. }
  79. void AddElement(T1 el1, T2 el2){
  80. if (*_trenutno == max){
  81. throw Izuzetak("Prekoracili ste velicinu niza!",__LINE__,__DATE__);
  82. }
  83. _elementi1[*_trenutno] = new T1(el1);
  84. _elementi2[*_trenutno] = new T2(el2);
  85. (*_trenutno)++;
  86. }
  87. T1 GetElement1(int lokacija) { return *_elementi1[lokacija]; }
  88. T2 GetElement2(int lokacija) { return *_elementi2[lokacija]; }
  89. int GetTrenutno() { return *_trenutno; }
  90. int GetMax(){ return max; }
  91. friend ostream& operator<< <>(ostream&, Kolekcija&);
  92. };
  93. template<class T1, class T2, int max>
  94. ostream& operator<< <>(ostream& ispis, Kolekcija<T1,T2,max>& k){
  95. for (int i = 0; i < *k._trenutno; i++)
  96. {
  97. ispis << *k._elementi1[i] << " " << *k._elementi2[i] << endl;
  98. }
  99. return ispis;
  100. }
  101.  
  102. class Datum {
  103. int *_dan, *_mjesec, *_godina;
  104. public:
  105. Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  106. _dan = new int(dan);
  107. _mjesec = new int(mjesec);
  108. _godina = new int(godina);
  109. }
  110. Datum(const Datum& obj){
  111. _dan = new int(*obj._dan);
  112. _mjesec = new int(*obj._mjesec);
  113. _godina = new int(*obj._godina);
  114. }
  115. Datum &operator=(const Datum& obj){
  116. if (this != &obj){
  117. _dan = new int(*obj._dan);
  118. _mjesec = new int(*obj._mjesec);
  119. _godina = new int(*obj._godina);
  120. }
  121. return *this;
  122. }
  123. ~Datum() {
  124. delete _dan; _dan = nullptr;
  125. delete _mjesec; _mjesec = nullptr;
  126. delete _godina; _godina = nullptr;
  127. }
  128. friend bool operator==(const Datum&, const Datum&);
  129. friend bool operator<(const Datum&, const Datum&);
  130. friend bool operator>(const Datum&, const Datum&);
  131. friend ostream& operator<< (ostream &COUT, Datum &obj) {
  132. COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
  133. return COUT;
  134. }
  135. };
  136. bool operator==(const Datum& d1, const Datum& d2){
  137. return (*d1._dan == *d2._dan&&*d1._mjesec == *d2._mjesec&&*d1._godina == *d2._godina);
  138. }
  139. bool operator<(const Datum& d1, const Datum& d2){
  140. if (*d1._godina < *d2._godina)
  141. return true;
  142. else if (*d1._godina == *d2._godina && *d1._mjesec < *d2._mjesec)
  143. return true;
  144. else if (*d1._godina == *d2._godina&&*d1._mjesec == *d2._mjesec&&*d1._dan < *d2._dan)
  145. return true;
  146. return false;
  147. }
  148. bool operator>(const Datum& d1, const Datum& d2){
  149. if (*d1._godina > *d2._godina)
  150. return true;
  151. else if (*d1._godina == *d2._godina && *d1._mjesec > *d2._mjesec)
  152. return true;
  153. else if (*d1._godina == *d2._godina&&*d1._mjesec == *d2._mjesec&&*d1._dan > *d2._dan)
  154. return true;
  155. return false;
  156. }
  157.  
  158.  
  159. enum ListaKurseva { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
  160. char *listaKurseva_txt[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals", "MasteringSQL", "WindowsSecurity" };
  161. class Kurs {
  162. ListaKurseva _kurs;
  163. Datum * _pocetak;
  164. Datum * _kraj;
  165. char * _imePredavaca;
  166. public:
  167. Kurs(ListaKurseva kurs, char* imePredavaca, Datum pocetak, Datum kraj){
  168. _kurs = kurs;
  169. _imePredavaca = upisiString(imePredavaca);
  170. _pocetak = new Datum(pocetak);
  171. _kraj = new Datum(kraj);
  172. }
  173. ~Kurs(){
  174. delete _pocetak; _pocetak = nullptr;
  175. delete _kraj; _kraj = nullptr;
  176. delete[]_imePredavaca; _imePredavaca = nullptr;
  177. }
  178. Kurs(const Kurs& obj){
  179. _kurs = obj._kurs;
  180. _imePredavaca = upisiString(obj._imePredavaca);
  181. _pocetak = new Datum(*obj._pocetak);
  182. _kraj = new Datum(*obj._kraj);
  183. }
  184. Kurs &operator=(const Kurs& obj){
  185. if (this != &obj){
  186. delete _pocetak;
  187. delete _kraj;
  188. delete[]_imePredavaca;
  189.  
  190. _kurs = obj._kurs;
  191. _imePredavaca = upisiString(obj._imePredavaca);
  192. _pocetak = new Datum(*obj._pocetak);
  193. _kraj = new Datum(*obj._kraj);
  194. }
  195. return *this;
  196. }
  197. Datum GetPocetak(){ return *_pocetak; }
  198. Datum GetKraj(){ return *_kraj; }
  199. bool operator< (const Kurs &obj){
  200. return (*_pocetak < *obj._pocetak);
  201. }
  202. friend bool operator==(const Kurs&, const Kurs&);
  203. friend ostream& operator<<(ostream&, const Kurs&);
  204. };
  205. ostream& operator<<(ostream& ispis, const Kurs& k){
  206. ispis << "Kurs: " << listaKurseva_txt[k._kurs] << endl;
  207. ispis << "Ime predavaca: " << k._imePredavaca << endl;
  208. ispis << "Pocetak kursa: " << *k._pocetak << endl;
  209. ispis << "Zavrsetak kursa: " << *k._kraj << endl;
  210. return ispis;
  211. }
  212. bool operator==(const Kurs& k1, const Kurs& k2){
  213. return (k1._kurs == k2._kurs && *k1._pocetak == *k2._pocetak && *k1._kraj == *k2._kraj && strcmp(k1._imePredavaca, k2._imePredavaca) == 0);
  214. }
  215.  
  216. class Polaznik {
  217. static int ID;
  218. const int _polaznikID; //svakom novom studentu automatski dodijeliti novi ID (autoincrement)
  219. char * _imePrezime;
  220. vector<Kurs> _pohadjaniKursevi;
  221. public:
  222. Polaznik(char * imePrezime) :_polaznikID(ID++) {
  223. int size = strlen(imePrezime) + 1;
  224. _imePrezime = new char[size];
  225. strcpy_s(_imePrezime, size, imePrezime);
  226. }
  227. Polaznik(const Polaznik& obj) : _polaznikID(obj._polaznikID){
  228. _imePrezime = upisiString(obj._imePrezime);
  229. _pohadjaniKursevi = obj._pohadjaniKursevi;
  230. }
  231. Polaznik &operator=(const Polaznik& obj){
  232. if (this != &obj){
  233. delete[] _imePrezime;
  234.  
  235. _imePrezime = upisiString(obj._imePrezime);
  236. _pohadjaniKursevi = obj._pohadjaniKursevi;
  237. int(_polaznikID) = obj._polaznikID;
  238. }
  239. return *this;
  240. }
  241. ~Polaznik() { delete[] _imePrezime; _imePrezime = nullptr; }
  242. bool AddKurs(Kurs kurs){
  243. vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
  244. for (it; it < _pohadjaniKursevi.end(); it++)
  245. {
  246. if (*it == kurs)
  247. //throw Izuzetak("Korisnik je vec pohadjao taj kurs!", __LINE__, __DATE__);
  248. return false;
  249. }
  250. _pohadjaniKursevi.push_back(kurs);
  251. sort(_pohadjaniKursevi.begin(), _pohadjaniKursevi.end());
  252. return true;
  253. }
  254. bool RemoveKurs(Kurs kurs){
  255. vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
  256. for (it; it < _pohadjaniKursevi.end(); it++)
  257. {
  258. if (*it == kurs)
  259. _pohadjaniKursevi.erase(it);
  260. return true;
  261. }
  262. throw Izuzetak("Ne postoji odabrani kurs!", __LINE__, __DATE__);
  263. return false;
  264. }
  265. /*bool operator== (const Polaznik &obj)
  266. {
  267. int i = 0;
  268. if (strcmp(_imePrezime, obj._imePrezime) == 0)
  269. {
  270. for (vector<Kurs>::iterator it = _pohadjaniKursevi.begin(); it != _pohadjaniKursevi.end(); it++)
  271. {
  272. if (*it == obj._pohadjaniKursevi[i])
  273. return true;
  274. i++;
  275. }
  276. }
  277. return false;
  278. }*/
  279. bool operator ==(const Polaznik & a)
  280. {
  281. if (strcmp(_imePrezime, a._imePrezime) == 0)
  282. {
  283. int brojac = 0;
  284. for (int i = 0; i<_pohadjaniKursevi.size(); i++)
  285. {
  286. if (_pohadjaniKursevi[i] == a._pohadjaniKursevi[i])
  287. brojac++;
  288. }
  289. if (brojac == _pohadjaniKursevi.size())
  290. return true;
  291. }
  292. return false;
  293. }
  294. friend ostream& operator<<(ostream&, Polaznik&);
  295. };
  296. int Polaznik::ID = 1;
  297. ostream& operator<<(ostream& ispis, Polaznik& p){
  298. ispis << p._imePrezime << " sa ID brojem: " << p.ID << endl;
  299. ispis << "Pohadjani kursevi: ";
  300. ostream_iterator<Kurs> it(ispis,"\n");
  301. copy(p._pohadjaniKursevi.begin(), p._pohadjaniKursevi.end(), it);
  302. return ispis;
  303. }
  304.  
  305. class SkillsCentar {
  306. string _nazivCentra;
  307. vector<Kurs> _kursevi;//kursevi koje nudi odredjeni centar
  308. Kolekcija<Kurs *, Polaznik*, 150> _aplikanti;
  309. public:
  310. SkillsCentar(string naziv) { _nazivCentra = naziv; }
  311. SkillsCentar(const SkillsCentar & obj) :_kursevi(obj._kursevi), _aplikanti(obj._aplikanti) {
  312. _nazivCentra = obj._nazivCentra;
  313. }
  314. SkillsCentar& operator=(const SkillsCentar& obj){
  315. if (this != &obj){
  316. _nazivCentra = obj._nazivCentra;
  317. _kursevi = obj._kursevi;
  318. _aplikanti = obj._aplikanti;
  319. }
  320. return *this;
  321. }
  322. bool ProvjeriKoliziju(Kurs &kurs){
  323. vector<Kurs>::iterator it = _kursevi.begin();
  324. for (it; it != _kursevi.end(); it++)
  325. {
  326. if (it->GetPocetak() < kurs.GetPocetak() && it->GetKraj() > kurs.GetKraj())
  327. //throw Izuzetak("Kolizija datuma kursa!", __LINE__, __DATE__);
  328. return false;
  329. }
  330. return true;
  331. }
  332. void AddKurs(Kurs &kurs){
  333. vector<Kurs>::iterator it = _kursevi.begin();
  334. for (it; it != _kursevi.end(); it++)
  335. {
  336. if (*it==kurs)
  337. //throw Izuzetak("Nemoguce dodavanje 2 ista kursa u centar!", __LINE__, __DATE__);
  338. return;
  339. }
  340. _kursevi.push_back(kurs);
  341. cout << "Kurs dodan!" << endl;
  342. }
  343. void AddAplikaciju(Kurs& kurs,Polaznik& polaznik){
  344. vector<Kurs>::iterator it = _kursevi.begin();
  345. for (it; it != _kursevi.end(); it++)
  346. {
  347. if (*it == kurs)
  348. _aplikanti.AddElement(new Kurs(kurs), new Polaznik(polaznik));
  349. }
  350. cout << "Aplikacija dodana!" << endl;
  351. }
  352. friend ostream &operator<< (ostream &c, SkillsCentar &obj)
  353. {
  354. c << "Naziv centra: " << obj._nazivCentra << "\nAplikanti:\n";
  355. for (int i = 0; i < obj._aplikanti.GetTrenutno(); i++)
  356. {
  357. c << *obj._aplikanti.GetElement1(i) << endl;
  358. c << *obj._aplikanti.GetElement2(i) << endl;
  359. }
  360. c << "\nKursevi:\n";
  361. ostream_iterator<Kurs> it(c, "\n");
  362. copy(obj._kursevi.begin(), obj._kursevi.end(), it);
  363. return c;
  364. }
  365. };
  366.  
  367. int main()
  368. {
  369. #pragma region TestiranjeDatuma
  370. Datum danas(26, 11, 2015);
  371. Datum sutra(danas);
  372. Datum prekosutra;
  373. prekosutra = danas;
  374. cout << danas << endl << sutra << endl << prekosutra << crt;
  375. #pragma endregion
  376. #pragma region TestiranjeKolekcije
  377. Kolekcija<int, int, 10> kolekcija1;
  378. for (size_t i = 0; i < kolekcija1.GetMax(); i++)
  379. kolekcija1.AddElement(i, i + 2);
  380. cout << kolekcija1.GetElement1(0) << " " << kolekcija1.GetElement2(0) << endl;
  381. cout << kolekcija1 << endl;
  382. Kolekcija<int, int, 10> kolekcija2;
  383. kolekcija2 = kolekcija1;
  384. cout << kolekcija2 << crt;
  385. if (kolekcija1.GetTrenutno() == kolekcija2.GetTrenutno())
  386. cout << "ISTI BROJ ELEMENATA" << endl;
  387. Kolekcija<int, int, 10> kolekcija3(kolekcija2);
  388. cout << kolekcija3 << crt;
  389. #pragma endregion
  390. #pragma region TestiranjeKursa
  391. Kurs sef(SoftwareEngeneeringFundamentals, "Jasmin Azemovic", Datum(28, 1, 2016), Datum(15, 2, 2016));
  392. cout << sef << crt;
  393. Kurs msql(MasteringSQL, "Adel Handzic", Datum(28, 2, 2016), Datum(15, 3, 2016));
  394. //sef = msql;
  395. if (sef == msql)//kursevi su isti ako posjeduju identicne vrijednosti svih atributa
  396. cout << "ISTI SU KURSEVI" << crt;
  397. Kurs msql2(msql);
  398. cout << msql2 << crt;
  399. #pragma endregion
  400. #pragma region TestiranjePolaznika
  401. Polaznik denis("Denis Music");
  402. Polaznik denis2("Denis2 Music2");
  403. try{
  404. if (denis.AddKurs(sef)) //<<<< NAKON DODAVANJA SVAKOG NOVOG KURSA IZVRSITI NJIHOVO SORTIRANJE - NACIN SORTIRANJA PO VASEM IZBORU
  405. cout << "Polazniku " << denis << " uspjesno dodat kurs " << sef << crt;
  406. if (denis.AddKurs(msql))
  407. cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << crt;
  408. if (denis.AddKurs(msql))//<<<< NIJE DOZVOLJENO DODATI IDENTICNE KURSEVE, PRILIKOM PROVJERE KORISTITI ITERATOR
  409. cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << crt;
  410. if (denis.RemoveKurs(msql))
  411. cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << msql << crt;
  412. if (denis.RemoveKurs(sef))
  413. cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << sef << crt;
  414.  
  415. cout << denis2 << crt;//<<<<<KORISTITI OSTREAM_ITERATOR
  416. denis2 = denis;
  417. if (denis == denis2)//polaznici su isti ako imaju isto ime i ako su pohadjali iste kurseve
  418. cout << "ISTI SU" << crt;
  419. }
  420. catch (Izuzetak & err) {
  421. cout << err << endl;
  422. }
  423. #pragma endregion
  424. #pragma region TestiranjeCentra
  425. try{
  426. SkillsCentar mostar("Skills Center Mostar");
  427. if (mostar.ProvjeriKoliziju(sef))//<<<JEDAN KURS NE SMIJE POCETI DOK DRUGI TRAJE TJ. VRIJEME ODRZAVANJA KURSA SE NE SMIJE POKLAPATI
  428. mostar.AddKurs(sef);
  429. if (mostar.ProvjeriKoliziju(msql))
  430. mostar.AddKurs(msql);
  431. if (mostar.ProvjeriKoliziju(msql2))
  432. mostar.AddKurs(msql2);//<<<< ONEMOGUCITI DODAVANJE IDENTICNIH KURSEVA
  433.  
  434. mostar.AddAplikaciju(sef, denis);//<<< ONEMOGUCITI APLICIRANJE ZA KURSEVE KOJI NISU REGISTROVANI U CENTRU
  435. mostar.AddAplikaciju(msql, denis);
  436. mostar.AddAplikaciju(msql, denis);//<<< ONEMOGUCITI APLICIRANJE ZA ISTI KURS
  437.  
  438. //mostar.DodajUspjesnoOkoncanKurs(1, sef);//BROJ 1 OZNACAVA id STUDENTA. FUNKCIJA JE ZADUZENA DA STUDENTU DODA KURS KOJI JE POSLAT KAO PARAMETAR. PREDUSLOV ZA DODAVANJE JE DA JE STUDENT PRETHODNO APLICIRAO ZA TAJ KURS
  439. //vector<Polaznik> listaPolaznika = mostar.GetPolazniciByPredavac("Jasmin Azemovic");//VRACA INFORMACIJE O POLAZNICIMA KOJI SU KOD ODREDJENOG PREDAVACA USPJESNO OKONCALI KURS
  440.  
  441. //if (mostar.RemoveKurs(sef))//ONEMOGUCITI UKLANJANJE KURSA KOJI SU VEC PRIJAVILI NEKI OD POLAZNIKA
  442. //cout << "Kurs " << sef << " uspjesno uklonjen iz cetra " << mostar << endl;
  443.  
  444. SkillsCentar sarajevo = mostar;
  445. cout << sarajevo << crt;
  446. }
  447. catch (Izuzetak & err) {
  448. cout << err << endl;
  449. }
  450. #pragma endregion
  451. system("pause>0");
  452. return 0;
  453. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement