Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- 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)
- {
- //raditi cemo dodjelu bez validnosti!
- _sati = sati;
- _minute = minute;
- _sekunde = sekunde;
- }
- //Konstruktor sa 2 parametra (sati i minute)
- Vrijeme(int sati, int minute) :_sekunde(0)
- {
- _sati = sati;
- _minute = minute;
- }
- //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 ispis = true)
- {
- cout << _sati << ":" << _minute << ":" << _sekunde << endl;
- if (ispis != true)
- cout << _sati << ":" << _minute << 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(const Vrijeme& v)
- {
- return Vrijeme(this->_sati + v._sati, this->_minute + v._minute, this->_sekunde + v._sekunde);
- }
- //Funkciju Add koja kao rezultat vraća novi objekat tipa vrijeme koji predstavlja
- //sumu parametra izraženog u minutama i vremena instance this.
- Vrijeme& Add(const int& minute)
- {
- int ukupnoSekundi = _sati * 3600 + (_minute + minute) * 60 + _sekunde;
- return Vrijeme(ukupnoSekundi / 3600, ukupnoSekundi % 3600 / 60, ukupnoSekundi % 60);
- }
- //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(const Vrijeme& v)
- {
- if (v._sati == _sati && v._minute == _minute && v._sekunde == _sekunde)
- return 0;
- else if (_sati > v._sati || _minute > v._minute || _sekunde > v._sekunde)
- return 1;
- else
- return -1;
- }
- };
- /*
- 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 = 0, int mjesec = 0, int godina = 0) :_dan(dan), _mjesec(mjesec), _godina(godina)
- {
- }
- //konstruktor kopije
- Datum(const Datum& datum)
- {
- _dan = datum._dan;
- _mjesec = datum._mjesec;
- _godina = datum._godina;
- }
- ~Datum()
- {
- }
- //Funkciju Info
- void Info()
- {
- cout << _dan << "." << _mjesec << "." << _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
- Korisnik(char* ime = "n/A", char* korisnicko_ime = "n/A", char* lozinka = "n/A", TipKorisnika korisnik = Guest)
- {
- strcpy_s(_ime, 29, ime);
- strcpy_s(_korisnickoIme, 19, korisnicko_ime);
- int velicina = strlen(lozinka) + 1;
- _lozinka = new char[velicina];
- strcpy_s(_lozinka, velicina, lozinka);
- _tipKorisnika = korisnik;
- }
- ~Korisnik()
- {
- delete[] _lozinka;
- _lozinka = nullptr;
- }
- //Funkciju za promjenu korisničke lozinke
- bool promjenaPass(char* lozinka)
- {
- if (strcmp(lozinka, _lozinka) == 0)
- {
- cout << "Unijeli ste isti password!" << endl;
- return false;
- }
- delete[] _lozinka;
- _lozinka = new char[strlen(lozinka) + 1];
- strcpy_s(_lozinka, strlen(lozinka) + 1, lozinka);
- return true;
- }
- //Funkciju Info
- void Info()
- {
- cout << "Ime: " << _ime << endl;
- cout << "Korisnicko ime: " << _korisnickoIme << endl;
- cout << "Lozinka: ";
- for (int i = 0; i < strlen(_lozinka); i++)
- cout << "*";
- cout << endl;
- cout << "For test purposes: " << _lozinka << endl;
- cout << "Tip Korisnika: " << tipKorisnika[_tipKorisnika] << endl;
- }
- char* getIme()
- {
- return _korisnickoIme;
- }
- void Postavi (const Korisnik& k)
- {
- strcpy_s(_ime, 29, k._ime);
- strcpy_s(_korisnickoIme, 19, k._korisnickoIme);
- if (_lozinka != nullptr)
- delete[] _lozinka;
- _lozinka = new char[strlen(k._lozinka) + 1];
- strcpy_s(_lozinka, strlen(k._lozinka) + 1, k._lozinka);
- _tipKorisnika = k._tipKorisnika;
- }
- };
- class Komentar
- {
- char* _tekst;
- Datum _datum;
- Vrijeme _satnica;
- int _popularnost;
- Korisnik* _autor;
- public:
- //Potrebne konstruktor i destruktor funkcije
- Komentar()
- {
- _tekst = nullptr;
- _popularnost = 0;
- _autor = nullptr;
- }
- void Postavi(const Komentar&k)
- {
- int velicina = strlen(k._tekst) + 1;
- _tekst = new char[velicina];
- strcpy_s(_tekst, velicina, k._tekst);
- _datum = k._datum;
- _satnica = k._satnica;
- _popularnost = k._popularnost;
- _autor = new Korisnik;
- _autor->Postavi(*k._autor);
- }
- void Kreiraj(char* tekst, const Datum& d, const Vrijeme& v, int popularnost, const Korisnik& k)
- {
- int velicina = strlen(tekst) + 1;
- _tekst = new char[velicina];
- strcpy_s(_tekst, velicina, tekst);
- _datum =d;
- _satnica = v;
- _popularnost = popularnost;
- _autor = new Korisnik;
- _autor->Postavi(k);
- }
- ~Komentar()
- {
- delete[] _tekst;
- _tekst = nullptr;
- delete _autor;
- _autor = nullptr;
- }
- //Funkciju za izmjenu popularnosti komentara
- void setPopularnost(int broj)
- {
- if (broj == _popularnost)
- {
- cout << "Popularnost je vec postavljena na istu vrijednost!";
- return;
- }
- else if (broj < 0)
- {
- cout << "Popularnost ne moze biti negativan broj!" << endl;
- return;
- }
- else
- _popularnost = broj;
- }
- //Funkciju Info
- void Info()
- {
- cout << "Tekst: " << _tekst << endl;
- cout << "Datum: ";
- _datum.Info();
- cout << "\n Vrijeme: ";
- _satnica.Info();
- cout << "\n Popularnost: " << _popularnost << endl;
- cout << "Autor: ";
- _autor->Info();
- }
- };
- #pragma region Radni
- 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:
- Clanak()
- {
- strcpy_s(_naslov, 150, "n/A");
- _sadrzaj = new char[1];
- _sadrzaj = "n";
- _brojPregleda = 0;
- for (int i = 0; i < 10; i++)
- _tagovi[i] = nullptr;
- strcpy_s(_oblast, 99, "n/A");
- _autor = nullptr;
- _komentari = nullptr;
- _brojKomentara = 0;
- }
- ~Clanak()
- {
- delete[] _sadrzaj;
- _sadrzaj = nullptr;
- for (int i = 0; i < 10; i++)
- {
- delete[]_tagovi[i];
- _tagovi[i] = nullptr;
- }
- if (_komentari != nullptr)
- {
- delete[] _komentari;
- _komentari = nullptr;
- }
- }
- void kreirajClanak(char* naslov, char* sadrzaj, const Datum& datum, const Vrijeme& satnica, char* oblast, const Korisnik&k)
- {
- strcpy_s(_naslov, 150, naslov);
- int velicina = strlen(sadrzaj) + 1;
- _sadrzaj = new char[velicina];
- strcpy_s(_sadrzaj, velicina, sadrzaj);
- _datum = datum;
- _satnica = satnica;
- strcpy_s(_oblast, 100, oblast);
- _autor = new Korisnik;
- _autor->Postavi(k);
- }
- //Funkciju za dodavanje tagova za članak
- bool dodajTag(char* tag)
- {
- for (int i = 0; i < 10; i++)
- {
- if (_tagovi[i] == nullptr)
- {
- int velicina = strlen(tag) + 1;
- _tagovi[i] = new char[velicina];
- strcpy_s(_tagovi[i], velicina, 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 promjenaSadrzajaiVrijeme(char* sadrzaj, const Vrijeme& v, Korisnik& k)
- {
- if (strcmp(_autor->getIme(), k.getIme()) == 0)
- {
- if (_sadrzaj == nullptr)
- {
- _sadrzaj = new char[strlen(sadrzaj) + 1];
- strcpy_s(_sadrzaj, strlen(sadrzaj) + 1, sadrzaj);
- _satnica = v;
- cout << "Sadrzaj kreiran!" << endl;
- }
- else
- {
- int velicina = strlen(sadrzaj) + strlen(_sadrzaj) + 2;
- char* temp = new char[velicina];
- strcpy_s(temp, velicina, _sadrzaj);
- strcat_s(temp, velicina, " ");
- strcat_s(temp, velicina, sadrzaj);
- _satnica = v;
- delete[] _sadrzaj;
- _sadrzaj = temp;
- cout << "Sadrzaj izmjenjen!" << endl;
- }
- }
- }
- //Funkciju za dodavanje komentara
- void dodajKomentar( Komentar& kom)
- {
- if (_brojKomentara == 0)
- {
- _komentari=new Komentar[_brojKomentara+1];
- _komentari[_brojKomentara++].Postavi(kom);
- }
- else
- {
- Komentar* temp = new Komentar[_brojKomentara + 1];
- {
- for (int i = 0; i < _brojKomentara; i++)
- {
- temp[i].Postavi(_komentari[i]);
- }
- temp[_brojKomentara++].Postavi(kom);
- delete[]_komentari;
- _komentari = temp;
- }
- }
- }
- //Funkciju Info
- void Info()
- {
- cout << "Naslov " << _naslov << endl;
- cout << "Sadrzaj: " << _sadrzaj << endl;
- cout << "Datum: ";
- _datum.Info();
- cout << endl;
- cout << "Satnica: ";
- _satnica.Info();
- cout << endl;
- cout << "Broj pregleda: " << _brojPregleda << endl;
- cout << "Oblast: " << _oblast << endl;
- cout << ":::::::::::::::::::::::::::::::::::::::\n";
- for (int i = 0; i < _brojKomentara; i++)
- _komentari[i].Info();
- cout << ":::::::::::::::::::::::::::::::::::::::\n";
- cout << "Tagovi: " << endl;
- for (int i = 0; i < 10; i++)
- {
- if (_tagovi[i] != nullptr)
- cout << _tagovi[i] << endl;
- }
- }
- };
- #pragma endregion Radni
- int main()
- {
- Datum danas(19, 12, 2017);
- Vrijeme time(00, 35, 20);
- Korisnik Nedzad("Nedzad", "kio", "kios", Administrator);
- Komentar kom_danas;
- kom_danas.Kreiraj("Dobar tekst!", Datum(10, 10, 10), Vrijeme(5, 5, 5), 20, Korisnik("Tina", "tina", "tina", Guest));
- kom_danas.setPopularnost(50);
- Komentar kom_jucer;
- kom_jucer.Kreiraj("Dobar je tekst, ali moze to bolje!", danas, time, 99, Nedzad);
- Clanak najbolji;
- najbolji.kreirajClanak("Programiranje III", "Programiranje je stvarno zabavan nacin da se nauci programirati", danas, time, "IT", Nedzad);
- najbolji.dodajKomentar(kom_jucer);
- najbolji.dodajKomentar(kom_danas);
- najbolji.dodajTag("IT");
- najbolji.dodajTag("FIT");
- najbolji.dodajTag("#");
- najbolji.promjenaSadrzajaiVrijeme("i da budes bolji ", Vrijeme(00, 43, 12), Nedzad);
- najbolji.Info();
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement