Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- int broj = 0;
- enum Vrsta{ Pitanje, Komentar, Zadatak, Rjesenje, Spam };
- enum Nivo { Pocetnik, Clan, NapredniClan, Moderator };
- struct Datum{
- int _dan, _mjesec, _godina;
- void Unos(int d, int m, int g){
- _dan = d; _mjesec = m; _godina = g;
- }
- void Ispis(){ cout << _dan << "/" << _mjesec << "/" << _godina << endl; }
- };
- struct Post{
- Vrsta _vrstaPosta;
- Datum * _datumPostavljanja;
- char * _sadrzaj;
- char _IP[16]; //IP adresa sa koje je post postavljen 192.168.100.100
- int _brojZahvala; // broj zahvala na post - thanks
- bool _vidljiv;
- void Unos(Vrsta * vrsta, Datum * datum, char * sadrzaj, char * IP){
- _vrstaPosta = *vrsta;
- _datumPostavljanja = new Datum;
- _datumPostavljanja->Unos(datum->_dan, datum->_mjesec, datum->_godina);
- strcpy(_IP, IP);
- _brojZahvala = 0;
- _vidljiv = true;
- }
- void Vidljivost(bool vidljivost){ _vidljiv = vidljivost; }
- void Zahvala(){ _brojZahvala++; }
- void Ispis(){
- cout << _vrstaPosta << " " << _sadrzaj << " " << _brojZahvala << " " << _IP << endl;
- _datumPostavljanja->Ispis();
- cout << endl;
- }
- void Dealociraj(){ delete _datumPostavljanja; delete[] _sadrzaj; }
- };
- // improvizacija 5 min
- void kriptLozinke(char * lozinka, char * kriptLozinka)
- {
- int len = strlen(lozinka);
- for(int i = 0; i < len; i++)
- {
- if(i % 2 == 0)
- kriptLozinka[i] = lozinka[i] + 3;
- else
- kriptLozinka[i] = lozinka[i] - 3;
- }
- kriptLozinka[len] = '\0';
- }
- void dekriptLozinke(char * lozinka, char * kriptLozinka)
- {
- int len = strlen(kriptLozinka);
- for(int i = 0; i < len; i++)
- {
- if(i % 2 == 0)
- lozinka[i] = kriptLozinka[i] - 3;
- else
- lozinka[i] = kriptLozinka[i] + 3;
- }
- lozinka[len] = '\0';
- }
- struct User{
- Datum _datumPristupa; //datum registracije
- char * _korisnickoIme;
- char * _lozinka;
- Post * _postovi;
- int _trenutnoPostova;
- Nivo _nivo;
- void Unos(Datum datum, char * korisnickoIme, char * lozinka){
- /*Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih
- atributa. Lozinku je potrebno kriptovati na nacin na koji odaberete (predlozite neku logiku
- modifikacije znakova lozinke). Bitno je da sadrzaj lozinke nije citljiv prilikom ispisa, ali da se
- moze porediti sa drugim lozinkama, odnosno da se po istom principu moze i dekriptovati*/
- _datumPristupa = datum;
- _korisnickoIme = new char[strlen(korisnickoIme) + 1];
- strcpy(_korisnickoIme, korisnickoIme);
- _lozinka = new char[strlen(lozinka) + 1];
- kriptLozinke(lozinka, _lozinka);
- _trenutnoPostova = 0;
- }
- bool AddNoviPost(Post o){
- /*Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje novog
- posta. Potrebno je onemoguciti dodavanje identicnih postova, te u zavisnosti od uspjesnosti
- operacije funkcija treba vratiti true ili false.*/
- bool ret = false;
- if(_trenutnoPostova > 0)
- {
- for(int i = 0; i < _trenutnoPostova; i++)
- {
- if(_postovi[i]._vrstaPosta == o._vrstaPosta && strcmp(_postovi[i]._sadrzaj, o._sadrzaj) == 0)
- break;
- }
- ret = true;
- if(ret)
- {
- Post * _tempPostovi = new Post[_trenutnoPostova+1];
- for(int i = 0; i < _trenutnoPostova; i++)
- {
- _tempPostovi[i] = _postovi[i];
- }
- _tempPostovi[_trenutnoPostova] = o;
- delete [] _postovi;
- _postovi = _tempPostovi;
- _trenutnoPostova++;
- ret = true;
- }
- }
- else
- {
- _postovi = new Post[1];
- _postovi[0] = o;
- _trenutnoPostova++;
- ret = true;
- }
- return ret;
- }
- Nivo FormirajNivo(){
- /*Na osnovu broj zahvala na postovima funkcija odredjuje nivo korisnika (nivo =
- BrojZahvala/BrojPostova) , a prema sljedecim pravilima:
- 0 - 10 ---- Pocetnik,
- 11 - 30 ---- Clan,
- 31 - 70 ---- NapredniClan,
- > 71 - ---- Moderator
- na kraju funkcija vraca novoformirani nivo korisnika.*/
- Nivo ret = Pocetnik;
- int nivo = 0, brojZahvala = 0;
- for(int i = 0; i < _trenutnoPostova; i++)
- brojZahvala += _postovi[i]._brojZahvala;
- nivo = brojZahvala / _trenutnoPostova;
- if(nivo > 10 && nivo < 31)
- ret = Clan;
- else if (nivo > 30 && nivo < 71)
- ret = NapredniClan;
- else if (nivo > 70)
- ret = Moderator;
- return ret;
- }
- Post * GetPostovePoSadrzaju(char * sadrzaj){
- /*Funkcija vraca niz postova koji posjeduju dio sadrzaja odredjenog vrijednoscu
- parametra. Ukoliko trazeni sadrzaj ne postoji funkcija vraca NULL*/
- for(int i = 0; i < _trenutnoPostova; i++)
- {
- if(strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL)
- broj++;
- }
- Post * ret = new Post[broj];
- int j = 0;
- for(int i = 0; i < _trenutnoPostova; i++)
- {
- if(strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL)
- {
- ret[j] = _postovi[i];
- j++;
- }
- }
- return ret;
- }
- };
- User * Pretraga(User * u, int max){
- /*Funkcija ima zadatak da pronadje i vrati korisnika koji je sa odredjene IP adrese u
- odredjeno vrijeme (datum) pristupao sistemu. Vrijednost IP adrese i datuma za pretragu se unosi na
- pocetku izvrsenja funkcije. Prije vracanja pokazivaca na pronadjenog korisnika funkcija treba
- postaviti vidljivost svih njegovih postova na false. Ukoliko trazeni korisnik ne postoji funkcija
- treba da vrati NULL*/
- char _ip[16];
- Datum _datum;
- cout << "Unesite podatke za pretragu:" << endl;
- cout << "IP: ";
- cin.getline(_ip, 16);
- cout << "Datum:" << endl;
- cout << "Dan: ";
- cin >> _datum._dan;
- cout << "Mjesec: ";
- cin >> _datum._mjesec;
- cout << "Godina: ";
- cin >> _datum._godina;
- User * _user = NULL;
- for(int i = 0; i < max; i++)
- {
- for(int j = 0; j < u[i]._trenutnoPostova; j++)
- {
- if(strcmp(u[i]._postovi[j]._IP, _ip) == 0 && u[i]._datumPristupa._dan == _datum._dan && u[i]._datumPristupa._mjesec == _datum._mjesec
- && u[i]._datumPristupa._godina == _datum._godina)
- {
- _user = &u[i];
- break;
- }
- }
- }
- if(_user != NULL)
- for(int j = 0; j < _user->_trenutnoPostova; j++)
- _user->_postovi[j]._vidljiv = false;
- return _user;
- }
- void main(){
- //izbjegavajte koristenje vlastitog imena i prezimena.
- //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement