ZivkicaI

Korisnik

May 18th, 2016
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.04 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class BadInputException {
  6. public:
  7.     void pecati() {
  8.         cout<<"Bezbednosniot kod e vo losh format"<<endl;
  9.     }
  10.  
  11. };
  12.  
  13. class Korisnik {
  14. protected:
  15.     char ime[30];
  16.     char lozinka[10];
  17.     bool daliBezbednosen;
  18.     static int T;
  19. public:
  20.     Korisnik(char* ime,char *lozinka) {
  21.         strcpy(this->ime,ime);
  22.         strcpy(this->lozinka,lozinka);
  23.         this->daliBezbednosen=false;
  24.     }
  25.     static void setT(int T) {
  26.         Korisnik::T=T;
  27.     }
  28.     ~Korisnik() {}
  29.     virtual int numerickaTezina() {
  30.         int tezina=0;
  31.         int i=0;
  32.         while(lozinka[i]!='\0') {
  33.             //if(isalpha(*lozinka))!!! ne mora da rabotis so pokazuvaci, gledam so niv gresis
  34.             if(isalpha(lozinka[i]))//!!!vaka treba
  35.             {
  36.                 tezina+=0;
  37.  
  38.             } else if(isdigit(lozinka[i])){///!!!
  39.                 tezina+=1;
  40.  
  41.             } else {
  42.                 tezina+=Korisnik::T;
  43.  
  44.             }
  45.             i++;
  46.         }
  47.         return tezina;
  48.     }
  49.     bool getdaliBezbednosen() {
  50.         return daliBezbednosen;
  51.     }
  52.     friend ostream &operator<<(ostream &out,Korisnik &k) {
  53.         out<<k.numerickaTezina()<<":"<<k.ime<<" ****";
  54.  
  55.         return out;
  56.     }
  57.     char *getIme() {
  58.         return ime;
  59.     }
  60.  
  61. };
  62. class SpecijalenKorisnik:public Korisnik {
  63. private:
  64.     char *bezbednosenKod;
  65. public:
  66.     SpecijalenKorisnik(char* ime,char *lozinka):Korisnik(ime,lozinka) {
  67.         //this->bezbednosenKod=new char[strlen(bezbednosenKod)+1];!!! - tuka pravis random prostor za bezbednosen kod?
  68.         //strcpy(this->bezbednosenKod,bezbednosenKod);//!!!nemas vlezen argument za da go pravis ova
  69.         bezbednosenKod = new char[0];//!!!vaka treba
  70.         daliBezbednosen =true;//!!!treba da go postavis na true
  71.     }
  72.     ~SpecijalenKorisnik() {
  73.         delete [] bezbednosenKod;
  74.     }
  75.     int numerickaTezina() {
  76.         return  Korisnik::numerickaTezina()+strlen(bezbednosenKod);
  77.  
  78.     }
  79.     SpecijalenKorisnik &operator+=(char *kod) {
  80.         int i=0,flag=0;
  81.         for(int i=0;i<strlen(kod);i++)//!!!vaka ti e polesno
  82.         {
  83.             if(isdigit(kod[i])) {
  84.                 flag=1;
  85.                 break;
  86.             }
  87.         }
  88.         if(!flag) {
  89.             throw BadInputException();
  90.         } else {
  91.             delete []bezbednosenKod; //!!!prvo izbrisi toa sto imas vo bezbednosen kod
  92.             bezbednosenKod = new char [strlen(kod)+1];//!!!pa alociras prostor
  93.             strcpy(this->bezbednosenKod,kod);
  94.             return *this;
  95.  
  96.         }
  97.  
  98.     }
  99. };
  100. int Korisnik::T=3;
  101.  
  102. class VebStranica {
  103. private:
  104.     char adresa[30];
  105.     Korisnik *korisnici[20];
  106.     int broj;
  107.     const static int MIN;
  108. public:
  109.     VebStranica(const char *adresa, Korisnik** korisnici,int broj ) {
  110.         strcpy(this->adresa,adresa);
  111.         for (int i=0; i<broj; i++) {
  112.             //ako korisnikot ima bezbednosen kod
  113.             if (korisnici[i]->getdaliBezbednosen()) {
  114.                 this->korisnici[i]=new SpecijalenKorisnik(*dynamic_cast<SpecijalenKorisnik*>(korisnici[i]));
  115.             } else this->korisnici[i]=new Korisnik(*korisnici[i]);
  116.         }
  117.         this->broj=broj;
  118.     }
  119.     ~VebStranica() {
  120.         for (int i=0; i<broj; i++) delete korisnici[i];
  121.     }
  122.     void pecatiKorisnici() {
  123.         cout<<"Na stranicata "<<adresa<<" slednite korisnici se najaveni so bezbedna lozinka:"<<endl;
  124.         for(int i=0; i<broj; i++) {
  125.             if(korisnici[i]->numerickaTezina()>=MIN) { //!!!dali e lozinkata bezbedna, a bezbedna e ako tezinata e pogolema od MIN
  126.                 cout<<*korisnici[i];
  127.             }
  128.         }
  129.     }
  130.     void postaviBezbednosenKod(char * korisnicko_ime, char *kod) {
  131.         for(int i=0; i<broj; i++) {
  132.                 //korisnici[i]+=*kod;nemoze ova vaka , ne raboti so pokazuvaci +=
  133.                 SpecijalenKorisnik *s = dynamic_cast<SpecijalenKorisnik*>(korisnici[i]);
  134.                 if(s!=0)
  135.                 {
  136.                   if((strcmp(korisnici[i]->getIme(),korisnicko_ime))==0)
  137.                   *s+=kod;
  138.                 }
  139.         }
  140.     }
  141. };
  142.  
  143. const int VebStranica::MIN=5;
  144.  
  145. int main() {
  146.  
  147.     Korisnik **niza;
  148.     int n,m;
  149.     char ime[30],kod[10],lozinka[10];
  150.     bool daliBezbednosen;
  151.     cin>>n;
  152.     niza=new Korisnik*[n];
  153.     for (int i=0; i<n; i++) {
  154.         cin>>ime;
  155.         cin>>lozinka;
  156.         cin>>daliBezbednosen;
  157.         if (!daliBezbednosen)
  158.             niza[i]=new Korisnik(ime,lozinka);
  159.         else
  160.             niza[i]=new SpecijalenKorisnik(ime,lozinka);
  161.     }
  162.  
  163.     VebStranica strana("code.finki.ukim.mk",niza,n);
  164.     for (int i=0; i<n; i++) delete niza[i];
  165.     delete [] niza;
  166.     cin>>m;
  167.     for (int i=0; i<m; i++) {
  168.         cin>>ime>>kod;
  169.         try {
  170.             strana.postaviBezbednosenKod(ime,kod);
  171.         } catch(BadInputException b) {
  172.            b.pecati();
  173.             strcat(kod,"123");
  174.             strana.postaviBezbednosenKod(ime,kod);
  175.         }
  176.     }
  177.  
  178.     Korisnik::setT(2);
  179.  
  180.     strana.pecatiKorisnici();
  181.     return 0;
  182. }
Add Comment
Please, Sign In to add comment