Advertisement
Kios

W01_PRIII_done

Dec 18th, 2017
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.03 KB | None | 0 0
  1. #include<iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Vrijeme {
  6.     int _sati;
  7.     int _minute;
  8.     int _sekunde;
  9. public:
  10.  
  11.     //Konstruktor bez parametara
  12.     Vrijeme() :_sati(0), _minute(0), _sekunde(0)
  13.     {
  14.  
  15.     }
  16.     //Konstruktor sa 3 parametra (sati, minute i sekunde)
  17.     Vrijeme(int sati, int minute, int sekunde)
  18.     {
  19.         //raditi cemo dodjelu bez validnosti!
  20.         _sati = sati;
  21.         _minute = minute;
  22.         _sekunde = sekunde;
  23.     }
  24.     //Konstruktor sa 2 parametra (sati i minute)
  25.     Vrijeme(int sati, int minute) :_sekunde(0)
  26.     {
  27.         _sati = sati;
  28.         _minute = minute;
  29.     }
  30.  
  31.     //Funkciju Info sa neobaveznim parametrom tipa bool koji određuje da li će vrijeme biti ispisano u punom formatu
  32.     //(hh:mm:ss) ili u skraćenom formatu (hh:mm). Default-no funkcija vrši ispis u punom formatu.
  33.     void Info(bool ispis = true)
  34.     {
  35.         cout << _sati << ":" << _minute << ":" << _sekunde << endl;
  36.         if (ispis != true)
  37.             cout << _sati << ":" << _minute << endl;
  38.     }
  39.     //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
  40.     //sumu vremena poslijeđenog kao parametar i instance this.
  41.     Vrijeme& Add(const Vrijeme& v)
  42.     {
  43.         return Vrijeme(this->_sati + v._sati, this->_minute + v._minute, this->_sekunde + v._sekunde);
  44.     }
  45.  
  46.     //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
  47.     //sumu parametra izraženog u minutama i vremena instance this.
  48.     Vrijeme& Add(const int& minute)
  49.     {
  50.  
  51.         int ukupnoSekundi = _sati * 3600 + (_minute + minute) * 60 + _sekunde;
  52.         return Vrijeme(ukupnoSekundi / 3600, ukupnoSekundi % 3600 / 60, ukupnoSekundi % 60);
  53.     }
  54.     //Funkciju CompareTo koja vraća vrijednost tipa int u zavisnosti od toga da li je vrijeme instance this prije, jednako ili poslije
  55.     //vremena proslijeđenog kao parametar.
  56.     //Moguće povratne vrijednosti:
  57.     //-1 - vrijeme instance this nastupa prije vremena v2
  58.     // 0 - vrijeme instance this je jednako vremenu v2
  59.     // 1 - vrijeme instance this nastupa nakon vremena v2
  60.     int CompareTo(const Vrijeme& v)
  61.     {
  62.         if (v._sati == _sati && v._minute == _minute && v._sekunde == _sekunde)
  63.             return 0;
  64.         else if (_sati > v._sati || _minute > v._minute || _sekunde > v._sekunde)
  65.             return 1;
  66.         else
  67.             return -1;
  68.     }
  69. };
  70.  
  71.  
  72. /*
  73. Potrebno je kreirati aplikaciju za dijeljenje znanja putem razmjene članaka među korisnicima.
  74.  
  75. Izdvojene su sljedeće funkcionalnosti:
  76. - Administrator sistema je zadužen za upravljanje korisničkim nalozima (Ime, Prezime, Email, DatumRegistracije, KorisnickoIme, Lozinka).
  77. - Svaki članak (Naslov, Sadrzaj, Datum, Satnica, BrojPregleda) može sadržavati više tagova, ali pripada samo jednoj oblasti.
  78. - Članke mogu dodavati svi registrovani korisnici.
  79. - Korisnici aplikacije također mogu ostaviti komentar (Tekst, Datum, Popularnost) na određeni članak.
  80. */
  81.  
  82. /*
  83. Na osnovu datih klasa implementirati opisane funkcionalnosti sistema. Po potrebi dopuniti klase novim atributima i/ili funkcijama.
  84. */
  85.  
  86. class Datum
  87. {
  88.     int _dan;
  89.     int _mjesec;
  90.     int _godina;
  91. public:
  92.     //Potrebne konstruktor i destruktor funkcije
  93.  
  94.     //konstruktor
  95.     Datum(int dan = 0, int mjesec = 0, int godina = 0) :_dan(dan), _mjesec(mjesec), _godina(godina)
  96.     {
  97.  
  98.     }
  99.     //konstruktor kopije
  100.     Datum(const Datum& datum)
  101.     {
  102.         _dan = datum._dan;
  103.         _mjesec = datum._mjesec;
  104.         _godina = datum._godina;
  105.     }
  106.     ~Datum()
  107.     {
  108.  
  109.     }
  110.     //Funkciju Info
  111.     void Info()
  112.     {
  113.         cout << _dan << "." << _mjesec << "." << _godina << endl;
  114.     }
  115. };
  116.  
  117. enum TipKorisnika { Administrator, Guest };
  118. char* tipKorisnika[] = { "Administrator","Guest" };
  119.  
  120. class Korisnik
  121. {
  122.     char _ime[30];
  123.     char _korisnickoIme[20];
  124.     char* _lozinka;
  125.     TipKorisnika _tipKorisnika; //Administrator, Guest
  126. public:
  127.     //Potrebne konstruktor i destruktor funkcije
  128.     Korisnik(char* ime = "n/A", char* korisnicko_ime = "n/A", char* lozinka = "n/A", TipKorisnika korisnik = Guest)
  129.     {
  130.         strcpy_s(_ime, 29, ime);
  131.         strcpy_s(_korisnickoIme, 19, korisnicko_ime);
  132.         int velicina = strlen(lozinka) + 1;
  133.         _lozinka = new char[velicina];
  134.         strcpy_s(_lozinka, velicina, lozinka);
  135.         _tipKorisnika = korisnik;
  136.     }
  137.  
  138.     ~Korisnik()
  139.     {
  140.         delete[] _lozinka;
  141.         _lozinka = nullptr;
  142.     }
  143.     //Funkciju za promjenu korisničke lozinke
  144.     bool promjenaPass(char* lozinka)
  145.     {
  146.         if (strcmp(lozinka, _lozinka) == 0)
  147.         {
  148.             cout << "Unijeli ste isti password!" << endl;
  149.             return false;
  150.         }
  151.         delete[] _lozinka;
  152.         _lozinka = new char[strlen(lozinka) + 1];
  153.         strcpy_s(_lozinka, strlen(lozinka) + 1, lozinka);
  154.         return true;
  155.     }
  156.     //Funkciju Info
  157.     void Info()
  158.     {
  159.         cout << "Ime: " << _ime << endl;
  160.         cout << "Korisnicko ime: " << _korisnickoIme << endl;
  161.         cout << "Lozinka: ";
  162.         for (int i = 0; i < strlen(_lozinka); i++)
  163.             cout << "*";
  164.         cout << endl;
  165.         cout << "For test purposes: " << _lozinka << endl;
  166.         cout << "Tip Korisnika: " << tipKorisnika[_tipKorisnika] << endl;
  167.     }
  168.     char* getIme()
  169.     {
  170.         return _korisnickoIme;
  171.     }
  172.     void Postavi (const Korisnik& k)
  173.     {
  174.         strcpy_s(_ime, 29, k._ime);
  175.         strcpy_s(_korisnickoIme, 19, k._korisnickoIme);
  176.         if (_lozinka != nullptr)
  177.             delete[] _lozinka;
  178.         _lozinka = new char[strlen(k._lozinka) + 1];
  179.         strcpy_s(_lozinka, strlen(k._lozinka) + 1, k._lozinka);
  180.         _tipKorisnika = k._tipKorisnika;
  181.     }
  182. };
  183.  
  184. class Komentar
  185. {
  186.     char* _tekst;
  187.     Datum _datum;
  188.     Vrijeme _satnica;
  189.     int _popularnost;
  190.     Korisnik* _autor;
  191. public:
  192.     //Potrebne konstruktor i destruktor funkcije
  193.     Komentar()
  194.     {
  195.         _tekst = nullptr;
  196.         _popularnost = 0;
  197.         _autor = nullptr;
  198.     }
  199.     void Postavi(const Komentar&k)
  200.     {
  201.         int velicina = strlen(k._tekst) + 1;
  202.         _tekst = new char[velicina];
  203.         strcpy_s(_tekst, velicina, k._tekst);
  204.         _datum = k._datum;
  205.         _satnica = k._satnica;
  206.         _popularnost = k._popularnost;
  207.         _autor = new Korisnik;
  208.         _autor->Postavi(*k._autor);
  209.     }
  210.     void Kreiraj(char* tekst, const Datum& d, const Vrijeme& v, int popularnost, const Korisnik& k)
  211.     {
  212.         int velicina = strlen(tekst) + 1;
  213.         _tekst = new char[velicina];
  214.         strcpy_s(_tekst, velicina, tekst);
  215.         _datum =d;
  216.         _satnica = v;
  217.         _popularnost = popularnost;
  218.         _autor = new Korisnik;
  219.         _autor->Postavi(k);
  220.     }
  221.  
  222.     ~Komentar()
  223.     {
  224.         delete[] _tekst;
  225.         _tekst = nullptr;
  226.         delete _autor;
  227.         _autor = nullptr;
  228.     }
  229.  
  230.     //Funkciju za izmjenu popularnosti komentara
  231.     void setPopularnost(int broj)
  232.     {
  233.         if (broj == _popularnost)
  234.         {
  235.             cout << "Popularnost je vec postavljena na istu vrijednost!";
  236.             return;
  237.         }
  238.         else if (broj < 0)
  239.         {
  240.             cout << "Popularnost ne moze biti negativan broj!" << endl;
  241.             return;
  242.         }
  243.         else
  244.             _popularnost = broj;
  245.     }
  246.     //Funkciju Info
  247.     void Info()
  248.     {
  249.         cout << "Tekst: " << _tekst << endl;
  250.         cout << "Datum: ";
  251.         _datum.Info();
  252.         cout << "\n Vrijeme: ";
  253.         _satnica.Info();
  254.         cout << "\n Popularnost: " << _popularnost << endl;
  255.         cout << "Autor: ";
  256.         _autor->Info();
  257.     }
  258. };
  259. #pragma region Radni
  260. class Clanak
  261. {
  262.     char _naslov[150];
  263.     char* _sadrzaj;
  264.     Datum _datum;
  265.     Vrijeme _satnica;
  266.     int _brojPregleda;
  267.     char* _tagovi[10];
  268.     char _oblast[100];
  269.     Korisnik* _autor;
  270.     Komentar* _komentari;
  271.     int _brojKomentara;
  272. public:
  273.  
  274.     Clanak()
  275.     {
  276.         strcpy_s(_naslov, 150, "n/A");
  277.         _sadrzaj = new char[1];
  278.         _sadrzaj = "n";
  279.         _brojPregleda = 0;
  280.         for (int i = 0; i < 10; i++)
  281.             _tagovi[i] = nullptr;
  282.         strcpy_s(_oblast, 99, "n/A");
  283.         _autor = nullptr;
  284.         _komentari = nullptr;
  285.         _brojKomentara = 0;
  286.     }
  287.  
  288.     ~Clanak()
  289.     {
  290.         delete[] _sadrzaj;
  291.         _sadrzaj = nullptr;
  292.  
  293.         for (int i = 0; i < 10; i++)
  294.         {
  295.                 delete[]_tagovi[i];
  296.                 _tagovi[i] = nullptr;
  297.         }
  298.         if (_komentari != nullptr)
  299.         {
  300.             delete[] _komentari;
  301.             _komentari = nullptr;
  302.         }
  303.     }
  304.  
  305.     void kreirajClanak(char* naslov, char* sadrzaj, const Datum& datum, const Vrijeme& satnica, char* oblast, const Korisnik&k)
  306.     {
  307.         strcpy_s(_naslov, 150, naslov);
  308.         int velicina = strlen(sadrzaj) + 1;
  309.         _sadrzaj = new char[velicina];
  310.         strcpy_s(_sadrzaj, velicina, sadrzaj);
  311.         _datum = datum;
  312.         _satnica = satnica;
  313.         strcpy_s(_oblast, 100, oblast);
  314.         _autor = new Korisnik;
  315.         _autor->Postavi(k);
  316.     }
  317.  
  318.     //Funkciju za dodavanje tagova za članak
  319.     bool dodajTag(char* tag)
  320.     {
  321.         for (int i = 0; i < 10; i++)
  322.         {
  323.             if (_tagovi[i] == nullptr)
  324.             {
  325.                 int velicina = strlen(tag) + 1;
  326.                 _tagovi[i] = new char[velicina];
  327.                 strcpy_s(_tagovi[i], velicina, tag);
  328.                 return true;
  329.             }
  330.         }
  331.         return false;
  332.     }
  333.  
  334.     /*Funkciju za promjenu sadržaja i vremena promjene članka. Kao verifikaciju dozvole potrebno je proslijediti korisničko ime autora članka.
  335.     Samo kreator članka ima permisije da mijenja njegov sadržaj.
  336.     */
  337.     void promjenaSadrzajaiVrijeme(char* sadrzaj, const Vrijeme& v, Korisnik& k)
  338.     {
  339.         if (strcmp(_autor->getIme(), k.getIme()) == 0)
  340.         {
  341.             if (_sadrzaj == nullptr)
  342.             {
  343.                 _sadrzaj = new char[strlen(sadrzaj) + 1];
  344.                 strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
  345.                 _satnica = v;
  346.                 cout << "Sadrzaj kreiran!" << endl;
  347.             }
  348.             else
  349.             {
  350.                 int velicina = strlen(sadrzaj) + strlen(_sadrzaj) + 2;
  351.                 char* temp = new char[velicina];
  352.                 strcpy_s(temp, velicina, _sadrzaj);
  353.                 strcat_s(temp, velicina, " ");
  354.                 strcat_s(temp, velicina, sadrzaj);
  355.                 _satnica = v;
  356.                 delete[] _sadrzaj;
  357.                 _sadrzaj = temp;
  358.                 cout << "Sadrzaj izmjenjen!" << endl;
  359.             }
  360.  
  361.         }
  362.     }
  363.     //Funkciju za dodavanje komentara
  364.     void dodajKomentar( Komentar& kom)
  365.     {
  366.         if (_brojKomentara == 0)
  367.         {
  368.             _komentari=new Komentar[_brojKomentara+1];
  369.             _komentari[_brojKomentara++].Postavi(kom);
  370.  
  371.         }
  372.         else
  373.         {
  374.             Komentar* temp = new Komentar[_brojKomentara + 1];
  375.             {
  376.                 for (int i = 0; i < _brojKomentara; i++)
  377.                 {
  378.                     temp[i].Postavi(_komentari[i]);
  379.                 }
  380.                 temp[_brojKomentara++].Postavi(kom);
  381.                 delete[]_komentari;
  382.                 _komentari = temp;
  383.             }
  384.  
  385.         }
  386.     }
  387.  
  388.     //Funkciju Info
  389.     void Info()
  390.     {
  391.  
  392.         cout << "Naslov " << _naslov << endl;
  393.         cout << "Sadrzaj: " << _sadrzaj << endl;
  394.         cout << "Datum: ";
  395.         _datum.Info();
  396.         cout << endl;
  397.         cout << "Satnica: ";
  398.         _satnica.Info();
  399.         cout << endl;
  400.         cout << "Broj pregleda: " << _brojPregleda << endl;
  401.         cout << "Oblast: " << _oblast << endl;
  402.         cout << ":::::::::::::::::::::::::::::::::::::::\n";
  403.         for (int i = 0; i < _brojKomentara; i++)
  404.             _komentari[i].Info();
  405.         cout << ":::::::::::::::::::::::::::::::::::::::\n";
  406.         cout << "Tagovi: " << endl;
  407.         for (int i = 0; i < 10; i++)
  408.         {
  409.             if (_tagovi[i] != nullptr)
  410.                 cout << _tagovi[i] << endl;
  411.         }
  412.     }
  413. };
  414.  
  415. #pragma endregion Radni
  416. int main()
  417. {
  418.     Datum danas(19, 12, 2017);
  419.     Vrijeme time(00, 35, 20);
  420.     Korisnik Nedzad("Nedzad", "kio", "kios", Administrator);
  421.     Komentar kom_danas;
  422.     kom_danas.Kreiraj("Dobar tekst!", Datum(10, 10, 10), Vrijeme(5, 5, 5), 20, Korisnik("Tina", "tina", "tina", Guest));
  423.     kom_danas.setPopularnost(50);
  424.     Komentar kom_jucer;
  425.     kom_jucer.Kreiraj("Dobar je tekst, ali moze to bolje!", danas, time, 99, Nedzad);
  426.     Clanak najbolji;
  427.     najbolji.kreirajClanak("Programiranje III", "Programiranje je stvarno zabavan nacin da se nauci programirati", danas, time, "IT", Nedzad);
  428.     najbolji.dodajKomentar(kom_jucer);
  429.     najbolji.dodajKomentar(kom_danas);
  430.     najbolji.dodajTag("IT");
  431.     najbolji.dodajTag("FIT");
  432.     najbolji.dodajTag("#");
  433.     najbolji.promjenaSadrzajaiVrijeme("i da budes bolji ", Vrijeme(00, 43, 12), Nedzad);
  434.     najbolji.Info();
  435.  
  436.     system("pause");
  437.     return 0;
  438. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement