Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- #include<iostream>
- using namespace std;
- class MaxCapacity{
- private:
- char error[25];
- public:
- MaxCapacity(){}
- MaxCapacity(char error[]){
- strcpy(this->error,error);
- }
- void print(){
- cout<<error<<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;
- static float evro;
- float cena;
- int godina;
- char *avtor;
- public:
- Kniga(){
- // delete []avtor;
- // delete []ime;
- this->ime=new char[0];
- this->avtor=new char[0];
- }
- // constructor so 5 promenlivi
- Kniga(char *ime,int kod,float cena,int godina,char *avtor){
- // delete []ime
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->kod=kod;
- this->cena=cena;
- this->godina=godina;
- this->avtor=new char[strlen(avtor)+1];
- strcpy(this->avtor,avtor);
- }
- // constructor so 3 promenlivi
- Kniga(char *ime,int kod,float cena){
- // delete []ime
- this->ime=new char[strlen(ime)+1];
- strcpy(this->ime,ime);
- this->kod=kod;
- this->cena=cena;
- }
- // copy constructor
- Kniga(const Kniga &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- }
- Kniga &operator=(Kniga &novaKniga){
- // proverka dali se isti objektite pred da kopirame (proverka spored adresa)
- if(this != &novaKniga){
- this->ime=new char[strlen(novaKniga.ime)+1];
- strcpy(this->ime,novaKniga.ime);
- this->kod=novaKniga.kod;
- this->cena=novaKniga.cena;
- this->godina=novaKniga.godina;
- this->avtor=new char[strlen(novaKniga.avtor)+1];
- strcpy(this->avtor,novaKniga.avtor);
- }
- return *this;
- }
- // operator << (za printanje)
- friend ostream &operator<<(ostream &output, Kniga &objekt){
- output<<"Kniga: "<<objekt.ime<<" "<<objekt.kod<<" "<<objekt.cena<<" "<<objekt.godina<<" "<<objekt.avtor<<endl;
- return output;
- }
- // operator >> (za input)
- friend istream &operator>>(istream &input, Kniga &objekt){
- input>>objekt.ime;
- input>>objekt.kod;
- input>>objekt.cena;
- input>>objekt.godina;
- input>>objekt.avtor;
- return input;
- }
- bool operator<(Kniga &drugaKniga){
- if(this->godina<drugaKniga.godina){
- return true;
- }else{
- return false;
- }
- //return this->godina<drugaKniga.godina;
- }
- bool operator==(Kniga &drugaKniga){
- return this->kod==drugaKniga.kod;
- }
- void setGodina(int godina){
- this->godina=godina;
- }
- char* getAvtor(){
- return avtor;
- }
- void setAvtor(char *niza){
- avtor=new char[strlen(niza)+1];
- strcpy(avtor,niza);
- }
- int getGodina(){
- return godina;
- }
- float cenaVoEvra(){
- return cena/Kniga::evro;
- }
- void print(){
- cout<<"Kniga: "<<ime<<" "<<kod<<" "<<cena<<" "<<godina<<" "<<avtor<<endl;
- }
- static void setEvro(float novKurs){
- evro=novKurs;
- }
- float getCena(){
- return cena;
- }
- ~Kniga(){
- delete []ime;
- delete []avtor;
- }
- };
- float Kniga::evro=61.5;
- class Biblioteka{
- private:
- char ime[25];
- int kapacitet;
- Kniga *knigi;
- int brojKnigi;
- public:
- Biblioteka(){
- knigi=new Kniga[0];
- brojKnigi=0;
- }
- Biblioteka(char ime[],int kapacitet){
- knigi=new Kniga[0];
- brojKnigi=0;
- strcpy(this->ime,ime);
- this->kapacitet=kapacitet;
- }
- Biblioteka &operator+=(Kniga &novaKniga){
- if(brojKnigi==kapacitet){
- throw MaxCapacity("Kapcitetot e tolku");
- }
- // testing exception
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- throw SameBookException("Knigata veke ja imame");
- }
- }
- Kniga *tempNiza = new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- // operator =
- tempNiza[i]=knigi[i];
- }
- knigi=new Kniga[brojKnigi+1];
- for(int i=0;i<brojKnigi;i++){
- knigi[i]=tempNiza[i];
- }
- knigi[brojKnigi]=novaKniga;
- brojKnigi++;
- delete []tempNiza;
- return *this;
- }
- void printKnigi(){
- for(int i=0;i<brojKnigi;i++){
- cout<<knigi[i];
- }
- }
- Biblioteka &operator-=(Kniga &novaKniga){
- int flag=0;
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- flag=1;
- break;
- }
- }
- // znaeme deka go imame objektot vo nizata
- if(flag==1){
- int brojac=0;
- Kniga *tempNiza = new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i]==novaKniga){
- // go skokame toj shto e ist
- }else{
- tempNiza[brojac]=knigi[i];
- brojac++;
- }
- }
- brojKnigi--;
- knigi=new Kniga[brojKnigi];
- for(int i=0;i<brojKnigi;i++){
- knigi[i]=tempNiza[i];
- }
- delete []tempNiza;
- }
- return *this;
- }
- void print(){
- cout<<ime<<" "<<kapacitet<<endl;
- }
- int kolkuKnigiOdAvtor(char *nekojAvtor){
- int kolkuKnigi=0;
- for(int i=0;i<brojKnigi;i++){
- if(strcmp(knigi[i].getAvtor(),nekojAvtor)==0){
- kolkuKnigi++;
- }
- }
- return kolkuKnigi;
- }
- void postariKnigi(int nekojaGodina){
- int kolkuKnigi=0;
- cout<<"Knigi postari od "<<nekojaGodina<<" se:"<<endl;
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i].getGodina()<nekojaGodina){
- cout<<knigi[i];
- kolkuKnigi++;
- }
- }
- }
- float vkupnaCenaVoEvra(){
- float suma=0;
- for(int i=0;i<brojKnigi;i++){
- suma+=knigi[i].cenaVoEvra();
- }
- return suma;
- }
- void daliSiteKnigiPosle(int nekojaGodina){
- int flag=1;
- for(int i=0;i<brojKnigi;i++){
- if(knigi[i].getGodina()<=nekojaGodina){
- flag=0;
- break;
- }
- }
- if(flag){
- cout<<"Site knigi se postari od "<<nekojaGodina<<endl;
- }else{
- cout<<"Site knigi NE se postari od "<<nekojaGodina<<endl;
- }
- }
- float prosecnaCenaNaKniga(){
- int brojac=0;
- float suma=0;
- for(int i=0;i<brojKnigi;i++){
- suma+=knigi[i].getCena();
- brojac++;
- }
- return suma/brojac;
- }
- ~Biblioteka(){
- delete []knigi;
- }
- };
- 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.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;
- cout<<"Testing operator <<"<<endl;
- cout<<hp3;
- cout<<"Testing operator >>"<<endl;
- Kniga got("GoT",333444,1750,1993,"R.R.Martin");
- //cin>>got;
- 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 static"<<endl;
- cout<<hp.cenaVoEvra()<<endl;
- Kniga::setEvro(61.7);
- cout<<hp.cenaVoEvra()<<endl;
- Biblioteka bm("Brakja Miladinovci", 3);
- cout<<"Testirame += operator"<<endl;
- try{
- bm+=hp;
- bm+=got;
- bm+=lotr;
- bm+=hp;
- }catch(SameBookException &objekt){
- objekt.print();
- }catch(MaxCapacity &objekt){
- objekt.print();
- }
- bm.printKnigi();
- cout<<"Testirame -= operator"<<endl;
- bm-=hp;
- bm.printKnigi();
- bm.postariKnigi(1991);
- cout<<"Knigi od avtorot R.R.Martin ima: "<<bm.kolkuKnigiOdAvtor("R.R.Martin")<<endl;
- cout<<"Cena na site knigi vo evra e "<<bm.vkupnaCenaVoEvra()<<endl;
- bm.daliSiteKnigiPosle(1950);
- cout<<"Prosecna cena na kniga e "<<bm.prosecnaCenaNaKniga()<<endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment