Advertisement
ASDEVELOPMENT

Untitled

Jan 18th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.11 KB | None | 0 0
  1. #include<string>
  2. #include<regex>
  3. #include<exception>
  4. #include<vector>
  5. #include<iterator>
  6. #include<algorithm>
  7. #include<iostream>
  8.  
  9. using namespace std;
  10.  
  11.  
  12. enum VrstaVize{ Useljenicka, Neuseljenicka, Diplomatska };
  13. char *VrstaVizeChar[] = { "Useljenicka", "Neuseljenicka", "Diplomatska" };
  14. enum StatusAplikacije{ AplikacijaNepotpuna, RazgovorZakazan, Procesiranje, Odbijena, Izdata, Ponistena };
  15. char *StatusAplikacijeChar[] = { "AplikacijaNepotpuna", "RazgovorZakazan", "Procesiranje" , "Odbijena", "Izdata","Ponistena" };
  16.  
  17. template<class T1, class T2>
  18. class Kolekcija{
  19. private:
  20.     T1 * _elementi1;
  21.     T2 * _elementi2;
  22.     int _trenutnoElemenata;
  23. public:
  24.     Kolekcija(){
  25.         _trenutnoElemenata = 0;
  26.     }
  27.  
  28.     Kolekcija(const Kolekcija &obj){
  29.         _trenutnoElemenata = obj._trenutnoElemenata;
  30.  
  31.         _elementi1 = new T1[_trenutnoElemenata];
  32.         _elementi2 = new T2[_trenutnoElemenata];
  33.  
  34.         for (int i = 0; i < _trenutnoElemenata; i++){
  35.             _elementi1[i] = obj._elementi1[i];
  36.             _elementi2[i] = obj._elementi2[i];
  37.         }
  38.     }
  39.  
  40.     ~Kolekcija(){
  41.         delete[] _elementi1;
  42.         delete[] _elementi2;
  43.  
  44.         _elementi1 = nullptr;
  45.         _elementi2 = nullptr;
  46.     }
  47.  
  48.     void operator=(const Kolekcija &obj){
  49.  
  50.         delete[] _elementi1;
  51.         delete[] _elementi2;
  52.  
  53.         _elementi1 = nullptr;
  54.         _elementi2 = nullptr;
  55.  
  56.         _trenutnoElemenata = obj._trenutnoElemenata;
  57.  
  58.         _elementi1 = new T1[_trenutnoElemenata];
  59.         _elementi2 = new T2[_trenutnoElemenata];
  60.  
  61.         for (int i = 0; i < _trenutnoElemenata; i++){
  62.             _elementi1[i] = obj._elementi1[i];
  63.             _elementi2[i] = obj._elementi2[i];
  64.         }
  65.     }
  66.  
  67.  
  68.     void Info(){
  69.         cout << "Trenutno elemenata: " << _trenutnoElemenata << endl;
  70.         for (int i = 0; i < _trenutnoElemenata; i++){
  71.             cout << _elementi1[i] << " " << _elementi2[i] << endl;
  72.         }
  73.     }
  74.     /*
  75.     1. AddElement :: omogucava dodavanje novog elementa u kolekciju. Ukoliko je moguce, osigurati automatsko prosiranje kolekcije prilikom dodavanja svakog novog elementa
  76.     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
  77.     */
  78.  
  79.     bool AddElement(T1 obj1, T2 obj2){
  80.         for (int i = 0; i < _trenutnoElemenata; i++){
  81.             if (_elementi1[i] == obj1 && _elementi2[i] == obj2){
  82.                 return false;
  83.             }
  84.         }
  85.  
  86.         T1 *temp1 = new T1[_trenutnoElemenata + 1];
  87.         T2 *temp2 = new T2[_trenutnoElemenata + 1];
  88.  
  89.         for (int i = 0; i < _trenutnoElemenata; i++){
  90.             temp1[i] = _elementi1[i];
  91.             temp2[i] = _elementi2[i];
  92.         }
  93.  
  94.  
  95.         delete[] _elementi1;
  96.         delete[] _elementi2;
  97.  
  98.         _elementi1 = temp1;
  99.         _elementi2 = temp2;
  100.  
  101.         _elementi1[_trenutnoElemenata] = obj1;
  102.         _elementi2[_trenutnoElemenata] = obj2;
  103.         _trenutnoElemenata++;
  104.  
  105.         cout << "Uspjesno ste dodali elemente!" << endl;
  106.         return true;
  107.     }
  108.  
  109.  
  110.     bool RemoveElement(T1 obj1){
  111.         for (int i = 0; i < _trenutnoElemenata; i++){
  112.             if (_elementi1[i] == obj1){
  113.                
  114.  
  115.                 for (int j = i; j < _trenutnoElemenata - 1; j++){
  116.                     _elementi1[j] = _elementi1[j + 1];
  117.                     _elementi2[j] = _elementi2[j + 1];
  118.                 }
  119.  
  120.                 _trenutnoElemenata--;
  121.             }
  122.         }
  123.  
  124.         T1 *temp1 = new T1[_trenutnoElemenata];
  125.         T2 *temp2 = new T2[_trenutnoElemenata];
  126.  
  127.         for (int i = 0; i < _trenutnoElemenata; i++){
  128.             temp1[i] = _elementi1[i];
  129.             temp2[i] = _elementi2[i];
  130.         }
  131.  
  132.  
  133.         delete[] _elementi1;
  134.         delete[] _elementi2;
  135.  
  136.         _elementi1 = temp1;
  137.         _elementi2 = temp2;
  138.  
  139.         cout << "Uspjesno ste uklonili elemente!" << endl;
  140.         return true;
  141.     }
  142.  
  143.  
  144.     // Get funkcije
  145.     int GetTrenutnoElemenata(){ return _trenutnoElemenata; }
  146.     T1 GetElement1(int poz){ return _elementi1[poz]; }
  147.     T2 GetElement2(int poz){ return _elementi2[poz]; }
  148.  
  149.     // Set funkcije
  150.     void SetTrenutno(int broj){
  151.         _trenutnoElemenata = broj;
  152.     }
  153.  
  154.     void SetElement1(T1 obj, int poz){
  155.         _elementi1[poz] = obj;
  156.     }
  157.  
  158.     void SetElement2(T2 obj, int poz){
  159.         _elementi2[poz] = obj;
  160.     }
  161.  
  162.  
  163.     friend ostream &operator<<<>(ostream &ispis, Kolekcija<T1, T2> &obj);
  164. };
  165.  
  166. template<class T1, class T2>
  167. ostream &operator<<(ostream &ispis, Kolekcija<T1, T2> &obj){
  168.     ispis << "Trenutno elemenata: " << obj._trenutnoElemenata << endl;
  169.     for (int i = 0; i < obj._trenutnoElemenata; i++){
  170.         ispis << obj._elementi1[i] << " " << obj._elementi2[i] << endl;
  171.     }
  172.  
  173.     return ispis;
  174. }
  175. class Datum{
  176. private:
  177.     int *_dan, *_mjesec, *_godina;
  178. public:
  179.     //1. potrebne funkcije
  180.     Datum(int d=1, int m=1, int g=2000){
  181.         _dan = new int(d);
  182.         _mjesec = new int(m);
  183.         _godina = new int(g);
  184.     }
  185.  
  186.     Datum(const Datum &obj){
  187.         _dan = new int(*obj._dan);
  188.         _mjesec = new int(*obj._mjesec);
  189.         _godina = new int(*obj._godina);
  190.     }
  191.  
  192.     ~Datum(){
  193.         delete _dan;
  194.         delete _mjesec;
  195.         delete _godina;
  196.  
  197.         _dan = _mjesec = _godina = nullptr;
  198.     }
  199.  
  200.     void operator=(const Datum &obj){
  201.         delete _dan;
  202.         delete _mjesec;
  203.         delete _godina;
  204.  
  205.         _dan = _mjesec = _godina = nullptr;
  206.  
  207.         _dan = new int(*obj._dan);
  208.         _mjesec = new int(*obj._mjesec);
  209.         _godina = new int(*obj._godina);
  210.     }
  211.  
  212.     // Get funkcije
  213.     int GetDan(){ return *_dan; }
  214.     int GetMjesec(){ return *_mjesec; }
  215.     int GetGodina(){ return *_godina; }
  216.  
  217.     // Set funkcije
  218.  
  219.     void SetDan(int dan){
  220.         delete _dan;
  221.         _dan = new int(dan);
  222.     }
  223.  
  224.     void SetMjesec(int mjesec){
  225.         delete _mjesec;
  226.         _mjesec = new int(mjesec);
  227.     }
  228.  
  229.     void SetGodina(int godina){
  230.         delete _godina;
  231.         _godina = new int(godina);
  232.     }
  233.  
  234.     bool operator<(Datum &obj){
  235.         if (*_godina < *obj._godina){
  236.             return true;
  237.         }
  238.         else if (*_godina == *obj._godina){
  239.             if (*_mjesec < *obj._mjesec){
  240.                 return true;
  241.             }
  242.             else if (*_mjesec == *obj._mjesec){
  243.                 if (*_dan < *obj._dan){
  244.                     return true;
  245.                 }
  246.             }
  247.         }
  248.  
  249.         return false;
  250.     }
  251.  
  252.     bool operator>(Datum &obj){
  253.         if (*_godina > *obj._godina){
  254.             return true;
  255.         }
  256.         else if (*_godina == *obj._godina){
  257.             if (*_mjesec > *obj._mjesec){
  258.                 return true;
  259.             }
  260.             else if (*_mjesec == *obj._mjesec){
  261.                 if (*_dan > *obj._dan){
  262.                     return true;
  263.                 }
  264.             }
  265.         }
  266.  
  267.         return false;
  268.     }
  269.  
  270.     void Info(){
  271.         cout << *_dan << "." << *_mjesec << "." << *_godina << endl;
  272.     }
  273.  
  274.     friend ostream &operator<<(ostream &ispis, Datum &obj);
  275. };
  276.  
  277. ostream &operator<<(ostream &ispis, Datum &obj){
  278.     ispis << *obj._dan << "." << *obj._mjesec << "." << *obj._godina << endl;
  279.  
  280.     return ispis;
  281. }
  282.  
  283. class Viza{
  284. private:
  285.     VrstaVize _vrstaVize;
  286.     Datum _vazenjeOD;
  287.     Datum _vazenjeDO;
  288. public:
  289.     //1. potrebne funkcije
  290.     Viza(VrstaVize vrstaVize = VrstaVize(), Datum datumOD = Datum(), Datum datumDO = Datum()){
  291.         _vrstaVize = vrstaVize;
  292.         _vazenjeOD = datumOD;
  293.         _vazenjeDO = datumDO;
  294.     }
  295.  
  296.     Viza(const Viza &obj){
  297.         _vrstaVize = obj._vrstaVize;
  298.         _vazenjeOD = obj._vazenjeOD;
  299.         _vazenjeDO = obj._vazenjeDO;
  300.     }
  301.  
  302.     void operator=(const Viza &obj){
  303.         _vrstaVize = obj._vrstaVize;
  304.         _vazenjeOD = obj._vazenjeOD;
  305.         _vazenjeDO = obj._vazenjeDO;
  306.     }
  307.  
  308.     bool operator==(Viza &obj){
  309.         if (_vrstaVize == obj._vrstaVize){
  310.             return true;
  311.         }
  312.         return false;
  313.     }
  314.  
  315.     // Get funkcije
  316.     VrstaVize GetVrstaVize(){ return _vrstaVize; }
  317.     Datum GetDatumVazenjaOD(){ return _vazenjeOD; }
  318.     Datum GetDatumVazenjaDO(){ return _vazenjeDO; }
  319.  
  320.     // Set funkcije
  321.     void SetVrstaVize(VrstaVize viza){
  322.         _vrstaVize = viza;
  323.     }
  324.  
  325.     void SetVazenjeOD(Datum OD){
  326.         _vazenjeOD = OD;
  327.     }
  328.  
  329.     void SetVazenjeDO(Datum DO){
  330.         _vazenjeDO = DO;
  331.     }
  332.  
  333.     void Info(){
  334.         cout << "Vrsta vize: " << VrstaVizeChar[_vrstaVize] << endl;
  335.         cout << "Vazenje od: " << _vazenjeOD << endl;
  336.         cout << "Vazenje do: " << _vazenjeDO << endl;
  337.     }
  338.  
  339.     friend ostream &operator<<(ostream &ispis, Viza &obj);
  340. };
  341.  
  342. ostream &operator<<(ostream &ispis, Viza &obj){
  343.     ispis << "Vrsta vize: " << VrstaVizeChar[obj._vrstaVize] << endl;
  344.     ispis << "Vazenje od: " << obj._vazenjeOD << endl;
  345.     ispis << "Vazenje do: " << obj._vazenjeDO << endl;
  346.  
  347.     return ispis;
  348. }
  349.  
  350. class AplikacijaZaVizu{
  351. private:
  352.     Datum _datumApliciranja;
  353.     StatusAplikacije _statusAplikacije;
  354.     Viza _viza;
  355.     char * _napomene;
  356. public:
  357.     //1. potrebne funkcije
  358.     AplikacijaZaVizu(Datum datumApliciranja = Datum(), StatusAplikacije statusAplikacije = StatusAplikacije(), Viza viza = Viza(), char *napomene="----"){
  359.         _datumApliciranja = datumApliciranja;
  360.         _statusAplikacije = statusAplikacije;
  361.         _viza = viza;
  362.  
  363.         int duzina = strlen(napomene) + 1;
  364.         _napomene = new char[duzina];
  365.         strcpy_s(_napomene, duzina, napomene);
  366.     }
  367.  
  368.     AplikacijaZaVizu(const AplikacijaZaVizu &obj){
  369.         _datumApliciranja = obj._datumApliciranja;
  370.         _statusAplikacije = obj._statusAplikacije;
  371.         _viza = obj._viza;
  372.  
  373.         int duzina = strlen(obj._napomene) + 1;
  374.         _napomene = new char[duzina];
  375.         strcpy_s(_napomene, duzina, obj._napomene);
  376.     }
  377.  
  378.     ~AplikacijaZaVizu(){
  379.         delete[] _napomene;
  380.         _napomene = nullptr;
  381.     }
  382.  
  383.     void operator=(const AplikacijaZaVizu &obj){
  384.         delete[] _napomene;
  385.         _napomene = nullptr;
  386.  
  387.         _datumApliciranja = obj._datumApliciranja;
  388.         _statusAplikacije = obj._statusAplikacije;
  389.         _viza = obj._viza;
  390.  
  391.         int duzina = strlen(obj._napomene) + 1;
  392.         _napomene = new char[duzina];
  393.         strcpy_s(_napomene, duzina, obj._napomene);
  394.     }
  395.  
  396.     bool operator==(AplikacijaZaVizu &obj){
  397.         if (_viza == obj._viza){
  398.             return true;
  399.         }
  400.  
  401.         return false;
  402.     }
  403.  
  404.  
  405.     // Get funkcije
  406.     Datum GetDatumApliciranja(){ return _datumApliciranja; }
  407.     StatusAplikacije GetStatusAplikacije(){ return _statusAplikacije; }
  408.     Viza GetViza(){ return _viza; }
  409.     char *GetNapomene(){ return _napomene; }
  410.  
  411.     // Set funkcije
  412.  
  413.     void SetDatumApliciranja(Datum &obj){
  414.         _datumApliciranja = obj;
  415.     }
  416.    
  417.     void SetStatusAplikacije(StatusAplikacije &status){
  418.         _statusAplikacije = status;
  419.     }
  420.  
  421.     void SetViza(Viza &obj){
  422.         _viza = obj;
  423.     }
  424.  
  425.     void SetNapomene(char *napomene){
  426.         delete[] _napomene;
  427.         _napomene = nullptr;
  428.  
  429.         int duzina = strlen(napomene) + 1;
  430.         _napomene = new char[duzina];
  431.         strcpy_s(_napomene, duzina, napomene);
  432.     }
  433.  
  434.     void Info(){
  435.         cout << "Datum apliciranja: " << _datumApliciranja << endl;
  436.         cout << "Status aplikacije: " << StatusAplikacijeChar[_statusAplikacije] << endl;
  437.         cout << "Viza: " << _viza << endl;
  438.         cout << "Napomene: " << _napomene << endl;
  439.     }
  440.  
  441.     friend ostream &operator<<(ostream &ispis, AplikacijaZaVizu &obj);
  442. };
  443.  
  444. ostream &operator<<(ostream &ispis, AplikacijaZaVizu &obj){
  445.     ispis << "Datum apliciranja: " << obj._datumApliciranja << endl;
  446.     ispis << "Status aplikacije: " << StatusAplikacijeChar[obj._statusAplikacije] << endl;
  447.     ispis << "Viza: " << obj._viza << endl;
  448.     ispis << "Napomene: " << obj._napomene << endl;
  449.  
  450.     return ispis;
  451. }
  452.  
  453. class Aplikant{
  454. private:
  455.     char * _imePrezime;
  456.     Datum * _datumRodjenja;
  457.     char * _brojPasosa;
  458.     vector<AplikacijaZaVizu *> _aplikacijeVize;
  459. public:
  460.     //1. potrebne funkcije
  461.     Aplikant(char *imePrezime="----", Datum datum = Datum(), char *brojPasosa="----"){
  462.         int duzina = strlen(imePrezime) + 1;
  463.         _imePrezime = new char[duzina];
  464.         strcpy_s(_imePrezime, duzina, imePrezime);
  465.  
  466.         duzina = strlen(brojPasosa) + 1;
  467.         _brojPasosa = new char[duzina];
  468.         strcpy_s(_brojPasosa, duzina, brojPasosa);
  469.  
  470.         _datumRodjenja = new Datum(datum);
  471.     }
  472.  
  473.     Aplikant(const Aplikant &obj){
  474.         int duzina = strlen(obj._imePrezime) + 1;
  475.         _imePrezime = new char[duzina];
  476.         strcpy_s(_imePrezime, duzina, obj._imePrezime);
  477.  
  478.         duzina = strlen(obj._brojPasosa) + 1;
  479.         _brojPasosa = new char[duzina];
  480.         strcpy_s(_brojPasosa, duzina, obj._brojPasosa);
  481.  
  482.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  483.     }
  484.  
  485.     ~Aplikant(){
  486.         delete[] _imePrezime;
  487.         _imePrezime = nullptr;
  488.  
  489.         delete[] _brojPasosa;
  490.         _brojPasosa = nullptr;
  491.     }
  492.  
  493.     void operator=(const Aplikant &obj){
  494.         delete[] _imePrezime;
  495.         _imePrezime = nullptr;
  496.  
  497.         delete[] _brojPasosa;
  498.         _brojPasosa = nullptr;
  499.  
  500.         int duzina = strlen(obj._imePrezime) + 1;
  501.         _imePrezime = new char[duzina];
  502.         strcpy_s(_imePrezime, duzina, obj._imePrezime);
  503.  
  504.         duzina = strlen(obj._brojPasosa) + 1;
  505.         _brojPasosa = new char[duzina];
  506.         strcpy_s(_brojPasosa, duzina, obj._brojPasosa);
  507.  
  508.         _datumRodjenja = new Datum(*obj._datumRodjenja);
  509.     }
  510.  
  511.     void Info(){
  512.         cout << "Ime i prezime: " << _imePrezime << endl;
  513.         cout << "Broj pasosa: " << _brojPasosa << endl;
  514.         cout << "Datum rodenja: " << _datumRodjenja << endl;
  515.  
  516.         vector<AplikacijaZaVizu*>::iterator it;
  517.  
  518.         for (it = _aplikacijeVize.begin(); it != _aplikacijeVize.end(); it++){
  519.             cout << **it << endl;
  520.         }
  521.     }
  522.  
  523.  
  524.     friend ostream &operator<<(ostream &ispis, Aplikant &obj);
  525. };
  526.  
  527. ostream &operator<<(ostream &ispis, Aplikant &obj){
  528.     ispis << "Ime i prezime: " << obj._imePrezime << endl;
  529.     ispis << "Broj pasosa: " << obj._brojPasosa << endl;
  530.     ispis << "Datum rodenja: " << obj._datumRodjenja << endl;
  531.  
  532.     vector<AplikacijaZaVizu*>::iterator it;
  533.  
  534.     for (it = obj._aplikacijeVize.begin(); it != obj._aplikacijeVize.end(); it++){
  535.         ispis << **it << endl;
  536.     }
  537.  
  538.     return ispis;
  539. }
  540.  
  541. char *crt = "\n--------------------------------------------------\n";
  542. void main() {
  543. //REGIONI olaksavaju organizaciju programskog code-a, te ih mozete ukloniti ukoliko vam otezavaju preglednost
  544. #pragma region TestiranjeKolekcije
  545.         Kolekcija<int, double> kolekcija1;
  546.         for (int i = 0; i < 100; i++)
  547.             kolekcija1.AddElement(i, i + 0.3);
  548.         cout << kolekcija1 << endl;
  549.         cout << crt;
  550.         Kolekcija<int, double> kolekcija2;
  551.         kolekcija1.RemoveElement(2);//UMANJITI VELIČINU NIZA
  552.         kolekcija2 = kolekcija1;
  553.         cout << kolekcija2 << crt;
  554.         if (kolekcija1.GetTrenutnoElemenata() == kolekcija2.GetTrenutnoElemenata())
  555.             cout << "ISTI BROJ ELEMENATA" << endl;
  556.         Kolekcija<int, double> kolekcija3(kolekcija2);
  557.         cout << kolekcija3 << crt;
  558. #pragma endregion
  559.  
  560. #pragma region TestiranjeDatuma
  561.     Datum juce(25, 11, 2015);
  562.     Datum danas(26, 11, 2015);
  563.     Datum sutra(danas);
  564.     Datum prekosutra;
  565.     prekosutra = danas;
  566.     cout << danas << endl << sutra << endl << prekosutra << crt;
  567. #pragma endregion
  568.  
  569. #pragma region TestiranjeVize
  570.     Viza viza1(Useljenicka, juce, prekosutra);
  571.     Viza viza2(Neuseljenicka, juce, prekosutra);
  572.     Viza viza3(Diplomatska, juce, prekosutra);
  573.     Viza viza4;
  574.  
  575.     viza4 = viza2;
  576.  
  577.     cout << viza1 << endl;
  578.     cout << viza2 << endl;
  579.     cout << viza3 << endl;
  580.     cout << viza4 << endl;
  581. #pragma endregion
  582.  
  583. #pragma region TestiranjeAplikacijeZaVizu
  584.     AplikacijaZaVizu aplikacija1(danas, AplikacijaNepotpuna, viza1);
  585.     AplikacijaZaVizu aplikacija2;
  586.     aplikacija2 = aplikacija1;
  587.  
  588.     cout << aplikacija1 << endl;
  589.     cout << aplikacija2 << endl;
  590. #pragma endregion
  591.  
  592.     system("pause>0");
  593. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement