daily pastebin goal
32%
SHARE
TWEET

Untitled

a guest Sep 13th, 2017 65 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <string>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. char *crt = "\n-----------------------------------------------\n";
  7.  
  8. enum Status { ZAHTJEV_ZAPRIMLJEN, ODUSTAO, ODBIJENA, IZDATA, ISTEKLA, PONISTENA };
  9. enum Sortiranje { RASTUCI, OPADAJUCI };
  10. enum Drzava { SAD, AUSTRALIJA, ENGLESKA };
  11.  
  12. class Datum {
  13.     int *_dan, *_mjesec, *_godina;
  14. public:
  15.     Datum(int dan = 1, int mjesec = 1, int godina = 2000) {
  16.         _dan = new int(dan);
  17.         _mjesec = new int(mjesec);
  18.         _godina = new int(godina);
  19.     }
  20.     ~Datum() {
  21.         delete _dan; _dan = nullptr;
  22.         delete _mjesec; _mjesec = nullptr;
  23.         delete _godina; _godina = nullptr;
  24.     }
  25.     friend ostream& operator<< (ostream &COUT, Datum &obj) {
  26.         COUT << *obj._dan << "." << *obj._mjesec << "." << *obj._godina;
  27.         return COUT;
  28.     }
  29.     int operator++()
  30.     {
  31.         return ++(*_dan);
  32.     }
  33.     int operator++(int)
  34.     {
  35.         Datum d;
  36.         (*d._dan)++;
  37.         return ;
  38.     }
  39. };
  40.  
  41. template<class T1, class T2, int max>
  42. class FITKolekcija {
  43.     T1 * _elementi1[max];
  44.     T2 * _elementi2[max];
  45.     int _trenutno;
  46. public:
  47.     FITKolekcija() {
  48.         for (size_t i = 0; i < max; i++) {
  49.             _elementi1[i] = nullptr;
  50.             _elementi2[i] = nullptr;
  51.         }
  52.         _trenutno = 0;
  53.     }
  54.     ~FITKolekcija() {
  55.         for (size_t i = 0; i < max; i++) {
  56.             delete _elementi1[i]; _elementi1[i] = nullptr;
  57.             delete _elementi2[i]; _elementi2[i] = nullptr;
  58.         }
  59.     }
  60.     T1 ** GetT1() { return _elementi1; }
  61.     T2 ** GetT2() { return _elementi2; }
  62.     int GetTrenutno() { return _trenutno; }
  63.  
  64.     friend ostream& operator<< (ostream &COUT, FITKolekcija &obj) {
  65.         for (size_t i = 0; i < obj._trenutno; i++)
  66.             COUT << *obj._elementi1[i] << " " << *obj._elementi2[i] << endl;
  67.         return COUT;
  68.     }
  69.     void Dodaj(T1 elem1,T2 elem2)
  70.     {
  71.  
  72.     }
  73. };
  74.  
  75.  
  76. class Viza {
  77. protected:
  78.     Drzava _drzava;
  79.     Datum _vazenjeOD;
  80.     Datum _vazenjeDO;
  81.     char * _napomena;
  82.     // string se odnosi na razlog promjene statusa, a moguće je samo 10 izmjena statusa
  83.     FITKolekcija<Status, string, 10> _statusi;
  84. public:
  85.     Viza(Drzava drzava, Datum _OD, Datum _DO, char * napomena = nullptr) :_vazenjeDO(_DO), _vazenjeOD(_OD)
  86.     {
  87.         if (napomena != nullptr) {
  88.             _napomena = new char[strlen(napomena) + 1];
  89.             strcpy_s(_napomena, strlen(napomena) + 1, napomena);
  90.         }
  91.         else
  92.             _napomena = nullptr;
  93.         _drzava = drzava;
  94.     }
  95.     ~Viza() { delete[] _napomena; _napomena = nullptr; }
  96.     Datum GetVazenjeOD() { return _vazenjeOD; }
  97.     Datum GetVazenjeDO() { return _vazenjeDO; }
  98.     char * GetNapomena() { return _napomena; }
  99.     FITKolekcija<Status, string, 10> & GetStatuse() { return _statusi; }
  100.     virtual void Info() = 0;
  101. };
  102.  
  103. class PoslovnaViza :public Viza {
  104.     string _kompanija; //naziv kompanije koja potvrđuje da posluje sa aplikantom
  105. public:
  106.     PoslovnaViza(Drzava drzava, Datum _OD, Datum _DO, string kompanija, char * napomena = nullptr) : Viza(drzava, _OD, _DO, napomena) {
  107.         _kompanija = kompanija;
  108.     }
  109.     friend ostream & operator << (ostream & COUT, PoslovnaViza & obj) {
  110.         COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._kompanija << endl;
  111.         COUT << ((obj._napomena != nullptr) ? obj._napomena : "") << endl;
  112.         COUT << "STATUSI -> " << obj._statusi << endl;
  113.         return COUT;
  114.  
  115.     }
  116.  
  117. };
  118. class TuristickaViza : public Viza {
  119.     string _adresa; //adresa hotele ili drugog smještaja na kojoj će aplikant boraviti
  120. public:
  121.     TuristickaViza(Drzava drzava, Datum _OD, Datum _DO, string adresa, char * napomena = nullptr) : Viza(drzava, _OD, _DO, napomena) {
  122.         _adresa = adresa;
  123.     }
  124.     friend ostream & operator << (ostream & COUT, TuristickaViza & obj) {
  125.         COUT << obj._drzava << " " << obj._vazenjeOD << " " << obj._vazenjeDO << " " << obj._adresa << endl;
  126.         COUT << ((obj._napomena != nullptr) ? obj._napomena : "") << endl;
  127.         COUT << "STATUSI -> " << obj._statusi << endl;
  128.         return COUT;
  129.  
  130.     }
  131. };
  132.  
  133. class Aplikant {
  134.     char * _imePrezime;
  135.     Datum * _datumRodjenja;
  136.     char * _brojPasosa;
  137.     vector<Viza *> _vize;
  138. public:
  139.     Aplikant(char * imePrezime, Datum datumRodjenja, char * brPasosa) {
  140.         int vel = strlen(imePrezime) + 1;
  141.         _imePrezime = new char[vel];
  142.         strcpy_s(_imePrezime, vel, imePrezime);
  143.         vel = strlen(brPasosa) + 1;
  144.         _brojPasosa = new char[vel];
  145.         strcpy_s(_brojPasosa, vel, brPasosa);
  146.         _datumRodjenja = new Datum(datumRodjenja);
  147.     }
  148.     ~Aplikant() {
  149.         delete[]_imePrezime; _imePrezime = nullptr;
  150.         delete[]_brojPasosa; _brojPasosa = nullptr;
  151.         delete _datumRodjenja; _datumRodjenja = nullptr;
  152.         for (size_t i = 0; i < _vize.size(); i++)
  153.         {
  154.             delete _vize[i]; _vize[i] = nullptr;
  155.         }
  156.     }
  157.     friend ostream & operator << (ostream & COUT, Aplikant & obj) {
  158.         COUT << obj._imePrezime << " " << obj._datumRodjenja << " " << obj._brojPasosa << endl;
  159.         COUT << "VIZE -> " << endl;
  160.         for (size_t i = 0; i < obj._vize.size(); i++)
  161.             COUT << obj._vize[i] << endl;
  162.         return COUT;
  163.     }
  164.  
  165.     vector<Viza * > GetVize() { return _vize; }
  166. };
  167.  
  168. void main() {
  169.  
  170.     /****************************************************************************
  171.     1. SVE KLASE TREBAJU POSJEDOVATI ADEKVATAN DESTRUKTOR
  172.     2. NAMJERNO IZOSTAVLJANJE KOMPLETNIH I/ILI POJEDINIH DIJELOVA DESTRUKTORA KOJI UZROKUJU RUNTIME ERROR ĆE BITI OZNACENO KAO "RE"
  173.     3. SPAŠAVAJTE PROJEKAT KAKO BI SE SPRIJEČILO GUBLJENJE URAĐENOG ZADATKA
  174.     4. PROGRAMSKI CODE SE TAKOĐER NALAZI U FAJLU CODE.TXT
  175.     5. NAZIVI FUNKCIJA, TE BROJ I TIP PARAMETARA MORAJU BITI IDENTIČNI ONIMA KOJI SU KORIŠTENI U TESTNOM CODE-U, OSIM U SLUČAJU DA POSTOJI ADEKVATAN RAZLOG ZA NJIHOVU MODIFIKACIJU. OSTALE, POMOĆNE FUNKCIJE MOŽETE IMENOVATI I DODAVATI PO ŽELJI.
  176.     6. IZUZETAK BACITE U FUNKCIJAMA U KOJIMA JE TO NAZNAČENO.
  177.     ****************************************************************************/
  178.  
  179.  
  180.  
  181.     Datum danas(15, 2, 2017);
  182.     Datum sutra(++danas); // inkrementiranjem se uvecava dan za 1
  183.     Datum prekosutra;
  184.     Datum dat15022017(15, 2, 2017), dat18082017(18, 8, 2017), dat11052018(11, 5, 2018), dat11122017(11, 12, 2017);
  185.  
  186.  
  187.     prekosutra = danas;
  188.     if (prekosutra == danas)
  189.         cout << "Datumi su jednaki" << endl;
  190.     cout << danas << endl << sutra << endl << prekosutra << crt;
  191.  
  192.     int v6 = 6, v13 = 13, v32 = 32, v63 = 63, v98 = 98, v109 = 109, v196 = 196;
  193.  
  194.     FITKolekcija<int, int, 7> brojevi;
  195.     brojevi.Dodaj(v196, v6);
  196.     brojevi.Dodaj(v13, v32);
  197.     brojevi.Dodaj(v98, v196);
  198.     brojevi.Dodaj(v63, v13);
  199.     brojevi.Dodaj(v98, v196);
  200.     brojevi.Dodaj(v196, v6);
  201.  
  202.     cout << brojevi << crt;
  203.     //NA KOJI NAČIN ĆE SE VRŠITI SORTIRANJE PRVENSTVENO ZAVISI OD VRIJEDNOSTI PARAMETRA, A VRŠI SE NA OSNOVU VRIJEDNOSTI TIPA T1
  204.     brojevi.Sortiraj(RASTUCI);
  205.     cout << brojevi << crt;
  206.     brojevi.Sortiraj(OPADAJUCI);
  207.     cout << brojevi << crt;
  208.  
  209.     try
  210.     {
  211.         //U SLUČAJU PREKORAČENJA DEFINISANE VELIČINE KOLEKCIJE, POTREBNO JE BACITI IZUZETAK
  212.         brojevi.Dodaj(v13, v196);
  213.     }
  214.     catch (exception & err)
  215.     {
  216.         cout << "Error -> " << err.what() << endl;
  217.     }
  218.  
  219.     Aplikant jasmin("Jasmin Azemovic", Datum(15, 5, 1979), "BS6985645");
  220.     PoslovnaViza poslovna(SAD, dat15022017, dat18082017, "Microsoft");
  221.  
  222.     /*
  223.     NOVA VIZA SE NE MOŽE DODATI UKOLIKO:
  224.     -   JE APLIKANT MLAĐI OD 10 GODINA
  225.     -   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. DA VIZA NIJE PONIŠTENA ILI ISTEKLA) VIZA ZA TU DRŽAVU, BEZ OBZIRA NA NJENU VRSTU.
  226.     -   JE NEKA OD RANIJIH VIZA PONIŠTENA (OVO SE ODNOSI SAMO NA VIZE ZA DRŽAVU: SAD)
  227.     */
  228.     if (jasmin.DodajVizu(&poslovna))
  229.         cout << "Podaci o vizi uspješno zaprimljeni" << endl;
  230.     /*
  231.     STATUSI SE MOGU DODAVATI SAMO U REDOSLIJEDU U KOJEM SE NALAZE U ENUMERACIJI NPR.
  232.     -   NIJE MOGUĆE ODBITI VIZU AKO PRETHODNO NIJE IMALA STATUS DA JE ZAHTJEV_ZAPRIMLJEN;
  233.     -   NIJE MOGUĆE PONIŠTITI VIZU KOJA PRETHODNO NIJE IZDATA
  234.     */
  235.     if (jasmin.DodajStatus(&poslovna, ZAHTJEV_ZAPRIMLJEN, "provjeriti navode sa predstavnicima kompanije Microsoft"))
  236.         cout << "Status vize uspijesno promijenjen" << endl;
  237.     else
  238.         cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  239.  
  240.  
  241.     if (jasmin.DodajStatus(&poslovna, PONISTENA, "predstavnicima kompanije Microsoft nemaju informaciju o posjeti navedenog aplikanta"))
  242.         cout << "Status vize uspijesno promijenjen" << endl;
  243.     else
  244.         cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  245.  
  246.     TuristickaViza turisticka(ENGLESKA, dat18082017, dat11122017, "Whitehall Pl, London SW1A 2BD, UK");
  247.  
  248.     if (jasmin.DodajStatus(&turisticka, ZAHTJEV_ZAPRIMLJEN))
  249.         cout << "Status vize uspijesno promijenjen" << endl;
  250.     else
  251.         cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  252.  
  253.     if (jasmin.DodajStatus(&turisticka, IZDATA)) {
  254.         cout << "Status vize uspijesno promijenjen" << endl;
  255.         //U ZASEBNOJ NITI URADITI PRINTANJE VIZE...KORISTITI METODU SLEEP_FOR
  256.         jasmin.PrintajVizu(&turisticka);
  257.     }
  258.     else
  259.         cout << "Aplikant " << jasmin << " ne posjeduje evidentiranu trazenu vizu ili status vize nema odgovarajucu vrijednost" << endl;
  260.     //VRAĆA PODATKE O SVIM VIZAMA KOJE SU IZDATE ZA ODREĐENU DRŽAVU, A KOJE SU IMALE ODREĐENI STATUS
  261.     vector<Viza *> jasminVize = jasmin.GetVizeByDrzava(SAD, PONISTENA);
  262.  
  263.     //UNUTAR NAPOMENE MIJENJA SADRŽAJ "nemaju informaciju" SA "su upoznti sa" - KORISTITI REGEX
  264.     jasmin.ZamijeniRijec("nemaju informaciju", "su upoznti sa");
  265.  
  266. }
RAW Paste Data
Top