Advertisement
Guest User

vj0001

a guest
Oct 18th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.82 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.     Vrijeme(Vrijeme &vrijeme) {
  11.         _sati = vrijeme._sati;
  12.         _minute = vrijeme._minute;
  13.         _sekunde = vrijeme._sekunde;
  14.     }
  15.     //Konstruktor bez parametara
  16.     Vrijeme();
  17.     //Konstruktor sa 3 parametra (sati, minute i sekunde)
  18.     Vrijeme(int, int, int);
  19.     //Konstruktor sa 2 parametra (sati i minute)
  20.     Vrijeme(int, int);
  21.  
  22.     //Funkciju Info sa neobaveznim parametrom tipa bool koji određuje da li će vrijeme biti ispisano u punom formatu
  23.     //(hh:mm:ss) ili u skraćenom formatu (hh:mm). Default-no funkcija vrši ispis u punom formatu.
  24.     void Info(bool = true);
  25.  
  26.     //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
  27.     //sumu vremena poslijeđenog kao parametar i instance this.
  28.     Vrijeme Add(Vrijeme);
  29.  
  30.     //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
  31.     //sumu parametra izraženog u minutama i vremena instance this.
  32.     Vrijeme Add(int);
  33.  
  34.     //Funkciju CompareTo koja vraća vrijednost tipa int u zavisnosti od toga da li je vrijeme instance this prije, jednako ili poslije
  35.     //vremena proslijeđenog kao parametar.
  36.     //Moguće povratne vrijednosti:
  37.     //-1 - vrijeme instance this nastupa prije vremena v2
  38.     // 0 - vrijeme instance this je jednako vremenu v2
  39.     // 1 - vrijeme instance this nastupa nakon vremena v2
  40.     int CompareTo(Vrijeme);
  41. };
  42. Vrijeme::Vrijeme() {
  43.     this->_sati = 0;
  44.     this->_minute = 0;
  45.     this->_sekunde = 0;
  46. }
  47. Vrijeme::Vrijeme(int sat, int min, int sek) {
  48.     this->_sati = sat;
  49.     this->_minute = min;
  50.     this->_sekunde = sek;
  51. }
  52. Vrijeme::Vrijeme(int sat, int min) {
  53.     _sati = sat;
  54.     _minute = min;
  55.     _sekunde = 0;
  56. }
  57. void Vrijeme::Info(bool n) {
  58.     if (n)
  59.         cout << this->_sati << " s, " << this->_minute << " min" << this->_sekunde << " sek." << endl;
  60.     else
  61.         cout << this->_sati << " s, " << this->_minute << " min" << endl;
  62. }
  63. Vrijeme Vrijeme::Add(Vrijeme v) {
  64.     this->_sekunde += v._sekunde;
  65.     while (this->_sekunde > 60) {
  66.         this->_minute++;
  67.         this->_sekunde -= 60;
  68.     }
  69.     this->_minute += v._minute;
  70.     while (this->_minute > 60) {
  71.         this->_sati++;
  72.         this->_minute -= 60;
  73.     }
  74.     this->_sati += v._sati;
  75.  
  76.     return Vrijeme(this->_sati, this->_minute, this->_sekunde);
  77.  
  78. }
  79. Vrijeme Vrijeme::Add(int minute) {
  80.     this->_minute += minute;
  81.     while (this->_minute > 60) {
  82.         this->_sati++;
  83.         this->_minute -= 60;
  84.     }
  85.     return Vrijeme(this->_sati, this->_minute);
  86. }
  87. int Vrijeme::CompareTo(Vrijeme v) {
  88.     if (this->_sati == v._sati && this->_minute == v._minute && this->_sekunde == v._sekunde) {
  89.         return 0;
  90.     }
  91.     if (this->_sati < v._sati) {
  92.         return -1;
  93.     }
  94.     if (this->_sati == v._sati && this->_minute < v._minute) {
  95.         return -1;
  96.     }
  97.     if (this->_sati == v._sati && this->_minute == v._minute && this->_sekunde < v._sekunde) {
  98.         return -1;
  99.     }
  100.     if (this->_sati > v._sati) {
  101.         return 1;
  102.     }
  103.     if (this->_sati == v._sati && this->_minute > v._minute) {
  104.         return 1;
  105.     }
  106.     if (this->_sati == v._sati && this->_minute == v._minute && this->_sekunde > v._sekunde) {
  107.         return 1;
  108.     }
  109.  
  110.  
  111. }
  112. /*
  113. Potrebno je kreirati aplikaciju za dijeljenje znanja putem razmjene članaka među korisnicima.
  114.  
  115. Izdvojene su sljedeće funkcionalnosti:
  116. - Administrator sistema je zadužen za upravljanje korisničkim nalozima (Ime, Prezime, Email, DatumRegistracije, KorisnickoIme, Lozinka).
  117. - Svaki članak (Naslov, Sadrzaj, Datum, Satnica, BrojPregleda) može sadržavati više tagova, ali pripadati samo jednoj oblasti.
  118. - Članke mogu dodavati svi registrovani korisnici.
  119. - Korisnici aplikacije također mogu ostaviti komentar (Tekst, Datum, Popularnost) na određeni članak.
  120. */
  121.  
  122. /*
  123. Na osnovu datih klasa implementirati opisane funkcionalnosti sistema. Po potrebi dopuniti klase novim atributima i/ili funkcijama.
  124. */
  125.  
  126. class Datum
  127. {
  128.     int _dan;
  129.     int _mjesec;
  130.     int _godina;
  131. public:
  132.     //Potrebne konstruktor i destruktor funkcije
  133.     Datum(Datum &datum) {
  134.         _dan = datum._dan;
  135.         _mjesec = datum._mjesec;
  136.         _godina = datum._godina;
  137.     }
  138.     Datum() {
  139.         this->_dan = 0;
  140.         this->_mjesec = 0;
  141.         this->_godina = 0;
  142.     }
  143.     Datum(int d, int m, int g) {
  144.         this->_dan = d;
  145.         this->_mjesec = m;
  146.         this->_godina = g;
  147.     }
  148.     ~Datum() {
  149.         cout << this->_dan << "." << this->_mjesec << "." << this->_godina << ", se unistava!" << endl;
  150.     }
  151.     //Funkciju Info
  152.     void Info() {
  153.         cout << this->_dan << "." << this->_mjesec << "." << this->_godina << endl;
  154.     }
  155. };
  156.  
  157. class Korisnik
  158. {
  159.     char _ime[30];
  160.     char _korisnickoIme[20];
  161.     char* _lozinka;
  162.     char _tipKorisnika[30]; //Administrator, Guest
  163. public:
  164.     Korisnik(Korisnik &korisnik) {
  165.         strncpy_s(_ime, 30, korisnik._ime,_TRUNCATE);
  166.         strncpy_s(_korisnickoIme, 20, korisnik._korisnickoIme, _TRUNCATE);
  167.         _lozinka = new char[strlen(korisnik._lozinka) + 1];
  168.         strncpy_s(_lozinka, strlen(korisnik._lozinka) + 1, korisnik._lozinka, _TRUNCATE);
  169.         strncpy_s(_tipKorisnika, 30, korisnik._tipKorisnika, _TRUNCATE);
  170.     }
  171.     //Potrebne konstruktor i destruktor funkcije
  172.     Korisnik() {
  173.         strncpy_s(_ime, 30, "----------", _TRUNCATE);
  174.         strncpy_s(_korisnickoIme, 20, "----------", _TRUNCATE);
  175.         _lozinka = new char[8];
  176.         strncpy_s(_lozinka, 8, "*******", _TRUNCATE);
  177.         strncpy_s(_tipKorisnika, 30, "----------", _TRUNCATE);
  178.     }
  179.     Korisnik(char ime[], char korisnik[], char *pwd, char tip[]) {
  180.         strncpy_s(_ime, 30, ime, _TRUNCATE);
  181.         strncpy_s(_korisnickoIme, 20, korisnik, _TRUNCATE);
  182.         _lozinka = new char[strlen(pwd) + 1];
  183.         strncpy_s(_lozinka, strlen(pwd) + 1, pwd, _TRUNCATE);
  184.         strncpy_s(_tipKorisnika, 30, tip, _TRUNCATE);
  185.     }
  186.     Korisnik(char ime[]) {
  187.         strncpy_s(_ime, 30, ime, _TRUNCATE);
  188.         strncpy_s(_korisnickoIme, 20, "----------", _TRUNCATE);
  189.         _lozinka = new char[8];
  190.         strncpy_s(_lozinka, 8, "*******", _TRUNCATE);
  191.         strncpy_s(_tipKorisnika, 30, "----------", _TRUNCATE);
  192.     }
  193.     ~Korisnik() {
  194.         cout << "Brišem:: " << _ime << ", " << _korisnickoIme << " ," << _lozinka << " ," << _tipKorisnika << endl;
  195.         delete[] _lozinka;
  196.         _lozinka = nullptr;
  197.     }
  198.  
  199.     //Funkciju za promjenu korisničke lozinke
  200.     void ChangePwd(char *pwd) {
  201.         if (this->_lozinka != nullptr)
  202.             delete[] _lozinka; _lozinka = nullptr;
  203.  
  204.         _lozinka = new char[strlen(pwd) + 1];
  205.         strncpy_s(_lozinka, strlen(pwd) + 1, pwd, _TRUNCATE);
  206.  
  207.  
  208.     }
  209.     //Funkciju Info
  210.     void Info() {
  211.         cout << "#:: " << _ime << ", " << _korisnickoIme << " ," << _tipKorisnika;
  212.         if (_lozinka != nullptr)
  213.             cout <<" "<< _lozinka;
  214.         cout << endl;
  215.     }
  216.     bool Compare(Korisnik ime) {
  217.         if (strcmp(this->_ime, ime._ime)) {
  218.             return true;
  219.         }
  220.         else
  221.             return false;
  222.     }
  223. };
  224.  
  225. class Komentar
  226. {
  227.     char _tekst[500];
  228.     Datum _datum;
  229.     Vrijeme _satnica;
  230.     int _popularnost;
  231.     Korisnik _autor;
  232. public:
  233.     //Potrebne konstruktor i destruktor funkcije
  234.     Komentar() :
  235.         _datum(), _satnica(), _autor()
  236.     {
  237.         strncpy_s(_tekst, 500, "**********", _TRUNCATE);
  238.         _popularnost = 0;
  239.     }
  240.     Komentar(char tekst[], Datum datum, Vrijeme satnica, int popularnost, Korisnik autor) :
  241.         _datum(datum),
  242.         _satnica(satnica),
  243.         _autor(autor)
  244.     {
  245.         strncpy_s(_tekst, 500, tekst, _TRUNCATE);
  246.         _popularnost = popularnost;
  247.     }
  248.  
  249.     //Funkciju za izmjenu popularnosti komentara
  250.     void SetPopularnost(int popularnost) {
  251.         _popularnost = popularnost;
  252.     }
  253.     //Funkciju Info
  254.     void Info() {
  255.         cout << "#:: " << _tekst << endl;
  256.         _datum.Info();
  257.         _satnica.Info();
  258.         cout << _popularnost << endl;
  259.         _autor.Info();
  260.     }
  261. };
  262.  
  263. class Clanak
  264. {
  265.     char _naslov[150];
  266.     char* _sadrzaj;
  267.     Datum _datum;
  268.     Vrijeme _satnica;
  269.     int _brojPregleda;
  270.     char* _tagovi[10];
  271.     char _oblast[100];
  272.     Korisnik _autor;
  273.     Komentar* _komentari;
  274.     int brojKomentara;
  275. public:
  276.     Clanak() :
  277.     _datum(), _satnica(), _autor()
  278.     {//zasto u konstruktoru nema datuma,vremena, korisnika,komentara?
  279.         strcpy_s(_naslov, 150, "----------");
  280.         _sadrzaj = nullptr;
  281.         _brojPregleda = 0;
  282.         for (int i = 0; i < 10; i++) {
  283.             _tagovi[i] = nullptr;
  284.         }
  285.         strncpy_s(_oblast, 100, "----------", _TRUNCATE);
  286.         brojKomentara = 0;
  287.         _komentari = new Komentar[brojKomentara + 1];
  288.     }
  289.     Clanak(char naslov[], char * sadrzaj, Datum datum, Vrijeme vrijeme, char oblast[], Korisnik autor) :
  290.         _datum(datum), _satnica(vrijeme), _autor(autor)
  291.     {
  292.         strncpy_s(_naslov, 150, naslov, _TRUNCATE);
  293.         _sadrzaj = new char[strlen(sadrzaj) + 1];
  294.         strncpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj, _TRUNCATE);
  295.         strncpy_s(_oblast, 100, oblast, _TRUNCATE);
  296.         brojKomentara = 0;
  297.         _komentari = new Komentar[brojKomentara + 1];
  298.         for (int i =0; i<10; i++)
  299.         _tagovi[i] = nullptr;
  300.  
  301.     }
  302.     ~Clanak() {
  303.         if (_sadrzaj != nullptr)
  304.             delete[] _sadrzaj;
  305.         _sadrzaj = nullptr;
  306.         for (int i = 0; i < 10; i++) {
  307.             if (_tagovi[i] != nullptr) {
  308.                 delete _tagovi[i];
  309.                 _tagovi[i] = nullptr;
  310.             }
  311.  
  312.         }
  313.         if (_komentari != nullptr) {
  314.             delete[] _komentari;
  315.             _komentari = nullptr;
  316.         }
  317.  
  318.     }
  319.     //Funkciju za dodavanje tagova članka
  320.     void AddTag(char *novi_tag) {
  321.         if (_brojPregleda >= 10)
  322.             return;
  323.  
  324.         _tagovi[_brojPregleda] = new char[strlen(novi_tag) + 1];
  325.         strcpy_s(_tagovi[_brojPregleda], strlen(novi_tag) + 1, novi_tag);
  326.         _brojPregleda++;
  327.  
  328.  
  329.     }
  330.     /*Funkciju za promjenu sadržaja i vremena promjene članka. Kao verifikaciju dozvole potrebno je proslijediti korisničko ime autora članka.
  331.     Samo kreator članka ima permisije da mijenja njegov sadržaj.
  332.     */
  333.     bool Promjeni(char *sadrzaj, Vrijeme satnica, Korisnik autor) {
  334.         if (autor.Compare(_autor)) {
  335.             _sadrzaj = new char[strlen(sadrzaj) + 1];
  336.             strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
  337.             _satnica = satnica;
  338.             return true;
  339.         }
  340.         else
  341.             return false;
  342.  
  343.     }
  344.     //Funkciju za dodavanje komentara
  345.     void AddComment(Komentar komentar) {
  346.         if (brojKomentara == 0) {
  347.             _komentari[brojKomentara] = komentar;
  348.             brojKomentara++;
  349.         }
  350.         else
  351.         {
  352.             Komentar *temp;
  353.             temp = new Komentar[brojKomentara + 1];
  354.             for (int i = 0; i < brojKomentara; i++) {
  355.                 temp[i] = _komentari[i];
  356.             }
  357.             delete[] _komentari;
  358.             _komentari = new Komentar[brojKomentara + 1];
  359.             for (int i = 0; i < brojKomentara; i++) {
  360.                 _komentari[i] = temp[i];
  361.             }
  362.             brojKomentara++;
  363.             delete[] temp; temp = nullptr;
  364.         }
  365.  
  366.     }
  367.     //Funkciju Info
  368.     void Info() {
  369.         cout << _naslov << endl;
  370.         cout << _sadrzaj << endl;
  371.         _datum.Info();
  372.         _satnica.Info();
  373.         cout << _brojPregleda << endl;
  374.         int i = 0;
  375.         while (_tagovi[i] != nullptr) {
  376.             cout << _tagovi[i] << endl;
  377.             i++;
  378.         }
  379.         cout << _oblast << endl;
  380.         _autor.Info();
  381.         for (int i = 0; i < brojKomentara; i++) {
  382.             _komentari[i].Info();
  383.             cout << endl;
  384.         }
  385.  
  386.     }
  387. };
  388.  
  389. void main()
  390. {
  391.     //Kreirati testni program koji demonstrira implementirane funckionalnosti
  392.     Korisnik Emir("Emir", "Dedic", "12345678", "Admin");
  393.     Korisnik Vanja("Vanja", "Dedic", "12345678", "Guest");
  394.     Emir.Info();
  395.     Vanja.Info();
  396.     Korisnik Mia("Mia", "Dedic", "12345678", "Guest");
  397.     Datum datum(14, 12, 1983);
  398.     Vrijeme vrijeme(15, 30);
  399.     Korisnik autor("Emir");
  400.     Clanak clanak("NASLOV!", "BLABLABLABLABLA", datum, vrijeme, "OBLAST", autor);
  401.     clanak.Info();
  402.  
  403.  
  404.     system("PAUSE");
  405. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement