Advertisement
Guest User

For Crystal meto <3

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