Advertisement
Guest User

Untitled

a guest
May 19th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.30 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5. class BadInputException
  6. {
  7.    private:
  8.       char *ocenka_popravena;
  9.    public:
  10.       // Constructors
  11.       BadInputException(const char *ocenka_popravena)
  12.       {
  13.          this->ocenka_popravena = new char[strlen(ocenka_popravena) + 1];
  14.          strcpy(this->ocenka_popravena, ocenka_popravena);
  15.       }
  16.       ~BadInputException() { delete [] ocenka_popravena; }
  17.       void popravi()
  18.       {
  19.          int count = 0;
  20.          char *copy = ocenka_popravena;
  21.          while(*copy++)
  22.          {
  23.             if(isalpha(*copy)) count++;
  24.          }
  25.  
  26.          char *temp = new char[count + 1];
  27.          while(*copy++)
  28.          {
  29.             if(isalpha(*copy)) *temp++ = *copy;
  30.          }
  31.          delete [] ocenka_popravena;
  32.          temp -=(count + 1);
  33.          ocenka_popravena = temp;
  34.       }
  35.       char *getPopraven() const { return ocenka_popravena; }
  36.       void print(){ std::cout << "Greshna opisna ocenka" << std::endl; }
  37. };
  38.  
  39. class StudentKurs{
  40.    protected:
  41.        char ime[30];
  42.        int ocenka;
  43.        bool daliUsno;
  44.        static int MAX;
  45.        static const int MINOCENKA;
  46.  
  47.    public:
  48.     StudentKurs(char* ime,int finalenIspit){
  49.        strcpy(this->ime,ime);
  50.        this->ocenka=finalenIspit;
  51.        this->daliUsno=false;
  52.      }
  53.      virtual ~StudentKurs(){}
  54.  
  55.      // Functions
  56.      bool getDaliUsno() const { return daliUsno; }
  57.      const char *getIme() const { return ime; }
  58.      virtual int getOcenka() const { return ocenka; }
  59.      static void setMAX(int x) { MAX = x; }
  60.      static int getMAX() { return MAX; }
  61.      static const int getMINOCENKA() { return MINOCENKA; }
  62. };
  63.  
  64. int StudentKurs::MAX = 10;
  65. const int StudentKurs::MINOCENKA = 6;
  66.  
  67.  
  68. //вметни го кодот за StudentKursUsno
  69. class StudentKursUsno : public StudentKurs
  70. {
  71.    private:
  72.       char *opisna_ocenka; // dynamically allocated
  73.    public:
  74.       // Constructors
  75.       StudentKursUsno(char *ime, int finalenIspit)
  76.          : StudentKurs(ime, finalenIspit)
  77.          {
  78.             opisna_ocenka = new char[0];
  79.             this->daliUsno = true;
  80.          }
  81.       ~StudentKursUsno() { delete [] opisna_ocenka; }
  82.      
  83.       // Functions
  84.       int getOcenka() const override
  85.       {
  86.          if(strcmp(opisna_ocenka, "odlicen") == 0&&StudentKurs::getOcenka() + 2 <= getMAX()) return StudentKurs::getOcenka() + 2;
  87.          else if(strcmp(opisna_ocenka, "dobar") == 0 && StudentKurs::getOcenka() + 1 <= getMAX()) return StudentKurs::getOcenka() + 1;
  88.          else if(strcmp(opisna_ocenka, "losho") == 0 && StudentKurs::getOcenka() -1 > 1) return StudentKurs::getOcenka() - 1;
  89.          else return StudentKurs::getOcenka();
  90.  
  91.          //ati
  92.       //    if(strcmp(opisna_ocenka, "odlicen")==0){
  93.       //       if( (StudentKurs::getOcenka() + 2) < getMAX()){
  94.       //           return (StudentKurs::getOcenka() + 2);
  95.       //       }else{
  96.       //           return getMAX();
  97.       //       }
  98.       //   }else if(strcmp(opisna_ocenka, "dobro")==0){
  99.       //       if( (StudentKurs::getOcenka() + 1) < getMAX()){
  100.       //           return (StudentKurs::getOcenka() + 1);
  101.       //       }else{
  102.       //           return getMAX();
  103.       //       }
  104.       //   }else if(strcmp(opisna_ocenka, "losho")==0){
  105.       //       if( (StudentKurs::getOcenka() - 1) > 1){
  106.       //           return (StudentKurs::getOcenka() - 1);
  107.       //       }else{
  108.       //           return 1;
  109.       //       }
  110.       //   }else{
  111.       //       return StudentKurs::getOcenka();
  112.       //   }
  113.       }
  114.  
  115.       // Overloaded operators
  116.       StudentKursUsno &operator +=(char *opisna1)
  117.       {
  118.          char *copi = opisna1;
  119.          while(*copi)
  120.          {
  121.             if(!isalpha(*copi)) throw BadInputException(opisna1);
  122.             copi++;
  123.          }
  124.  
  125.          //delete [] this->opisna_ocenka;
  126.          this->opisna_ocenka = new char[strlen(opisna1) + 1];
  127.          strcpy(this->opisna_ocenka, opisna1);
  128.          return *this;
  129.       }
  130.  
  131. };
  132.  
  133. std::ostream &operator <<(std::ostream &output, const StudentKurs &ob)
  134. {
  135.    output << ob.getIme() << " --- "  << ob.getOcenka() << std::endl;
  136.    return output;
  137. }
  138.  
  139.  
  140. class KursFakultet
  141. {
  142.    private:
  143.       char naziv[30];
  144.       StudentKurs *studenti[20];
  145.       int broj;
  146.      
  147.    public:
  148.       KursFakultet(const char *naziv, StudentKurs** studenti,int broj ){
  149.          strcpy(this->naziv,naziv);
  150.          for (int i=0;i<broj;i++){
  151.          //ako studentot ima usno isprashuvanje
  152.          if (studenti[i]->getDaliUsno()){
  153.                this->studenti[i]=new StudentKursUsno(*dynamic_cast<StudentKursUsno*>(studenti[i]));
  154.          }
  155.          else this->studenti[i]=new StudentKurs(*studenti[i]);
  156.          }
  157.          this->broj=broj;
  158.       }
  159.       ~KursFakultet(){
  160.       for (int i=0;i<broj;i++) delete studenti[i];
  161.       }
  162.  
  163.       //дополни ја класата
  164.       void pecatiStudenti() const
  165.       {
  166.          std::cout << "Kursot " << naziv << " go polozile:" << std::endl;
  167.          for(int i = 0; i < broj; i++)
  168.          {
  169.             if(studenti[i]->getOcenka() >= StudentKurs::getMINOCENKA() ) std::cout << *(studenti[i]);
  170.          }
  171.       }
  172.       void postaviOpisnaOcenka(char *ime, char *opisnaOcenka)
  173.       {
  174.          for(int i = 0; i < broj; i++)
  175.          {
  176.             if( (strcmp(studenti[i]->getIme(), ime) == 0) && (studenti[i]->getDaliUsno()) )
  177.             {
  178.                StudentKursUsno *a = dynamic_cast <StudentKursUsno *>(studenti[i]);
  179.                *a += opisnaOcenka;
  180.             }
  181.          }
  182.       }
  183. };
  184.  
  185. int main(){
  186.  
  187. StudentKurs **niza;
  188. int n,m,ocenka;
  189. char ime[30],opisna[10];
  190. bool daliUsno;
  191. cin>>n;
  192. niza=new StudentKurs*[n];
  193. for (int i=0;i<n;i++){
  194.    cin>>ime;
  195.    cin>>ocenka;
  196.    cin>>daliUsno;
  197.    if (!daliUsno)
  198.     niza[i]=new StudentKurs(ime,ocenka);
  199.    else
  200.     niza[i]=new StudentKursUsno(ime,ocenka);
  201. }
  202.  
  203. KursFakultet programiranje("OOP",niza,n);
  204. for (int i=0;i<n;i++) delete niza[i];
  205. delete [] niza;
  206. cin>>m;
  207.    
  208. for (int i=0;i<m;i++){
  209.    cin>>ime>>opisna;
  210.     try{
  211.        programiranje.postaviOpisnaOcenka(ime,opisna); //ERROR
  212.     }
  213.     catch(BadInputException bie){
  214.         bie.print();
  215.         bie.popravi();
  216.         programiranje.postaviOpisnaOcenka(ime,bie.getPopraven());
  217.     }
  218. }
  219.  
  220. StudentKurs::setMAX(9);
  221.  
  222. programiranje.pecatiStudenti();
  223.  
  224. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement