Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Book { //Издавачката куќа FINKI-Education издава онлајн и печатени книги.
- private://За секоја книга се чуваат податоци за
- char isbn[50];//ISBN бројот (низа од најмногу 20 знаци),
- char naslov[50];//насловот (низа од најмногу 50 знаци),
- char avtor[30];//авторот (низа од најмногу 30 знаци) и
- double osnovna;//основната цена изразена во $ (реален број).
- public://Класата за опишување на книгите е апстрактна (5 поени).
- Book(char * isbn = "", char * naslov = "", char * avtor = "", double osnovna = 0.0) {
- strcpy(this->isbn, isbn);
- strcpy(this->naslov, naslov);
- strcpy(this->avtor, avtor);
- this->osnovna = osnovna;
- }
- Book(const Book ©) {
- strcpy(this->isbn, copy.isbn);
- strcpy(this->naslov, copy.naslov);
- strcpy(this->avtor, copy.avtor);
- this->osnovna = copy.osnovna;
- }
- Book &operator=(const Book ©) {
- if(this!=©) {
- strcpy(this->isbn, copy.isbn);
- strcpy(this->naslov, copy.naslov);
- strcpy(this->avtor, copy.avtor);
- this->osnovna = copy.osnovna;
- }
- return *this;
- }
- virtual double bookPrice() { //Метод bookPrice, за пресметување на продажната цена на книгата на следниот начин:
- return this->osnovna;
- }
- void setISBN(char * isbn) {
- strcpy(this->isbn, isbn);
- }
- bool operator>(Book &compare) {// Преоптоварен оператор > за споредба на две книги од каков било вид
- return this->bookPrice() > compare.bookPrice();//според нивната цена. (5 поени)
- }
- friend ostream &operator<<(ostream &o, Book &print) {// Преоптоварен оператор << за печатење на податоците
- o<<print.isbn<<": "; //за книгите во формат: (5 поени)
- o<<print.naslov<<", "<<print.avtor<<" "<<print.bookPrice();//[ISBN]: [Наслов], [Автор] [Продажна цена]
- o<<endl;
- return o;
- }
- };
- class OnlineBook : public Book { //За секоја онлајн книга
- private://дополнително се чуваат податоци за
- char * url;//url од каде може да се симне (динамички резервирана низа од знаци) и
- int golemina; //големината изразена во MB (цел број).
- public:
- OnlineBook(char * isbn = "", char * naslov = "", char * avtor = "", double osnovna = 0.0, char * url = "", int golemina = 0) : Book(isbn, naslov, avtor, osnovna) {
- this->golemina = golemina;
- this->url = new char[strlen(url)+1];
- strcpy(this->url, url);
- }
- OnlineBook(const OnlineBook ©) : Book(copy) {
- this->golemina = copy.golemina;
- this->url = new char[strlen(copy.url)+1];
- strcpy(this->url, copy.url);
- }
- double bookPrice() { //За онлајн книга - цената се зголемува за 20% од основната цена
- double tmp = Book::bookPrice();
- if(this->golemina>20)//ако книгата е поголема од 20MB
- tmp = tmp * 1.2;
- return tmp;
- }
- };
- class PrintBook : public Book { //За секоја печатена книга
- private://дополнително се чуваат податоци за
- double masa;//масата изразена во килограми (реален број) и
- bool zaliha;//дали ја има на залиха (логичка променлива). (5 поени)
- public:
- PrintBook(char * isbn = "", char * naslov = "", char * avtor = "", double osnovna = 0.0, double masa = 0.0, bool zaliha = false) : Book(isbn, naslov, avtor, osnovna) {
- this->masa = masa;
- this->zaliha = zaliha;
- }
- PrintBook(const PrintBook ©) : Book(copy) {
- this->masa = copy.masa;
- this->zaliha = copy.zaliha;
- }
- double bookPrice() {
- double tmp = Book::bookPrice();//За печатена книга - цената се зголемува за 15%
- if(this->masa > 0.7) //основната цена ако масата на книгата е поголема од 0.7kg
- tmp = tmp * 1.15;
- return tmp;
- }
- };
- void mostExpensiveBook (Book** books, int n) { //Да се имплементира функција mostExpensiveBook со потпис:
- int indeks=0; //void mostExpensiveBook (Book** books, int n)
- int cfob = 0, cfpb = 0;
- double max = books[0]->bookPrice(); //во која се печати вкупниот број на онлајн,
- for(int i=0; i<n; i++) {// односно, печатени книги во проследената низа посебно.
- OnlineBook * p1 = dynamic_cast<OnlineBook *>(books[i]);
- if(p1) cfob++;
- else cfpb++;
- }
- cout<<"FINKI-Education"<<endl;
- cout<<"Total number of online books: "<<cfob<<endl;
- cout<<"Total number of print books: "<<cfpb<<endl;
- for(int i=0; i<n; i++)
- if(books[i]->bookPrice() > max) {
- max = books[i]->bookPrice();
- indeks = i;
- }
- cout<<"The most expensive book is: "<<endl;
- cout<<*books[indeks];//Потоа се наоѓа и печати најскапата книга. (5 поени)
- }
- int main() {
- char isbn[20], title[50], author[30], url[100];
- int size, tip;
- float price, weight;
- bool inStock;
- Book **books;
- int n;
- int testCase;
- cin >> testCase;
- if (testCase == 1) {
- cout << "====== Testing OnlineBook class ======" << endl;
- cin >> n;
- books = new Book *[n];
- for (int i = 0; i < n; i++) {
- cin >> isbn;
- cin.get();
- cin.getline(title, 50);
- cin.getline(author, 30);
- cin >> price;
- cin >> url;
- cin >> size;
- cout << "CONSTRUCTOR" << endl;
- books[i] = new OnlineBook(isbn, title, author, price, url, size);
- cout << "OPERATOR <<" << endl;
- cout << *books[i];
- }
- cout << "OPERATOR >" << endl;
- cout << "Rezultat od sporedbata e: " << endl;
- if (*books[0] > *books[1])
- cout << *books[0];
- else
- cout << *books[1];
- }
- if (testCase == 2) {
- cout << "====== Testing OnlineBook CONSTRUCTORS ======" << endl;
- cin >> isbn;
- cin.get();
- cin.getline(title, 50);
- cin.getline(author, 30);
- cin >> price;
- cin >> url;
- cin >> size;
- cout << "CONSTRUCTOR" << endl;
- OnlineBook ob1(isbn, title, author, price, url, size);
- cout << ob1 << endl;
- cout << "COPY CONSTRUCTOR" << endl;
- OnlineBook ob2(ob1);
- cin >> isbn;
- ob2.setISBN(isbn);
- cout << ob1 << endl;
- cout << ob2 << endl;
- cout << "OPERATOR =" << endl;
- ob1 = ob2;
- cin >> isbn;
- ob2.setISBN(isbn);
- cout << ob1 << endl;
- cout << ob2 << endl;
- }
- if (testCase == 3) {
- cout << "====== Testing PrintBook class ======" << endl;
- cin >> n;
- books = new Book *[n];
- for (int i = 0; i < n; i++) {
- cin >> isbn;
- cin.get();
- cin.getline(title, 50);
- cin.getline(author, 30);
- cin >> price;
- cin >> weight;
- cin >> inStock;
- cout << "CONSTRUCTOR" << endl;
- books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
- cout << "OPERATOR <<" << endl;
- cout << *books[i];
- }
- cout << "OPERATOR >" << endl;
- cout << "Rezultat od sporedbata e: " << endl;
- if (*books[0] > *books[1])
- cout << *books[0];
- else
- cout << *books[1];
- }
- if (testCase == 4) {
- cout << "====== Testing method mostExpensiveBook() ======" << endl;
- cin >> n;
- books = new Book *[n];
- for (int i = 0; i<n; i++) {
- cin >> tip >> isbn;
- cin.get();
- cin.getline(title, 50);
- cin.getline(author, 30);
- cin >> price;
- if (tip == 1) {
- cin >> url;
- cin >> size;
- books[i] = new OnlineBook(isbn, title, author, price, url, size);
- } else {
- cin >> weight;
- cin >> inStock;
- books[i] = new PrintBook(isbn, title, author, price, weight, inStock);
- }
- }
- mostExpensiveBook(books, n);
- }
- for (int i = 0; i<n; i++) delete books[i];
- delete[] books;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement