Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- enum VrstaVize { Useljenicka, Neuseljenicka, Diplomatska };
- enum StatusAplikacije { AplikacijaNepotpuna, RazgovorZakazan, Procesiranje, Odbijena, Izdata, Ponistena };
- template<class T1, class T2>
- class Kolekcija {
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija() {
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutnoElemenata = 0;
- }
- Kolekcija(Kolekcija <T1, T2> &obj) {
- _trenutnoElemenata = obj._trenutnoElemenata;
- if (_trenutnoElemenata > 0) {
- _elementi1 = new T1[_trenutnoElemenata];
- _elementi2 = new T2[_trenutnoElemenata];
- for (int i = 0; i < _trenutnoElemenata; i++) {
- _elementi1[i] = obj._elementi1[i];
- _elementi2[i] = obj._elementi2[i];
- }
- }
- else { _elementi1 = nullptr; _elementi2 = nullptr; }
- }
- ~Kolekcija() { delete[]_elementi1; _elementi1 = NULL; delete[]_elementi2; _elementi2 = NULL; }
- void addElement(T1 element, T2 element2) {
- T1*niz = new T1[_trenutnoElemenata + 1];
- T2*niz2 = new T2[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++) {
- niz[i] = _elementi1[i];
- niz2[i] = _elementi2[i];
- }
- delete[]_elementi1; delete[]_elementi2;
- niz[_trenutnoElemenata] = element;
- niz2[_trenutnoElemenata++] = element2;
- _elementi1 = niz; _elementi2 = niz2;
- }
- void removeElement(T1 element, T2 element2) {
- for (int i = 0; i < _trenutnoElemenata; i++) {
- if (_elementi1[i] == element && _elementi2[i] == element2) {
- for (int j = i; j < _trenutnoElemenata - 1; j++) {
- _elementi1[j] = _elementi1[j + 1];
- _elementi2[j] = _elementi2[j + 1];
- }
- _trenutnoElemenata--;
- }
- }
- T1*niz = new T1[_trenutnoElemenata];
- T2*niz2 = new T2[_trenutnoElemenata];
- for (int i = 0; i < _trenutnoElemenata; i++) {
- niz[i] = _elementi1[i];
- niz2[i] = _elementi2[i];
- }
- delete[]_elementi1; delete[]_elementi2;
- _elementi1 = niz; _elementi2 = niz2;
- }
- friend ostream &operator<< <>(ostream &ispis, Kolekcija &obj) {
- for (int i = 0; i < obj._trenutnoElemenata; i++) {
- ispis << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
- }
- return ispis;
- }
- /*
- 1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Ukoliko je moguce, osigurati automatsko prosiranje kolekcije
- prilikom dodavanja svakog novog elementa
- 2. RemoveElement :: na osnovu parametra tipa T1 uklanja elemente iz kolekcije i ukoliko je moguce smanjuje velicinu niza/kolekcije.
- Prilikom uklanjanja elemenata ocuvati redoslijed njihovog dodavanja
- */
- };
- class Datum {
- int *_dan, *_mjesec, *_godina;
- //1. potrebne funkcije
- public:
- Datum(int d = 1, int m = 1, int g = 2000) {
- _dan = new int(d); _mjesec = new int(m); _godina = new int(g);
- }
- Datum(Datum &obj) {
- _dan = new int(*obj._dan); _mjesec = new int(*obj._mjesec); _godina = new int(*obj._godina);
- }
- ~Datum() { delete _dan, _mjesec, _godina; _dan = _mjesec = _godina = NULL; }
- void operator=(Datum obj) {
- delete _dan, _mjesec, _godina; _dan = _mjesec = _godina = NULL;
- _dan = new int(*obj._dan); _mjesec = new int(*obj._mjesec); _godina = new int(*obj._godina);
- }
- friend ostream&operator<<(ostream&ispis, Datum &obj) {
- ispis << *obj._dan << "-" << *obj._mjesec << "-" << *obj._godina << endl;
- return ispis;
- }
- };
- class Viza {
- VrstaVize _vrstaVize;
- Datum _vazenjeOD;
- Datum _vazenjeDO;
- //1. potrebne funkcije
- public:
- 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) {}
- //Viza(Viza &obj):_vrstaVize(obj._vrstaVize), _vazenjeDO(obj._vazenjeDO), _vazenjeOD(obj._vazenjeOD){}
- void operator=(Viza &obj) {
- _vrstaVize = obj._vrstaVize;
- _vazenjeDO = obj._vazenjeDO;
- _vazenjeOD = obj._vazenjeOD;
- }
- friend ostream&operator<<(ostream&ispis, Viza &obj) {
- switch (obj._vrstaVize) {
- case 0: ispis << "Vrsta vize - Useljenicka. " << endl; break;
- case 1: ispis << "Vrsta vize - Neuseljenicka. " << endl; break;
- case 2: ispis << "Vrsta vize - Diplomatska. " << endl; break;
- }
- ispis << "Vazi OD - " << obj._vazenjeOD;
- ispis << "Vazi DO - " << obj._vazenjeDO << endl;
- return ispis;
- }
- };
- class AplikacijaZaVizu {
- Datum _datumApliciranja;
- StatusAplikacije _statusAplikacije;
- Viza _viza;
- char * _napomene;
- //1. potrebne funkcije
- public:
- 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) {
- _napomene = new char[strlen(napomene) + 1]; strcpy_s(_napomene, strlen(napomene) + 1, napomene);
- }
- AplikacijaZaVizu(AplikacijaZaVizu &obj) :_datumApliciranja(obj._datumApliciranja), _statusAplikacije(obj._statusAplikacije), _viza(obj._viza) {
- _napomene = new char[strlen(obj._napomene) + 1];
- strcpy_s(_napomene, strlen(obj._napomene) + 1, obj._napomene);
- }
- ~AplikacijaZaVizu() { delete[]_napomene; _napomene = NULL; }
- void operator=(AplikacijaZaVizu obj){
- _datumApliciranja = obj._datumApliciranja;
- _statusAplikacije = obj._statusAplikacije;
- _viza = obj._viza;
- delete[]_napomene;
- _napomene = new char[strlen(obj._napomene) + 1];
- strcpy_s(_napomene, strlen(obj._napomene) + 1, obj._napomene);
- }
- bool operator==(AplikacijaZaVizu obj) { return strcmp(_napomene, obj._napomene) == 0; }
- friend ostream&operator<<(ostream &ispis, AplikacijaZaVizu &obj) {
- ispis << "Datum apliciranja: " << obj._datumApliciranja << endl;
- switch (obj._statusAplikacije) {
- case 0: ispis << "Status aplikacije - Nepotpuna. " << endl; break;
- case 1: ispis << "Status aplikacije - Razgovor zakazan. " << endl; break;
- case 2: ispis << "Status aplikacije - Procesiranje. " << endl; break;
- case 3: ispis << "Status aplikacije - Odbijena. " << endl; break;
- case 4: ispis << "Status aplikacije - Izdata." << endl; break;
- case 5: ispis << "Status aplikacije - Ponistena." << endl; break;
- }
- ispis << obj._viza << endl;
- ispis << "Napomene - " << obj._napomene << endl;
- return ispis;
- }
- };
- class Aplikant {
- char * _imePrezime;
- Datum * _datumRodjenja;
- char * _brojPasosa;
- //vector<AplikacijaZaVizu *> _aplikacijeVize;
- //1. potrebne funkcije
- public:
- Aplikant(char *imePrezime = "***", int d = 1, int m = 1, int g = 2000, char*brojPasosa = "***"){
- _datumRodjenja = new Datum(d, m, g);
- _imePrezime = new char[strlen(imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(imePrezime) + 1, imePrezime);
- _brojPasosa = new char[strlen(brojPasosa) + 1];
- strcpy_s(_brojPasosa, strlen(brojPasosa) + 1, brojPasosa);
- }
- Aplikant(Aplikant &obj) {
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- _brojPasosa = new char[strlen(obj._brojPasosa) + 1];
- strcpy_s(_brojPasosa, strlen(obj._brojPasosa) + 1, obj._brojPasosa);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- ~Aplikant() { delete[]_imePrezime; _imePrezime = NULL;
- delete[]_brojPasosa; _brojPasosa = NULL; delete _datumRodjenja; _datumRodjenja = NULL;
- }
- void operator=(Aplikant obj) {
- delete[]_imePrezime; _imePrezime = NULL;
- delete[]_brojPasosa; _brojPasosa = NULL;
- delete _datumRodjenja; _datumRodjenja = NULL;
- _imePrezime = new char[strlen(obj._imePrezime) + 1];
- strcpy_s(_imePrezime, strlen(obj._imePrezime) + 1, obj._imePrezime);
- _brojPasosa = new char[strlen(obj._brojPasosa) + 1];
- strcpy_s(_brojPasosa, strlen(obj._brojPasosa) + 1, obj._brojPasosa);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- friend ostream &operator<<(ostream&ispis, Aplikant&obj)
- {
- ispis << "Ime i prezime: " << obj._imePrezime << endl;
- ispis << "Broj pasosa: " << obj._brojPasosa << endl;
- ispis << "Datum rodjenja: " << *obj._datumRodjenja << endl;
- return ispis;
- }
- };
- class Ambasada {
- char * _nazivAmbasade;
- Kolekcija<Aplikant, AplikacijaZaVizu> _aplikantiZaVizu;
- public:
- Ambasada(char *nazivAmbasade = "***") {
- _nazivAmbasade = new char[strlen(nazivAmbasade) + 1];
- strcpy_s(_nazivAmbasade, strlen(nazivAmbasade) + 1, nazivAmbasade);
- }
- Ambasada(Ambasada&obj) :_aplikantiZaVizu(obj._aplikantiZaVizu) {
- _nazivAmbasade = new char[strlen(obj._nazivAmbasade) + 1];
- strcpy_s(_nazivAmbasade, strlen(obj._nazivAmbasade) + 1, obj._nazivAmbasade);
- }
- ~Ambasada() { delete[]_nazivAmbasade; _nazivAmbasade = NULL; }
- friend ostream &operator<<(ostream&ispis, Ambasada&obj) {
- ispis << "Naziv ambasade: " << obj._nazivAmbasade << endl;
- ispis <<"Podaci o aplikantu za vizu: "<< endl<<obj._aplikantiZaVizu << endl;
- return ispis;
- }
- void addAplikaciju(Aplikant neki, AplikacijaZaVizu apl) {
- }
- /*
- 1. AddAplikaciju :: dodaje aplikanta i njegovu aplikaciju za vizu. za razmatranje aplikacije moraju se ispostovati sljedeca pravila:
- - aplikant mora biti stariji od 18 godina
- - osim ako se radi o diplomatskim vizama aplikant ne smije posjedovati vazecu vizu (ako posjeduje vizu, aplikaciju oznaciti kao nepotpunu)
- - 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
- - ukoliko aplikant prvi put aplicira za vizu potrebno je istog dana zakazati razgovor
- 2. RazgovorZaVizu :: na osnovu broja pasosa aplikanta pronalazi aktivnu aplikaciju. tokom razgovora, predstavnik ambasade unosi napomene i zapazanja vezana za aplikanta i aplikaciju.
- 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
- napomenu stavi kljucnu rijec "OBAVEZNO ODBITI" aplikacija se
- automatski odbija. ukoliko je razgovor prosao u najboljem redu, aplikacija prelazi u stanje procesiranja
- 3. ProcesirajAplikaciju :: prikazuje sve aplikacije starije od 2 dana koje posjeduju status procesiranja. posebno oznaciti one aplikacije kod kojih se u napomeni
- (trenutne ili ranijih aplikacija) nalazi neka od rijeci : terorizam, trgovina ljudima, droga ili kriminal. takodjer,
- 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.
- ako aplikacija zadovoljava sve uslove aplikacija (viza) dobija status izdata.
- 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
- 5. PonistiVizu :: na osnovu broja pasosa, ponistava trenutno vazecu vizu aplikantu te dodaje adekvatnu napomenu kojom se opisuje razlog ponistavanja
- */
- };
- int main() {
- //izbjegavajte koristenje vlastitog imena i prezimena
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti na objektu tipa Ambasada
- /*Kolekcija<char*, int> testKolekcije;
- testKolekcije.addElement("aaa", 3); testKolekcije.addElement("mm", 34); testKolekcije.addElement("ooIiu", 5);
- cout << testKolekcije << endl; testKolekcije.removeElement("aaa", 3); testKolekcije.removeElement("mm", 3);
- Kolekcija<char*, int> testKolekcije2(testKolekcije); cout << testKolekcije2 << endl;*/
- //RADI
- /*Datum testDatuma(12, 3, 2014); cout << testDatuma << endl;
- Datum testDatuma2(testDatuma); cout << testDatuma2 << endl;
- Datum testDatuma3; testDatuma3 = testDatuma2; cout << testDatuma3 << endl;*/
- //RADI
- //Viza testVize(1, 10, 2, 2015, 15, 12, 2015);
- //cout << testVize << endl;
- //Viza testVize2(testVize); cout << testVize2 << endl;
- //Viza testVize3; testVize3 = testVize2; cout << testVize3 << endl;
- //RADI
- //AplikacijaZaVizu testAplikacije("---", 1, testVize, 10, 10, 2015);
- //cout << testAplikacije << endl;
- //AplikacijaZaVizu testAplikacije2(testAplikacije); cout << testAplikacije2 << endl;
- //AplikacijaZaVizu testAplikacije3; testAplikacije3 = testAplikacije2; cout << testAplikacije3 << endl;
- //RADI
- Aplikant testAplikanta("Pero Peric", 25, 6, 1985, "145KA22");
- cout << testAplikanta << endl;
- Aplikant testAplikanta2(testAplikanta); cout << testAplikanta2 << endl;
- Aplikant testAplikanta3; testAplikanta3 = testAplikanta2; cout << testAplikanta3 << endl;
- //RADI
- Ambasada testAmbasade("Americka ambasada");
- cout << testAmbasade << endl;
- Ambasada testAmbasade2(testAmbasade); cout << testAmbasade2 << endl;
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement