SlavkovB

Корисник OOP Exercises

Jun 12th, 2016
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.58 KB | None | 0 0
  1. Корисник Problem 2 (0 / 0)
  2. Дадена е дел од дефиницијата на класата Korisnik. За секој корисник се чуваат информации за неговото корисничко име (низа од знаци), лозинка (низа од знаци) и дали има безбедносен код (булова променлива).
  3.  
  4. За секој корисник може да се пресмета тежината на лозинката. Тежината на лозинката е сума од тежината на секој знак од лозинката посебно. Познато е дека буквите имаат тежина 0, цифрите имаат тежина 1, а другите специјални знаци имаат тежина T. T има почетна вредност 3. Оваа вредност е иста за сите корисници и може да се промени со функција setТ(). (5 поени)
  5.  
  6. Специјалните корисници покрај лозинката имаат уше еден безбедносен код (динамичко алоцирана низа од знаци). За овие да корисници да се моделира соодветна класа SpecijalenKorisnik. Со додавање на безбедносен код, тежината на лозинката е поголема за онолку колку што има знаци во безбедносниот код независно од тоа какви се знаците( букви, цифри или специјални знаци).
  7.  
  8. Во класите Korisnik и SpecijalenKorisnik треба да се имплементираат потребните конструктори, функции за поставување и преземање и деструктор. (5 поени)
  9.  
  10. За сите објекти од класите треба да се обезбедат следните функции:
  11.  
  12. преоптоварен оператор << во кој се печатат информации за корисникот во формат: tezina :KorisnickoIme * * * *. (5 поени)
  13. numerickaTezina() – ја пресметува нумеричката вредност за тежината на лозинката (5 поени)
  14. Во класата SpecijalenKorisnik дефинирај ја функцијата:
  15.  
  16. преоптоварен оператор += за поставување на безбедносен код (стариот се менува во новиот) (5 поени)
  17. Ако се направи обид да се внесе безбедносен код само од букви да се фрли исклучок (објект од класата BadInputException). Фатете го исклучокот во главната функција каде што е потребно. Откако ќе го фатите отпечатете соодветна порака за грешка (Bezbednosniot kod e vo losh format) и справете се со исклучокот така да на крајот на кодот ќе го додадете стрингот: 123. (10 поени)
  18.  
  19. Дадена е дел од дефиницијата на класата VebStranica во која се чуваат информаци за адресата на страницата (низа од 30 знаци) и за корисниците најавени на страницата (низа од 20 покажувачи кон класата Korisnik) како и бројот на такви корисници.
  20.  
  21. Велиме дека корисникот има лозинка која е безбедна ако тежината за пробивање е најмалкуMIN. Вредноста MIN е членка на класата VebStranica, има фиксна вредност 5 која не може да се промени.
  22.  
  23. Во класата VebStranica имплементирај ги функциите:
  24.  
  25. функција pecatiKorisnici() во која се печатат сите корисници кои имаат безбедна лозинка, секој во посебен ред. Претходно во првиот ред се печати: Na stranicata XXXXX slednite korisnici se najaveni so bezbedna lozinka: (5 поени).
  26.  
  27. функција postaviBezbednosenKod(char * korisnicko_ime, char *kod ) во која на корисникот со дадено корисничко име му се поставува дадениот безбедносен код. Ако тоа не е можно функцијата не прави ништо (15 поени).
  28.  
  29. Комплетна функционалност (5 поени)
  30.  
  31. Sample input
  32. 2
  33. tanja l0z1nk@ 0
  34. ana f1nk1 0
  35. 0
  36.  
  37. Sample output
  38. Na stranicata code.finki.ukim.mk slednite korisnici se najaveni so bezbedna lozinka:
  39.  
  40.  
  41. //CODE//
  42.  
  43.  
  44. #include <iostream>
  45. #include <cstring>
  46. using namespace std;
  47.  
  48. class BadInputException{
  49. };
  50.  
  51. class Korisnik{
  52. protected:
  53.     char ime[30];
  54.     char lozinka[10];
  55.     bool bezbKod;
  56. public:
  57.     static int T;
  58.     Korisnik(char *i, char *l){
  59.         strcpy(ime, i);
  60.         strcpy(lozinka, l);
  61.         bezbKod = false;
  62.     }
  63.     virtual ~Korisnik(){};
  64.     virtual int numerickaTezina(){
  65.         int tezina = 0;
  66.         for(int i=0; i<(int)strlen(lozinka); i++){
  67.             if(isdigit(lozinka[i])) tezina++;
  68.             else if(!isalpha(lozinka[i])) tezina+=T;
  69.         }
  70.         return tezina;
  71.     }
  72.     friend ostream& operator<<(ostream& os, Korisnik& k){
  73.          os<<k.numerickaTezina()<<":"<<k.ime<<" ****"<<endl;
  74.          return os;
  75.     }
  76.     static void setT(int TT){
  77.         T = TT;
  78.     }
  79.     char *getIme(){ return ime; }
  80.     bool getdaliBezbednosen(){ return bezbKod; }
  81.  
  82. };
  83. class SpecijalenKorisnik: public Korisnik{
  84.     char *kod;//bezbednosen kod
  85. public:
  86.     SpecijalenKorisnik(char *ime, char *lozinka):Korisnik(ime, lozinka){
  87.         bezbKod = true;
  88.     }
  89.     ~SpecijalenKorisnik(){ delete []kod; }
  90.     int numerickaTezina(){
  91.         int tezina = Korisnik::numerickaTezina() + strlen(kod);
  92.         return tezina;
  93.     }
  94.     SpecijalenKorisnik& operator+=(char *novKod){
  95.         bool propisno = false;
  96.         for(int i=0; i<(int)strlen(novKod); i++){
  97.             if(!isalpha(novKod[i])) propisno = true;
  98.         }
  99.         try{
  100.             if(!propisno) throw BadInputException();
  101.         }catch(BadInputException){
  102.             cout<<"Bezbednosniot kod e vo losh format"<<endl;
  103.             strcat(novKod,"123");
  104.         }
  105.         delete []kod;
  106.         kod = new char[strlen(novKod)+1];
  107.         strcpy(kod, novKod);
  108.         return *this;
  109.     }
  110. };
  111.  
  112.  
  113. class VebStranica{
  114. private:
  115.     char adresa[30];
  116.     Korisnik *korisnici[20];
  117.     int broj;
  118.     static int const MIN=5;
  119. public:
  120.     VebStranica(const char *adresa, Korisnik** korisnici,int broj ){
  121.       strcpy(this->adresa,adresa);
  122.       for (int i=0;i<broj;i++){
  123.         //ako korisnikot ima bezbednosen kod
  124.         if (korisnici[i]->getdaliBezbednosen()){
  125.             this->korisnici[i]=new SpecijalenKorisnik(*dynamic_cast<SpecijalenKorisnik*>(korisnici[i]));
  126.         }
  127.         else this->korisnici[i]=new Korisnik(*korisnici[i]);
  128.       }
  129.       this->broj=broj;
  130.     }
  131.     ~VebStranica(){
  132.         for (int i=0;i<broj;i++) delete korisnici[i];
  133.     }
  134.     void pecatiKorisnici(){
  135.         cout<<"Na stranicata "<<adresa<<" slednite korisnici se najaveni so bezbedna lozinka:"<<endl;
  136.         for(int i=1; i<broj; i++){
  137.             if(korisnici[i]->numerickaTezina()>=MIN)
  138.                 cout<<*korisnici[i];
  139.         }
  140.     }
  141.     void postaviBezbednosenKod(char *korisnicko_ime, char *kod){
  142.         for(int i=0; i<broj; i++){
  143.             if(!strcmp(korisnicko_ime, korisnici[i]->getIme())&&korisnici[i]->getdaliBezbednosen()){
  144.                 *dynamic_cast<SpecijalenKorisnik*>(korisnici[i])+=kod;
  145.             }
  146.         }
  147.     }
  148. };
  149. int Korisnik::T = 3;
  150.  
  151. int main(){
  152. Korisnik **niza;
  153. int n,m;
  154. char ime[30],kod[10],lozinka[10];
  155. bool daliBezbednosen;
  156. cin>>n;
  157. niza=new Korisnik*[n];
  158. for (int i=0;i<n;i++){
  159.    cin>>ime;
  160.    cin>>lozinka;
  161.    cin>>daliBezbednosen;
  162.    if (!daliBezbednosen)
  163.     niza[i]=new Korisnik(ime,lozinka);
  164.    else
  165.     niza[i]=new SpecijalenKorisnik(ime,lozinka);
  166. }
  167. VebStranica strana("code.finki.ukim.mk",niza,n);
  168. for (int i=0;i<n;i++) delete niza[i];
  169. delete [] niza;
  170. cin>>m;
  171. for (int i=0;i<m;i++){
  172.    cin>>ime>>kod;
  173.    strana.postaviBezbednosenKod(ime,kod);
  174. }
  175.  
  176. Korisnik::setT(2);
  177.  
  178. strana.pecatiKorisnici();
  179.  
  180. }
Add Comment
Please, Sign In to add comment