Advertisement
Guest User

Untitled

a guest
Jun 27th, 2017
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.93 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. #include <iterator>
  5. #include <exception>
  6. using namespace std;
  7.  
  8. class Izuzetak :public exception {
  9. string _datum;
  10. int _linija;
  11. public:
  12. Izuzetak(string datum, int linija) {
  13. _datum = datum;
  14. _linija = linija;
  15. }
  16. friend ostream & operator<<(ostream &c, Izuzetak & i) {
  17. c << "Linija: " << i._linija << " Datum: " << i._datum << endl;
  18. return c;
  19. }
  20. };
  21. template<class T1, class T2, int max>
  22. class Kolekcija {
  23. T1 * _elementi1[max];
  24. T2 * _elementi2[max];
  25. int * _trenutno;
  26. public:
  27. Kolekcija() {
  28. for (size_t i = 0; i < max; i++)
  29. {
  30. _elementi1[i] = nullptr;
  31. _elementi2[i] = nullptr;
  32. }
  33. _trenutno = new int(0);
  34. }
  35. void AddElement(T1 e1, T2 e2) {
  36. if (*_trenutno >= max)
  37. throw exception("Maximalan broj elemenata!");
  38. else {
  39. _elementi1[(*_trenutno)] = new T1(e1);
  40. _elementi2[(*_trenutno)] = new T2(e2);
  41. (*_trenutno)++;
  42. }
  43. }
  44. T1 GetElement1(int lok) { return *_elementi1[lok]; }
  45. T1 GetElement2(int lok) { return *_elementi2[lok]; }
  46. int GetTrenutno() { return *_trenutno; }
  47. friend ostream & operator <<(ostream & c, Kolekcija & obj) {
  48. for (size_t i = 0; i < obj.GetTrenutno(); i++)
  49. {
  50. c << obj.GetElement1(i) << " - " << obj.GetElement2(i) << endl;
  51. }
  52. return c;
  53. }
  54. Kolekcija(const Kolekcija & original) {
  55. for (size_t i = 0; i < *original._trenutno; i++)
  56. {
  57. _elementi1[i] = original._elementi1[i];
  58. _elementi2[i] = original._elementi2[i];
  59. }
  60. _trenutno = original._trenutno;
  61. }
  62. int GetMax() { return max; }
  63. };
  64.  
  65. class Datum {
  66. int *_dan, *_mjesec, *_godina;
  67. public:
  68. Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  69. _dan = new int(dan);
  70. _mjesec = new int(mjesec);
  71. _godina = new int(godina);
  72. }
  73. ~Datum() {
  74. delete _dan; _dan = nullptr;
  75. delete _mjesec; _mjesec = nullptr;
  76. delete _godina; _godina = nullptr;
  77. }
  78. Datum(const Datum &original) {
  79. _dan = new int(*original._dan);
  80. _mjesec = new int(*original._mjesec);
  81. _godina = new int(*original._godina);
  82. }
  83. bool operator<(Datum & d) {
  84. if (*_godina < *d._godina)
  85. return false;
  86. if (*_godina == *d._godina) {
  87. if (*_mjesec < *d._mjesec)
  88. return false;
  89. }
  90. if (*_godina == *d._godina) {
  91. if (*_mjesec == *d._mjesec)
  92. if (*_dan < *d._dan)
  93. return false;
  94. }
  95. return true;
  96. }
  97.  
  98. Datum & operator=(Datum & original) {
  99. if (this != &original) {
  100. _dan = new int(*original._dan);
  101. _mjesec = new int(*original._mjesec);
  102. _godina = new int(*original._godina);
  103. }
  104. return *this;
  105. }
  106. bool operator==(const Datum & original) {
  107. return(*_dan == *original._dan && *_mjesec == *original._mjesec&& *_godina == *original._godina);
  108. }
  109. friend ostream& operator<< (ostream &COUT, Datum &obj) {
  110. COUT << *obj._dan << " " << *obj._mjesec << " " << *obj._godina;
  111. return COUT;
  112. }
  113. };
  114. enum ListaKurseva { HtmlCSSJavaScript, SoftwareEngeneeringFundamentals, MasteringSQL, WindowsSecurity };
  115. char *listakurseva[] = { "HtmlCSSJavaScript", "SoftwareEngeneeringFundamentals"," MasteringSQL", "WindowsSecurity" };
  116. class Kurs {
  117. ListaKurseva _kurs;
  118. Datum * _pocetak;
  119. Datum * _kraj;
  120. char * _imePredavaca;
  121. public:
  122. Kurs(ListaKurseva kurs, char * imepredavaca, Datum pocetak, Datum kraj) {
  123. _kurs = kurs;
  124. _pocetak = new Datum(pocetak);
  125. _kraj = new Datum(kraj);
  126. int size = strlen(imepredavaca) + 1;
  127. _imePredavaca = new char[size];
  128. strcpy_s(_imePredavaca, size, imepredavaca);
  129.  
  130. }
  131. ListaKurseva GetKurs() { return _kurs; }
  132. Datum GetPocetak() { return *_pocetak; }
  133. Datum GetKraj() { return *_kraj; }
  134. Kurs(const Kurs & original) {
  135. _kurs = original._kurs;
  136. _pocetak = new Datum(*original._pocetak);
  137. _kraj = new Datum(*original._kraj);
  138. int size = strlen(original._imePredavaca) + 1;
  139. _imePredavaca = new char[size];
  140. strcpy_s(_imePredavaca, size, original._imePredavaca);
  141. }
  142. Kurs & operator=(Kurs & original) {
  143. if (this != &original) {
  144. _kurs = original._kurs;
  145. *_pocetak = *original._pocetak;
  146. *_kraj = *original._kraj;
  147. int size = strlen(original._imePredavaca) + 1;
  148. _imePredavaca = new char[size];
  149. strcpy_s(_imePredavaca, size, original._imePredavaca);
  150. }
  151. return *this;
  152. }
  153. bool operator==(Kurs & original) {
  154. return (_kurs == original._kurs && *_pocetak == *original._pocetak && *_kraj == *original._kraj && strcmp(_imePredavaca, original._imePredavaca) == 0);
  155. }
  156. bool operator!=(Kurs & original) {
  157. return !(*this == original);
  158. }
  159. friend ostream & operator<<(ostream & c, Kurs & obj) {
  160. c << listakurseva[obj._kurs] << "---" << *obj._pocetak << "---" << *obj._kraj << "---" << obj._imePredavaca << endl;
  161. return c;
  162. }
  163. ~Kurs() {
  164. delete _pocetak; _pocetak = nullptr; delete _kraj; _kraj = nullptr; delete[]_imePredavaca; _imePredavaca = nullptr;
  165. }
  166. };
  167. class Polaznik {
  168. static int ID;
  169. const int _polaznikID; //svakom novom studentu automatski dodijeliti novi ID (autoincrement)
  170. char * _imePrezime;
  171. vector<Kurs> _pohadjaniKursevi;
  172. public:
  173. Polaznik(char * imePrezime) :_polaznikID(ID++) {
  174. int size = strlen(imePrezime) + 1;
  175. _imePrezime = new char[size];
  176. strcpy_s(_imePrezime, size, imePrezime);
  177. }
  178. ~Polaznik() { delete[] _imePrezime; }
  179. friend ostream &operator<<(ostream &c, Polaznik & p) {
  180. c << p._polaznikID << "." << p._imePrezime;
  181. for (size_t i = 0; i <p._pohadjaniKursevi.size(); i++)
  182. {
  183. c << p._pohadjaniKursevi[i] << ",";
  184. }
  185. c << endl;
  186. return c;
  187. }
  188. bool operator==(Polaznik & original) {
  189. if (_pohadjaniKursevi.size() != original._pohadjaniKursevi.size())
  190. return false;
  191. for (int i = 0; i < _pohadjaniKursevi.size(); i++)
  192. {
  193. if (_pohadjaniKursevi[i] != original._pohadjaniKursevi[i])
  194. return false;
  195. }
  196. return (strcmp(_imePrezime, original._imePrezime) == 0);
  197. }
  198. Polaznik & operator=(Polaznik & original) {
  199. int size = strlen(original._imePrezime) + 1;
  200. _imePrezime = new char[size];
  201. strcpy_s(_imePrezime, size, original._imePrezime);
  202. for (size_t i = 0; i < original._pohadjaniKursevi.size(); i++)
  203. {
  204. _pohadjaniKursevi[i] = original._pohadjaniKursevi[i];
  205. }
  206. return *this;
  207. }
  208. bool AddKurs(Kurs kurs)throw(Izuzetak) {
  209. vector<Kurs>::iterator it = _pohadjaniKursevi.begin();
  210. for (it; it !=_pohadjaniKursevi.end(); it++)
  211. {
  212. if (*it == kurs) {
  213. throw Izuzetak(__DATE__, __LINE__);
  214. }
  215. }
  216. _pohadjaniKursevi.push_back(kurs);
  217. return true;
  218. }
  219. bool RemoveKurs(Kurs kurs) {
  220. for (size_t i = 0; i < _pohadjaniKursevi.size(); i++)
  221. {
  222. if (_pohadjaniKursevi[i] == kurs) {
  223. _pohadjaniKursevi.erase(_pohadjaniKursevi.begin() + i);
  224. return true;
  225. }
  226. }
  227. throw Izuzetak(__DATE__, __LINE__);
  228. return false;
  229. }
  230. };
  231. int Polaznik::ID = 0;
  232. class SkillsCentar {
  233. string _nazivCentra;
  234. vector<Kurs> _kursevi;//kursevi koje nudi odredjeni centar
  235. Kolekcija<Kurs *, Polaznik*, 150> _aplikanti;
  236. public:
  237. SkillsCentar(string naziv) { _nazivCentra = naziv; }
  238. SkillsCentar(const SkillsCentar & obj) :_kursevi(obj._kursevi), _aplikanti(obj._aplikanti) {
  239. _nazivCentra = obj._nazivCentra;
  240. }
  241. void AddKurs(Kurs & kurs)throw(Izuzetak) {
  242. for (size_t i = 0; i < _kursevi.size(); i++)
  243. {
  244. if (_kursevi[i] == kurs)
  245. return;
  246. }
  247. _kursevi.push_back(kurs);
  248. }
  249. bool ProvjeriKoliziju(Kurs kurs)throw(Izuzetak) {
  250. for (int i = 0; i < _kursevi.size(); i++)
  251. {
  252. if (!(_kursevi[i].GetKraj() < kurs.GetPocetak())) {
  253. throw Izuzetak(__DATE__, __LINE__);
  254. return false;
  255. }
  256. }
  257. return true;
  258. }
  259. void AddAplikaciju(Kurs kurs, Polaznik & pol)throw(Izuzetak) {
  260.  
  261. }
  262. };
  263. char *crt = "\n---------------------------------------\n";
  264.  
  265. void main()
  266. {
  267. /****************************************************************************
  268. 1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  269. 2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR CE BITI OZNACENO KAO "RE"
  270. 3. SPASAVAJTE PROJEKAT KAKO BI SE SPRIJECILO GUBLJENJE URADJENOG ZADATKA
  271. 4. PROGRAMSKI CODE SE TAKODJER NALAZI U FAJLU CODE_.TXT
  272. 5. NAZIVI FUNKCIJA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U.OSTALE, POMOĆNE FUNKCIJE MOŽETE IMENOVATI PO ŽELJI.
  273. 6. IZUZETAK BACITE KAD GOD JE TO POTREBNO.
  274. ****************************************************************************/
  275.  
  276. #pragma region TestiranjeDatuma
  277. Datum danas(26, 11, 2015);
  278. Datum sutra(danas);
  279. Datum prekosutra;
  280. prekosutra = danas;
  281. cout << danas << endl << sutra << endl << prekosutra << crt;
  282. #pragma endregion
  283. #pragma region TestiranjeKolekcije
  284. Kolekcija<int, int, 10> kolekcija1;
  285. for (size_t i = 0; i < kolekcija1.GetMax(); i++)
  286. kolekcija1.AddElement(i, i + 2);
  287. cout << kolekcija1.GetElement1(0) << " " << kolekcija1.GetElement2(0) << endl;
  288. cout << kolekcija1 << endl;
  289. Kolekcija<int, int, 10> kolekcija2;
  290. kolekcija2 = kolekcija1;
  291. cout << kolekcija2 << crt;
  292. if (kolekcija1.GetTrenutno() == kolekcija2.GetTrenutno())
  293. cout << "ISTI BROJ ELEMENATA" << endl;
  294. Kolekcija<int, int, 10> kolekcija3(kolekcija2);
  295. cout << kolekcija3 << crt;
  296. //#pragma endregion
  297. //#pragma region TestiranjeKursa
  298. Kurs sef(SoftwareEngeneeringFundamentals, "Jasmin Azemovic", Datum(28, 1, 2016), Datum(15, 2, 2016));
  299. cout << sef << endl;
  300. Kurs msql(MasteringSQL, "Adel Handzic", Datum(28, 2, 2016), Datum(15, 3, 2016));
  301. sef = msql;
  302. if (sef == msql)//kursevi su isti ako posjeduju identicne vrijednosti svih atributa
  303. cout << "ISTI SU KURSEVI" << endl;
  304. Kurs msql2(msql);
  305. cout << msql2 << endl;
  306. //#pragma endregion
  307. //#pragma region TestiranjePolaznika
  308. Polaznik denis("Denis Music");
  309. Polaznik denis2("Denis2 Music2");
  310. try {
  311. if (denis.AddKurs(sef)) //<<<< NAKON DODAVANJA SVAKOG NOVOG KURSA IZVRSITI NJIHOVO SORTIRANJE - NACIN SORTIRANJA PO VASEM IZBORU
  312. cout << "Polazniku " << denis << " uspjesno dodat kurs " << sef << endl;
  313. //if (denis.AddKurs(msql))
  314. // cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
  315. //if (denis.AddKurs(msql))//<<<< NIJE DOZVOLJENO DODATI IDENTICNE KURSEVE, PRILIKOM PROVJERE KORISTITI ITERATOR
  316. // cout << "Polazniku " << denis << " uspjesno dodat kurs " << msql << endl;
  317. if (denis.RemoveKurs(msql))
  318. cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << msql << endl;
  319. /*if (denis.RemoveKurs(sef))
  320. cout << "Polazniku " << denis << " uspjesno uklonjen kurs " << sef << endl;*/
  321.  
  322. cout << denis2 << endl;//<<<<<KORISTITI OSTREAM_ITERATOR
  323. denis2 = denis;
  324. if (denis == denis2)//polaznici su isti ako imaju isto ime i ako su pohadjali iste kurseve
  325. cout << "ISTI SU" << endl;
  326. }
  327. catch (Izuzetak & err) {
  328. cout << err << endl;
  329. }
  330. //#pragma endregion
  331. //
  332. //#pragma region TestiranjeCentra
  333. // try {
  334. SkillsCentar mostar("Skills Center Mostar");
  335. if (mostar.ProvjeriKoliziju(sef))//<<<JEDAN KURS NE SMIJE POCETI DOK DRUGI TRAJE TJ. VRIJEME ODRZAVANJA KURSA SE NE SMIJE POKLAPATI
  336. mostar.AddKurs(sef);
  337. if (mostar.ProvjeriKoliziju(msql))
  338. mostar.AddKurs(msql);
  339. if (mostar.ProvjeriKoliziju(msql2))
  340. mostar.AddKurs(msql2);//<<<< ONEMOGUCITI DODAVANJE IDENTICNIH KURSEVA
  341.  
  342. mostar.AddAplikaciju(sef, denis);//<<< ONEMOGUCITI APLICIRANJE ZA KURSEVE KOJI NISU REGISTROVANI U CENTRU
  343. mostar.AddAplikaciju(msql, denis);
  344. mostar.AddAplikaciju(msql, denis);//<<< ONEMOGUCITI APLICIRANJE ZA ISTI KURS
  345. //
  346. // 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
  347. // vector<Polaznik> listaPolaznika = mostar.GetPolazniciByPredavac("Jasmin Azemovic");//VRACA INFORMACIJE O POLAZNICIMA KOJI SU KOD ODREDJENOG PREDAVACA USPJESNO OKONCALI KURS
  348. //
  349. // if (mostar.RemoveKurs(sef))//ONEMOGUCITI UKLANJANJE KURSA KOJI SU VEC PRIJAVILI NEKI OD POLAZNIKA
  350. // cout << "Kurs " << sef << " uspjesno uklonjen iz cetra " << mostar << endl;
  351. //
  352. // SkillsCentar sarajevo = mostar;
  353. // cout << sarajevo << endl;
  354. // }
  355. // catch (Izuzetak & err) {
  356. // cout << err << endl;
  357. // }
  358. #pragma endregion
  359. system("pause");
  360. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement