Advertisement
jordanov

12)Задача 1

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