Advertisement
Kios

W2_zadnja klasa pravi probleme

Dec 13th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 14.26 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.     char* getIme()
  262.     {
  263.         return _ime;
  264.     }
  265.  
  266.     //Funkciju za promjenu korisničke lozinke
  267.     void promjenaPass(char * newPass)
  268.     {
  269.         int velicina = strlen(_lozinka) + 1;
  270.         char * temp = new char[velicina];
  271.  
  272.         int brojacPokusaja = 3;
  273.         while (brojacPokusaja>0)
  274.         {
  275.             cout << "Unesi trenutni password!" << endl;
  276.             cin.getline(temp, velicina);
  277.             if (strcmp(temp, _lozinka) == 0)
  278.             {
  279.                 delete[] _lozinka;
  280.                 _lozinka = new char[strlen(newPass) + 1];
  281.                 strcpy_s(_lozinka, strlen(newPass) + 1, newPass);
  282.                 delete[] temp; temp = nullptr;
  283.                 return;
  284.             }
  285.             else
  286.             {
  287.                 cout << "Password se ne podudara!" << endl;
  288.                 cout << "Imate jos " << --brojacPokusaja << " pokusaja " << endl;
  289.             }
  290.         }
  291.         delete[] temp; temp = nullptr;
  292.        
  293.  
  294.     }
  295.     //Funkciju Info
  296.     void Info()
  297.     {
  298.         cout << "\n";
  299.         cout << "::: Podaci o korisniku :::" << endl;
  300.         cout << "Ime: " << _ime << endl;
  301.         cout << "Korisnicko ime: " << _korisnickoIme << endl;
  302.         cout << "Lozinka: ";
  303.         if (_lozinka != nullptr)
  304.         {
  305.             int vel = strlen(_lozinka);
  306.             while (vel > 0)
  307.             {
  308.                 cout << "*";
  309.                 vel--;
  310.             }cout << endl;
  311.         }
  312.         cout << "Za test: " << _lozinka << endl;
  313.         cout << "Tip korisnika: " << tipKorisnika[_tipKorisnika] << endl;
  314.     }
  315.     void setIme(char* ime)
  316.     {
  317.         if (strlen(ime) > 29)
  318.         {
  319.             cout << "Predugo ime!, mora imati 29 karaktera" << endl;
  320.             return;
  321.         }
  322.         else
  323.             strcpy_s(_ime, 29, ime);
  324.     }
  325.     void setKoriscnikoIme(char* korisnickoIme)
  326.     {
  327.         if (strlen(korisnickoIme) > 19)
  328.         {
  329.             cout << "Predugo ime!, mora imati 19 karaktera" << endl;
  330.             return;
  331.         }
  332.         else
  333.             strcpy_s(_korisnickoIme, 19, korisnickoIme);
  334.     }
  335. };
  336.  
  337. class Komentar
  338. {
  339.     char* _tekst;
  340.     Datum _datum;
  341.     Vrijeme _satnica;
  342.     int _popularnost;
  343.     Korisnik* _autor;
  344. public:
  345.     //Potrebne konstruktor i destruktor funkcije
  346.  
  347.     //konstruktor
  348.     Komentar()
  349.     {
  350.         _tekst = nullptr;
  351.         _datum;
  352.         _satnica;
  353.         _popularnost = 0;
  354.         _autor = nullptr;
  355.     }
  356.  
  357.     //konstruktor kopije
  358.     Komentar(const Komentar &org)
  359.     {
  360.         int velicina = strlen(org._tekst) + 1;
  361.         _tekst = new char[velicina];
  362.         strcpy_s(_tekst, velicina, org._tekst);
  363.         _datum = org._datum;
  364.         _satnica = org._satnica;
  365.         _popularnost = org._popularnost;
  366.         _autor = new Korisnik(*org._autor);
  367.        
  368.        
  369.     }
  370.     //dekonstruktor
  371.     ~Komentar()
  372.     {
  373.         delete[]_tekst;
  374.         _tekst = nullptr;
  375.         delete _autor;
  376.         _autor = nullptr;
  377.     }
  378.     void setTekst(char* tekst)
  379.     {
  380.         int velicina = strlen(tekst) + 1;
  381.         _tekst = new char[velicina];
  382.         strcpy_s(_tekst, velicina, tekst);
  383.     }
  384.     void setDatum(Datum d)
  385.     {
  386.         _datum = d;
  387.     }
  388.     void setSatnica(Vrijeme v)
  389.     {
  390.         _satnica = v;
  391.     }
  392.  
  393.     //Funkciju za izmjenu popularnosti komentara
  394.     void setPopularnost(int pop)
  395.     {
  396.         _popularnost = pop;
  397.     }
  398.     void setKorisnik(Korisnik k)
  399.     {
  400.         _autor = new Korisnik(k);
  401.     }
  402.     //Funkciju Info
  403.     void Info()
  404.     {
  405.         cout << endl;
  406.         cout << "----------------------------------" << endl;
  407.         if (_tekst != nullptr)
  408.             cout << "Tekst: " << _tekst << endl;
  409.         else
  410.             cout << "Tekst:" << endl;
  411.         cout << "Datum: ";
  412.         _datum.Info(); cout << endl;
  413.         cout << "Satnica: " << endl;
  414.         _satnica.Info(); cout << endl;
  415.         cout << "Popularnost: " << _popularnost << endl;
  416.         cout << "Autor: " << endl;
  417.         if (_autor != nullptr)
  418.             _autor->Info();
  419.  
  420.     }
  421. };
  422.  
  423. class Clanak
  424. {
  425.     char _naslov[150];
  426.     char* _sadrzaj;
  427.     Datum _datum;
  428.     Vrijeme _satnica;
  429.     int _brojPregleda;
  430.     char* _tagovi[10];
  431.     char _oblast[100];
  432.     Korisnik* _autor;
  433.     Komentar* _komentari;
  434.     int _brojKomentara;
  435. public:
  436.     //konstruktor
  437.     Clanak()
  438.     {
  439.         strcpy_s(_naslov, 149, "nema_naslova");
  440.         _sadrzaj = "nema_sadrzaja";
  441.         _datum;
  442.         _satnica;
  443.         _brojPregleda = 0;
  444.         for (int i = 0; i < 10; i++)
  445.             _tagovi[i] = nullptr;
  446.         strcpy_s(_oblast, 99, "nema oblasti");
  447.         _autor = nullptr;
  448.         _komentari = nullptr;
  449.         _brojKomentara = 0;
  450.     }
  451.         ~Clanak()
  452.         {
  453.         if (_sadrzaj != nullptr)
  454.         {
  455.             delete[] _sadrzaj;
  456.         }
  457.         _sadrzaj = nullptr;
  458.         for (int i = 0; i < 10; i++)
  459.         {
  460.             if (_tagovi[i] != nullptr)
  461.             {
  462.                 delete[] _tagovi[i];
  463.                 _tagovi[i] = nullptr;
  464.             }
  465.         }
  466.         if (_autor != nullptr)
  467.         {
  468.             delete[] _autor;
  469.             _autor = nullptr;
  470.         }
  471.         if (_komentari != nullptr)
  472.         {
  473.             delete[] _komentari;
  474.             _komentari = nullptr;
  475.         }
  476.         }
  477.  
  478.         void setirajClanak (char* naslov, char* sadrzaj, const Datum& d,const Vrijeme& v,int pregled,char* oblast,Korisnik& k)
  479.         {
  480.             strcpy_s(_naslov, 149, naslov);
  481.             //if (_sadrzaj != nullptr)
  482.             //  delete[]_sadrzaj;
  483.             _sadrzaj = new char[strlen(sadrzaj) + 1];
  484.             strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
  485.             _datum = d;
  486.             _satnica = v;
  487.             _brojPregleda = pregled;
  488.             strcpy_s(_oblast, 99, oblast);
  489.             _autor = new Korisnik(k);
  490.         }
  491.  
  492.     //Funkciju za dodavanje tagova za članak
  493.         bool DodajTag(char* tag)
  494.         {
  495.             for (int i = 0; i < 10; i++)
  496.             {
  497.                 if (_tagovi[i] == nullptr)
  498.                 {
  499.                     _tagovi[i] = new char[strlen(tag) + 1];
  500.                     strcpy_s(_tagovi[i], strlen(tag) + 1, tag);
  501.                     return true;
  502.                 }
  503.             }
  504.             return false;
  505.         }
  506.     /*Funkciju za promjenu sadržaja i vremena promjene članka. Kao verifikaciju dozvole potrebno je proslijediti korisničko ime autora članka.
  507.     Samo kreator članka ima permisije da mijenja njegov sadržaj.
  508.     */
  509.         void promjenaSadrzaja(char* Novisadrzaj, const Vrijeme& vrijeme,  Korisnik& k )
  510.         {
  511.             if (strcmp(k.getIme(), _autor->getIme()) == 0)
  512.             {
  513.                 if (_sadrzaj != nullptr)
  514.                 {
  515.                     int velicina = strlen(Novisadrzaj) + strlen(_sadrzaj)+2;
  516.                     char* temp = new char[velicina];
  517.                     strcpy_s(temp, velicina,_sadrzaj);
  518.                     strcat_s(temp, velicina, "-");
  519.                     strcat_s(temp, velicina, Novisadrzaj);
  520.                     delete[] _sadrzaj;
  521.                     _sadrzaj = temp;
  522.                     _satnica = vrijeme;
  523.                     cout << "Sadrzaj promjenjen!" << endl;
  524.                    
  525.                 }
  526.                 else
  527.                 {
  528.                     _sadrzaj = new char[strlen(Novisadrzaj) + 1];
  529.                     strcpy_s(_sadrzaj, strlen(Novisadrzaj) + 1, Novisadrzaj);
  530.                     _satnica = vrijeme;
  531.                     cout << "Sadrzaj dodan!" << endl;
  532.                 }
  533.             }
  534.  
  535.         }
  536.  
  537.     //Funkciju za dodavanje komentara
  538.  
  539.     //Funkciju Info
  540.         void Info()
  541.         {
  542.             cout << "Naslov: " << _naslov << endl;
  543.             if (_sadrzaj != nullptr)
  544.                 cout << _sadrzaj << endl;
  545.             _datum.Info();
  546.             _satnica.Info();
  547.             cout << "Broj pregleda: " << _brojPregleda << endl;
  548.             for (int i = 0; i < 10; i++)
  549.             {
  550.                 if (_tagovi[i] != nullptr)
  551.                     cout << _tagovi[i];
  552.             }
  553.             cout << "Oblast: " << _oblast << endl;
  554.             if (_autor!=nullptr)
  555.             _autor->Info();
  556.             if(_komentari!=nullptr)
  557.             _komentari->Info();
  558.             cout << "Broj komentara: " << _brojKomentara << endl;
  559.  
  560.         }
  561.  
  562.  
  563.  
  564.  
  565. };
  566.  
  567. int main()
  568. {
  569.     //Kreirati testni program koji demonstrira implementirane funckionalnosti
  570.  
  571.     bool format = false;
  572.     //defaultni konstruktor
  573.     Vrijeme danas;
  574.     danas.setSat(20);
  575.     danas.setMinuta(36);
  576.     danas.setSekunda(58);
  577.     //konstruktor sa tri parametra
  578.     //Vrijeme danas(23, 29, 60);
  579.     //konstruktor sa dva parametra
  580.     //Vrijeme danas(20, 15);
  581.     //funkcija info sa parametrom
  582.     //danas.Info();
  583.     //test funkcije Add
  584.     /*Vrijeme danas_ = danas.Add(2, 2, 2);
  585.     danas_.Info();*/
  586.  
  587.     //test funkcije CompareTO
  588.  
  589.     /*Vrijeme v2(5, 36, 58);
  590.     int test =v2.CompareTo(danas);
  591.     cout << test << endl;*/
  592.  
  593.     //test klase Datum
  594.     /*Datum today;
  595.     today.Info();*/
  596.  
  597.     //test klase Korisnik
  598.     //Korisnik Nedzad("Nedzad", "Kio", "password", Administrator);
  599.     //Nedzad.Info();
  600.     //Nedzad.promjenaPass("pass_last");
  601.     //Nedzad.Info();
  602.     //Korisnik Nadja(Nedzad);
  603.     //Nadja.setIme("Nadja");
  604.     //Nadja.setKoriscnikoIme("Baby");
  605.     //Nadja.promjenaPass("true");
  606.     //Nadja.Info();
  607.  
  608.     //Komentar k;
  609.     //k.Info();
  610.  
  611.     //Datum d(06, 12, 2017);
  612.     //Vrijeme v(23, 27, 20);
  613.     //Korisnik kor("Nedzad", "kio", "loop", Administrator);
  614.     //k.setDatum(d);
  615.     //k.setKorisnik(kor);
  616.     //k.setPopularnost(100);
  617.     //k.setSatnica(v);
  618.     //k.setTekst("Moje ime je medvjedic Lino!");
  619.     //k.Info();
  620.  
  621.     //Komentar Nadja(k);
  622.     //Nadja.setTekst("hahahahah");
  623.     //Nadja.Info();
  624.  
  625.     Clanak clanak;
  626.     clanak.setirajClanak("Clanak dana", "danas nam je divan dan", Datum(15, 2, 2017), Vrijeme(10, 15, 10), 10, "novine", Korisnik("Kio", "Kios", "Lozinka", Guest));
  627.     //clanak.Info();
  628.     clanak.DodajTag("tag");
  629.     clanak.DodajTag("mozda dva");
  630.     clanak.promjenaSadrzaja("Ovo je novi sadrzaj", Vrijeme(10, 15, 120), Korisnik("Kio", "Kios", "Lozinka", Guest));
  631.     clanak.Info();
  632.  
  633.  
  634.  
  635.     system("pause");
  636.     return 0;
  637. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement