Mitrezzz

Студент

May 20th, 2018
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.71 KB | None | 0 0
  1. #include <iostream>
  2. #include<cstring>
  3. using namespace std;
  4.  
  5. class BadInputException
  6. {
  7. public:
  8.     char *novo;
  9.     BadInputException(char *popravi)
  10.     {
  11.         int n=strlen(popravi),br=0;
  12.        for(int i=0; i<n; i++)
  13.         {
  14.             if(isalpha(popravi[i]))
  15.                 br++;
  16.         }
  17.         this->novo=new char[br+1];
  18.         int j=-1;
  19.         for(int i=0;i<n;i++){
  20.             if(isalpha(popravi[i])){
  21.                 j++;
  22.                 novo[j]=popravi[i];
  23.             }
  24.         }
  25.     }
  26. };
  27.  
  28. class StudentKurs
  29. {
  30. protected:
  31.     char ime[30];
  32.     int ocenkaPismeno;
  33.     bool daliUsno;
  34.     static int MAX;
  35. public:
  36.     static const int MINOCENKA=6;
  37.     int getDaliUsno(){return this->daliUsno;}
  38.     char *getIme(){return this->ime;}
  39.     StudentKurs(char ime[30]="",int ocenkaPismeno=0,bool daliUsno=false)
  40.     {
  41.         strcpy(this->ime,ime);
  42.         this->ocenkaPismeno=ocenkaPismeno;
  43.         this->daliUsno=daliUsno;
  44.     }
  45.     static void setMAX(int maxi)
  46.     {
  47.         StudentKurs::MAX=maxi;
  48.     }
  49.     virtual int ocenka()
  50.     {
  51.         return this->ocenkaPismeno;
  52.     }
  53.     friend ostream &operator<<(ostream &output, StudentKurs &u)
  54.     {
  55.         output<<u.ime<<" --- "<<u.ocenka()<<endl;
  56.         return output;
  57.     }
  58.  
  59. };
  60. class StudentKursUsno : public StudentKurs
  61. {
  62. private:
  63.     char *opisnaOcenka;
  64. public:
  65.     StudentKursUsno(char ime[30]="",int ocenkaPismeno=0,bool daliUsno=false,char *opisnaOcenka=""):StudentKurs(ime,ocenkaPismeno,daliUsno)
  66.     {
  67.         this->opisnaOcenka=new char[strlen(opisnaOcenka)+1];
  68.         strcpy(this->opisnaOcenka,opisnaOcenka);
  69.     }
  70.     virtual int ocenka()
  71.     {
  72.         if(ocenkaPismeno<StudentKurs::MAX){
  73.         if(strcmp(this->opisnaOcenka,"odlicen")==0)
  74.             return this->ocenkaPismeno+2;
  75.         else if(strcmp(this->opisnaOcenka,"dobro")==0)
  76.             return this->ocenkaPismeno+1;
  77.         }
  78.         else if(strcmp(this->opisnaOcenka,"losho")==0)
  79.             return this->ocenkaPismeno-1;
  80.         else return this->ocenkaPismeno;
  81.     }
  82.     friend ostream &operator<<(ostream &output, StudentKursUsno &u)
  83.     {
  84.         output<<u.ime<<" "<<u.ocenka()<<endl;
  85.         return output;
  86.     }
  87.     StudentKursUsno &operator+=(char *opisnaOcenka)
  88.     {
  89.         int n=strlen(opisnaOcenka);
  90.         int flag=0;
  91.         for(int i=0; i<n; i++)
  92.         {
  93.             if(!isalpha(opisnaOcenka[i]))
  94.             {
  95.                 flag=1;
  96.                 break;
  97.             }
  98.         }
  99.         if(flag) throw BadInputException(opisnaOcenka);
  100.         this->daliUsno=true;
  101.         this->opisnaOcenka=new char[n];
  102.         strcpy(this->opisnaOcenka,opisnaOcenka);
  103.  
  104.         return *this;
  105.     }
  106. };
  107.  
  108. class KursFakultet{
  109. private:
  110.     char naziv[30];
  111.     StudentKurs *studenti[20];
  112.     int broj;
  113.  
  114. public:
  115.     KursFakultet(char *naziv, StudentKurs** studenti,int broj ){
  116.       strcpy(this->naziv,naziv);
  117.       for (int i=0;i<broj;i++){
  118.         //ako studentot ima usno isprashuvanje
  119.         StudentKursUsno *s=dynamic_cast<StudentKursUsno*>(studenti[i]);
  120.         if (s){
  121.             this->studenti[i]=new StudentKursUsno(*dynamic_cast<StudentKursUsno*>(studenti[i]));
  122.         }
  123.         else this->studenti[i]=new StudentKurs(*studenti[i]);
  124.       }
  125.       this->broj=broj;
  126.     }
  127.     ~KursFakultet(){
  128.     for (int i=0;i<broj;i++) delete studenti[i];
  129.     }
  130.     void pecatiStudenti()
  131.     {
  132.         cout<<"Kursot "<<this->naziv<<" go polozile:"<<endl;
  133.         for(int i=0;i<this->broj;i++)
  134.         {
  135.             if(studenti[i]->ocenka()>=StudentKurs::MINOCENKA)
  136.                 cout<<*studenti[i];
  137.         }
  138.     }
  139.     void postaviOpisnaOcenka(char *ime,char *opisnaOcenka)
  140.     {
  141.         for(int i=0;i<broj;i++)
  142.         {
  143.             if(strcmp(studenti[i]->getIme(),ime)==0)
  144.             {
  145.                 StudentKursUsno *s=dynamic_cast<StudentKursUsno*>(studenti[i]);
  146.                 if(s) *(s)+=opisnaOcenka;
  147.             }
  148.         }
  149.     }
  150. };
  151. int StudentKurs::MAX=10;
  152. int main(){
  153.  
  154. StudentKurs **niza;
  155. int n,m,ocenka;
  156. char ime[30],opisna[10];
  157. bool daliUsno;
  158. cin>>n;
  159. niza=new StudentKurs*[n];
  160. for (int i=0;i<n;i++){
  161.    cin>>ime;
  162.    cin>>ocenka;
  163.    cin>>daliUsno;
  164.    if (!daliUsno)
  165.     niza[i]=new StudentKurs(ime,ocenka);
  166.    else
  167.     niza[i]=new StudentKursUsno(ime,ocenka);
  168. }
  169.  
  170. KursFakultet programiranje("OOP",niza,n);
  171. for (int i=0;i<n;i++) delete niza[i];
  172. delete [] niza;
  173. cin>>m;
  174.  
  175. for (int i=0;i<m;i++){
  176.    cin>>ime>>opisna;
  177.    try{
  178.    programiranje.postaviOpisnaOcenka(ime,opisna);
  179.    }
  180.    catch(BadInputException e)
  181.    {
  182.         cout<<"Greshna opisna ocenka"<<endl;
  183.         programiranje.postaviOpisnaOcenka(ime,e.novo);
  184.    }
  185. }
  186.  
  187. StudentKurs::setMAX(9);
  188.  
  189. programiranje.pecatiStudenti();
  190.  
  191. }
Add Comment
Please, Sign In to add comment