Advertisement
Guest User

Untitled

a guest
Jan 20th, 2018
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 20.26 KB | None | 0 0
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<iterator>
  5. #include<regex>
  6. #include<mutex>
  7. #include<thread>
  8. #include<sstream>
  9. #include<exception>
  10. using namespace std;
  11. char *crt = "\n-----------------------------------------------\n";
  12. mutex cuvarResursa;
  13. enum Status { ZAHTJEV_ZAPRIMLJEN, ODUSTAO, ODBIJENA, IZDATA, ISTEKLA, PONISTENA };
  14. char* ispisStatus[] = { "ZAHTJEV_ZAPRIMLJEN","ODUSTAO","ODBIJENA","IZDATA","ISTEKLA","PONISTENA" };
  15. enum Sortiranje { RASTUCI, OPADAJUCI };
  16. char* ispisSortiranje[] = { "RASTUCI","OPADAJUCI" };
  17. enum Drzava { SAD, AUSTRALIJA, ENGLESKA };
  18. char* ispisDrzava[] = { "SAD","AUSTRALIJA","ENGLESKA" };
  19.  
  20. class Datum {
  21. int *_dan, *_mjesec, *_godina;
  22. public:
  23. Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  24. _dan = new int(dan);
  25. _mjesec = new int(mjesec);
  26. _godina = new int(godina);
  27. }
  28. Datum(const Datum& obj) {
  29. _dan = new int(*obj._dan);
  30. _mjesec = new int(*obj._mjesec);
  31. _godina = new int(*obj._godina);
  32. }
  33. Datum& operator=(const Datum& obj) {
  34. if (this != &obj) {
  35. delete _dan;
  36. delete _mjesec;
  37. delete _godina;
  38. _dan = new int(*obj._dan);
  39. _mjesec = new int(*obj._mjesec);
  40. _godina = new int(*obj._godina);
  41. }
  42. return *this;
  43. }
  44. ~Datum() {
  45. delete _dan; _dan = nullptr;
  46. delete _mjesec; _mjesec = nullptr;
  47. delete _godina; _godina = nullptr;
  48. }
  49. friend ostream& operator<< (ostream &COUT, Datum &obj) {
  50. COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina;
  51. return COUT;
  52. }
  53. Datum operator++() {
  54. (*_dan)++;
  55. return *this;
  56. }
  57. bool operator==(Datum& obj) {
  58. if (*_dan == *obj._dan && *_mjesec == *obj._mjesec && *_godina == *obj._godina)
  59. return true;
  60. return false;
  61. }
  62. int GetGodina() { return *_godina; }
  63. int ToDays() {
  64. return *_godina * 365 + *_mjesec * 30 + *_dan;
  65. }
  66. };
  67.  
  68. template<class T1, class T2, int max>
  69. class FITKolekcija {
  70. T1 * _elementi1[max];
  71. T2 * _elementi2[max];
  72. int _trenutno;
  73. public:
  74. FITKolekcija() {
  75. for (size_t i = 0; i < max; i++) {
  76. _elementi1[i] = nullptr;
  77. _elementi2[i] = nullptr;
  78. }
  79. _trenutno = 0;
  80. }
  81. FITKolekcija(const FITKolekcija& obj) {
  82. for (int i = 0; i < max; i++) {
  83. _elementi1[i] = nullptr;
  84. _elementi2[i] = nullptr;
  85. }
  86. _trenutno = obj._trenutno;
  87. for (int i = 0; i < obj._trenutno; i++) {
  88. _elementi1[i] = new T1(*obj._elementi1[i]);
  89. _elementi2[i] = new T2(*obj._elementi2[i]);
  90. }
  91. }
  92. FITKolekcija& operator=(const FITKolekcija& obj) {
  93. if (this != &obj) {
  94. for (int i = 0; i < _trenutno; i++) {
  95. delete _elementi1[i];
  96. delete _elementi2[i];
  97. }
  98. _trenutno = obj._trenutno;
  99. for (int i = 0; i < obj._trenutno; i++) {
  100. _elementi1[i] = new T1(*obj._elementi1[i]);
  101. _elementi2[i] = new T2(*obj._elementi2[i]);
  102. }
  103. }
  104. return *this;
  105. }
  106. ~FITKolekcija() {
  107. for (size_t i = 0; i < max; i++) {
  108. delete _elementi1[i]; _elementi1[i] = nullptr;
  109. delete _elementi2[i]; _elementi2[i] = nullptr;
  110. }
  111. }
  112. T1 * GetT1(int lokacija) { return _elementi1[lokacija]; }
  113. T2 * GetT2(int lokacija) { return _elementi2[lokacija]; }
  114. int GetTrenutno() { return _trenutno; }
  115. void Dodaj(T1 e1, T2 e2) {
  116. if (_trenutno >= max)
  117. throw exception("Nije moguce dodati novi elementi.");
  118. _elementi1[_trenutno] = new T1(e1);
  119. _elementi2[_trenutno] = new T2(e2);
  120. _trenutno++;
  121. cout << "Elementi dodani." << endl;
  122. }
  123. friend ostream& operator<< (ostream &COUT, FITKolekcija &obj) {
  124. for (size_t i = 0; i < obj._trenutno; i++)
  125. COUT << *obj._elementi1[i] << " " << *obj._elementi2[i] << endl;
  126. return COUT;
  127. }
  128. void Sortiraj(Sortiranje s) {
  129. T1* temp1 = new T1;
  130. T2* temp2 = new T2;
  131. int j = 0;
  132. bool swapped =true;
  133. if (s == RASTUCI) {
  134. while(swapped){
  135. swapped =false;
  136. j++;
  137. for (int i = 0; i < _trenutno-j; i++) {
  138. if (_elementi1[i] < _elementi1[i + 1]) {
  139. temp1 = _elementi1[i + 1];
  140. temp2 = _elementi2[i + 1];
  141. _elementi1[i + 1] = _elementi1[i];
  142. _elementi2[i + 1] = _elementi2[i];
  143. _elementi1[i] = temp1;
  144. _elementi2[i] = temp2;
  145. swapped = true;
  146. }
  147. }
  148. }
  149. }
  150. else if(s==OPADAJUCI){
  151. while (swapped)
  152. {
  153. swapped = false;
  154. j++;
  155. for (int i = 0; i < _trenutno - j; i++) {
  156. if (_elementi1[i + 1] < _elementi1[i]) {
  157. temp1 =_elementi1[i + 1];
  158. temp2 =_elementi2[i + 1];
  159. _elementi1[i + 1] = _elementi1[i];
  160. _elementi2[i + 1] = _elementi2[i];
  161. _elementi1[i] = temp1;
  162. _elementi2[i] = temp2;
  163. swapped = true;
  164. }
  165. }
  166. }
  167. }
  168. cout << "Sortirano." << endl;
  169. }
  170. };
  171.  
  172. void Print(Drzava d, Datum vazenjeOD, Datum vazenjeDO, char* nap, FITKolekcija<Status, string, 10>status) {
  173. lock_guard<mutex>locker(cuvarResursa);
  174. cout << d << " " << vazenjeOD << " " << vazenjeDO << " " << status << endl;
  175. if (nap != nullptr)
  176. cout << nap << endl;
  177. else
  178. cout << "---" << endl;
  179. this_thread::sleep_for(chrono::seconds(2));
  180. }
  181. class Viza {
  182. protected:
  183. Drzava _drzava;
  184. Datum _vazenjeOD;
  185. Datum _vazenjeDO;
  186. char * _napomena;
  187. // string se odnosi na razlog promjene statusa, a moguće je samo 10 izmjena statusa
  188. FITKolekcija<Status, string, 10> _statusi;
  189. public:
  190. Viza(Drzava drzava, Datum _OD, Datum _DO, char * napomena = nullptr) :_vazenjeDO(_DO), _vazenjeOD(_OD)
  191. {
  192. if (napomena != nullptr) {
  193. _napomena = new char[strlen(napomena) + 1];
  194. strcpy_s(_napomena, strlen(napomena) + 1, napomena);
  195. }
  196. else
  197. _napomena = nullptr;
  198. _drzava = drzava;
  199. }
  200. Viza(const Viza& obj) {
  201. _drzava = obj._drzava;
  202. _vazenjeOD = obj._vazenjeOD;
  203. _vazenjeDO = obj._vazenjeDO;
  204. if (obj._napomena != nullptr) {
  205. int size = strlen(obj._napomena) + 1;
  206. _napomena = new char[size];
  207. strcpy_s(_napomena, size, obj._napomena);
  208. }
  209. else {
  210. _napomena = nullptr;
  211. }
  212. _statusi = obj._statusi;
  213. }
  214. Viza& operator=(const Viza& obj) {
  215. if (this != &obj) {
  216. if (_napomena != nullptr) {
  217. delete[] _napomena;
  218. }
  219. _drzava = obj._drzava;
  220. _vazenjeOD = obj._vazenjeOD;
  221. _vazenjeDO = obj._vazenjeDO;
  222. if (obj._napomena != nullptr) {
  223. int size = strlen(obj._napomena) + 1;
  224. _napomena = new char[size];
  225. strcpy_s(_napomena, size, obj._napomena);
  226. }
  227. else {
  228. _napomena = nullptr;
  229. }
  230. _statusi = obj._statusi;
  231. }
  232. }
  233. ~Viza() { delete[] _napomena; _napomena = nullptr; }
  234. Datum GetVazenjeOD() { return _vazenjeOD; }
  235. Datum GetVazenjeDO() { return _vazenjeDO; }
  236. char * GetNapomena() { return _napomena; }
  237. void SetNapomena(string n) {
  238. if(_napomena!=nullptr)
  239. delete[] _napomena;
  240. int size = n.size() + 1;
  241. _napomena = new char[size];
  242. strcpy_s(_napomena, size, n.c_str());
  243. }
  244. FITKolekcija<Status, string, 10> & GetStatuse() { return _statusi; }
  245. virtual void Info() = 0;
  246. friend ostream& operator<<(ostream&, Viza&);
  247. Drzava GetDrzava() { return _drzava; }
  248. bool operator==(Viza& obj) {
  249. if (_drzava == obj.GetDrzava() && _vazenjeOD == obj._vazenjeOD && _vazenjeDO == obj._vazenjeDO)
  250. return true;
  251. return false;
  252. }
  253. };
  254. ostream& operator<<(ostream& Cout, Viza& obj) {
  255. Cout << "Drzava: " << ispisDrzava[obj._drzava] << endl;
  256. Cout << "Datum vazenja OD: " << obj._vazenjeOD << endl;
  257. Cout << "Datum vazenja DO: " << obj._vazenjeDO << endl;
  258. if (obj._napomena != nullptr) {
  259. Cout << "Napomena: " << obj._napomena << endl;
  260. }
  261. else {
  262. Cout << "No napomena." << endl;
  263. }
  264. return Cout;
  265. }
  266.  
  267. class PoslovnaViza :public Viza {
  268. string _kompanija; //naziv kompanije koja potvrđuje da posluje sa aplikantom
  269. public:
  270. PoslovnaViza(Drzava drzava, Datum _OD, Datum _DO, string kompanija, char * napomena = nullptr) : Viza(drzava, _OD, _DO, napomena) {
  271. _kompanija = kompanija;
  272. }
  273. PoslovnaViza(const PoslovnaViza& obj):Viza(obj) {
  274. _kompanija = obj._kompanija;
  275. }
  276. PoslovnaViza& operator=(const PoslovnaViza& obj) {
  277. if (this != &obj) {
  278. Viza::operator=(obj);
  279. _kompanija = obj._kompanija;
  280. }
  281. return *this;
  282. }
  283. friend ostream & operator << (ostream & COUT, PoslovnaViza & obj) {
  284. COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._kompanija << endl;
  285. COUT << ((obj._napomena != nullptr) ? obj._napomena : "") << endl;
  286. COUT << "STATUSI -> " << obj._statusi << endl;
  287. return COUT;
  288.  
  289. }
  290. void Info() {
  291. cout << "Info poslovna viza." << endl;
  292. }
  293. };
  294.  
  295. class TuristickaViza : public Viza {
  296. string _adresa; //adresa hotele ili drugog smještaja na kojoj će aplikant boraviti
  297. public:
  298. TuristickaViza(Drzava drzava, Datum _OD, Datum _DO, string adresa, char * napomena = nullptr) : Viza(drzava, _OD, _DO, napomena) {
  299. _adresa = adresa;
  300. }
  301. TuristickaViza(const TuristickaViza& obj) :Viza(obj) {
  302. _adresa = obj._adresa;
  303. }
  304. TuristickaViza& operator=(const TuristickaViza& obj) {
  305. if (this != &obj) {
  306. Viza::operator=(obj);
  307. _adresa = obj._adresa;
  308. }
  309. return *this;
  310. }
  311. friend ostream & operator << (ostream & COUT, TuristickaViza & obj) {
  312. COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._adresa << endl;
  313. COUT << ((obj._napomena != nullptr) ? obj._napomena : "") << endl;
  314. COUT << "STATUSI -> " << obj._statusi << endl;
  315. return COUT;
  316.  
  317. }
  318. void Info() {
  319. cout << "Info turisticka viza." << endl;
  320. }
  321.  
  322. };
  323.  
  324. class Aplikant {
  325. char * _imePrezime;
  326. Datum * _datumRodjenja;
  327. char * _brojPasosa;
  328. vector<Viza *> _vize;
  329. public:
  330. Aplikant(char * imePrezime, Datum datumRodjenja, char * brPasosa) {
  331. int vel = strlen(imePrezime) + 1;
  332. _imePrezime = new char[vel];
  333. strcpy_s(_imePrezime, vel, imePrezime);
  334. vel = strlen(brPasosa) + 1;
  335. _brojPasosa = new char[vel];
  336. strcpy_s(_brojPasosa, vel, brPasosa);
  337. _datumRodjenja = new Datum(datumRodjenja);
  338. }
  339. Aplikant(const Aplikant& obj) {
  340. int size = strlen(obj._imePrezime) + 1;
  341. _imePrezime = new char[size];
  342. strcpy_s(_imePrezime, size, obj._imePrezime);
  343. _datumRodjenja = new Datum(*obj._datumRodjenja);
  344. size = strlen(obj._brojPasosa) + 1;
  345. _brojPasosa = new char[size];
  346. strcpy_s(_brojPasosa, size, obj._brojPasosa);
  347.  
  348. for (int i = 0; i < obj._vize.size(); i++) {
  349. PoslovnaViza* poslovna = dynamic_cast<PoslovnaViza*>(obj._vize[i]);
  350. if (poslovna != nullptr) {
  351. _vize.push_back(new PoslovnaViza(*poslovna));
  352. }
  353. else {
  354. TuristickaViza* turisticka = dynamic_cast<TuristickaViza*>(obj._vize[i]);
  355. if (turisticka != nullptr) {
  356. _vize.push_back(new TuristickaViza(*turisticka));
  357. }
  358. }
  359. }
  360. }
  361. Aplikant& operator=(const Aplikant& obj) {
  362. if (this != &obj) {
  363. delete[] _imePrezime;
  364. delete _datumRodjenja;
  365. delete[] _brojPasosa;
  366. for (int i = 0; i < _vize.size(); i++) {
  367. delete _vize[i];
  368. }
  369. _vize.clear();
  370. int size = strlen(obj._imePrezime) + 1;
  371. _imePrezime = new char[size];
  372. strcpy_s(_imePrezime, size, obj._imePrezime);
  373. _datumRodjenja = new Datum(*obj._datumRodjenja);
  374. size = strlen(obj._brojPasosa) + 1;
  375. _brojPasosa = new char[size];
  376. strcpy_s(_brojPasosa, size, obj._brojPasosa);
  377. for (int i = 0; i < obj._vize.size(); i++) {
  378. PoslovnaViza* poslovna = dynamic_cast<PoslovnaViza*>(obj._vize[i]);
  379. if (poslovna != nullptr) {
  380. _vize.push_back(new PoslovnaViza(*poslovna));
  381. }
  382. else {
  383. TuristickaViza* turisticka = dynamic_cast<TuristickaViza*>(obj._vize[i]);
  384. if (turisticka != nullptr) {
  385. _vize.push_back(new TuristickaViza(*turisticka));
  386. }
  387. }
  388. }
  389. }
  390. return *this;
  391. }
  392. ~Aplikant() {
  393. delete[]_imePrezime; _imePrezime = nullptr;
  394. delete[]_brojPasosa; _brojPasosa = nullptr;
  395. delete _datumRodjenja; _datumRodjenja = nullptr;
  396. for (size_t i = 0; i < _vize.size(); i++)
  397. {
  398. delete _vize[i]; _vize[i] = nullptr;
  399. }
  400. }
  401. friend ostream & operator << (ostream & COUT, Aplikant & obj) {
  402. COUT << obj._imePrezime << " " << *obj._datumRodjenja << " " << obj._brojPasosa << endl;
  403. COUT << "VIZE -> " << endl;
  404. for (size_t i = 0; i < obj._vize.size(); i++)
  405. COUT << *obj._vize[i] << endl;
  406. return COUT;
  407. }
  408.  
  409. vector<Viza * > GetVize() { return _vize; }
  410. bool DodajVizu(Viza* v) {
  411. /*
  412. NOVA VIZA SE NE MOŽE DODATI UKOLIKO:
  413. - JE APLIKANT MLAĐI OD 10 GODINA
  414. - U TOM PERIODU (ODNOSI SE NA PERIOD VIZE OD - DO) NE POSTOJI VAŽEĆA (POJAM VAŽEĆA PODRAZUMIJEVA DA JE POSLJEDNJI STATUS VIZE BIO IZDATA TJ.
  415. DA VIZA NIJE PONIŠTENA ILI ISTEKLA) VIZA ZA TU DRŽAVU, BEZ OBZIRA NA NJENU VRSTU.
  416. - JE NEKA OD RANIJIH VIZA PONIŠTENA (OVO SE ODNOSI SAMO NA VIZE ZA DRŽAVU: SAD)
  417. */
  418. if (_datumRodjenja->GetGodina() >= 2007)
  419. return false;
  420.  
  421. for (int i = 0; i < _vize.size(); i++) {
  422. int statusi = _vize[i]->GetStatuse().GetTrenutno();
  423. if (statusi == 0)
  424. continue;
  425.  
  426. if (_vize[i]->GetDrzava() != v->GetDrzava())
  427. continue;
  428.  
  429. cout << ispisDrzava[_vize[i]->GetDrzava()] << endl;
  430. cout << ispisStatus[*_vize[i]->GetStatuse().GetT1(statusi - 1)] << endl;
  431. if (*_vize[i]->GetStatuse().GetT1(statusi - 1) == PONISTENA || *_vize[i]->GetStatuse().GetT1(statusi - 1) == ISTEKLA)
  432. return false;
  433.  
  434. /*if (v->GetDrzava() == SAD) {
  435. for (int j = 0; j < statusi; j++) {
  436. if (*_vize[i]->GetStatuse().GetT1(j) == PONISTENA)
  437. return false;
  438. }
  439. }*/
  440. Datum OD = _vize[i]->GetVazenjeOD(); //15022017
  441. Datum DO = _vize[i]->GetVazenjeDO(); //18082017
  442. if (OD.ToDays()<v->GetVazenjeOD().ToDays() && DO.ToDays()>v->GetVazenjeOD().ToDays())
  443. return false;
  444. if (OD.ToDays()<v->GetVazenjeDO().ToDays() && DO.ToDays()>v->GetVazenjeDO().ToDays())
  445. return false;
  446. }
  447.  
  448. PoslovnaViza* poslovna = dynamic_cast<PoslovnaViza*>(v);
  449. if (poslovna != nullptr) {
  450. _vize.push_back(new PoslovnaViza(*poslovna));
  451. return true;
  452. }
  453. else {
  454. TuristickaViza* turisticka = dynamic_cast<TuristickaViza*>(v);
  455. if (turisticka != nullptr) {
  456. _vize.push_back(new TuristickaViza(*turisticka));
  457. return true;
  458. }
  459. }
  460. return false;
  461. }
  462. bool DodajStatus(Viza* v, Status s, char* napomena=" ") {
  463. /*
  464. STATUSI SE MOGU DODAVATI SAMO U REDOSLIJEDU U KOJEM SE NALAZE U ENUMERACIJI NPR.
  465. - NIJE MOGUĆE ODBITI VIZU AKO PRETHODNO NIJE IMALA STATUS DA JE ZAHTJEV_ZAPRIMLJEN;
  466. - NIJE MOGUĆE PONIŠTITI VIZU KOJA PRETHODNO NIJE IZDATA
  467. */
  468. // enum Status { ZAHTJEV_ZAPRIMLJEN, ODUSTAO, ODBIJENA, IZDATA, ISTEKLA, PONISTENA };
  469.  
  470. for (int i = 0; i < _vize.size(); i++) {
  471. if (*_vize[i] == *v) {
  472. for (int j = 0; j < _vize[i]->GetStatuse().GetTrenutno(); j++) {
  473. if (*_vize[i]->GetStatuse().GetT1(j) >= s)
  474. return false;
  475. }
  476.  
  477. _vize[i]->GetStatuse().Dodaj(s, napomena);
  478. return true;
  479. }
  480. }
  481. return false;
  482. }
  483. void PrintajVizu(Viza* v) {
  484. thread printThread(&Print, v->GetDrzava(), v->GetVazenjeOD(), v->GetVazenjeDO(), v->GetNapomena(), v->GetStatuse());
  485. printThread.join();
  486. }
  487. void ZamijeniRijec(char* trazi, char* zamijeniSa) {
  488. for (int i = 0; i < _vize.size(); i++) {
  489. if (_vize[i]->GetNapomena() == nullptr)
  490. continue;
  491. string s;
  492. s= regex_replace(_vize[i]->GetNapomena(), regex(trazi), zamijeniSa);
  493. _vize[i]->SetNapomena(s);
  494. cout << "Zamijenjeno." << endl;
  495. }
  496. }
  497. vector<Viza*> GetVizeByDrzava(Drzava d, Status s) {
  498. vector<Viza*>temp;
  499. for (int i = 0; i < _vize.size(); i++) {
  500. if (_vize[i]->GetDrzava() == d ) {
  501. bool provjera = false;
  502. for (int j = 0; j < _vize[i]->GetStatuse().GetTrenutno(); j++) {
  503. if (*_vize[i]->GetStatuse().GetT1(j) == s) {
  504. provjera = true;
  505. }
  506. }
  507. if (provjera == true)
  508. temp.push_back(_vize[i]);
  509. }
  510. }
  511. return temp;
  512. }
  513. };
  514.  
  515. void main() {
  516. Datum danas(15, 2, 2017);
  517. Datum sutra(++danas); // inkrementiranjem se uvecava dan za 1
  518. Datum prekosutra;
  519. Datum dat15022017(15, 2, 2017), dat18082017(18, 8, 2017), dat11052018(11, 5, 2018), dat11122017(11, 12, 2017), dat18092017(18, 9, 2017), dat18122017(18, 12, 2017);
  520.  
  521. prekosutra = danas;
  522. if (prekosutra == danas)
  523. cout << "Datumi su jednaki" << endl;
  524. cout << danas << endl << sutra << endl << prekosutra << crt;
  525.  
  526. int v6 = 6, v13 = 13, v32 = 32, v63 = 63, v98 = 98, v109 = 109, v196 = 196;
  527.  
  528. FITKolekcija<int, int, 6> brojevi;
  529. brojevi.Dodaj(v196, v6);
  530. brojevi.Dodaj(v13, v32);
  531. brojevi.Dodaj(v98, v196);
  532. brojevi.Dodaj(v63, v13);
  533. brojevi.Dodaj(v98, v196);
  534. brojevi.Dodaj(v196, v6);
  535.  
  536. cout << brojevi << crt;
  537. //NA KOJI NAČIN ĆE SE VRŠITI SORTIRANJE PRVENSTVENO ZAVISI OD VRIJEDNOSTI PARAMETRA, A VRŠI SE NA OSNOVU VRIJEDNOSTI TIPA T1
  538. brojevi.Sortiraj(RASTUCI);
  539. cout << brojevi << crt;
  540. brojevi.Sortiraj(OPADAJUCI);
  541. cout << brojevi << crt;
  542.  
  543. try
  544. {
  545. //U SLUČAJU PREKORAČENJA DEFINISANE VELIČINE KOLEKCIJE, POTREBNO JE BACITI IZUZETAK
  546. brojevi.Dodaj(v13, v196);
  547. }
  548. catch (exception & err)
  549. {
  550. cout << "Error -> " << err.what() << endl;
  551. }
  552.  
  553. Aplikant jasmin("Jasmin Azemovic", Datum(15, 5, 1979), "BS6985645");
  554. PoslovnaViza poslovna(SAD, dat15022017, dat18082017, "Microsoft", "Vize nemaju informaciju.");
  555. PoslovnaViza poslovnaé(SAD, dat18092017, dat18122017, "Microsoft", "Vize nemaju informaciju.");
  556. TuristickaViza turisticka(ENGLESKA, dat18082017, dat11122017, "Whitehall Pl, London SW1A 2BD, UK", "Vize nemaju informaciju.");
  557.  
  558. /*
  559. NOVA VIZA SE NE MOŽE DODATI UKOLIKO:
  560. - JE APLIKANT MLAĐI OD 10 GODINA
  561. - U TOM PERIODU (ODNOSI SE NA PERIOD VIZE OD - DO) NE POSTOJI VAŽEĆA (POJAM VAŽEĆA PODRAZUMIJEVA DA JE POSLJEDNJI STATUS VIZE BIO IZDATA TJ.
  562. DA VIZA NIJE PONIŠTENA ILI ISTEKLA) VIZA ZA TU DRŽAVU, BEZ OBZIRA NA NJENU VRSTU.
  563. - JE NEKA OD RANIJIH VIZA PONIŠTENA (OVO SE ODNOSI SAMO NA VIZE ZA DRŽAVU: SAD)
  564. */
  565. if (jasmin.DodajVizu(&poslovna))
  566. cout << "Podaci o vizi uspješno zaprimljeni" << endl;
  567. /*
  568. STATUSI SE MOGU DODAVATI SAMO U REDOSLIJEDU U KOJEM SE NALAZE U ENUMERACIJI NPR.
  569. - NIJE MOGUĆE ODBITI VIZU AKO PRETHODNO NIJE IMALA STATUS DA JE ZAHTJEV_ZAPRIMLJEN;
  570. - NIJE MOGUĆE PONIŠTITI VIZU KOJA PRETHODNO NIJE IZDATA
  571. */
  572. if (jasmin.DodajStatus(&poslovna, ZAHTJEV_ZAPRIMLJEN, "provjeriti navode sa predstavnicima kompanije Microsoft"))
  573. cout << "Status vize uspijesno promijenjen" << endl;
  574. else
  575. cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  576.  
  577.  
  578. if (jasmin.DodajStatus(&poslovna,PONISTENA, "predstavnicima kompanije Microsoft nemaju informaciju o posjeti navedenog aplikanta"))
  579. cout << "Status vize uspijesno promijenjen" << endl;
  580. else
  581. cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  582.  
  583.  
  584.  
  585. if (jasmin.DodajStatus(&poslovna, IZDATA, "predstavnicima kompanije Microsoft nemaju informaciju o posjeti navedenog aplikanta"))
  586. cout << "Status vize uspijesno promijenjen" << endl;
  587. else
  588. cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  589.  
  590. if (jasmin.DodajVizu(&turisticka))
  591. cout << "Dodana viza." << endl;
  592. if (jasmin.DodajStatus(&turisticka, ZAHTJEV_ZAPRIMLJEN))
  593. cout << "Status vize uspijesno promijenjen8888" << endl;
  594. else
  595. cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  596.  
  597. //enum Status { ZAHTJEV_ZAPRIMLJEN, ODUSTAO, ODBIJENA, IZDATA, ISTEKLA, PONISTENA };
  598.  
  599. if (jasmin.DodajStatus(&turisticka, IZDATA)) {
  600. cout << "Status vize uspijesno promijenjen" << endl;
  601. //U ZASEBNOJ NITI URADITI PRINTANJE VIZE...KORISTITI METODU SLEEP_FOR
  602. jasmin.PrintajVizu(&turisticka);
  603. }
  604. else
  605. cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  606. //VRAĆA PODATKE O SVIM VIZAMA KOJE SU IZDATE ZA ODREĐENU DRŽAVU, A KOJE SU IMALE ODREĐENI STATUS
  607. // vector<Viza *> jasminVize = jasmin.GetVizeByDrzava(SAD, PONISTENA);
  608.  
  609. //UNUTAR NAPOMENE MIJENJA SADRŽAJ "nemaju informaciju" SA "su upoznti sa" - KORISTITI REGEX
  610. jasmin.ZamijeniRijec("nemaju informaciju", "su upoznti sa");
  611.  
  612.  
  613.  
  614. if (jasmin.DodajVizu(&poslovnaé)==false)
  615. cout << "Nije dodana." << endl;
  616. cout << jasmin << endl;
  617. ///*
  618. // Aplikant jasmin2 = jasmin;
  619. // Aplikant jasmin3("Jasmin Azemovic3", Datum(15, 5, 1979), "BS6985645");
  620. // jasmin3.DodajVizu(&turisticka);
  621. // jasmin2 = jasmin3;
  622. // cout << jasmin2;
  623. // */
  624. cout << "JASMIN VIZE:" << endl;
  625. vector<Viza *> jasminVize = jasmin.GetVizeByDrzava(SAD, PONISTENA);
  626. for (int i = 0; i < jasminVize.size(); i++) {
  627. cout << *jasminVize[i] << endl;
  628. }
  629. system("pause");
  630. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement