Mitrezzz

Демонстратор 1

May 20th, 2018
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.17 KB | None | 0 0
  1. #include<iostream>
  2. #include<string.h>
  3. using namespace std;
  4.  
  5.  
  6. class Kurs{
  7. private:
  8.     char ime[20];
  9.     int krediti;
  10. public:
  11.     Kurs (char *ime,int krediti){
  12.         strcpy(this->ime,ime);
  13.         this->krediti=krediti;
  14.     }
  15.     Kurs (){
  16.         strcpy(this->ime,"");
  17.         krediti=0;
  18.     }
  19.     bool operator==(const char *ime) const{
  20.         return strcmp(this->ime,ime)==0;
  21.     }
  22.     char const * getIme()const{
  23.         return ime;
  24.     }
  25.     void pecati ()const{cout<<ime<<" "<<krediti<<"ECTS";}
  26. };
  27.  
  28. class Student{
  29. protected:
  30.     int *ocenki;
  31.     int brojOcenki;
  32.     int indeks;
  33.  
  34. public:
  35.     Student(int indeks,int *ocenki, int brojOcenki){
  36.         this->indeks=indeks;
  37.         this->brojOcenki=brojOcenki;
  38.         this->ocenki=new int[brojOcenki];
  39.         for (int i=0;i<brojOcenki;i++) this->ocenki[i]=ocenki[i];
  40.     }
  41.     Student(const Student &k){
  42.         this->indeks=k.indeks;
  43.         this->brojOcenki=k.brojOcenki;
  44.         this->ocenki=new int[k.brojOcenki];
  45.         for (int i=0;i<k.brojOcenki;i++) this->ocenki[i]=k.ocenki[i];
  46.     }
  47.     Student operator=(const Student &k){
  48.         if (&k==this) return *this;
  49.         this->indeks=k.indeks;
  50.         this->brojOcenki=k.brojOcenki;
  51.         delete [] ocenki;
  52.         this->ocenki=new int[k.brojOcenki];
  53.         for (int i=0;i<k.brojOcenki;i++) this->ocenki[i]=k.ocenki[i];
  54.         return *this;
  55.     }
  56.  
  57.     ~Student(){delete [] ocenki;}
  58.  
  59.    //dopolni ja klasata
  60.     virtual int getBodovi() {
  61.         double count = 0;
  62.         for (int i=0;i<brojOcenki;i++){
  63.             if (ocenki[i]>5)
  64.                 count++;
  65.         }
  66.        
  67.         return (int) (count/brojOcenki*100.00);
  68.     }
  69.    
  70.     virtual void pecati() {
  71.         cout<<indeks<<endl;
  72.     }
  73.    
  74.  
  75. };
  76.  
  77. class Predavach{
  78. protected:
  79.     Kurs kursevi[10];
  80.     int brojKursevi;
  81.     char *imeIPrezime;
  82.  
  83. public:
  84.     Predavach(char *imeIPrezime,Kurs *kursevi,int brojKursevi){
  85.         this->brojKursevi=brojKursevi;
  86.         for (int i=0;i<brojKursevi;i++) this->kursevi[i]=kursevi[i];
  87.         this->imeIPrezime=new char[strlen(imeIPrezime)+1];
  88.         strcpy(this->imeIPrezime,imeIPrezime);
  89.     }
  90.     Predavach(const Predavach &p){
  91.         this->brojKursevi=p.brojKursevi;
  92.         for (int i=0;i<p.brojKursevi;i++) this->kursevi[i]=p.kursevi[i];
  93.         this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  94.         strcpy(this->imeIPrezime,p.imeIPrezime);
  95.     }
  96.     Predavach operator=(const Predavach &p){
  97.         if (this==&p) return *this;
  98.         this->brojKursevi=p.brojKursevi;
  99.         for (int i=0;i<p.brojKursevi;i++) this->kursevi[i]=p.kursevi[i];
  100.         this->imeIPrezime=new char[strlen(p.imeIPrezime)+1];
  101.         delete [] imeIPrezime;
  102.         strcpy(this->imeIPrezime,p.imeIPrezime);
  103.         return *this;
  104.     }
  105.     ~Predavach(){delete [] imeIPrezime;}
  106.  
  107.     int getBrojKursevi()const {return brojKursevi;}
  108.    
  109.     char * const getImeIPrezime()const {return imeIPrezime;}
  110.    
  111.     Kurs operator[](int i) const {
  112.        if (i<brojKursevi&&i>=0)
  113.            return kursevi[i];
  114.        else return Kurs();
  115.     }
  116.    
  117.      void pecati() const  {
  118.          cout<<imeIPrezime<<" (";
  119.          for (int i=0;i<brojKursevi;i++){
  120.              kursevi[i].pecati();
  121.              if (i<brojKursevi-1) cout<<", ";  else cout<<")";
  122.         }
  123.     }
  124. };
  125.  
  126.  
  127. //mesto za vashiot kod
  128.  
  129. class NoCourseException {
  130.     private:
  131.     int indeks;
  132.    
  133.     public:
  134.     NoCourseException(int index){
  135.         this->indeks=index;
  136.     }
  137.    
  138.     void message() {
  139.         cout<<"Demonstratorot so indeks "<<indeks<<" ne drzi laboratoriski vezbi"<<endl;
  140.     }
  141.    
  142. };
  143. class Demonstrator : public Predavach, public Student {
  144.     private:
  145.     int brojchasovi;
  146.    
  147.     public:
  148.     Demonstrator (int indeks,int * ocenki,int brojOcenki,char * imeIPrezime,Kurs * kursevi,int brojKursevi,int brojCasovi)
  149.     : Predavach(imeIPrezime,kursevi,brojKursevi), Student(indeks,ocenki,brojOcenki){
  150.         this->brojchasovi = brojCasovi;
  151.     }
  152.    
  153.     Demonstrator (const Demonstrator &d) : Predavach(d), Student(d) {
  154.        
  155.     }
  156.    
  157.     int getBodovi() {
  158.         if (brojKursevi==0)
  159.             throw NoCourseException(indeks);
  160.         int bodovi = Student::getBodovi();
  161.         bodovi += (20*brojchasovi) / brojKursevi;
  162.         return bodovi;
  163.     }
  164.    
  165.     void pecati() {
  166.         cout<<indeks<<": "<<imeIPrezime<<" (";
  167.         for (int i=0;i<brojKursevi;i++){
  168.             kursevi[i].pecati();
  169.             if (i==brojKursevi-1)
  170.                 cout<<")";
  171.             else
  172.                 cout<<", ";
  173.         }
  174.            
  175.        
  176.     }
  177.    
  178.    
  179. };
  180.  
  181. Student & vratiNajdobroRangiran (Student ** studenti, int n){
  182.     Student * max = studenti[0];
  183.     for (int i=1;i<n;i++){
  184.         Demonstrator * dem = dynamic_cast<Demonstrator *>(studenti[i]);
  185.         try{
  186.         if (studenti[i]->getBodovi()>max->getBodovi())
  187.             max=studenti[i];
  188.         }
  189.         catch (NoCourseException &e){
  190.             e.message();
  191.         }
  192.     }
  193.     return (*max);
  194. }
  195.  
  196. void pecatiDemonstratoriKurs (char* kurs, Student** studenti, int n){
  197.    
  198.     for (int i=0;i<n;i++){
  199.         Demonstrator * dem = dynamic_cast<Demonstrator *> (studenti[i]);
  200.         if (dem){
  201.             for (int j=0;j<dem->getBrojKursevi();j++){
  202.                 Predavach p = (Predavach) (*dem);
  203.                 if (p[j]==kurs){
  204.                     studenti[i]->pecati();
  205.                     cout<<endl;
  206.                     break;
  207.                 }
  208.             }
  209.         }
  210.     }
  211. }
  212.  
  213.  
  214.  
  215.  
  216.  
  217.  
  218.  
  219.  
  220. int main(){
  221.  
  222. Kurs kursevi[10];
  223. int indeks,brojKursevi, ocenki[20],ocenka,brojOcenki,tip,brojCasovi,krediti;
  224. char ime[20],imeIPrezime[50];
  225.  
  226. cin>>tip;
  227.  
  228. if (tip==1) //test class Demonstrator
  229. {
  230.     cout<<"-----TEST Demonstrator-----"<<endl;
  231.     cin>>indeks>>brojOcenki;
  232.     for (int i=0;i<brojOcenki;i++){
  233.          cin>>ocenka;
  234.          ocenki[i]=ocenka;
  235.     }
  236.     cin>>imeIPrezime>>brojKursevi;
  237.     for (int i=0;i<brojKursevi;i++){
  238.          cin>>ime>>krediti;
  239.          kursevi[i]=Kurs(ime,krediti);
  240.     }
  241.     cin>>brojCasovi;
  242.  
  243. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  244. cout<<"Objekt od klasata Demonstrator e kreiran";
  245.  
  246. } else if (tip==2) //funkcija pecati vo Student
  247. {
  248.     cout<<"-----TEST pecati-----"<<endl;
  249.     cin>>indeks>>brojOcenki;
  250.     for (int i=0;i<brojOcenki;i++){
  251.          cin>>ocenka;
  252.          ocenki[i]=ocenka;
  253.     }
  254.  
  255. Student s(indeks,ocenki,brojOcenki);
  256. s.pecati();
  257.  
  258. } else if (tip==3) //funkcija getVkupnaOcenka vo Student
  259. {
  260.     cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  261.     cin>>indeks>>brojOcenki;
  262.     for (int i=0;i<brojOcenki;i++){
  263.          cin>>ocenka;
  264.          ocenki[i]=ocenka;
  265.     }
  266. Student s(indeks,ocenki,brojOcenki);
  267. cout<<"Broj na bodovi: "<<s.getBodovi()<<endl;
  268.  
  269. } else if (tip==4) //funkcija getVkupnaOcenka vo Demonstrator
  270. {
  271.   cout<<"-----TEST getVkupnaOcenka-----"<<endl;
  272.   cin>>indeks>>brojOcenki;
  273.     for (int i=0;i<brojOcenki;i++){
  274.          cin>>ocenka;
  275.          ocenki[i]=ocenka;
  276.     }
  277.     cin>>imeIPrezime>>brojKursevi;
  278.     for (int i=0;i<brojKursevi;i++){
  279.          cin>>ime>>krediti;
  280.          kursevi[i]=Kurs(ime,krediti);
  281.     }
  282.     cin>>brojCasovi;
  283.  
  284. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  285. cout<<"Broj na bodovi: "<<d.getBodovi()<<endl;
  286.  
  287. } else if (tip==5) //funkcija pecati vo Demonstrator
  288. {
  289.  cout<<"-----TEST pecati -----"<<endl;
  290.  cin>>indeks>>brojOcenki;
  291.     for (int i=0;i<brojOcenki;i++){
  292.          cin>>ocenka;
  293.          ocenki[i]=ocenka;
  294.     }
  295.     cin>>imeIPrezime>>brojKursevi;
  296.     for (int i=0;i<brojKursevi;i++){
  297.          cin>>ime>>krediti;
  298.          kursevi[i]=Kurs(ime,krediti);
  299.     }
  300.     cin>>brojCasovi;
  301.  
  302. Demonstrator d(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  303. d.pecati();
  304.  
  305. } else if (tip==6) //site klasi
  306. {
  307.     cout<<"-----TEST Student i Demonstrator-----"<<endl;
  308.  cin>>indeks>>brojOcenki;
  309.     for (int i=0;i<brojOcenki;i++){
  310.          cin>>ocenka;
  311.          ocenki[i]=ocenka;
  312.     }
  313.     cin>>imeIPrezime>>brojKursevi;
  314.     for (int i=0;i<brojKursevi;i++){
  315.          cin>>ime>>krediti;
  316.          kursevi[i]=Kurs(ime,krediti);
  317.     }
  318.     cin>>brojCasovi;
  319.  
  320. Student *s=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  321. s->pecati();
  322. cout<<"\nBroj na bodovi: "<<s->getBodovi()<<endl;
  323. delete s;
  324.  
  325.  
  326. } else if (tip==7) //funkcija vratiNajdobroRangiran
  327. {
  328.     cout<<"-----TEST vratiNajdobroRangiran-----"<<endl;
  329. int k, opt;
  330. cin>>k;
  331. Student **studenti=new Student*[k];
  332. for (int j=0;j<k;j++){
  333.    cin>>opt; //1 Student 2 Demonstrator
  334.    cin>>indeks>>brojOcenki;
  335.    for (int i=0;i<brojOcenki;i++)
  336.       {
  337.          cin>>ocenka;
  338.          ocenki[i]=ocenka;
  339.       }
  340.    if (opt==1){
  341.         studenti[j]=new Student(indeks,ocenki,brojOcenki);
  342.    }else{
  343.        cin>>imeIPrezime>>brojKursevi;
  344.         for (int i=0;i<brojKursevi;i++){
  345.          cin>>ime>>krediti;
  346.          kursevi[i]=Kurs(ime,krediti);
  347.         }
  348.         cin>>brojCasovi;
  349.         studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  350.    }
  351. }
  352. Student& najdobar=vratiNajdobroRangiran(studenti,k);
  353. cout<<"Maksimalniot broj na bodovi e:"<<najdobar.getBodovi();
  354. cout<<"\nNajdobro rangiran:";
  355. najdobar.pecati();
  356.  
  357. for (int j=0;j<k;j++) delete studenti[j];
  358.  delete [] studenti;
  359. } else if (tip==8) //funkcija pecatiDemonstratoriKurs
  360. {
  361. cout<<"-----TEST pecatiDemonstratoriKurs-----"<<endl;
  362. int k, opt;
  363. cin>>k;
  364. Student **studenti=new Student*[k];
  365. for (int j=0;j<k;j++){
  366.    cin>>opt; //1 Student 2 Demonstrator
  367.    cin>>indeks>>brojOcenki;
  368.    for (int i=0;i<brojOcenki;i++)
  369.       {
  370.          cin>>ocenka;
  371.          ocenki[i]=ocenka;
  372.       }
  373.    if (opt==1){
  374.         studenti[j]=new Student(indeks,ocenki,brojOcenki);
  375.    }else{
  376.    cin>>imeIPrezime>>brojKursevi;
  377.     for (int i=0;i<brojKursevi;i++)
  378.       {
  379.          cin>>ime>>krediti;
  380.          kursevi[i]=Kurs(ime,krediti);
  381.       }
  382.       cin>>brojCasovi;
  383.       studenti[j]=new Demonstrator(indeks,ocenki,brojOcenki,imeIPrezime,kursevi,brojKursevi,brojCasovi);
  384.    }
  385. }
  386. char kurs[20];
  387. cin>>kurs;
  388. cout<<"Demonstratori na "<<kurs<<" se:"<<endl;
  389. pecatiDemonstratoriKurs (kurs,studenti,k);
  390. for (int j=0;j<k;j++) delete studenti[j];
  391. delete [] studenti;
  392.  
  393. }
  394.  
  395.  
  396. return 0;
  397. }
Add Comment
Please, Sign In to add comment