Advertisement
196040

OOP ispitni zadaci kaj S.A. Klub na popusti

Jun 12th, 2020
764
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.02 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. using namespace std;
  4. enum tipC {basic=0, premium=1};
  5. class NotValidYear {
  6. private:
  7.     char msg[100];
  8. public:
  9.     NotValidYear(char * msg = "") {
  10.         strcpy(this->msg, msg);
  11.     }
  12.     void showMessage() {
  13.         cout<<msg;
  14.     }
  15. };
  16. class Chlen { //Да се креира класа за опишување на членови на еден клуб за попусти Chlen.
  17. private:// За секој член се чуваат податоци за
  18.     char ime[100]; //името (низа од 100 знаци),
  19.     tipC tip; //тип на член (basic или premium ),
  20.     static int osnoven;//основен попуст (цел број изразен во проценти),
  21.     static int dopolnitelen; //дополнителен попуст (цел број изразен во проценти) и
  22.     int godina;//година на членарина (цел број). (5 поени)
  23. public:
  24.     Chlen() {
  25.         strcpy(this->ime, "");
  26.         this->tip = (tipC)0;
  27.         this->godina = 0;
  28.     }
  29.     Chlen(char * ime, tipC tip, int godina) {
  30.         strcpy(this->ime, ime);
  31.         this->tip = tip;
  32.         this->osnoven = osnoven;
  33.         this->dopolnitelen = dopolnitelen;
  34.         this->godina = godina;
  35.     }
  36.     Chlen(const Chlen &copy) {
  37.         strcpy(this->ime, copy.ime);
  38.         this->tip = copy.tip;
  39.         this->osnoven = copy.osnoven;
  40.         this->dopolnitelen = copy.dopolnitelen;
  41.         this->godina = copy.godina;
  42.     }
  43.     int getgodina() {
  44.         return godina;
  45.     }
  46.     int calcpopust() {
  47.         if(tip == basic) //Основниот попуст е ист за сите членови и изнесува 10%.
  48.             return osnoven;//Дополнителниот попуст е фиксен и важи само за premium
  49.         if(tip == premium)//членовите и изнесува 15% (5 поени).
  50.             return osnoven + dopolnitelen; // каде попустот се добива како основен попуст доколу членот е basic или како основен +
  51.     } //дополнителен попуст ако членот е premium. (5 поени)
  52.     friend ostream &operator<<(ostream &o, Chlen &print) {
  53.         o<<print.ime; //За оваа класа да се имплементира оператор << за печатење на член во формат:
  54.         o<<endl; //[ime_na_chlen]
  55.         if(print.tip == basic)
  56.             o<<"basic";
  57.         else o<<"premium"; //[tip_na_chlen]
  58.         o<<" "<<print.godina;//[godina_na_chlenarina]
  59.         o<<" "<<print.calcpopust()<<endl; //[popust_koj_moze_da_go_koristi]
  60.         return o;
  61.     }
  62.      static void setPopust1(int os) {//Оваа вредност може да се смени со одлука на клубот.
  63.         osnoven = os;
  64.     }
  65.      static void setPopust2(int dop) {
  66.         dopolnitelen = dop;
  67.     }
  68. };
  69. int Chlen::osnoven = 10;
  70. int Chlen::dopolnitelen = 15;
  71. class FINKI_club { //Да се креира класа FINKI-club
  72. private://во која се чува
  73.     int clenarina; //цената на основната членарина (цел број),
  74.     Chlen * niza; //низа од членови (динамички алоцирана низа)
  75.     int broj;//и број на членови.(5 поени) За класата да се обезбедат:
  76. public:
  77.     FINKI_club(int clenarina = 0) {
  78.         this->clenarina = clenarina;
  79.         this->niza = new Chlen[0];
  80.         this->broj = 0;
  81.     }
  82.     FINKI_club(const FINKI_club &copy) {
  83.         this->broj = copy.broj;
  84.         this->clenarina = copy.clenarina;
  85.         this->niza = new Chlen[copy.broj];
  86.         for(int i=0; i<copy.broj; i++)
  87.             this->niza[i] = copy.niza[i];
  88.     }
  89.     FINKI_club &operator-=(int yr) { //operator-= за бришење на членовите
  90.         if(yr < 0)//во ФИНКИ-клубот кои си ја немаат обновено членарината
  91.             throw NotValidYear("Vnesena e negativna vrednost za godinata!\n");//според тековната година која се предава како параметар.
  92.         else {
  93.             int count=0;//Не смее да се дозволи годината да биде негативен број.
  94.         for(int i=0; i<broj; i++) { // Ако се направи обид за бришење на член според невалидна
  95.             if(niza[i].getgodina() >= yr)// година, треба да се генерира исклучок NotValidYear.
  96.                count++;
  97.         }
  98.         Chlen * tmp = new Chlen[count];
  99.         count=0;
  100.         for(int i=0; i<broj; i++) {
  101.             if(niza[i].getgodina() >= yr)
  102.                 tmp[count++] = niza[i];
  103.         }
  104.         niza = tmp;
  105.         broj = count;
  106.         return *this;
  107.         }
  108.     }
  109.     void setChlenovi(Chlen * niza, int n) {
  110.         this->broj = n;
  111.         this->niza = new Chlen[broj];
  112.         for(int i=0; i<broj; i++)
  113.             this->niza[i] = niza[i];
  114.     }
  115.     friend ostream &operator<<(ostream &o, FINKI_club &print) {
  116.         for(int i=0; i<print.broj; i++) {
  117.           o<<print.niza[i];
  118.         }
  119.         return o;
  120.     } //operator << за печатење на сите членови на ФИНКИ-клубот. (5 поени)
  121.     void naplatiChlenarina() { //функција naplatiChlenarina во која се печати секој
  122.         double total=0;  
  123.         for(int i=0; i<broj; i++) {  //член колку треба да плати за членарина
  124.             total = clenarina - (clenarina * (niza[i].calcpopust() / 100.0));
  125.            cout<<niza[i]<<total<<endl;
  126.         } //и притоа при плаќање членарина важат соодветните попусти кои ги има членот на клубот
  127.     }
  128. };
  129. int main() {
  130.     int testCase;
  131.     cin >> testCase;
  132.  
  133.     char ime[100];
  134.     int tipChlen;
  135.     int popust;
  136.     int god;
  137.  
  138.  
  139.     if (testCase == 1) {
  140.         cout << "===== Testiranje na klasata Chlen ======" << endl;
  141.         cin.get();
  142.         cin.getline(ime,100);
  143.         cin >> tipChlen;
  144.         cin >> god;
  145.         cout << "===== CONSTRUCTOR ======" << endl;
  146.         Chlen c(ime, (tipC) tipChlen, god);
  147.         cout << c;
  148.  
  149.     }
  150.  
  151.     if (testCase == 2) {
  152.         cout << "===== Testiranje na static clenovi ======" << endl;
  153.         cin.get();
  154.         cin.getline(ime,100);
  155.         cin >> tipChlen;
  156.         cin >> god;
  157.         cout << "===== CONSTRUCTOR ======" << endl;
  158.         Chlen c(ime, (tipC) tipChlen, god);
  159.         cout << c;
  160.         c.setPopust1(5);
  161.         cout << c;
  162.     }
  163.     if (testCase == 3) {
  164.         cout << "===== Testiranje na klasata FINKI-club ======" << endl;
  165.         FINKI_club fc;
  166.         int n;
  167.         cin >> n;
  168.         Chlen chlen[100];
  169.         for(int i = 0; i < n; ++i) {
  170.             cin.get();
  171.             cin.getline(ime,100);
  172.             cin >> tipChlen;
  173.             cin >> god;
  174.             Chlen c(ime, (tipC) tipChlen, god);
  175.             chlen[i] = c;
  176.         }
  177.  
  178.         fc.setChlenovi(chlen, n);
  179.  
  180.         cout << fc <<endl;
  181.     }
  182.  
  183.     if (testCase == 4) {
  184.         cout << "===== Testiranje na operatorot -= ======" << endl;
  185.         FINKI_club fc;
  186.         int n;
  187.         cin >> n;
  188.         Chlen chlen[100];
  189.         for(int i = 0; i < n; ++i) {
  190.             cin.get();
  191.             cin.getline(ime,100);
  192.             cin >> tipChlen;
  193.             cin >> god;
  194.             Chlen c(ime, (tipC) tipChlen, god);
  195.             chlen[i] = c;
  196.         }
  197.  
  198.         fc.setChlenovi(chlen, n);
  199.         cout << "OPERATOR -=" << endl;
  200.         int godina;
  201.         cin >> godina;
  202.         fc-=godina;
  203.         cout << fc;
  204.     }
  205.     if (testCase == 5) {
  206.         cout << "===== Testiranje na operatorot -= (so iskluchok) ======" << endl;
  207.         FINKI_club fc;
  208.         int n;
  209.         cin >> n;
  210.         Chlen chlen[100];
  211.         for(int i = 0; i < n; ++i) {
  212.             cin.get();
  213.             cin.getline(ime,100);
  214.             cin >> tipChlen;
  215.             cin >> god;
  216.             Chlen c(ime, (tipC) tipChlen, god);
  217.             chlen[i] = c;
  218.         }
  219.         fc.setChlenovi(chlen, n);
  220.         cout << "OPERATOR -=" << endl;
  221.         int godina;
  222.         cin >> godina;
  223.         try {
  224.             fc-=godina;
  225.         } catch (NotValidYear &exc) {
  226.             exc.showMessage();
  227.         }
  228.         cout << fc;
  229.     }
  230.     if (testCase == 6) {
  231.         cout << "===== Testiranje na metodot naplatiChlenarina  ======" << endl << endl;
  232.         FINKI_club fc(1000);
  233.         int n;
  234.         cin >> n;
  235.         Chlen chlen[100];
  236.         for(int i = 0; i < n; ++i) {
  237.             cin.get();
  238.             cin.getline(ime,100);
  239.             cin >> tipChlen;
  240.             cin >> god;
  241.             Chlen c(ime, (tipC) tipChlen, god);
  242.             chlen[i] = c;
  243.         }
  244.  
  245.         fc.setChlenovi(chlen, n);
  246.  
  247.         cout << "Naplati chlenarina:" << endl;
  248.         fc.naplatiChlenarina();
  249.     }
  250.     return 0;
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement