Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<string>
- #include<regex>
- #include<exception>
- #include<vector>
- #include<iterator>
- #include<algorithm>
- #include<iostream>
- using namespace std;
- enum VrstaVize{ Useljenicka, Neuseljenicka, Diplomatska };
- char *VrstaVizeChar[] = { "Useljenicka", "Neuseljenicka", "Diplomatska" };
- enum StatusAplikacije{ AplikacijaNepotpuna, RazgovorZakazan, Procesiranje, Odbijena, Izdata, Ponistena };
- char *StatusAplikacijeChar[] = { "AplikacijaNepotpuna", "RazgovorZakazan", "Procesiranje" , "Odbijena", "Izdata","Ponistena" };
- template<class T1, class T2>
- class Kolekcija{
- private:
- T1 * _elementi1;
- T2 * _elementi2;
- int _trenutnoElemenata;
- public:
- Kolekcija(){
- _trenutnoElemenata = 0;
- }
- Kolekcija(const Kolekcija &obj){
- _trenutnoElemenata = obj._trenutnoElemenata;
- _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];
- }
- }
- ~Kolekcija(){
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- }
- void operator=(const Kolekcija &obj){
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = nullptr;
- _elementi2 = nullptr;
- _trenutnoElemenata = obj._trenutnoElemenata;
- _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];
- }
- }
- void Info(){
- cout << "Trenutno elemenata: " << _trenutnoElemenata << endl;
- for (int i = 0; i < _trenutnoElemenata; i++){
- cout << _elementi1[i] << " " << _elementi2[i] << endl;
- }
- }
- /*
- 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
- */
- bool AddElement(T1 obj1, T2 obj2){
- for (int i = 0; i < _trenutnoElemenata; i++){
- if (_elementi1[i] == obj1 && _elementi2[i] == obj2){
- return false;
- }
- }
- T1 *temp1 = new T1[_trenutnoElemenata + 1];
- T2 *temp2 = new T2[_trenutnoElemenata + 1];
- for (int i = 0; i < _trenutnoElemenata; i++){
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- _elementi1[_trenutnoElemenata] = obj1;
- _elementi2[_trenutnoElemenata] = obj2;
- _trenutnoElemenata++;
- cout << "Uspjesno ste dodali elemente!" << endl;
- return true;
- }
- bool RemoveElement(T1 obj1){
- for (int i = 0; i < _trenutnoElemenata; i++){
- if (_elementi1[i] == obj1){
- for (int j = i; j < _trenutnoElemenata - 1; j++){
- _elementi1[j] = _elementi1[j + 1];
- _elementi2[j] = _elementi2[j + 1];
- }
- _trenutnoElemenata--;
- }
- }
- T1 *temp1 = new T1[_trenutnoElemenata];
- T2 *temp2 = new T2[_trenutnoElemenata];
- for (int i = 0; i < _trenutnoElemenata; i++){
- temp1[i] = _elementi1[i];
- temp2[i] = _elementi2[i];
- }
- delete[] _elementi1;
- delete[] _elementi2;
- _elementi1 = temp1;
- _elementi2 = temp2;
- cout << "Uspjesno ste uklonili elemente!" << endl;
- return true;
- }
- // Get funkcije
- int GetTrenutnoElemenata(){ return _trenutnoElemenata; }
- T1 GetElement1(int poz){ return _elementi1[poz]; }
- T2 GetElement2(int poz){ return _elementi2[poz]; }
- // Set funkcije
- void SetTrenutno(int broj){
- _trenutnoElemenata = broj;
- }
- void SetElement1(T1 obj, int poz){
- _elementi1[poz] = obj;
- }
- void SetElement2(T2 obj, int poz){
- _elementi2[poz] = obj;
- }
- friend ostream &operator<<<>(ostream &ispis, Kolekcija<T1, T2> &obj);
- };
- template<class T1, class T2>
- ostream &operator<<(ostream &ispis, Kolekcija<T1, T2> &obj){
- ispis << "Trenutno elemenata: " << obj._trenutnoElemenata << endl;
- for (int i = 0; i < obj._trenutnoElemenata; i++){
- ispis << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
- }
- return ispis;
- }
- class Datum{
- private:
- int *_dan, *_mjesec, *_godina;
- public:
- //1. potrebne funkcije
- Datum(int d=1, int m=1, int g=2000){
- _dan = new int(d);
- _mjesec = new int(m);
- _godina = new int(g);
- }
- Datum(const Datum &obj){
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- ~Datum(){
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = _mjesec = _godina = nullptr;
- }
- void operator=(const Datum &obj){
- delete _dan;
- delete _mjesec;
- delete _godina;
- _dan = _mjesec = _godina = nullptr;
- _dan = new int(*obj._dan);
- _mjesec = new int(*obj._mjesec);
- _godina = new int(*obj._godina);
- }
- // Get funkcije
- int GetDan(){ return *_dan; }
- int GetMjesec(){ return *_mjesec; }
- int GetGodina(){ return *_godina; }
- // Set funkcije
- void SetDan(int dan){
- delete _dan;
- _dan = new int(dan);
- }
- void SetMjesec(int mjesec){
- delete _mjesec;
- _mjesec = new int(mjesec);
- }
- void SetGodina(int godina){
- delete _godina;
- _godina = new int(godina);
- }
- bool operator<(Datum &obj){
- if (*_godina < *obj._godina){
- return true;
- }
- else if (*_godina == *obj._godina){
- if (*_mjesec < *obj._mjesec){
- return true;
- }
- else if (*_mjesec == *obj._mjesec){
- if (*_dan < *obj._dan){
- return true;
- }
- }
- }
- return false;
- }
- bool operator>(Datum &obj){
- if (*_godina > *obj._godina){
- return true;
- }
- else if (*_godina == *obj._godina){
- if (*_mjesec > *obj._mjesec){
- return true;
- }
- else if (*_mjesec == *obj._mjesec){
- if (*_dan > *obj._dan){
- return true;
- }
- }
- }
- return false;
- }
- void Info(){
- cout << *_dan << "." << *_mjesec << "." << *_godina << endl;
- }
- friend ostream &operator<<(ostream &ispis, Datum &obj);
- };
- ostream &operator<<(ostream &ispis, Datum &obj){
- ispis << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << endl;
- return ispis;
- }
- class Viza{
- private:
- VrstaVize _vrstaVize;
- Datum _vazenjeOD;
- Datum _vazenjeDO;
- public:
- //1. potrebne funkcije
- Viza(VrstaVize vrstaVize = VrstaVize(), Datum datumOD = Datum(), Datum datumDO = Datum()){
- _vrstaVize = vrstaVize;
- _vazenjeOD = datumOD;
- _vazenjeDO = datumDO;
- }
- Viza(const Viza &obj){
- _vrstaVize = obj._vrstaVize;
- _vazenjeOD = obj._vazenjeOD;
- _vazenjeDO = obj._vazenjeDO;
- }
- void operator=(const Viza &obj){
- _vrstaVize = obj._vrstaVize;
- _vazenjeOD = obj._vazenjeOD;
- _vazenjeDO = obj._vazenjeDO;
- }
- bool operator==(Viza &obj){
- if (_vrstaVize == obj._vrstaVize){
- return true;
- }
- return false;
- }
- // Get funkcije
- VrstaVize GetVrstaVize(){ return _vrstaVize; }
- Datum GetDatumVazenjaOD(){ return _vazenjeOD; }
- Datum GetDatumVazenjaDO(){ return _vazenjeDO; }
- // Set funkcije
- void SetVrstaVize(VrstaVize viza){
- _vrstaVize = viza;
- }
- void SetVazenjeOD(Datum OD){
- _vazenjeOD = OD;
- }
- void SetVazenjeDO(Datum DO){
- _vazenjeDO = DO;
- }
- void Info(){
- cout << "Vrsta vize: " << VrstaVizeChar[_vrstaVize] << endl;
- cout << "Vazenje od: " << _vazenjeOD << endl;
- cout << "Vazenje do: " << _vazenjeDO << endl;
- }
- friend ostream &operator<<(ostream &ispis, Viza &obj);
- };
- ostream &operator<<(ostream &ispis, Viza &obj){
- ispis << "Vrsta vize: " << VrstaVizeChar[obj._vrstaVize] << endl;
- ispis << "Vazenje od: " << obj._vazenjeOD << endl;
- ispis << "Vazenje do: " << obj._vazenjeDO << endl;
- return ispis;
- }
- class AplikacijaZaVizu{
- private:
- Datum _datumApliciranja;
- StatusAplikacije _statusAplikacije;
- Viza _viza;
- char * _napomene;
- public:
- //1. potrebne funkcije
- AplikacijaZaVizu(Datum datumApliciranja = Datum(), StatusAplikacije statusAplikacije = StatusAplikacije(), Viza viza = Viza(), char *napomene="----"){
- _datumApliciranja = datumApliciranja;
- _statusAplikacije = statusAplikacije;
- _viza = viza;
- int duzina = strlen(napomene) + 1;
- _napomene = new char[duzina];
- strcpy_s(_napomene, duzina, napomene);
- }
- AplikacijaZaVizu(const AplikacijaZaVizu &obj){
- _datumApliciranja = obj._datumApliciranja;
- _statusAplikacije = obj._statusAplikacije;
- _viza = obj._viza;
- int duzina = strlen(obj._napomene) + 1;
- _napomene = new char[duzina];
- strcpy_s(_napomene, duzina, obj._napomene);
- }
- ~AplikacijaZaVizu(){
- delete[] _napomene;
- _napomene = nullptr;
- }
- void operator=(const AplikacijaZaVizu &obj){
- delete[] _napomene;
- _napomene = nullptr;
- _datumApliciranja = obj._datumApliciranja;
- _statusAplikacije = obj._statusAplikacije;
- _viza = obj._viza;
- int duzina = strlen(obj._napomene) + 1;
- _napomene = new char[duzina];
- strcpy_s(_napomene, duzina, obj._napomene);
- }
- bool operator==(AplikacijaZaVizu &obj){
- if (_viza == obj._viza){
- return true;
- }
- return false;
- }
- // Get funkcije
- Datum GetDatumApliciranja(){ return _datumApliciranja; }
- StatusAplikacije GetStatusAplikacije(){ return _statusAplikacije; }
- Viza GetViza(){ return _viza; }
- char *GetNapomene(){ return _napomene; }
- // Set funkcije
- void SetDatumApliciranja(Datum &obj){
- _datumApliciranja = obj;
- }
- void SetStatusAplikacije(StatusAplikacije &status){
- _statusAplikacije = status;
- }
- void SetViza(Viza &obj){
- _viza = obj;
- }
- void SetNapomene(char *napomene){
- delete[] _napomene;
- _napomene = nullptr;
- int duzina = strlen(napomene) + 1;
- _napomene = new char[duzina];
- strcpy_s(_napomene, duzina, napomene);
- }
- void Info(){
- cout << "Datum apliciranja: " << _datumApliciranja << endl;
- cout << "Status aplikacije: " << StatusAplikacijeChar[_statusAplikacije] << endl;
- cout << "Viza: " << _viza << endl;
- cout << "Napomene: " << _napomene << endl;
- }
- friend ostream &operator<<(ostream &ispis, AplikacijaZaVizu &obj);
- };
- ostream &operator<<(ostream &ispis, AplikacijaZaVizu &obj){
- ispis << "Datum apliciranja: " << obj._datumApliciranja << endl;
- ispis << "Status aplikacije: " << StatusAplikacijeChar[obj._statusAplikacije] << endl;
- ispis << "Viza: " << obj._viza << endl;
- ispis << "Napomene: " << obj._napomene << endl;
- return ispis;
- }
- class Aplikant{
- private:
- char * _imePrezime;
- Datum * _datumRodjenja;
- char * _brojPasosa;
- vector<AplikacijaZaVizu *> _aplikacijeVize;
- public:
- //1. potrebne funkcije
- Aplikant(char *imePrezime="----", Datum datum = Datum(), char *brojPasosa="----"){
- int duzina = strlen(imePrezime) + 1;
- _imePrezime = new char[duzina];
- strcpy_s(_imePrezime, duzina, imePrezime);
- duzina = strlen(brojPasosa) + 1;
- _brojPasosa = new char[duzina];
- strcpy_s(_brojPasosa, duzina, brojPasosa);
- _datumRodjenja = new Datum(datum);
- }
- Aplikant(const Aplikant &obj){
- int duzina = strlen(obj._imePrezime) + 1;
- _imePrezime = new char[duzina];
- strcpy_s(_imePrezime, duzina, obj._imePrezime);
- duzina = strlen(obj._brojPasosa) + 1;
- _brojPasosa = new char[duzina];
- strcpy_s(_brojPasosa, duzina, obj._brojPasosa);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- ~Aplikant(){
- delete[] _imePrezime;
- _imePrezime = nullptr;
- delete[] _brojPasosa;
- _brojPasosa = nullptr;
- }
- void operator=(const Aplikant &obj){
- delete[] _imePrezime;
- _imePrezime = nullptr;
- delete[] _brojPasosa;
- _brojPasosa = nullptr;
- int duzina = strlen(obj._imePrezime) + 1;
- _imePrezime = new char[duzina];
- strcpy_s(_imePrezime, duzina, obj._imePrezime);
- duzina = strlen(obj._brojPasosa) + 1;
- _brojPasosa = new char[duzina];
- strcpy_s(_brojPasosa, duzina, obj._brojPasosa);
- _datumRodjenja = new Datum(*obj._datumRodjenja);
- }
- void Info(){
- cout << "Ime i prezime: " << _imePrezime << endl;
- cout << "Broj pasosa: " << _brojPasosa << endl;
- cout << "Datum rodenja: " << _datumRodjenja << endl;
- vector<AplikacijaZaVizu*>::iterator it;
- for (it = _aplikacijeVize.begin(); it != _aplikacijeVize.end(); it++){
- cout << **it << endl;
- }
- }
- friend ostream &operator<<(ostream &ispis, Aplikant &obj);
- };
- ostream &operator<<(ostream &ispis, Aplikant &obj){
- ispis << "Ime i prezime: " << obj._imePrezime << endl;
- ispis << "Broj pasosa: " << obj._brojPasosa << endl;
- ispis << "Datum rodenja: " << obj._datumRodjenja << endl;
- vector<AplikacijaZaVizu*>::iterator it;
- for (it = obj._aplikacijeVize.begin(); it != obj._aplikacijeVize.end(); it++){
- ispis << **it << endl;
- }
- return ispis;
- }
- char *crt = "\n--------------------------------------------------\n";
- void main() {
- //REGIONI olaksavaju organizaciju programskog code-a, te ih mozete ukloniti ukoliko vam otezavaju preglednost
- #pragma region TestiranjeKolekcije
- Kolekcija<int, double> kolekcija1;
- for (int i = 0; i < 100; i++)
- kolekcija1.AddElement(i, i + 0.3);
- cout << kolekcija1 << endl;
- cout << crt;
- Kolekcija<int, double> kolekcija2;
- kolekcija1.RemoveElement(2);//UMANJITI VELIČINU NIZA
- kolekcija2 = kolekcija1;
- cout << kolekcija2 << crt;
- if (kolekcija1.GetTrenutnoElemenata() == kolekcija2.GetTrenutnoElemenata())
- cout << "ISTI BROJ ELEMENATA" << endl;
- Kolekcija<int, double> kolekcija3(kolekcija2);
- cout << kolekcija3 << crt;
- #pragma endregion
- #pragma region TestiranjeDatuma
- Datum juce(25, 11, 2015);
- Datum danas(26, 11, 2015);
- Datum sutra(danas);
- Datum prekosutra;
- prekosutra = danas;
- cout << danas << endl << sutra << endl << prekosutra << crt;
- #pragma endregion
- #pragma region TestiranjeVize
- Viza viza1(Useljenicka, juce, prekosutra);
- Viza viza2(Neuseljenicka, juce, prekosutra);
- Viza viza3(Diplomatska, juce, prekosutra);
- Viza viza4;
- viza4 = viza2;
- cout << viza1 << endl;
- cout << viza2 << endl;
- cout << viza3 << endl;
- cout << viza4 << endl;
- #pragma endregion
- #pragma region TestiranjeAplikacijeZaVizu
- AplikacijaZaVizu aplikacija1(danas, AplikacijaNepotpuna, viza1);
- AplikacijaZaVizu aplikacija2;
- aplikacija2 = aplikacija1;
- cout << aplikacija1 << endl;
- cout << aplikacija2 << endl;
- #pragma endregion
- system("pause>0");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement