Advertisement
Guest User

Untitled

a guest
Jul 5th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.05 KB | None | 0 0
  1. #include<iostream>
  2. using namespace std;
  3.  
  4. int broj = 0;
  5.  
  6. enum Vrsta{ Pitanje, Komentar, Zadatak, Rjesenje, Spam };
  7. enum Nivo { Pocetnik, Clan, NapredniClan, Moderator };
  8.  
  9. struct Datum{
  10.     int _dan, _mjesec, _godina;
  11.     void Unos(int d, int m, int g){
  12.         _dan = d;  _mjesec = m; _godina = g;
  13.     }
  14.     void Ispis(){ cout << _dan << "/" << _mjesec << "/" << _godina << endl; }
  15. };
  16.  
  17. struct Post{
  18.     Vrsta _vrstaPosta;
  19.     Datum * _datumPostavljanja;
  20.     char * _sadrzaj;
  21.     char _IP[16]; //IP adresa sa koje je post postavljen 192.168.100.100
  22.     int _brojZahvala; // broj zahvala na post - thanks
  23.     bool _vidljiv;
  24.     void Unos(Vrsta * vrsta, Datum * datum, char * sadrzaj, char * IP){
  25.         _vrstaPosta = *vrsta;
  26.         _datumPostavljanja = new Datum;
  27.         _datumPostavljanja->Unos(datum->_dan, datum->_mjesec, datum->_godina);
  28.         strcpy(_IP, IP);
  29.         _brojZahvala = 0;
  30.         _vidljiv = true;
  31.     }
  32.     void Vidljivost(bool vidljivost){ _vidljiv = vidljivost; }
  33.     void Zahvala(){ _brojZahvala++; }
  34.     void Ispis(){
  35.         cout << _vrstaPosta << " " << _sadrzaj << " " << _brojZahvala << " " << _IP << endl;
  36.         _datumPostavljanja->Ispis();
  37.         cout << endl;
  38.     }
  39.     void Dealociraj(){ delete _datumPostavljanja; delete[] _sadrzaj; }
  40. };
  41.  
  42. // improvizacija 5 min
  43. void kriptLozinke(char * lozinka, char * kriptLozinka)
  44. {
  45.     int len = strlen(lozinka);
  46.     for(int i = 0; i < len; i++)
  47.     {
  48.         if(i % 2 == 0)
  49.             kriptLozinka[i] = lozinka[i] + 3;
  50.         else
  51.             kriptLozinka[i] = lozinka[i] - 3;
  52.     }  
  53.     kriptLozinka[len] = '\0';
  54. }
  55.  
  56. void dekriptLozinke(char * lozinka, char * kriptLozinka)
  57. {
  58.     int len = strlen(kriptLozinka);
  59.     for(int i = 0; i < len; i++)
  60.     {
  61.         if(i % 2 == 0)
  62.             lozinka[i] = kriptLozinka[i] - 3;
  63.         else
  64.             lozinka[i] = kriptLozinka[i] + 3;
  65.     }
  66.     lozinka[len] = '\0';
  67. }
  68.  
  69. struct User{
  70.     Datum _datumPristupa; //datum registracije
  71.     char * _korisnickoIme;
  72.     char * _lozinka;
  73.     Post * _postovi;
  74.     int _trenutnoPostova;
  75.     Nivo _nivo;
  76.     void Unos(Datum datum, char * korisnickoIme, char * lozinka){
  77.         /*Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih
  78.         atributa. Lozinku je potrebno kriptovati na nacin na koji odaberete (predlozite neku logiku
  79.         modifikacije znakova lozinke). Bitno je da sadrzaj lozinke nije citljiv prilikom ispisa, ali da se
  80.         moze porediti sa drugim lozinkama, odnosno da se po istom principu moze i dekriptovati*/
  81.         _datumPristupa = datum;
  82.         _korisnickoIme = new char[strlen(korisnickoIme) + 1];
  83.         strcpy(_korisnickoIme, korisnickoIme);
  84.         _lozinka = new char[strlen(lozinka) + 1];
  85.         kriptLozinke(lozinka, _lozinka);
  86.         _trenutnoPostova = 0;
  87.     }
  88.     bool AddNoviPost(Post o){
  89.         /*Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje novog
  90.         posta. Potrebno je onemoguciti dodavanje identicnih postova, te u zavisnosti od uspjesnosti
  91.         operacije funkcija treba vratiti true ili false.*/
  92.         bool ret = false;
  93.         if(_trenutnoPostova > 0)
  94.         {
  95.             for(int i = 0; i < _trenutnoPostova; i++)
  96.             {
  97.                 if(_postovi[i]._vrstaPosta == o._vrstaPosta && strcmp(_postovi[i]._sadrzaj, o._sadrzaj) == 0)
  98.                     break;
  99.             }
  100.  
  101.             ret = true;
  102.  
  103.             if(ret)
  104.             {
  105.                 Post * _tempPostovi = new Post[_trenutnoPostova+1];
  106.  
  107.                 for(int i = 0; i < _trenutnoPostova; i++)
  108.                 {
  109.                     _tempPostovi[i] = _postovi[i];
  110.                 }
  111.                 _tempPostovi[_trenutnoPostova] = o;
  112.  
  113.                 delete [] _postovi;
  114.                 _postovi = _tempPostovi;
  115.  
  116.                 _trenutnoPostova++;
  117.                 ret = true;
  118.             }          
  119.         }
  120.         else
  121.         {
  122.             _postovi = new Post[1];
  123.             _postovi[0] = o;
  124.             _trenutnoPostova++;
  125.             ret = true;
  126.         }
  127.         return ret;
  128.     }
  129.     Nivo FormirajNivo(){
  130.         /*Na osnovu broj zahvala na postovima funkcija odredjuje nivo korisnika (nivo =
  131.         BrojZahvala/BrojPostova) , a prema sljedecim pravilima:
  132.         0 - 10 ---- Pocetnik,
  133.         11 - 30 ---- Clan,
  134.         31 - 70 ---- NapredniClan,
  135.         > 71 - ---- Moderator
  136.         na kraju funkcija vraca novoformirani nivo korisnika.*/
  137.  
  138.         Nivo ret = Pocetnik;
  139.         int nivo = 0, brojZahvala = 0;
  140.  
  141.         for(int i = 0; i < _trenutnoPostova; i++)
  142.             brojZahvala += _postovi[i]._brojZahvala;
  143.  
  144.         nivo = brojZahvala / _trenutnoPostova;
  145.  
  146.         if(nivo > 10 && nivo < 31)
  147.             ret = Clan;
  148.         else if (nivo > 30 && nivo < 71)
  149.             ret = NapredniClan;
  150.         else if (nivo > 70)
  151.             ret = Moderator;
  152.  
  153.         return ret;
  154.     }
  155.     Post * GetPostovePoSadrzaju(char * sadrzaj){
  156.         /*Funkcija vraca niz postova koji posjeduju dio sadrzaja odredjenog vrijednoscu
  157.         parametra. Ukoliko trazeni sadrzaj ne postoji funkcija vraca NULL*/
  158.         for(int i = 0; i < _trenutnoPostova; i++)
  159.         {
  160.             if(strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL)
  161.                 broj++;
  162.         }
  163.  
  164.         Post * ret = new Post[broj];
  165.  
  166.         int j = 0;
  167.         for(int i = 0; i < _trenutnoPostova; i++)
  168.         {
  169.             if(strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL)
  170.             {
  171.                 ret[j] = _postovi[i];
  172.                 j++;
  173.             }
  174.         }
  175.  
  176.         return ret;
  177.     }
  178. };
  179.  
  180. User * Pretraga(User * u, int max){
  181.     /*Funkcija ima zadatak da pronadje i vrati korisnika koji je sa odredjene IP adrese u
  182.     odredjeno vrijeme (datum) pristupao sistemu. Vrijednost IP adrese i datuma za pretragu se unosi na
  183.     pocetku izvrsenja funkcije. Prije vracanja pokazivaca na pronadjenog korisnika funkcija treba
  184.     postaviti vidljivost svih njegovih postova na false. Ukoliko trazeni korisnik ne postoji funkcija
  185.     treba da vrati NULL*/
  186.  
  187.     char _ip[16];
  188.     Datum _datum;
  189.  
  190.     cout << "Unesite podatke za pretragu:" << endl;
  191.     cout << "IP: ";
  192.     cin.getline(_ip, 16);
  193.     cout << "Datum:" << endl;
  194.     cout << "Dan: ";
  195.     cin >> _datum._dan;
  196.     cout << "Mjesec: ";
  197.     cin >> _datum._mjesec;
  198.     cout << "Godina: ";
  199.     cin >> _datum._godina;
  200.  
  201.     User * _user = NULL;
  202.  
  203.     for(int i = 0; i < max; i++)
  204.     {
  205.         for(int j = 0; j < u[i]._trenutnoPostova; j++)
  206.         {
  207.             if(strcmp(u[i]._postovi[j]._IP, _ip) == 0 && u[i]._datumPristupa._dan == _datum._dan && u[i]._datumPristupa._mjesec == _datum._mjesec
  208.                 && u[i]._datumPristupa._godina == _datum._godina)
  209.             {
  210.                 _user = &u[i];
  211.                 break;
  212.             }
  213.         }
  214.     }
  215.  
  216.     if(_user != NULL)
  217.         for(int j = 0; j < _user->_trenutnoPostova; j++)
  218.             _user->_postovi[j]._vidljiv = false;
  219.  
  220.     return _user;
  221. }
  222.  
  223. void main(){
  224.     //izbjegavajte koristenje vlastitog imena i prezimena.
  225.     //provjeriti validnost izvrsenja svih dostupnih funkcionalnosti
  226. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement