Advertisement
Guest User

Untitled

a guest
Nov 25th, 2015
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.29 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. enum VrstaVize { Useljenicka, Neuseljenicka, Diplomatska };
  6. enum StatusAplikacije { AplikacijaNepotpuna, RazgovorZakazan, Procesiranje, Odbijena, Izdata, Ponistena };
  7.  
  8. template<class T1, class T2>
  9. class Kolekcija {
  10.     T1 * _elementi1;
  11.     T2 * _elementi2;
  12.     int _trenutnoElemenata;
  13. public:
  14.     Kolekcija() {
  15.         _elementi1 = nullptr;
  16.         _elementi2 = nullptr;
  17.         _trenutnoElemenata = 0;
  18.     }
  19.     Kolekcija(Kolekcija <T1, T2> &obj) {
  20.         _trenutnoElemenata = obj._trenutnoElemenata;
  21.         if (_trenutnoElemenata > 0) {
  22.             _elementi1 = new T1[_trenutnoElemenata];
  23.             _elementi2 = new T2[_trenutnoElemenata];
  24.             for (int i = 0; i < _trenutnoElemenata; i++) {
  25.                 _elementi1[i] = obj._elementi1[i];
  26.                 _elementi2[i] = obj._elementi2[i];
  27.             }
  28.         }
  29.         else { _elementi1 = nullptr; _elementi2 = nullptr; }
  30.     }
  31.     ~Kolekcija() { delete[]_elementi1; _elementi1 = NULL; delete[]_elementi2; _elementi2 = NULL; }
  32.     void addElement(T1 element, T2 element2) {
  33.         T1*niz = new T1[_trenutnoElemenata + 1];
  34.         T2*niz2 = new T2[_trenutnoElemenata + 1];
  35.         for (int i = 0; i < _trenutnoElemenata; i++) {
  36.             niz[i] = _elementi1[i];
  37.             niz2[i] = _elementi2[i];
  38.         }
  39.         delete[]_elementi1; delete[]_elementi2;
  40.         niz[_trenutnoElemenata] = element;
  41.         niz2[_trenutnoElemenata++] = element2;
  42.         _elementi1 = niz; _elementi2 = niz2;
  43.     }
  44.     void removeElement(T1 element, T2 element2) {
  45.         for (int i = 0; i < _trenutnoElemenata; i++) {
  46.             if (_elementi1[i] == element && _elementi2[i] == element2) {
  47.                 for (int j = i; j < _trenutnoElemenata - 1; j++) {
  48.                     _elementi1[j] = _elementi1[j + 1];
  49.                     _elementi2[j] = _elementi2[j + 1];
  50.                 }
  51.                 _trenutnoElemenata--;
  52.             }
  53.         }
  54.  
  55.         T1*niz = new T1[_trenutnoElemenata];
  56.         T2*niz2 = new T2[_trenutnoElemenata];
  57.         for (int i = 0; i < _trenutnoElemenata; i++) {
  58.             niz[i] = _elementi1[i];
  59.             niz2[i] = _elementi2[i];
  60.         }
  61.         delete[]_elementi1; delete[]_elementi2;
  62.         _elementi1 = niz; _elementi2 = niz2;
  63.     }
  64.     friend ostream &operator<< <>(ostream &ispis, Kolekcija &obj) {
  65.         for (int i = 0; i < obj._trenutnoElemenata; i++) {
  66.             ispis << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
  67.         }
  68.         return ispis;
  69.     }
  70.     /*
  71.     1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Ukoliko je moguce, osigurati automatsko prosiranje kolekcije
  72.     prilikom dodavanja svakog novog elementa
  73.     2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije i ukoliko je moguce smanjuje velicinu niza/kolekcije.
  74.     Prilikom uklanjanja elemenata ocuvati redoslijed njihovog dodavanja
  75.     */
  76. };
  77. class Datum {
  78.     int *_dan, *_mjesec, *_godina;
  79.     //1. potrebne funkcije
  80. public:
  81.     Datum(int d = 1, int m = 1, int g = 2000) {
  82.         _dan = new int(d); _mjesec = new int(m); _godina = new int(g);
  83.     }
  84.     Datum(Datum &obj) {
  85.         _dan = new int(*obj._dan); _mjesec = new int(*obj._mjesec); _godina = new int(*obj._godina);
  86.     }
  87.     ~Datum() { delete _dan, _mjesec, _godina; _dan = _mjesec = _godina = NULL; }
  88.     void operator=(Datum obj) {
  89.         delete _dan, _mjesec, _godina; _dan = _mjesec = _godina = NULL;
  90.         _dan = new int(*obj._dan); _mjesec = new int(*obj._mjesec); _godina = new int(*obj._godina);
  91.     }
  92.     friend ostream&operator<<(ostream&ispis, Datum &obj) {
  93.         ispis << *obj._dan << "-" << *obj._mjesec << "-" << *obj._godina << endl;
  94.         return ispis;
  95.     }
  96.  
  97.  
  98. };
  99. class Viza {
  100.     VrstaVize _vrstaVize;
  101.     Datum _vazenjeOD;
  102.     Datum _vazenjeDO;
  103.     //1. potrebne funkcije
  104.  
  105. public:
  106.     Viza(int viza = 0, int d = 1, int m = 1, int g = 2000, int d2 = 1, int m2 = 1, int g2 = 2000) :_vrstaVize((VrstaVize)viza), _vazenjeOD(d, m, g), _vazenjeDO(d2, m2, g2) {}
  107.     //Viza(Viza &obj):_vrstaVize(obj._vrstaVize), _vazenjeDO(obj._vazenjeDO), _vazenjeOD(obj._vazenjeOD){}
  108.     void operator=(Viza &obj) {
  109.         _vrstaVize = obj._vrstaVize;
  110.         _vazenjeDO = obj._vazenjeDO;
  111.         _vazenjeOD = obj._vazenjeOD;
  112.     }
  113.     friend ostream&operator<<(ostream&ispis, Viza &obj) {
  114.         switch (obj._vrstaVize) {
  115.         case 0: ispis << "Vrsta vize - Useljenicka. " << endl; break;
  116.         case 1: ispis << "Vrsta vize - Neuseljenicka. " << endl; break;
  117.         case 2: ispis << "Vrsta vize - Diplomatska. " << endl; break;
  118.         }
  119.         ispis << "Vazi OD - " << obj._vazenjeOD;
  120.         ispis << "Vazi DO - " << obj._vazenjeDO << endl;
  121.         return ispis;
  122.     }
  123.  
  124.  
  125.  
  126. };
  127.  
  128. class AplikacijaZaVizu {
  129.     Datum _datumApliciranja;
  130.     StatusAplikacije _statusAplikacije;
  131.     Viza _viza;
  132.     char * _napomene;
  133.     //1. potrebne funkcije
  134. public:
  135.     AplikacijaZaVizu(char*napomene = "Nema.", int status = 0, Viza viza = 0, int d = 1, int m = 1, int g = 2000) :_viza(viza), _datumApliciranja(d, m, g), _statusAplikacije((StatusAplikacije)status) {
  136.         _napomene = new char[strlen(napomene) + 1]; strcpy_s(_napomene, strlen(napomene) + 1, napomene);
  137.     }
  138.     AplikacijaZaVizu(AplikacijaZaVizu &obj) :_datumApliciranja(obj._datumApliciranja), _statusAplikacije(obj._statusAplikacije), _viza(obj._viza) {
  139.         _napomene = new char[strlen(obj._napomene) + 1];
  140.         strcpy_s(_napomene, strlen(obj._napomene) + 1, obj._napomene);
  141.     }
  142.     ~AplikacijaZaVizu() { delete[]_napomene; _napomene = NULL; }
  143.     void operator=(AplikacijaZaVizu obj){
  144.         _datumApliciranja = obj._datumApliciranja;
  145.         _statusAplikacije = obj._statusAplikacije;
  146.         _viza = obj._viza;
  147.         delete[]_napomene;
  148.         _napomene = new char[strlen(obj._napomene) + 1];
  149.         strcpy_s(_napomene, strlen(obj._napomene) + 1, obj._napomene);
  150.     }
  151.     bool operator==(AplikacijaZaVizu obj) { return strcmp(_napomene, obj._napomene) == 0; }
  152.  
  153.     friend ostream&operator<<(ostream &ispis, AplikacijaZaVizu &obj) {
  154.         ispis << "Datum apliciranja: " << obj._datumApliciranja << endl;
  155.         switch (obj._statusAplikacije) {
  156.         case 0: ispis << "Status aplikacije - Nepotpuna. " << endl; break;
  157.         case 1: ispis << "Status aplikacije - Razgovor zakazan. " << endl; break;
  158.         case 2: ispis << "Status aplikacije - Procesiranje. " << endl; break;
  159.         case 3: ispis << "Status aplikacije - Odbijena. " << endl; break;
  160.         case 4: ispis << "Status aplikacije - Izdata." << endl; break;
  161.         case 5: ispis << "Status aplikacije - Ponistena." << endl; break;
  162.         }
  163.         ispis << obj._viza << endl;
  164.         ispis << "Napomene - " << obj._napomene << endl;
  165.         return ispis;
  166.     }
  167.  
  168.  
  169.  
  170. };
  171.  
  172. class Aplikant {
  173.     char * _imePrezime;
  174.     Datum * _datumRodjenja;
  175.     char * _brojPasosa;
  176.     //vector<AplikacijaZaVizu *> _aplikacijeVize;
  177.     //1. potrebne funkcije
  178. public:
  179.     Aplikant(char *imePrezime = "***", int d = 1, int m = 1, int g = 2000, char*brojPasosa = "***"){
  180.         _datumRodjenja = new Datum(d, m, g);
  181.         _imePrezime = new char[strlen(imePrezime) + 1];
  182.         strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
  183.         _brojPasosa = new char[strlen(brojPasosa) + 1];
  184.         strcpy_s(_brojPasosa, strlen(brojPasosa) + 1, brojPasosa);
  185.     }
  186.     Aplikant(Aplikant &obj) {
  187.         _imePrezime = new char[strlen(obj._imePrezime) + 1];
  188.         strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
  189.         _brojPasosa = new char[strlen(obj._brojPasosa) + 1];
  190.         strcpy_s(_brojPasosa, strlen(obj._brojPasosa) + 1, obj._brojPasosa);
  191.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  192.     }
  193.     ~Aplikant() { delete[]_imePrezime; _imePrezime = NULL;
  194.     delete[]_brojPasosa; _brojPasosa = NULL; delete _datumRodjenja; _datumRodjenja = NULL;
  195.     }
  196.     void operator=(Aplikant obj) {
  197.         delete[]_imePrezime; _imePrezime = NULL;
  198.         delete[]_brojPasosa; _brojPasosa = NULL;
  199.         delete _datumRodjenja; _datumRodjenja = NULL;
  200.         _imePrezime = new char[strlen(obj._imePrezime) + 1];
  201.         strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
  202.         _brojPasosa = new char[strlen(obj._brojPasosa) + 1];
  203.         strcpy_s(_brojPasosa, strlen(obj._brojPasosa) + 1, obj._brojPasosa);
  204.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  205.     }
  206.     friend ostream &operator<<(ostream&ispis, Aplikant&obj)
  207.     {
  208.         ispis << "Ime i prezime: " << obj._imePrezime << endl;
  209.         ispis << "Broj pasosa: " << obj._brojPasosa << endl;
  210.         ispis << "Datum rodjenja: " << *obj._datumRodjenja << endl;
  211.         return ispis;
  212.     }
  213.  
  214.  
  215.  
  216.  
  217. };
  218. class Ambasada {
  219.     char * _nazivAmbasade;
  220.     Kolekcija<Aplikant, AplikacijaZaVizu> _aplikantiZaVizu;
  221. public:
  222.     Ambasada(char *nazivAmbasade = "***") {
  223.         _nazivAmbasade = new char[strlen(nazivAmbasade) + 1];
  224.         strcpy_s(_nazivAmbasade, strlen(nazivAmbasade) + 1, nazivAmbasade);
  225.     }
  226.     Ambasada(Ambasada&obj) :_aplikantiZaVizu(obj._aplikantiZaVizu) {
  227.         _nazivAmbasade = new char[strlen(obj._nazivAmbasade) + 1];
  228.         strcpy_s(_nazivAmbasade, strlen(obj._nazivAmbasade) + 1, obj._nazivAmbasade);
  229.     }
  230.     ~Ambasada() { delete[]_nazivAmbasade; _nazivAmbasade = NULL; }
  231.     friend ostream &operator<<(ostream&ispis, Ambasada&obj) {
  232.         ispis << "Naziv ambasade: " << obj._nazivAmbasade << endl;
  233.         ispis <<"Podaci o aplikantu za vizu: "<< endl<<obj._aplikantiZaVizu << endl;
  234.         return ispis;
  235.     }
  236.  
  237.     void addAplikaciju(Aplikant neki, AplikacijaZaVizu apl) {
  238.  
  239.     }
  240.     /*
  241.    
  242.     1. AddAplikaciju :: dodaje aplikanta i njegovu aplikaciju za vizu. za razmatranje aplikacije moraju se ispostovati sljedeca pravila:
  243.     - aplikant mora biti stariji od 18 godina
  244.     - osim ako se radi o diplomatskim vizama aplikant ne smije posjedovati vazecu vizu (ako posjeduje vizu, aplikaciju oznaciti kao nepotpunu)
  245.     - u slucaju da su posljednje dvije aplikacije oznacene kao nepotpune, onemoguciti apliciranje u narednih 6 mjeseci a postojecu i sve naredne aplikacije odmah oznaciti kao odbijene
  246.     - ukoliko aplikant prvi put aplicira za vizu potrebno je istog dana zakazati razgovor
  247.    
  248.     2. RazgovorZaVizu :: na osnovu broja pasosa aplikanta pronalazi aktivnu aplikaciju. tokom razgovora, predstavnik ambasade unosi napomene i zapazanja vezana za aplikanta i aplikaciju.
  249.     na samom pocetku razgovora predstavnik ambasade treba posjedovati mogucnost uvida u sve ranije aplikacije, te odabir one cije detalje zeli vidjeti. u slucaju da predstavnik ambasade u
  250.     napomenu stavi kljucnu rijec "OBAVEZNO ODBITI" aplikacija se
  251.     automatski odbija. ukoliko je razgovor prosao u najboljem redu, aplikacija prelazi u stanje procesiranja
  252.    
  253.     3. ProcesirajAplikaciju :: prikazuje sve aplikacije starije od 2 dana koje posjeduju status procesiranja. posebno oznaciti one aplikacije kod kojih se u napomeni
  254.     (trenutne ili ranijih aplikacija) nalazi neka od rijeci : terorizam, trgovina ljudima, droga ili kriminal. takodjer,   
  255.     posebno oznaciti one aplikante kojima je aplikacija odbijena vise od 2 puta ili je aplikacija bila nepotpuna vise od 5 puta. u zavisnosti od prethodnih pravila tj.
  256.     ako aplikacija zadovoljava sve uslove aplikacija (viza) dobija status izdata.
  257.    
  258.     4. GetAplikanti - funkcija vraca sve aplikante koji su na definisanog datuma posjedovali validnu vizu odredjene vrste. vrsta vize i datum se proslijedjuju kao parametri funkcije
  259.    
  260.     5. PonistiVizu :: na osnovu broja pasosa, ponistava trenutno vazecu vizu aplikantu te dodaje adekvatnu napomenu kojom se opisuje razlog ponistavanja
  261.     */
  262. };
  263.  
  264. int main() {
  265.     //izbjegavajte koristenje vlastitog imena i prezimena
  266.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti na objektu tipa Ambasada
  267.  
  268.     /*Kolekcija<char*, int> testKolekcije;
  269.     testKolekcije.addElement("aaa", 3); testKolekcije.addElement("mm", 34); testKolekcije.addElement("ooIiu", 5);
  270.     cout << testKolekcije << endl; testKolekcije.removeElement("aaa", 3); testKolekcije.removeElement("mm", 3);
  271.     Kolekcija<char*, int> testKolekcije2(testKolekcije); cout << testKolekcije2 << endl;*/
  272.     //RADI
  273.  
  274.     /*Datum testDatuma(12, 3, 2014); cout << testDatuma << endl;
  275.     Datum testDatuma2(testDatuma); cout << testDatuma2 << endl;
  276.     Datum testDatuma3; testDatuma3 = testDatuma2; cout << testDatuma3 << endl;*/
  277.     //RADI
  278.  
  279.     //Viza testVize(1, 10, 2, 2015, 15, 12, 2015);
  280.    
  281.     //cout << testVize << endl;
  282.     //Viza testVize2(testVize); cout << testVize2 << endl;
  283.     //Viza testVize3; testVize3 = testVize2; cout << testVize3 << endl;
  284.     //RADI
  285.  
  286.     //AplikacijaZaVizu testAplikacije("---", 1, testVize, 10, 10, 2015);
  287.     //cout << testAplikacije << endl;
  288.    
  289.     //AplikacijaZaVizu testAplikacije2(testAplikacije); cout << testAplikacije2 << endl;
  290.     //AplikacijaZaVizu testAplikacije3; testAplikacije3 = testAplikacije2; cout << testAplikacije3 << endl;
  291.     //RADI
  292.  
  293.     Aplikant testAplikanta("Pero Peric", 25, 6, 1985, "145KA22");
  294.     cout << testAplikanta << endl;
  295.     Aplikant testAplikanta2(testAplikanta); cout << testAplikanta2 << endl;
  296.     Aplikant testAplikanta3; testAplikanta3 = testAplikanta2; cout << testAplikanta3 << endl;
  297.     //RADI
  298.  
  299.     Ambasada testAmbasade("Americka ambasada");
  300.     cout << testAmbasade << endl;
  301.     Ambasada testAmbasade2(testAmbasade); cout << testAmbasade2 << endl;
  302.  
  303.  
  304.  
  305.  
  306.     system("pause>0");
  307. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement