Advertisement
brsjak

Code - Zadaca 1 - OOP

Jan 10th, 2017
1,758
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.65 KB | None | 0 0
  1. /*
  2. Задача 1 Problem 3 (2 / 7)
  3. Издавачката куќа FINKI-Education издава онлајн и печатени книги. За секоја книга се чуваат податоци за ISBN бројот (низа од најмногу 20 знаци), насловот (низа од најмногу 50 знаци), авторот (низа од најмногу 30 знаци) и основната цена изразена во $ (реален број). Класата за опишување на книгите е апстрактна (5 поени).
  4.  
  5. За секоја онлајн книга дополнително се чуваат податоци за url од каде може да се симне (динамички резервирана низа од знаци) и големината изразена во MB (цел број). За секоја печатена книга дополнително се чуваат податоци за масата изразена во килограми (реален број) и дали ја има на залиха (логичка променлива). (5 поени)
  6.  
  7. За секој објект од двете изведени класи треба да бидат на располагање следниве методи:
  8.  
  9. Метод bookPrice, за пресметување на продажната цена на книгата на следниот начин: (10 поени)
  10. За онлајн книга - цената се зголемува за 20% од основната цена ако книгата е поголема од 20MB
  11.  
  12. За печатена книга - цената се зголемува за 15% од основната цена ако масата на книгата е поголема од 0.7kg
  13.  
  14. Преоптоварен оператор > за споредба на две книги од каков било вид според нивната цена. (5 поени)
  15. Преоптоварен оператор << за печатење на податоците за книгите во формат: (5 поени)
  16.  
  17. [ISBN]: [Наслов], [Автор] [Продажна цена]
  18.  
  19. Да се имплементира функција mostExpensiveBook со потпис:
  20.  
  21. void mostExpensiveBook (Book** books, int n)
  22.  
  23. во која се печати вкупниот број на онлајн, односно, печатени книги во проследената низа посебно. (5 поени) Потоа се наоѓа и печати најскапата книга. (5 поени)
  24.  
  25. Да се обезбедат сите потребни функции за правилно функционирање на програмата. (5 поени)
  26. */
  27. #include<iostream>
  28. #include<cstring>
  29. using namespace std;
  30.  
  31. class Book {
  32.     protected:
  33.     char ISBN[20];
  34.     char naslov[50];
  35.     char avtor[30];
  36.     int cena;
  37.    
  38.     public:
  39.     Book (char * i, char * n, char * a, int c) {
  40.         strcpy(ISBN,i); strcpy(naslov,n); strcpy(avtor,a); cena=c;
  41.     }
  42.    
  43.     virtual double bookPrice () = 0;
  44.    
  45.     virtual ~Book () {}
  46.    
  47.     friend ostream &operator << (ostream &out, Book &b) {
  48.         out<<b.ISBN<<": "<<b.naslov<<", "<<b.avtor<<" "<<b.bookPrice()<<endl;
  49.         return out;
  50.     }
  51.    
  52.     bool operator > (const Book &b){
  53.         return cena > b.cena;
  54.     }
  55.    
  56.     void setISBN (const char * i) {strcpy(ISBN,i); }
  57. };
  58.  
  59. class OnlineBook : public Book {
  60.     private:
  61.     char * url;
  62.     int golemina;
  63.    
  64.     public:
  65.     OnlineBook (char * i, char * n, char * a, int c, char *u, int g) : Book(i,n,a,c) {
  66.         url = new char [strlen(u)+1];
  67.         strcpy(url,u); golemina=g;
  68.     }
  69.    
  70.    // ~OnlineBook () {delete [] url; }
  71.    
  72.     double bookPrice () {
  73.         if (golemina>20)
  74.             return 1.2*cena;
  75.         else return cena;
  76.     }    
  77. };
  78.  
  79. class PrintBook : public Book {
  80.     private:
  81.     double masa;
  82.     bool zaliha;
  83.    
  84.     public:
  85.     PrintBook (char * i, char * n, char * a, int c, double m, bool z) : Book (i,n,a,c) {
  86.         masa=m; zaliha=z;
  87.     }
  88.    
  89.     double bookPrice () {
  90.         if (masa>0.7)
  91.             return 1.15*cena;
  92.         else
  93.             return cena;
  94.     }
  95. };
  96.  
  97. void mostExpensiveBook (Book ** books, int n) { //broj na online, broj na pecateni, najskapa kniga
  98.     int online=0, pecateni=0;
  99.     int maxcena=0,maxi;
  100.    
  101.    
  102.    
  103.     for (int i=0;i<n;i++) {
  104.        Book * tmp = dynamic_cast < OnlineBook *>(books[i]);
  105.         if (tmp)
  106.             ++online;
  107.         else ++pecateni;
  108.        
  109.         if (books[i]->bookPrice() > maxcena){
  110.             maxi=i;
  111.             maxcena=books[i]->bookPrice();
  112.         }
  113.     }
  114.     cout<<"FINKI-Education"<<endl;
  115.     cout<<"Total number of online books: "<<online<<endl;
  116.     cout<<"Total number of print books: "<<pecateni<<endl;
  117.     cout<<"The most expensive book is: "<<endl;
  118.     cout<<*books[maxi];
  119.    
  120. }
  121.  
  122. int main(){
  123.  
  124.     char isbn[20], title[50], author[30], url[100];
  125.     int size, tip;
  126.     float price, weight;
  127.     bool inStock;
  128.     Book  **books;
  129.     int n;
  130.  
  131.     int testCase;
  132.     cin >> testCase;
  133.  
  134.     if (testCase == 1){
  135.         cout << "====== Testing OnlineBook class ======" << endl;
  136.         cin >> n;
  137.         books = new Book *[n];
  138.  
  139.         for (int i = 0; i < n; i++){
  140.             cin >> isbn;
  141.             cin.get();
  142.             cin.getline(title, 50);
  143.             cin.getline(author, 30);
  144.             cin >> price;
  145.             cin >> url;
  146.             cin >> size;
  147.             cout << "CONSTRUCTOR" << endl;
  148.             books[i] = new OnlineBook(isbn, title, author, price, url, size);
  149.             cout << "OPERATOR <<" << endl;
  150.             cout << *books[i];
  151.         }
  152.         cout << "OPERATOR >" << endl;
  153.         cout << "Rezultat od sporedbata e: " << endl;
  154.         if (*books[0] > *books[1])
  155.             cout << *books[0];
  156.         else
  157.             cout << *books[1];
  158.     }
  159.     if (testCase == 2){
  160.         cout << "====== Testing OnlineBook CONSTRUCTORS ======" << endl;
  161.         cin >> isbn;
  162.         cin.get();
  163.         cin.getline(title, 50);
  164.         cin.getline(author, 30);
  165.         cin >> price;
  166.         cin >> url;
  167.         cin >> size;
  168.         cout << "CONSTRUCTOR" << endl;
  169.         OnlineBook ob1(isbn, title, author, price, url, size);
  170.         cout << ob1 << endl;
  171.         cout << "COPY CONSTRUCTOR" << endl;
  172.         OnlineBook ob2(ob1);
  173.         cin >> isbn;
  174.         ob2.setISBN(isbn);
  175.         cout << ob1 << endl;
  176.         cout << ob2 << endl;
  177.         cout << "OPERATOR =" << endl;
  178.         ob1 = ob2;
  179.         cin >> isbn;
  180.         ob2.setISBN(isbn);
  181.         cout << ob1 << endl;
  182.         cout << ob2 << endl;
  183.     }
  184.     if (testCase == 3){
  185.         cout << "====== Testing PrintBook class ======" << endl;
  186.         cin >> n;
  187.         books = new Book *[n];
  188.  
  189.         for (int i = 0; i < n; i++){
  190.             cin >> isbn;
  191.             cin.get();
  192.             cin.getline(title, 50);
  193.             cin.getline(author, 30);
  194.             cin >> price;
  195.             cin >> weight;
  196.             cin >> inStock;
  197.             cout << "CONSTRUCTOR" << endl;
  198.             books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
  199.             cout << "OPERATOR <<" << endl;
  200.             cout << *books[i];
  201.         }
  202.         cout << "OPERATOR >" << endl;
  203.         cout << "Rezultat od sporedbata e: " << endl;
  204.         if (*books[0] > *books[1])
  205.             cout << *books[0];
  206.         else
  207.             cout << *books[1];
  208.     }
  209.     if (testCase == 4){
  210.         cout << "====== Testing method mostExpensiveBook() ======" << endl;
  211.         cin >> n;
  212.         books = new Book *[n];
  213.  
  214.         for (int i = 0; i<n; i++){
  215.  
  216.             cin >> tip >> isbn;
  217.             cin.get();
  218.             cin.getline(title, 50);
  219.             cin.getline(author, 30);
  220.             cin >> price;
  221.             if (tip == 1) {
  222.  
  223.                 cin >> url;
  224.                 cin >> size;
  225.  
  226.                 books[i] = new OnlineBook(isbn, title, author, price, url, size);
  227.  
  228.             }
  229.             else {
  230.                 cin >> weight;
  231.                 cin >> inStock;
  232.  
  233.                 books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
  234.             }
  235.         }
  236.  
  237.         mostExpensiveBook(books, n);
  238.     }
  239.  
  240.     for (int i = 0; i<n; i++) delete books[i];
  241.         delete[] books;
  242.     return 0;
  243. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement