Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #ifdef _MSC_VER
- #define _CRT_SECURE_NO_WARNINGS
- #endif
- #include <iostream>
- using namespace std;
- char crt[] = { "\n-------------------------------------------------\n" };
- char crt2[] = { "-------------------------------------------------\n" };
- enum Vrsta{ Pitanje, Komentar, Zadatak, Rjesenje, Spam };
- char *VrstaOpis[] = { "Pitanje", "Komentar", "Zadatak", "Rjesenje", "Spam" };
- enum Nivo { Pocetnik, Clan, NapredniClan, Moderator };
- char *NivoOpis[] = { "Pocetnik", "Clan", "NapredniClan", "Moderator" };
- ////////////////////////////////////////////////////////
- struct POST{
- Vrsta _vrstaPosta;
- char * _sadrzaj;
- char _IP[16];
- int _brojZahvala;
- bool _vidljiv;
- ////////////////////////////
- void UNOS(Vrsta * vrsta, char * sadrzaj, char *IP){
- _vrstaPosta = *vrsta;
- _sadrzaj = new char[strlen(sadrzaj) + 1];
- strcpy(_sadrzaj, sadrzaj);
- char znak;
- int brojac = 0;
- do{
- znak = IP[brojac];
- _IP[brojac] = znak;
- brojac++;
- } while (znak!='\0');
- _brojZahvala = 0;
- _vidljiv = true;
- }
- void ISPIS(){
- cout << "Vrsta posta: " << VrstaOpis[_vrstaPosta]; cout << endl;
- cout << "Sadrzaj: " << _sadrzaj << endl;
- cout << "IP adresa: "; for (int i = 0; i < 16; i++) cout << _IP[i]; cout << endl;
- cout << "Broj zahvala: " << _brojZahvala << endl;
- if (_vidljiv) cout << "Post je vidljiv." << endl;
- else cout << "Post nije vidljiv." << endl;
- cout << crt2;
- }
- void ZAHVALA(){
- _brojZahvala++;
- }
- bool VIDLJIVOST(bool vidljiv){
- _vidljiv = vidljiv;
- }
- void DEALOCIRAJ(){
- delete[]_sadrzaj;
- }
- };
- struct USER{
- char * _korisnickoIme;
- char * _lozinka;
- POST * _postovi;
- int _trenutnoPostova;
- Nivo _nivo;
- ///////////////////////////////////////
- void Unos( 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*/
- _korisnickoIme = new char[strlen(korisnickoIme) + 1];
- strcpy(_korisnickoIme, korisnickoIme);
- int size = strlen(lozinka) + 1;
- _lozinka = new char[size];
- strcpy(_lozinka, lozinka);
- // kriptiranje
- for (int i = 0; i < size; i++){
- char znak;
- int vrijednost;
- vrijednost = _lozinka[i];
- if (i < size-1) vrijednost += 7;
- znak = vrijednost;
- _lozinka[i] = znak;
- }
- _trenutnoPostova = 0;
- _nivo = Pocetnik;
- }
- 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.
- */
- for (int i = 0; i < _trenutnoPostova; i++){
- if (strcmp(_postovi[i]._sadrzaj, o._sadrzaj) == 0){
- cout << "GRESKA!!! Post je vec objavljen." << endl;
- return false;
- }
- }
- _postovi = new POST[_trenutnoPostova];
- for (int i = 0; i < _trenutnoPostova; i++)
- _postovi[i].UNOS(&_postovi[i]._vrstaPosta, _postovi[i]._sadrzaj, _postovi[i]._IP);
- _postovi[_trenutnoPostova].UNOS(&o._vrstaPosta, o._sadrzaj, o._IP);
- _trenutnoPostova++;
- return true;
- }
- 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.*/
- if (_trenutnoPostova > 71) {
- _nivo = Moderator;
- return Moderator;
- }
- else if (_trenutnoPostova<71 && _trenutnoPostova >30){
- _nivo = NapredniClan;
- return NapredniClan;
- }
- else if (_trenutnoPostova<31 && _trenutnoPostova >10){
- _nivo = Clan;
- return Clan;
- }
- else if (_trenutnoPostova >0 && _trenutnoPostova < 11){
- _nivo = Pocetnik;
- return Pocetnik;
- }
- }
- POST * GetPostovePoSadrzaju(char * sadrzaj){
- /*Funkcija vraca niz postova koji posjeduju dio sadrzaja odredjenog vrijednoscu parametra. Ukoliko trazeni sadrzaj ne postoji funkcija vraca NULL*/
- int brojac, pombrojac;
- for (int i = 0; i < _trenutnoPostova; i++){
- if (strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL){
- brojac++;
- }
- }
- if (brojac == 0) return NULL;
- POST * vratiti = new POST[brojac];
- for (int i = 0; i < _trenutnoPostova; i++){
- if (strstr(_postovi[i]._sadrzaj, sadrzaj) != NULL && pombrojac <= brojac){
- vratiti[pombrojac].UNOS(&_postovi[i]._vrstaPosta, _postovi[i]._sadrzaj, _postovi[i]._IP);
- pombrojac++;
- }
- }
- return vratiti;
- }
- };
- 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];
- cout << "Unesite IP adresu za koju zelite izvrsiti pretragu: ";
- cin.getline(IP, 16);
- int korisnik = -1; // za vratiti
- for (int i = 0; i < max; i++){
- for (int j = 0; j < u[i]._trenutnoPostova; j++){
- for (int z = 0; z < 16; z++){
- int number=0;
- if (u[i]._postovi[j]._IP[z] == IP[z]){
- number++;
- if (number == 16)korisnik = i;
- }
- }
- }
- }
- //false svi
- if (korisnik != -1){
- for (int i = 0; i < u[korisnik]._trenutnoPostova; i++){
- u[korisnik]._postovi[i]._vidljiv = false;
- }
- }
- return &u[korisnik];
- }
- int main(){
- USER u1;
- u1.Unos("Riblja Corba", "kalesija2");
- Vrsta v = Komentar;
- POST p1,p2,p3,p4,p5,p6,p7,p8,p9,p10;
- p1.UNOS(&v, "Ovo je moja poruka na forumu1.", "192.168.100.100");
- u1.AddNoviPost(p1);
- p1.ZAHVALA();
- p1.ZAHVALA();
- Nivo is = u1.FormirajNivo();
- cout << crt;
- cout << "KORISNIK u1 ima " << u1._trenutnoPostova << " napisanih postova." << endl;
- cout << "Nivo koji je zasluzio je: " << NivoOpis[is]; cout << endl;
- system("pause > null");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement