Advertisement
neogz

PR1 - forum

Sep 20th, 2014
199
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.22 KB | None | 0 0
  1. #ifdef _MSC_VER
  2. #define _CRT_SECURE_NO_WARNINGS
  3. #endif
  4. #include <iostream>
  5. using namespace std;
  6. char crt[] = { "\n-------------------------------------------------\n" };
  7. char crt2[] = { "-------------------------------------------------\n" };
  8.  
  9. enum Vrsta{ Pitanje, Komentar, Zadatak, Rjesenje, Spam };
  10. char *VrstaOpis[] = { "Pitanje", "Komentar", "Zadatak", "Rjesenje", "Spam" };
  11. enum Nivo { Pocetnik, Clan, NapredniClan, Moderator };
  12. char *NivoOpis[] = { "Pocetnik", "Clan", "NapredniClan", "Moderator" };
  13. ////////////////////////////////////////////////////////
  14. struct POST{
  15.     Vrsta   _vrstaPosta;
  16.     char *  _sadrzaj;
  17.     char    _IP[16];
  18.     int     _brojZahvala;
  19.     bool    _vidljiv;
  20.     ////////////////////////////
  21.     void UNOS(Vrsta * vrsta, char * sadrzaj, char *IP){
  22.         _vrstaPosta = *vrsta;
  23.        
  24.         _sadrzaj = new char[strlen(sadrzaj) + 1];
  25.         strcpy(_sadrzaj, sadrzaj);
  26.  
  27.         char znak;
  28.         int brojac = 0;
  29.         do{
  30.             znak = IP[brojac];
  31.             _IP[brojac] = znak;
  32.             brojac++;
  33.         } while (znak!='\0');
  34.  
  35.        
  36.         _brojZahvala = 0;
  37.         _vidljiv = true;
  38.  
  39.  
  40.     }
  41.     void ISPIS(){
  42.         cout << "Vrsta posta: " <<  VrstaOpis[_vrstaPosta]; cout << endl;
  43.         cout << "Sadrzaj: " << _sadrzaj << endl;
  44.         cout << "IP adresa: "; for (int i = 0; i < 16; i++) cout << _IP[i]; cout << endl;
  45.         cout << "Broj zahvala: " << _brojZahvala << endl;
  46.         if (_vidljiv) cout << "Post je vidljiv." << endl;
  47.         else cout << "Post nije vidljiv." << endl;
  48.  
  49.         cout << crt2;
  50.  
  51.  
  52.     }
  53.     void ZAHVALA(){
  54.         _brojZahvala++;
  55.     }
  56.     bool VIDLJIVOST(bool vidljiv){
  57.         _vidljiv = vidljiv;
  58.     }
  59.     void DEALOCIRAJ(){
  60.         delete[]_sadrzaj;
  61.     }
  62. };
  63. struct USER{
  64.     char * _korisnickoIme;
  65.     char * _lozinka;
  66.     POST * _postovi;
  67.     int    _trenutnoPostova;
  68.     Nivo _nivo;
  69.     ///////////////////////////////////////
  70.     void Unos( char * korisnickoIme, char * lozinka){
  71.         /*Na osnovu vrijednosti primljenog parametra izvrsiti inicijalizaciju odgovarajucih atributa.
  72.         Lozinku je potrebno kriptovati na nacin na koji odaberete (predlozite neku logiku modifikacije znakova lozinke).
  73.         Bitno je da sadrzaj lozinke nije citljiv prilikom ispisa, ali da se moze porediti sa drugim lozinkama,
  74.         odnosno da se po istom principu moze i dekriptovati*/
  75.         _korisnickoIme = new char[strlen(korisnickoIme) + 1];
  76.         strcpy(_korisnickoIme, korisnickoIme);
  77.  
  78.         int size = strlen(lozinka) + 1;
  79.         _lozinka = new char[size];
  80.         strcpy(_lozinka, lozinka);
  81.  
  82.         // kriptiranje
  83.         for (int i = 0; i < size; i++){
  84.             char znak;
  85.             int vrijednost;
  86.             vrijednost = _lozinka[i];
  87.             if (i < size-1) vrijednost += 7;
  88.             znak = vrijednost;
  89.             _lozinka[i] = znak;
  90.         }
  91.  
  92.         _trenutnoPostova = 0;
  93.         _nivo = Pocetnik;
  94.  
  95.     }
  96.     bool AddNoviPost(POST o){
  97.         /*Funkcija ima zadatak da na osnovu primljenog parametra osigura dodavanje novog posta.
  98.         Potrebno je onemoguciti dodavanje identicnih postova, te u zavisnosti od uspjesnosti operacije funkcija treba vratiti true ili false.
  99.         */
  100.         for (int i = 0; i < _trenutnoPostova; i++){
  101.             if (strcmp(_postovi[i]._sadrzaj, o._sadrzaj) == 0){
  102.                 cout << "GRESKA!!! Post je vec objavljen." << endl;
  103.                 return false;
  104.             }
  105.         }
  106.         _postovi = new POST[_trenutnoPostova];
  107.         for (int i = 0; i < _trenutnoPostova; i++)
  108.             _postovi[i].UNOS(&_postovi[i]._vrstaPosta, _postovi[i]._sadrzaj, _postovi[i]._IP);
  109.    
  110.         _postovi[_trenutnoPostova].UNOS(&o._vrstaPosta, o._sadrzaj, o._IP);
  111.         _trenutnoPostova++;
  112.         return true;
  113.     }
  114.     Nivo FormirajNivo(){
  115.         /*Na osnovu broj zahvala na postovima funkcija odredjuje nivo korisnika (nivo = BrojZahvala/BrojPostova) , a prema sljedecim pravilima:
  116.         0 - 10 ---- Pocetnik,
  117.         11 - 30 ---- Clan,
  118.         31 - 70 ---- NapredniClan,
  119.         > 71 - ---- Moderator
  120.         na kraju funkcija vraca novoformirani nivo korisnika.*/
  121.         if (_trenutnoPostova > 71) {
  122.             _nivo = Moderator;
  123.             return Moderator;
  124.         }
  125.         else if (_trenutnoPostova<71 && _trenutnoPostova >30){
  126.             _nivo = NapredniClan;
  127.             return NapredniClan;
  128.         }
  129.         else if (_trenutnoPostova<31 && _trenutnoPostova >10){
  130.             _nivo = Clan;
  131.             return Clan;
  132.         }
  133.         else if (_trenutnoPostova >0 && _trenutnoPostova < 11){
  134.             _nivo = Pocetnik;
  135.             return Pocetnik;
  136.         }
  137.  
  138.     }
  139.     POST * GetPostovePoSadrzaju(char * sadrzaj){
  140.         /*Funkcija vraca niz postova koji posjeduju dio sadrzaja odredjenog vrijednoscu parametra. Ukoliko trazeni sadrzaj ne postoji funkcija vraca NULL*/
  141.         int brojac, pombrojac;
  142.         for (int i = 0; i < _trenutnoPostova; i++){
  143.             if (strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL){
  144.                 brojac++;
  145.             }
  146.         }
  147.         if (brojac == 0) return NULL;
  148.         POST * vratiti = new POST[brojac];
  149.         for (int i = 0; i < _trenutnoPostova; i++){
  150.             if (strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL && pombrojac <= brojac){
  151.                 vratiti[pombrojac].UNOS(&_postovi[i]._vrstaPosta, _postovi[i]._sadrzaj, _postovi[i]._IP);
  152.                 pombrojac++;
  153.             }
  154.         }
  155.         return vratiti;
  156.     }
  157. };
  158. USER * Pretraga(USER * u, int max){
  159.     /*Funkcija ima zadatak da pronadje i vrati korisnika koji je sa odredjene IP adrese u odredjeno vrijeme (datum) pristupao sistemu.
  160.     Vrijednost IP adrese i datuma za pretragu se unosi na pocetku izvrsenja funkcije.
  161.     Prije vracanja pokazivaca na pronadjenog korisnika funkcija treba postaviti vidljivost svih njegovih postova na false.
  162.     Ukoliko trazeni korisnik ne postoji funkcija treba da vrati NULL*/
  163.  
  164.     char IP[16];
  165.     cout << "Unesite IP adresu za koju zelite izvrsiti pretragu: ";
  166.     cin.getline(IP, 16);
  167.  
  168.     int korisnik = -1; // za vratiti
  169.  
  170.     for (int i = 0; i < max; i++){
  171.         for (int j = 0; j < u[i]._trenutnoPostova; j++){
  172.             for (int z = 0; z < 16; z++){
  173.                 int number=0;
  174.                 if (u[i]._postovi[j]._IP[z] == IP[z]){
  175.                     number++;
  176.                     if (number == 16)korisnik = i;
  177.                 }
  178.  
  179.             }
  180.         }  
  181.     }
  182.     //false svi
  183.     if (korisnik != -1){
  184.         for (int i = 0; i < u[korisnik]._trenutnoPostova; i++){
  185.             u[korisnik]._postovi[i]._vidljiv = false;
  186.         }
  187.     }
  188.  
  189.     return &u[korisnik];
  190. }
  191. int main(){
  192.  
  193.  
  194.     USER u1;
  195.     u1.Unos("Riblja Corba", "kalesija2");
  196.  
  197.     Vrsta v = Komentar;
  198.     POST p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
  199.     p1.UNOS(&v, "Ovo je moja poruka na forumu1.", "192.168.100.100");
  200.    
  201.     u1.AddNoviPost(p1);
  202.  
  203.     p1.ZAHVALA();
  204.     p1.ZAHVALA();
  205.  
  206.     Nivo is = u1.FormirajNivo();
  207.     cout << crt;
  208.     cout << "KORISNIK u1 ima " << u1._trenutnoPostova << " napisanih postova." << endl;
  209.     cout << "Nivo koji je zasluzio je: " << NivoOpis[is];  cout << endl;
  210.  
  211.  
  212.  
  213.     system("pause > null");
  214.     return 0;
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement