Kios

W2

Dec 6th, 2017
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 12.17 KB | None | 0 0
  1. #include<iostream>
  2. #include <iomanip>
  3.  
  4. using namespace std;
  5.  
  6. class Vrijeme {
  7.     int _sati;
  8.     int _minute;
  9.     int _sekunde;
  10. public:
  11.  
  12.     //Konstruktor bez parametara
  13.     Vrijeme()
  14.     {
  15.         _sati = 0;
  16.         _minute = 0;
  17.         _sekunde = 0;
  18.     }
  19.     //Konstruktor sa 3 parametra (sati, minute i sekunde)
  20.     Vrijeme(int sati, int minute, int sekunde)
  21.     {
  22.         if (sati > 24 || sati < 0)
  23.         {
  24.             cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
  25.             //return;
  26.         }
  27.         else
  28.             _sati = sati;
  29.  
  30.         if (minute > 60 || minute < 0)
  31.         {
  32.             cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
  33.             //return;
  34.         }
  35.         else
  36.             _minute = minute;
  37.  
  38.         if (sekunde > 60 || sekunde < 0)
  39.         {
  40.             cout << "Niste unijeli tacan format sekundi!, mora biti u opsegu od 0-60s" << endl;
  41.             //return;
  42.         }
  43.         else
  44.             _sekunde = sekunde;
  45.  
  46.     }
  47.     //Konstruktor sa 2 parametra (sati i minute)
  48.     Vrijeme(int sati, int minute)
  49.     {
  50.         if (sati > 24 || sati < 0)
  51.         {
  52.             cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
  53.             //return;
  54.         }
  55.         else
  56.             _sati = sati;
  57.  
  58.         if (minute > 60 || minute < 0)
  59.         {
  60.             cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
  61.             //return;
  62.         }
  63.         else
  64.             _minute = minute;
  65.     }
  66.     //Dekonstruktor
  67.     ~Vrijeme()
  68.     {
  69.  
  70.     }
  71.  
  72.     //Funkciju Info sa neobaveznim parametrom tipa bool koji određuje da li će vrijeme biti ispisano u punom formatu
  73.     //(hh:mm:ss) ili u skraćenom formatu (hh:mm). Default-no funkcija vrši ispis u punom formatu.
  74.     void Info(bool format = true)
  75.     {
  76.         if (format != true)
  77.             cout << _sati << ":" << _minute << endl;
  78.         else
  79.             cout << _sati << ":" << _minute << ":" << _sekunde << endl;
  80.     }
  81.  
  82.     //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
  83.     //sumu vremena poslijeđenog kao parametar i instance this.
  84.     Vrijeme Add(int sat, int minuta, int sekunda)
  85.     {
  86.         return Vrijeme(_sati += sat, _minute += minuta, _sekunde += sekunda);
  87.     }
  88.  
  89.     //Funkciju CompareTo koja vraća vrijednost tipa int u zavisnosti od toga da li je vrijeme instance this prije, jednako ili poslije
  90.     //vremena proslijeđenog kao parametar.
  91.     //Moguće povratne vrijednosti:
  92.     //-1 - vrijeme instance this nastupa prije vremena v2
  93.     // 0 - vrijeme instance this je jednako vremenu v2
  94.     // 1 - vrijeme instance this nastupa nakon vremena v2
  95.     int CompareTo(Vrijeme v2)
  96.     {
  97.         if (_sati == v2._sati && _minute == v2._minute && _sekunde == v2._sekunde)
  98.             return 0;
  99.         else if (_sati < v2._sati || _minute < v2._minute || _sekunde < v2._sekunde)
  100.             return -1;
  101.         else
  102.             return 1;
  103.     }
  104.  
  105.  
  106.     void setSat(int sat)
  107.     {
  108.         if (sat > 24 || sat < 0)
  109.         {
  110.             cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
  111.             //return;
  112.         }
  113.         else
  114.             _sati = sat;
  115.     }
  116.  
  117.     void setMinuta(int minut)
  118.     {
  119.         if (minut > 60 || minut < 0)
  120.         {
  121.             cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
  122.             //return;
  123.         }
  124.         else
  125.             _minute = minut;
  126.     }
  127.     void setSekunda(int sekunda)
  128.     {
  129.         if (sekunda > 60 || sekunda < 0)
  130.         {
  131.             cout << "Niste unijeli tacan format sekundi!, mora biti u opsegu od 0-60s" << endl;
  132.             //return;
  133.         }
  134.         else
  135.             _sekunde = sekunda;
  136.     }
  137.  
  138.  
  139. };
  140.  
  141.  
  142. /*
  143. Potrebno je kreirati aplikaciju za dijeljenje znanja putem razmjene članaka među korisnicima.
  144.  
  145. Izdvojene su sljedeće funkcionalnosti:
  146. - Administrator sistema je zadužen za upravljanje korisničkim nalozima (Ime, Prezime, Email, DatumRegistracije, KorisnickoIme, Lozinka).
  147. - Svaki članak (Naslov, Sadrzaj, Datum, Satnica, BrojPregleda) može sadržavati više tagova, ali pripada samo jednoj oblasti.
  148. - Članke mogu dodavati svi registrovani korisnici.
  149. - Korisnici aplikacije također mogu ostaviti komentar (Tekst, Datum, Popularnost) na određeni članak.
  150. */
  151.  
  152. /*
  153. Na osnovu datih klasa implementirati opisane funkcionalnosti sistema. Po potrebi dopuniti klase novim atributima i/ili funkcijama.
  154. */
  155.  
  156. class Datum
  157. {
  158.     int _dan;
  159.     int _mjesec;
  160.     int _godina;
  161. public:
  162.     //Potrebne konstruktor i destruktor funkcije
  163.  
  164.     //konstruktor
  165.     Datum(int _dan = 20, int _mjesec = 2, int _godina = 1982)
  166.     {
  167.         if (_dan > 31 || _dan < 1)
  168.         {
  169.             cout << "Unijeti dani moraju biti u sljedecem rasponu od 1 do 31" << endl;
  170.             //return;
  171.         }
  172.         else
  173.             this->_dan = _dan;
  174.  
  175.         if (_mjesec > 12 || _mjesec < 1)
  176.         {
  177.             cout << "Unijeti mjesec mora biti u sljedecem rasponu od 1 do 12" << endl;
  178.             //return;
  179.         }
  180.         else
  181.             this->_mjesec = _mjesec;
  182.  
  183.         if (_godina > 2017 || _godina < 1900)
  184.         {
  185.             cout << "Unijeta godina mora biti u sljedecem rasponu od 1900 do 2017" << endl;
  186.             //return;
  187.         }
  188.         else
  189.             this->_godina = _godina;
  190.  
  191.     }
  192.     //Dekonstruktor
  193.     ~Datum()
  194.     {
  195.  
  196.     }
  197.  
  198.     //Funkciju Info
  199.     void Info()
  200.     {
  201.         cout << endl;
  202.         cout << "Dan :" << setw(8) << _dan << "\n" << "Mjesec: " << setw(4) << _mjesec << "\n" << "Godina: " << setw(7) << _godina << endl;
  203.  
  204.     }
  205. };
  206.  
  207. enum TipKorisnika { Administrator, Guest };
  208. char *tipKorisnika[] = { "Administrator","Guest" };
  209.  
  210. class Korisnik
  211. {
  212.     char _ime[30];
  213.     char _korisnickoIme[20];
  214.     char* _lozinka;
  215.     TipKorisnika _tipKorisnika; //Administrator, Guest
  216. public:
  217.     //Potrebne konstruktor i destruktor funkcije
  218.  
  219.     //Konstruktor
  220.     Korisnik(char* ime = " undef.", char* korisnickoIme = "undef.", char* lozinka = "none", TipKorisnika tip = Guest)
  221.     {
  222.         if (strlen(ime) > 29)
  223.         {
  224.             cout << "Predugo ime!, mora imati 29 karaktera" << endl;
  225.             return;
  226.         }
  227.         else
  228.             strcpy_s(_ime, 29, ime);
  229.  
  230.         if (strlen(ime) > 19)
  231.         {
  232.             cout << "Predugo korisnickoIme!, mora imati 19 karaktera" << endl;
  233.         }
  234.         else
  235.             strcpy_s(_korisnickoIme, 19, korisnickoIme);
  236.  
  237.         int velicina = strlen(lozinka) + 1;
  238.         _lozinka = new char[velicina];
  239.         strcpy_s(_lozinka, velicina, lozinka);
  240.         _tipKorisnika = tip;
  241.     }
  242.     //konstruktor kopije
  243.     Korisnik(const Korisnik& org)
  244.     {
  245.         strcpy_s(_ime, 29, org._ime);
  246.         strcpy_s(_korisnickoIme, 19, org._korisnickoIme);
  247.         int vel = strlen(org._lozinka) + 1;
  248.         _lozinka = new char[vel];
  249.         strcpy_s(_lozinka, vel, org._lozinka);
  250.         _tipKorisnika = org._tipKorisnika;
  251.     }
  252.  
  253.     //dekonstruktor
  254.     ~Korisnik()
  255.     {
  256.  
  257.         delete[] _lozinka;
  258.         _lozinka = nullptr;
  259.  
  260.     }
  261.  
  262.  
  263.     //Funkciju za promjenu korisničke lozinke
  264.     void promjenaPass(char * newPass)
  265.     {
  266.         int velicina = strlen(_lozinka) + 1;
  267.         char * temp = new char[velicina];
  268.  
  269.         int brojacPokusaja = 3;
  270.         while (brojacPokusaja>0)
  271.         {
  272.             cout << "Unesi trenutni password!" << endl;
  273.             cin.getline(temp, velicina);
  274.             if (strcmp(temp, _lozinka) == 0)
  275.             {
  276.                 delete[] _lozinka;
  277.                 _lozinka = new char[strlen(newPass) + 1];
  278.                 strcpy_s(_lozinka, strlen(newPass) + 1, newPass);
  279.                 delete[] temp; temp = nullptr;
  280.                 return;
  281.             }
  282.             else
  283.             {
  284.                 cout << "Password se ne podudara!" << endl;
  285.                 cout << "Imate jos " << --brojacPokusaja << " pokusaja " << endl;
  286.             }
  287.         }
  288.         delete[] temp; temp = nullptr;
  289.  
  290.  
  291.     }
  292.     //Funkciju Info
  293.     void Info()
  294.     {
  295.         cout << "\n";
  296.         cout << "::: Podaci o korisniku :::" << endl;
  297.         cout << "Ime: " << _ime << endl;
  298.         cout << "Korisnicko ime: " << _korisnickoIme << endl;
  299.         cout << "Lozinka: ";
  300.         if (_lozinka != nullptr)
  301.         {
  302.             int vel = strlen(_lozinka);
  303.             while (vel > 0)
  304.             {
  305.                 cout << "*";
  306.                 vel--;
  307.             }cout << endl;
  308.         }
  309.         cout << "Za test: " << _lozinka << endl;
  310.         cout << "Tip korisnika: " << tipKorisnika[_tipKorisnika] << endl;
  311.     }
  312.     void setIme(char* ime)
  313.     {
  314.         if (strlen(ime) > 29)
  315.         {
  316.             cout << "Predugo ime!, mora imati 29 karaktera" << endl;
  317.             return;
  318.         }
  319.         else
  320.             strcpy_s(_ime, 29, ime);
  321.     }
  322.     void setKoriscnikoIme(char* korisnickoIme)
  323.     {
  324.         if (strlen(korisnickoIme) > 19)
  325.         {
  326.             cout << "Predugo ime!, mora imati 19 karaktera" << endl;
  327.             return;
  328.         }
  329.         else
  330.             strcpy_s(_korisnickoIme, 19, korisnickoIme);
  331.     }
  332. };
  333.  
  334. class Komentar
  335. {
  336.     char* _tekst;
  337.     Datum _datum;
  338.     Vrijeme _satnica;
  339.     int _popularnost;
  340.     Korisnik* _autor;
  341. public:
  342.     //Potrebne konstruktor i destruktor funkcije
  343.  
  344.     //konstruktor
  345.     Komentar()
  346.     {
  347.         _tekst = nullptr;
  348.         _datum;
  349.         _satnica;
  350.         _popularnost = 0;
  351.         _autor = nullptr;
  352.     }
  353.  
  354.     //konstruktor kopije
  355.     Komentar(const Komentar &org)
  356.     {
  357.         int velicina = strlen(org._tekst) + 1;
  358.         _tekst = new char[velicina];
  359.         strcpy_s(_tekst, velicina, org._tekst);
  360.         _datum = org._datum;
  361.         _satnica = org._satnica;
  362.         _popularnost = org._popularnost;
  363.         _autor = new Korisnik(*org._autor);
  364.        
  365.        
  366.     }
  367.     //dekonstruktor
  368.     ~Komentar()
  369.     {
  370.         delete[]_tekst;
  371.         _tekst = nullptr;
  372.         delete _autor;
  373.         _autor = nullptr;
  374.     }
  375.     void setTekst(char* tekst)
  376.     {
  377.         int velicina = strlen(tekst) + 1;
  378.         _tekst = new char[velicina];
  379.         strcpy_s(_tekst, velicina, tekst);
  380.     }
  381.     void setDatum(Datum d)
  382.     {
  383.         _datum = d;
  384.     }
  385.     void setSatnica(Vrijeme v)
  386.     {
  387.         _satnica = v;
  388.     }
  389.  
  390.     //Funkciju za izmjenu popularnosti komentara
  391.     void setPopularnost(int pop)
  392.     {
  393.         _popularnost = pop;
  394.     }
  395.     void setKorisnik(Korisnik k)
  396.     {
  397.         _autor = new Korisnik(k);
  398.     }
  399.     //Funkciju Info
  400.     void Info()
  401.     {
  402.         cout << endl;
  403.         cout << "----------------------------------" << endl;
  404.         if (_tekst != nullptr)
  405.             cout << "Tekst: " << _tekst << endl;
  406.         else
  407.             cout << "Tekst:" << endl;
  408.         cout << "Datum: ";
  409.         _datum.Info(); cout << endl;
  410.         cout << "Satnica: " << endl;
  411.         _satnica.Info(); cout << endl;
  412.         cout << "Popularnost: " << _popularnost << endl;
  413.         cout << "Autor: " << endl;
  414.         if (_autor != nullptr)
  415.             _autor->Info();
  416.  
  417.     }
  418. };
  419.  
  420. class Clanak
  421. {
  422.     char _naslov[150];
  423.     char* _sadrzaj;
  424.     Datum _datum;
  425.     Vrijeme _satnica;
  426.     int _brojPregleda;
  427.     char* _tagovi[10];
  428.     char _oblast[100];
  429.     Korisnik* _autor;
  430.     Komentar* _komentari;
  431.     int _brojKomentara;
  432. public:
  433.     //konstruktor
  434.     Clanak()
  435.     {
  436.         strcpy_s(_naslov, 149, "nema_naslova");
  437.         _sadrzaj = "nema_sadrzaja";
  438.         _datum;
  439.         _satnica;
  440.         _brojPregleda = 0;
  441.         for (int i = 0; i < 10; i++)
  442.             _tagovi[i] = nullptr;
  443.         strcpy_s(_oblast, 99, "nema oblasti");
  444.         _autor = nullptr;
  445.         _komentari = nullptr;
  446.         _brojKomentara = 0;
  447.     }
  448.     Clanak(const Clanak& org)
  449.     {
  450.         strcpy_s(_naslov, 149, org._naslov);
  451.         int vel = strlen(org._sadrzaj) + 1;
  452.         _sadrzaj = new char[vel];
  453.         strcpy_s(_sadrzaj, vel, org._sadrzaj);
  454.         _datum = org._datum;
  455.         _satnica = org._satnica;
  456.         _brojKomentara = org._brojPregleda;
  457.         for (int i = 0; i < 10; i++)
  458.         {
  459.             if (org._tagovi[i] != nullptr)
  460.                 _tagovi[i] = org._tagovi[i];
  461.         }
  462.         strcpy_s(_oblast, 99, org._oblast);
  463.         _autor = new Korisnik(*org._autor);
  464.         /*  if (_brojKomentara == 0)
  465.                 _komentari = new Komentar(*org._komentari);
  466.             else
  467.                 for (int i = 0; i < _brojKomentara; i++)
  468.                     _komentari[i] = new Komentar(*org._komentari[i]);
  469.     */
  470.     }
  471.         ~Clanak()
  472.         {
  473.  
  474.         }
  475.  
  476.  
  477.     //Funkciju za dodavanje tagova za članak
  478.         bool DodajTag(char* tag)
  479.         {
  480.  
  481.         }
  482.     /*Funkciju za promjenu sadržaja i vremena promjene članka. Kao verifikaciju dozvole potrebno je proslijediti korisničko ime autora članka.
  483.     Samo kreator članka ima permisije da mijenja njegov sadržaj.
  484.     */
  485.  
  486.     //Funkciju za dodavanje komentara
  487.  
  488.     //Funkciju Info
  489.  
  490.  
  491.  
  492.  
  493.  
  494. };
  495.  
  496. int main()
  497. {
  498.     //Kreirati testni program koji demonstrira implementirane funckionalnosti
  499.  
  500.     bool format = false;
  501.     //defaultni konstruktor
  502.     Vrijeme danas;
  503.     danas.setSat(20);
  504.     danas.setMinuta(36);
  505.     danas.setSekunda(58);
  506.     //konstruktor sa tri parametra
  507.     //Vrijeme danas(23, 29, 60);
  508.     //konstruktor sa dva parametra
  509.     //Vrijeme danas(20, 15);
  510.     //funkcija info sa parametrom
  511.     //danas.Info();
  512.     //test funkcije Add
  513.     /*Vrijeme danas_ = danas.Add(2, 2, 2);
  514.     danas_.Info();*/
  515.  
  516.     //test funkcije CompareTO
  517.  
  518.     /*Vrijeme v2(5, 36, 58);
  519.     int test =v2.CompareTo(danas);
  520.     cout << test << endl;*/
  521.  
  522.     //test klase Datum
  523.     /*Datum today;
  524.     today.Info();*/
  525.  
  526.     //test klase Korisnik
  527.     //Korisnik Nedzad("Nedzad", "Kio", "password", Administrator);
  528.     //Nedzad.Info();
  529.     //Nedzad.promjenaPass("pass_last");
  530.     //Nedzad.Info();
  531.     //Korisnik Nadja(Nedzad);
  532.     //Nadja.setIme("Nadja");
  533.     //Nadja.setKoriscnikoIme("Baby");
  534.     //Nadja.promjenaPass("true");
  535.     //Nadja.Info();
  536.  
  537.     Komentar k;
  538.     k.Info();
  539.  
  540.     Datum d(06, 12, 2017);
  541.     Vrijeme v(23, 27, 20);
  542.     Korisnik kor("Nedzad", "kio", "loop", Administrator);
  543.     k.setDatum(d);
  544.     k.setKorisnik(kor);
  545.     k.setPopularnost(100);
  546.     k.setSatnica(v);
  547.     k.setTekst("Moje ime je medvjedic Lino!");
  548.     k.Info();
  549.  
  550.     Komentar Nadja(k);
  551.     Nadja.setTekst("hahahahah");
  552.     Nadja.Info();
  553.  
  554.  
  555.  
  556.  
  557.     system("pause");
  558.     return 0;
  559. }
Add Comment
Please, Sign In to add comment