Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- *** TEKSTOT ***
- Направи класа за Книга за која ќе се чуваат следните податоци: име (динамички алоцирана променлива), код, цена, курс на евро кое може да се менува во текот на програмата i ke bide isto za site knigi i pocetna vrednost 61.5 година на издавање и автор (динамички алоцирана променлива). За секоја книга преоптовари ги следните оператори:
- - <<
- - >>
- - < sporeduva dve knigi spored godinata na izdavanje
- - == споредување на две книги според кодот
- - += додади години на годината на издавање
- - =
- - cenaVoEvra()
- Направи класа Библиотека во која ќе се чува името на библиотеката, капацитет на книги во библиотеката, динамички алоцирана низа од Книги и бројот на книги во библиотеката. За класата преоптовари ги следните оператори:
- - += додавање книга во библиотеката
- - -= бришење книга од библиотеката
- - postariKnigi(int godina) печати ги сите книги постари од таа година
- - kolkuKnigiOdAvtor(char *nekojAvtor) кој е авторот
- - pecatiSiteKnigi()
- - vkupnaCenaVoEvra()
- - daliSiteKnigiPosle1950()
- - prosecnaCenaNaKniga()
- #include<iostream>
- using namespace std;
- class MaxCapacity{
- private:
- int kapacitet;
- public:
- MaxCapacity(){}
- MaxCapacity(int x){
- kapacitet=x;
- }
- void print(){
- cout<<"Maksimalniot kapacitet e "<<kapacitet<<endl;
- }
- };
- class SameBookException{
- private:
- char error[25];
- public:
- SameBookException(){}
- SameBookException(char error[]){
- strcpy(this->error,error);
- }
- void print(){
- cout<<error<<endl;
- }
- };
- class Kniga{
- private:
- char *ime;
- int kod;
- float cena;
- static float evro;
- int godina;
- char *avtor;
- public:
- Kniga(){
- // delete []ime;
- // delete []avtor;
- this->ime=new char[0];
- this->avtor=new char[0];
- }
- // constructor so 5 parametri
- Kniga(char *ime,int kod,float cena,int godina,char *avtor){
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->avtor=new char[strlen(avtor)+1];
- strcpy(this->avtor,avtor);
- this->kod=kod;
- this->cena=cena;
- this->godina=godina;
- }
- // constructor so 3 parametri
- Kniga(char *ime,int kod,float cena){
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->kod=kod;
- this->cena=cena;
- // delete []avtor
- // dinamicki resetirame, godina moze i ne mora
- this->avtor=new char[0];
- godina=0;
- }
- // copy constructor
- Kniga(const Kniga &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- }
- char* getAvtor(){
- return avtor;
- }
- // operator =
- Kniga &operator=(Kniga &novaKniga){
- // sporeduvame dvata objekti spored aresata
- if(this != &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- }
- return *this;
- }
- // setAvtor
- void setAvtor(char *novAvtor){
- avtor=new char[strlen(novAvtor)+1];
- strcpy(avtor,novAvtor);
- }
- void setGodina(int novaGodina){
- godina=novaGodina;
- }
- // output operator
- friend ostream &operator<<(ostream &output,Kniga &objekt){
- output<<"Kniga: "<<objekt.ime<<" "<<objekt.kod<<" "<<objekt.cena<<" "<<objekt.godina<<" "<<objekt.avtor<<endl;
- return output;
- }
- // input operator
- friend istream &operator>>(istream &i, Kniga &objekt){
- i>>objekt.ime>>objekt.kod>>objekt.cena>>objekt.godina>>objekt.avtor;
- return i;
- }
- bool operator<(Kniga &posleOperator){
- if(this->godina<posleOperator.godina){
- return true;
- }else{
- return false;
- }
- //return this->godina<posleOperator.godina;
- }
- bool operator==(Kniga &drugaKniga){
- // 2 nacini
- /*
- if(this->kod==drugaKniga.kod){
- return true;
- }else{
- return false;
- }
- */
- return this->kod==drugaKniga.kod;
- }
- void print(){
- cout<<"Kniga: "<<ime<<" "<<kod<<" "<<cena<<" "<<godina<<" "<<avtor<<endl;
- }
- float cenaVoEvra(){
- return cena/evro;
- }
- Kniga &operator+=(int x){
- godina+=x;
- return *this;
- }
- static void setEvro(float novKurs){
- evro = novKurs;
- }
- int getGodina(){
- return godina;
- }
- ~Kniga(){
- delete []ime;
- delete []avtor;
- }
- };
- float Kniga::evro=61.5;
- class Biblioteka{
- private:
- char ime[25];
- int kapacitet;
- Kniga *niza;
- int brojKnigi;
- public:
- Biblioteka(){
- niza=new Kniga[0];
- brojKnigi=0;
- }
- Biblioteka(char ime[],int kapacitet){
- niza=new Kniga[0];
- brojKnigi=0;
- strcpy(this->ime,ime);
- this->kapacitet=kapacitet;
- }
- void print(){
- cout<<"Biblioteka: "<<ime<<" "<<kapacitet<<endl;
- cout<<"Knigi vo bibliotekata:"<<endl;
- for(int i=0;i<brojKnigi;i++){
- cout<<niza[i];
- }
- }
- Biblioteka &operator+=(Kniga &novaKniga){
- if(brojKnigi==kapacitet){
- throw MaxCapacity(kapacitet);
- }
- int flag=0;
- for(int i=0;i<brojKnigi;i++){
- if(niza[i]==novaKniga){
- flag=1;
- throw SameBookException("Knigata veke ja imame vo nizata");
- break;
- }
- }
- if(flag==0){
- // si gi zacuvuvame site dosegashni knigi
- Kniga *tempNiza=new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- tempNiza[i]=niza[i];
- }
- // prosiruvame nizata za +1 mesto
- niza = new Kniga[brojKnigi+1];
- // si gi vrakjame site knigi nazad vo nizata
- for(int i=0;i<brojKnigi;i++){
- niza[i]=tempNiza[i];
- }
- // ne ni treba veke tempNiza
- delete []tempNiza;
- // na posledno mesto dodavame novata kniga
- niza[brojKnigi]=novaKniga;
- // pokacuvame vkupniot broj na knigi vo nizata za +1
- brojKnigi++;
- }
- return *this;
- }
- Biblioteka &operator-=(Kniga &novaKniga){
- int flag=0;
- for(int i=0;i<brojKnigi;i++){
- if(niza[i]==novaKniga){
- flag=1;
- break;
- }
- }
- if(flag==1){
- int brojac=0;
- Kniga *tempNiza=new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- if(niza[i]==novaKniga){
- // go ripnuvame toj objekt t.e. ne go dodavame vo tempNiza
- }else{
- tempNiza[brojac]=niza[i];
- brojac++;
- }
- }
- niza=new Kniga[brojKnigi-1];
- brojKnigi--;
- for(int i=0;i<brojKnigi;i++){
- niza[i]=tempNiza[i];
- }
- delete []tempNiza;
- }
- return *this;
- }
- void postariKnigi(int nekojaGodina){
- cout<<"Knigi postari od "<<nekojaGodina<<" se:"<<endl;
- for(int i=0;i<brojKnigi;i++){
- if(niza[i].getGodina()<nekojaGodina){
- cout<<niza[i];
- }
- }
- }
- int kolkuKnigiOdAvtor(char *nekojAvtor){
- int brojac=0;
- for(int i=0;i<brojKnigi;i++){
- if(strcmp(niza[i].getAvtor(),nekojAvtor)==0){
- brojac++;
- }
- }
- return brojac;
- }
- float vkupnaCenaVoEvra(){
- float suma=0;
- for(int i=0;i<brojKnigi;i++){
- suma+=niza[i].cenaVoEvra();
- }
- return suma;
- }
- void daliSiteKnigiPosle(int nekojaGodina){
- bool flag=true;
- for(int i=0;i<brojKnigi;i++){
- if(niza[i].getGodina()<=nekojaGodina){
- flag=false;
- break;
- }
- }
- if(flag){
- cout<<"Site knigi se postari od "<<nekojaGodina<<endl;
- }else{
- cout<<"Ne se site knigi postari od "<<nekojaGodina<<endl;
- }
- }
- float prosecnaCena(){
- float suma=0;
- for(int i=0;i<brojKnigi;i++){
- suma+=niza[i].cenaVoEvra();
- }
- return suma/brojKnigi;
- }
- ~Biblioteka(){
- delete []niza;
- }
- };
- int main(){
- cout<<"Testing parameter constructor"<<endl;
- Kniga lotr("The lord of the rings", 111222, 1000, 1955, "R.R. Tolkien");
- lotr.print();
- Kniga hp("Harry Potter", 222333, 1500);
- //hp.print();
- hp.setGodina(1991);
- hp.setAvtor("J.K. Rowling");
- hp.print();
- cout<<"Testing copy constructor"<<endl;
- Kniga hp2(hp);
- hp2.print();
- cout<<"Testing operator="<<endl;
- Kniga hp3;
- hp3=hp;
- hp3.print();
- cout<<"Testing operator <<"<<endl;
- cout<<hp3;
- cout<<"Testing operator >>"<<endl;
- //Kniga got;
- //cin>>got;
- Kniga got("GoT",333444,1750,1993,"R.R.Martin");
- cout<<got;
- cout<<"Testing operator <"<<endl;
- if(hp<got){
- cout<<"HP<GOT"<<endl;
- }else{
- cout<<"HP>GOT"<<endl;
- }
- cout<<"Testing operator =="<<endl;
- if(hp==got){
- cout<<"HP==GOT"<<endl;
- }else{
- cout<<"HP!=GOT"<<endl;
- }
- cout<<"Testing operator +="<<endl;
- cout<<hp;
- hp+=3;
- cout<<hp;
- cout<<"Testing static"<<endl;
- cout<<hp.cenaVoEvra()<<endl;
- Kniga::setEvro(62);
- cout<<hp.cenaVoEvra()<<endl;
- Biblioteka bm("Brakja Miladinovci", 4);
- bm.print();
- cout<<"Testirame += operator"<<endl;
- try{
- bm+=hp;
- bm+=got;
- bm+=lotr;
- bm+=lotr;
- }catch(SameBookException &objekt){
- objekt.print();
- }catch(MaxCapacity &objekt){
- objekt.print();
- }
- bm.print();
- cout<<"Testirame -= operator"<<endl;
- bm-=hp;
- bm.print();
- bm.postariKnigi(1950);
- cout<<"R.R.Martin e avtor na "<<bm.kolkuKnigiOdAvtor("R.R.Martin")<<" knigi"<<endl;
- cout<<"Cenata vo evra za site knigi e "<<bm.vkupnaCenaVoEvra()<<endl;
- bm.daliSiteKnigiPosle(1950);
- cout<<"Prosecna cena na kniga e "<<bm.prosecnaCena()<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement