Andziev

Студент

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