Advertisement
Koki99

ФИНКИ - Издавачка куќа - Втор колоквиум - Пример

Jun 3rd, 2022
720
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 8.89 KB | None | 0 0
  1. Издавачката куќа FINKI-Education издава онлајн и печатени книги. За секоја книга се чуваат податоци за ISBN бројот (низа од најмногу 20 знаци), насловот (низа од најмногу 50 знаци), авторот (низа од најмногу 30 знаци) и основната цена изразена во $ (реален број). Класата за опишување на книгите е апстрактна (5 поени).
  2.  
  3. За секоја онлајн книга дополнително се чуваат податоци за url од каде може да се симне (динамички резервирана низа од знаци) и големината изразена во MB (цел број). За секоја печатена книга дополнително се чуваат податоци за масата изразена во килограми (реален број) и дали ја има на залиха (логичка променлива). (5 поени)
  4.  
  5. За секој објект од двете изведени класи треба да бидат на располагање следниве методи:
  6.  
  7. Метод bookPrice, за пресметување на продажната цена на книгата на следниот начин: (10 поени)
  8.  
  9. За онлајн книга - цената се зголемува за 20% од основната цена ако книгата е поголема од 20MB
  10.  
  11. За печатена книга - цената се зголемува за 15% од основната цена ако масата на книгата е поголема од 0.7kg
  12.  
  13. Преоптоварен оператор > за споредба на две книги од каков било вид според нивната цена. (5 поени)
  14.  
  15. Преоптоварен оператор << за печатење на податоците за книгите во формат: (5 поени)
  16. Да се имплементира функција mostExpensiveBook со потпис:
  17.  
  18. void mostExpensiveBook (Book** books, int n)
  19.  
  20. во која се печати вкупниот број на онлајн, односно, печатени книги во проследената низа посебно. (5 поени) Потоа се наоѓа и печати најскапата книга. (5 поени)
  21.  
  22. Да се обезбедат сите потребни функции за правилно функционирање на програмата. (5 поени)
  23. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  24. #include <iostream>
  25. #include<cstring>
  26. using namespace std;
  27.  
  28. class Book
  29. {
  30. protected:
  31.     char ISBN[20];
  32.     char naslov[50];
  33.     char avtor[30];
  34.     int cena;
  35. public:
  36.     Book(char *ISBN, char *naslov, char *avtor, int cena)
  37.     {
  38.         strcpy(this->ISBN,ISBN);
  39.         strcpy(this->naslov,naslov);
  40.         strcpy(this->avtor,avtor);
  41.         this->cena=cena;
  42.     }
  43.     Book(){}
  44.  
  45.     void setISBN(char *i){ strcpy(ISBN,i); }
  46.     virtual float bookPrice()=0;
  47.  
  48.     char *getISBN(){ return ISBN; }
  49.     char *getNaslov(){ return naslov; }
  50.     char *getAvtor(){ return avtor; }
  51.  
  52.     virtual ~Book(){}
  53. };
  54.  
  55. class OnlineBook:public Book
  56. {
  57. private:
  58.     char *url;
  59.     int mb;
  60. public:
  61.     OnlineBook(char *ISBN, char *n, char *a, int c, char *u, int mb):Book(ISBN,n,a,c)
  62.     {
  63.         url = new char[strlen(u)+1];
  64.         strcpy(url,u);
  65.         this->mb=mb;
  66.     }
  67.     OnlineBook(){}
  68.  
  69.     OnlineBook(const OnlineBook &o)
  70.     {
  71.         strcpy(this->ISBN,o.ISBN);
  72.         strcpy(this->naslov,o.naslov);
  73.         strcpy(this->avtor,o.avtor);
  74.         this->cena=o.cena;
  75.  
  76.         this->url = new char[strlen(o.url)+1];
  77.         strcpy(url,o.url);
  78.         this->mb=o.mb;
  79.     }
  80.  
  81.     OnlineBook& operator=(const OnlineBook &o)
  82.     {
  83.         if(&o == this) return *this;
  84.  
  85.         strcpy(this->ISBN,o.ISBN);
  86.         strcpy(this->naslov,o.naslov);
  87.         strcpy(this->avtor,o.avtor);
  88.         this->cena=o.cena;
  89.  
  90.         delete [] url;
  91.         this->url = new char[strlen(o.url)+1];
  92.         strcpy(url, o.url);
  93.  
  94.         mb = o.mb;
  95.         return *this;
  96.     }
  97.  
  98.     char *getUrl(){ return url; }
  99.     int getMb(){ return mb; }
  100.  
  101.     float bookPrice()
  102.     {
  103.         if(mb>20)
  104.             return cena*1.2;
  105.         return cena;
  106.     }
  107.  
  108.     virtual ~OnlineBook(){ delete [] url; }
  109. };
  110.  
  111. class PrintBook:public Book
  112. {
  113. private:
  114.     float kg;
  115.     bool daliIma;
  116. public:
  117.     PrintBook(char *ISBN, char *n, char *a, int c, float kg, bool d):Book(ISBN,n,a,c)
  118.     {
  119.         this->kg=kg;
  120.         daliIma=d;
  121.     }
  122.     PrintBook(){}
  123.  
  124.     PrintBook(const PrintBook &p)
  125.     {
  126.         kg=p.kg;
  127.         daliIma=p.daliIma;
  128.     }
  129.  
  130.     PrintBook& operator=(const PrintBook &p)
  131.     {
  132.         if(&p == this)  return *this;
  133.         kg=p.kg;
  134.         daliIma=p.daliIma;
  135.         return *this;
  136.     }
  137.  
  138.     float bookPrice()
  139.     {
  140.         if(kg>0.7)
  141.             return cena*1.15;
  142.         return cena;
  143.     }
  144.  
  145.     virtual ~PrintBook(){}
  146. };
  147.  
  148. bool operator>(Book &a, Book &b)
  149. {
  150.     Book *t1=&a;
  151.     Book *t2=&b;
  152.     return t1->bookPrice() > t2->bookPrice();
  153. }
  154.  
  155. ostream& operator<<(ostream &out, Book &t)
  156. {
  157.     Book *tmp=&t;
  158.     out<<tmp->getISBN()<<": "<<tmp->getNaslov()<<", "<<tmp->getAvtor()<<" "<<tmp->bookPrice()<<endl;
  159.     return out;
  160. }
  161.  
  162. void mostExpensiveBook(Book **books, int n)
  163. {
  164.     int i,ii,br=books[0]->bookPrice();
  165.     int online=0,pecateni=0;
  166.     for(i=0;i<n;i++)
  167.     {
  168.         OnlineBook *o = dynamic_cast<OnlineBook *>(books[i]);
  169.  
  170.         if(o!=0)
  171.             online++;
  172.         else
  173.             pecateni++
  174.  
  175.         if(books[i]->bookPrice() > br)
  176.         {
  177.             br=books[i]->bookPrice();
  178.             ii=i;
  179.         }
  180.     }
  181.     cout<<"FINKI-Education"<<endl;
  182.     cout<<"Total number of online books: "<<online<<endl;
  183.     cout<<"Total number of print books: "<<pecateni<<endl;
  184.     cout<<"The most expensive book is: "<<endl;
  185.     cout<<*books[ii];
  186. }
  187.  
  188. int main(){
  189.  
  190.     char isbn[20], title[50], author[30], url[100];
  191.     int size, tip;
  192.     float price, weight;
  193.     bool inStock;
  194.     Book  **books;
  195.     int n;
  196.  
  197.     int testCase;
  198.     cin >> testCase;
  199.  
  200.     if (testCase == 1){
  201.         cout << "====== Testing OnlineBook class ======" << endl;
  202.         cin >> n;
  203.         books = new Book *[n];
  204.  
  205.         for (int i = 0; i < n; i++){
  206.             cin >> isbn;
  207.             cin.get();
  208.             cin.getline(title, 50);
  209.             cin.getline(author, 30);
  210.             cin >> price;
  211.             cin >> url;
  212.             cin >> size;
  213.             cout << "CONSTRUCTOR" << endl;
  214.             books[i] = new OnlineBook(isbn, title, author, price, url, size);
  215.             cout << "OPERATOR <<" << endl;
  216.             cout << *books[i];
  217.         }
  218.         cout << "OPERATOR >" << endl;
  219.         cout << "Rezultat od sporedbata e: " << endl;
  220.         if (*books[0] > *books[1])
  221.             cout << *books[0];
  222.         else
  223.             cout << *books[1];
  224.     }
  225.     if (testCase == 2){
  226.         cout << "====== Testing OnlineBook CONSTRUCTORS ======" << endl;
  227.         cin >> isbn;
  228.         cin.get();
  229.         cin.getline(title, 50);
  230.         cin.getline(author, 30);
  231.         cin >> price;
  232.         cin >> url;
  233.         cin >> size;
  234.         cout << "CONSTRUCTOR" << endl;
  235.         OnlineBook ob1(isbn, title, author, price, url, size);
  236.         cout << ob1 << endl;
  237.         cout << "COPY CONSTRUCTOR" << endl;
  238.         OnlineBook ob2(ob1);
  239.         cin >> isbn;
  240.         ob2.setISBN(isbn);
  241.         cout << ob1 << endl;
  242.         cout << ob2 << endl;
  243.         cout << "OPERATOR =" << endl;
  244.         ob1 = ob2;
  245.         cin >> isbn;
  246.         ob2.setISBN(isbn);
  247.         cout << ob1 << endl;
  248.         cout << ob2 << endl;
  249.     }
  250.     if (testCase == 3){
  251.         cout << "====== Testing PrintBook class ======" << endl;
  252.         cin >> n;
  253.         books = new Book *[n];
  254.  
  255.         for (int i = 0; i < n; i++){
  256.             cin >> isbn;
  257.             cin.get();
  258.             cin.getline(title, 50);
  259.             cin.getline(author, 30);
  260.             cin >> price;
  261.             cin >> weight;
  262.             cin >> inStock;
  263.             cout << "CONSTRUCTOR" << endl;
  264.             books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
  265.             cout << "OPERATOR <<" << endl;
  266.             cout << *books[i];
  267.         }
  268.         cout << "OPERATOR >" << endl;
  269.         cout << "Rezultat od sporedbata e: " << endl;
  270.         if (*books[0] > *books[1])
  271.             cout << *books[0];
  272.         else
  273.             cout << *books[1];
  274.     }
  275.     if (testCase == 4){
  276.         cout << "====== Testing method mostExpensiveBook() ======" << endl;
  277.         cin >> n;
  278.         books = new Book *[n];
  279.  
  280.         for (int i = 0; i<n; i++){
  281.  
  282.             cin >> tip >> isbn;
  283.             cin.get();
  284.             cin.getline(title, 50);
  285.             cin.getline(author, 30);
  286.             cin >> price;
  287.             if (tip == 1) {
  288.  
  289.                 cin >> url;
  290.                 cin >> size;
  291.  
  292.                 books[i] = new OnlineBook(isbn, title, author, price, url, size);
  293.  
  294.             }
  295.             else {
  296.                 cin >> weight;
  297.                 cin >> inStock;
  298.  
  299.                 books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
  300.             }
  301.         }
  302.  
  303.         mostExpensiveBook(books, n);
  304.     }
  305.  
  306.     for (int i = 0; i<n; i++) delete books[i];
  307.         delete[] books;
  308.     return 0;
  309. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement