Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include <iomanip>
- using namespace std;
- class Vrijeme {
- int _sati;
- int _minute;
- int _sekunde;
- public:
- //Konstruktor bez parametara
- Vrijeme()
- {
- _sati = 0;
- _minute = 0;
- _sekunde = 0;
- }
- //Konstruktor sa 3 parametra (sati, minute i sekunde)
- Vrijeme(int sati, int minute, int sekunde)
- {
- if (sati > 24 || sati < 0)
- {
- cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
- //return;
- }
- else
- _sati = sati;
- if (minute > 60 || minute < 0)
- {
- cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
- //return;
- }
- else
- _minute = minute;
- if (sekunde > 60 || sekunde < 0)
- {
- cout << "Niste unijeli tacan format sekundi!, mora biti u opsegu od 0-60s" << endl;
- //return;
- }
- else
- _sekunde = sekunde;
- }
- //Konstruktor sa 2 parametra (sati i minute)
- Vrijeme(int sati, int minute)
- {
- if (sati > 24 || sati < 0)
- {
- cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
- //return;
- }
- else
- _sati = sati;
- if (minute > 60 || minute < 0)
- {
- cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
- //return;
- }
- else
- _minute = minute;
- }
- //Dekonstruktor
- ~Vrijeme()
- {
- }
- //Funkciju Info sa neobaveznim parametrom tipa bool koji određuje da li će vrijeme biti ispisano u punom formatu
- //(hh:mm:ss) ili u skraćenom formatu (hh:mm). Default-no funkcija vrši ispis u punom formatu.
- void Info(bool format = true)
- {
- if (format != true)
- cout << _sati << ":" << _minute << endl;
- else
- cout << _sati << ":" << _minute << ":" << _sekunde << endl;
- }
- //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
- //sumu vremena poslijeđenog kao parametar i instance this.
- Vrijeme Add(int sat, int minuta, int sekunda)
- {
- return Vrijeme(_sati += sat, _minute += minuta, _sekunde += sekunda);
- }
- //Funkciju CompareTo koja vraća vrijednost tipa int u zavisnosti od toga da li je vrijeme instance this prije, jednako ili poslije
- //vremena proslijeđenog kao parametar.
- //Moguće povratne vrijednosti:
- //-1 - vrijeme instance this nastupa prije vremena v2
- // 0 - vrijeme instance this je jednako vremenu v2
- // 1 - vrijeme instance this nastupa nakon vremena v2
- int CompareTo(Vrijeme v2)
- {
- if (_sati == v2._sati && _minute == v2._minute && _sekunde == v2._sekunde)
- return 0;
- else if (_sati < v2._sati || _minute < v2._minute || _sekunde < v2._sekunde)
- return -1;
- else
- return 1;
- }
- void setSat(int sat)
- {
- if (sat > 24 || sat < 0)
- {
- cout << "Niste unijeli tacan format sati!, mora biti u opsegu od 0-24h" << endl;
- //return;
- }
- else
- _sati = sat;
- }
- void setMinuta(int minut)
- {
- if (minut > 60 || minut < 0)
- {
- cout << "Niste unijeli tacan format minuta!, mora biti u opsegu od 0-60m" << endl;
- //return;
- }
- else
- _minute = minut;
- }
- void setSekunda(int sekunda)
- {
- if (sekunda > 60 || sekunda < 0)
- {
- cout << "Niste unijeli tacan format sekundi!, mora biti u opsegu od 0-60s" << endl;
- //return;
- }
- else
- _sekunde = sekunda;
- }
- };
- /*
- Potrebno je kreirati aplikaciju za dijeljenje znanja putem razmjene članaka među korisnicima.
- Izdvojene su sljedeće funkcionalnosti:
- - Administrator sistema je zadužen za upravljanje korisničkim nalozima (Ime, Prezime, Email, DatumRegistracije, KorisnickoIme, Lozinka).
- - Svaki članak (Naslov, Sadrzaj, Datum, Satnica, BrojPregleda) može sadržavati više tagova, ali pripada samo jednoj oblasti.
- - Članke mogu dodavati svi registrovani korisnici.
- - Korisnici aplikacije također mogu ostaviti komentar (Tekst, Datum, Popularnost) na određeni članak.
- */
- /*
- Na osnovu datih klasa implementirati opisane funkcionalnosti sistema. Po potrebi dopuniti klase novim atributima i/ili funkcijama.
- */
- class Datum
- {
- int _dan;
- int _mjesec;
- int _godina;
- public:
- //Potrebne konstruktor i destruktor funkcije
- //konstruktor
- Datum(int _dan = 20, int _mjesec = 2, int _godina = 1982)
- {
- if (_dan > 31 || _dan < 1)
- {
- cout << "Unijeti dani moraju biti u sljedecem rasponu od 1 do 31" << endl;
- //return;
- }
- else
- this->_dan = _dan;
- if (_mjesec > 12 || _mjesec < 1)
- {
- cout << "Unijeti mjesec mora biti u sljedecem rasponu od 1 do 12" << endl;
- //return;
- }
- else
- this->_mjesec = _mjesec;
- if (_godina > 2017 || _godina < 1900)
- {
- cout << "Unijeta godina mora biti u sljedecem rasponu od 1900 do 2017" << endl;
- //return;
- }
- else
- this->_godina = _godina;
- }
- //Dekonstruktor
- ~Datum()
- {
- }
- //Funkciju Info
- void Info()
- {
- cout << endl;
- cout << "Dan :" << setw(8) << _dan << "\n" << "Mjesec: " << setw(4) << _mjesec << "\n" << "Godina: " << setw(7) << _godina << endl;
- }
- };
- enum TipKorisnika { Administrator, Guest };
- char *tipKorisnika[] = { "Administrator","Guest" };
- class Korisnik
- {
- char _ime[30];
- char _korisnickoIme[20];
- char* _lozinka;
- TipKorisnika _tipKorisnika; //Administrator, Guest
- public:
- //Potrebne konstruktor i destruktor funkcije
- //Konstruktor
- Korisnik(char* ime = " undef.", char* korisnickoIme = "undef.", char* lozinka = "none", TipKorisnika tip = Guest)
- {
- if (strlen(ime) > 29)
- {
- cout << "Predugo ime!, mora imati 29 karaktera" << endl;
- return;
- }
- else
- strcpy_s(_ime, 29, ime);
- if (strlen(ime) > 19)
- {
- cout << "Predugo korisnickoIme!, mora imati 19 karaktera" << endl;
- }
- else
- strcpy_s(_korisnickoIme, 19, korisnickoIme);
- int velicina = strlen(lozinka) + 1;
- _lozinka = new char[velicina];
- strcpy_s(_lozinka, velicina, lozinka);
- _tipKorisnika = tip;
- }
- //konstruktor kopije
- Korisnik(const Korisnik& org)
- {
- strcpy_s(_ime, 29, org._ime);
- strcpy_s(_korisnickoIme, 19, org._korisnickoIme);
- int vel = strlen(org._lozinka) + 1;
- _lozinka = new char[vel];
- strcpy_s(_lozinka, vel, org._lozinka);
- _tipKorisnika = org._tipKorisnika;
- }
- //dekonstruktor
- ~Korisnik()
- {
- delete[] _lozinka;
- _lozinka = nullptr;
- }
- char* getIme()
- {
- return _ime;
- }
- //Funkciju za promjenu korisničke lozinke
- void promjenaPass(char * newPass)
- {
- int velicina = strlen(_lozinka) + 1;
- char * temp = new char[velicina];
- int brojacPokusaja = 3;
- while (brojacPokusaja>0)
- {
- cout << "Unesi trenutni password!" << endl;
- cin.getline(temp, velicina);
- if (strcmp(temp, _lozinka) == 0)
- {
- delete[] _lozinka;
- _lozinka = new char[strlen(newPass) + 1];
- strcpy_s(_lozinka, strlen(newPass) + 1, newPass);
- delete[] temp; temp = nullptr;
- return;
- }
- else
- {
- cout << "Password se ne podudara!" << endl;
- cout << "Imate jos " << --brojacPokusaja << " pokusaja " << endl;
- }
- }
- delete[] temp; temp = nullptr;
- }
- //Funkciju Info
- void Info()
- {
- cout << "\n";
- cout << "::: Podaci o korisniku :::" << endl;
- cout << "Ime: " << _ime << endl;
- cout << "Korisnicko ime: " << _korisnickoIme << endl;
- cout << "Lozinka: ";
- if (_lozinka != nullptr)
- {
- int vel = strlen(_lozinka);
- while (vel > 0)
- {
- cout << "*";
- vel--;
- }cout << endl;
- }
- cout << "Za test: " << _lozinka << endl;
- cout << "Tip korisnika: " << tipKorisnika[_tipKorisnika] << endl;
- }
- void setIme(char* ime)
- {
- if (strlen(ime) > 29)
- {
- cout << "Predugo ime!, mora imati 29 karaktera" << endl;
- return;
- }
- else
- strcpy_s(_ime, 29, ime);
- }
- void setKoriscnikoIme(char* korisnickoIme)
- {
- if (strlen(korisnickoIme) > 19)
- {
- cout << "Predugo ime!, mora imati 19 karaktera" << endl;
- return;
- }
- else
- strcpy_s(_korisnickoIme, 19, korisnickoIme);
- }
- };
- class Komentar
- {
- char* _tekst;
- Datum _datum;
- Vrijeme _satnica;
- int _popularnost;
- Korisnik* _autor;
- public:
- //Potrebne konstruktor i destruktor funkcije
- //konstruktor
- Komentar()
- {
- _tekst = nullptr;
- _datum;
- _satnica;
- _popularnost = 0;
- _autor = nullptr;
- }
- //konstruktor kopije
- Komentar(const Komentar &org)
- {
- int velicina = strlen(org._tekst) + 1;
- _tekst = new char[velicina];
- strcpy_s(_tekst, velicina, org._tekst);
- _datum = org._datum;
- _satnica = org._satnica;
- _popularnost = org._popularnost;
- _autor = new Korisnik(*org._autor);
- }
- //dekonstruktor
- ~Komentar()
- {
- delete[]_tekst;
- _tekst = nullptr;
- delete _autor;
- _autor = nullptr;
- }
- void setTekst(char* tekst)
- {
- int velicina = strlen(tekst) + 1;
- _tekst = new char[velicina];
- strcpy_s(_tekst, velicina, tekst);
- }
- void setDatum(Datum d)
- {
- _datum = d;
- }
- void setSatnica(Vrijeme v)
- {
- _satnica = v;
- }
- //Funkciju za izmjenu popularnosti komentara
- void setPopularnost(int pop)
- {
- _popularnost = pop;
- }
- void setKorisnik(Korisnik k)
- {
- _autor = new Korisnik(k);
- }
- //Funkciju Info
- void Info()
- {
- cout << endl;
- cout << "----------------------------------" << endl;
- if (_tekst != nullptr)
- cout << "Tekst: " << _tekst << endl;
- else
- cout << "Tekst:" << endl;
- cout << "Datum: ";
- _datum.Info(); cout << endl;
- cout << "Satnica: " << endl;
- _satnica.Info(); cout << endl;
- cout << "Popularnost: " << _popularnost << endl;
- cout << "Autor: " << endl;
- if (_autor != nullptr)
- _autor->Info();
- }
- };
- class Clanak
- {
- char _naslov[150];
- char* _sadrzaj;
- Datum _datum;
- Vrijeme _satnica;
- int _brojPregleda;
- char* _tagovi[10];
- char _oblast[100];
- Korisnik* _autor;
- Komentar* _komentari;
- int _brojKomentara;
- public:
- //konstruktor
- Clanak()
- {
- strcpy_s(_naslov, 149, "nema_naslova");
- _sadrzaj = "nema_sadrzaja";
- _datum;
- _satnica;
- _brojPregleda = 0;
- for (int i = 0; i < 10; i++)
- _tagovi[i] = nullptr;
- strcpy_s(_oblast, 99, "nema oblasti");
- _autor = nullptr;
- _komentari = nullptr;
- _brojKomentara = 0;
- }
- ~Clanak()
- {
- if (_sadrzaj != nullptr)
- {
- delete[] _sadrzaj;
- }
- _sadrzaj = nullptr;
- for (int i = 0; i < 10; i++)
- {
- if (_tagovi[i] != nullptr)
- {
- delete[] _tagovi[i];
- _tagovi[i] = nullptr;
- }
- }
- if (_autor != nullptr)
- {
- delete[] _autor;
- _autor = nullptr;
- }
- if (_komentari != nullptr)
- {
- delete[] _komentari;
- _komentari = nullptr;
- }
- }
- void setirajClanak (char* naslov, char* sadrzaj, const Datum& d,const Vrijeme& v,int pregled,char* oblast,Korisnik& k)
- {
- strcpy_s(_naslov, 149, naslov);
- //if (_sadrzaj != nullptr)
- // delete[]_sadrzaj;
- _sadrzaj = new char[strlen(sadrzaj) + 1];
- strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
- _datum = d;
- _satnica = v;
- _brojPregleda = pregled;
- strcpy_s(_oblast, 99, oblast);
- _autor = new Korisnik(k);
- }
- //Funkciju za dodavanje tagova za članak
- bool DodajTag(char* tag)
- {
- for (int i = 0; i < 10; i++)
- {
- if (_tagovi[i] == nullptr)
- {
- _tagovi[i] = new char[strlen(tag) + 1];
- strcpy_s(_tagovi[i], strlen(tag) + 1, tag);
- return true;
- }
- }
- return false;
- }
- /*Funkciju za promjenu sadržaja i vremena promjene članka. Kao verifikaciju dozvole potrebno je proslijediti korisničko ime autora članka.
- Samo kreator članka ima permisije da mijenja njegov sadržaj.
- */
- void promjenaSadrzaja(char* Novisadrzaj, const Vrijeme& vrijeme, Korisnik& k )
- {
- if (strcmp(k.getIme(), _autor->getIme()) == 0)
- {
- if (_sadrzaj != nullptr)
- {
- int velicina = strlen(Novisadrzaj) + strlen(_sadrzaj)+2;
- char* temp = new char[velicina];
- strcpy_s(temp, velicina,_sadrzaj);
- strcat_s(temp, velicina, "-");
- strcat_s(temp, velicina, Novisadrzaj);
- delete[] _sadrzaj;
- _sadrzaj = temp;
- _satnica = vrijeme;
- cout << "Sadrzaj promjenjen!" << endl;
- }
- else
- {
- _sadrzaj = new char[strlen(Novisadrzaj) + 1];
- strcpy_s(_sadrzaj, strlen(Novisadrzaj) + 1, Novisadrzaj);
- _satnica = vrijeme;
- cout << "Sadrzaj dodan!" << endl;
- }
- }
- }
- //Funkciju za dodavanje komentara
- //Funkciju Info
- void Info()
- {
- cout << "Naslov: " << _naslov << endl;
- if (_sadrzaj != nullptr)
- cout << _sadrzaj << endl;
- _datum.Info();
- _satnica.Info();
- cout << "Broj pregleda: " << _brojPregleda << endl;
- for (int i = 0; i < 10; i++)
- {
- if (_tagovi[i] != nullptr)
- cout << _tagovi[i];
- }
- cout << "Oblast: " << _oblast << endl;
- if (_autor!=nullptr)
- _autor->Info();
- if(_komentari!=nullptr)
- _komentari->Info();
- cout << "Broj komentara: " << _brojKomentara << endl;
- }
- };
- int main()
- {
- //Kreirati testni program koji demonstrira implementirane funckionalnosti
- bool format = false;
- //defaultni konstruktor
- Vrijeme danas;
- danas.setSat(20);
- danas.setMinuta(36);
- danas.setSekunda(58);
- //konstruktor sa tri parametra
- //Vrijeme danas(23, 29, 60);
- //konstruktor sa dva parametra
- //Vrijeme danas(20, 15);
- //funkcija info sa parametrom
- //danas.Info();
- //test funkcije Add
- /*Vrijeme danas_ = danas.Add(2, 2, 2);
- danas_.Info();*/
- //test funkcije CompareTO
- /*Vrijeme v2(5, 36, 58);
- int test =v2.CompareTo(danas);
- cout << test << endl;*/
- //test klase Datum
- /*Datum today;
- today.Info();*/
- //test klase Korisnik
- //Korisnik Nedzad("Nedzad", "Kio", "password", Administrator);
- //Nedzad.Info();
- //Nedzad.promjenaPass("pass_last");
- //Nedzad.Info();
- //Korisnik Nadja(Nedzad);
- //Nadja.setIme("Nadja");
- //Nadja.setKoriscnikoIme("Baby");
- //Nadja.promjenaPass("true");
- //Nadja.Info();
- //Komentar k;
- //k.Info();
- //Datum d(06, 12, 2017);
- //Vrijeme v(23, 27, 20);
- //Korisnik kor("Nedzad", "kio", "loop", Administrator);
- //k.setDatum(d);
- //k.setKorisnik(kor);
- //k.setPopularnost(100);
- //k.setSatnica(v);
- //k.setTekst("Moje ime je medvjedic Lino!");
- //k.Info();
- //Komentar Nadja(k);
- //Nadja.setTekst("hahahahah");
- //Nadja.Info();
- Clanak clanak;
- clanak.setirajClanak("Clanak dana", "danas nam je divan dan", Datum(15, 2, 2017), Vrijeme(10, 15, 10), 10, "novine", Korisnik("Kio", "Kios", "Lozinka", Guest));
- //clanak.Info();
- clanak.DodajTag("tag");
- clanak.DodajTag("mozda dva");
- clanak.promjenaSadrzaja("Ovo je novi sadrzaj", Vrijeme(10, 15, 120), Korisnik("Kio", "Kios", "Lozinka", Guest));
- clanak.Info();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement