5

 avatar
gorazd
c_cpp
a year ago
6.2 kB
7
Indexable
#include <iostream>
#include <cstring>
#include  <iomanip>
using namespace std;

class Gitara {
	char serial[25];
	float price;
	int year;
	char type[40];
public:
	Gitara() {
		serial[0] = '\0';
		price = 0;
		year = 0;
		type[0] = '\0';
	}
	Gitara(const char *_serial, float _price, int _year, const char *_type) {
		strcpy(serial,_serial);
		strcpy(type,_type);
		price = _price;
		year = _year;
	}
	Gitara(const Gitara &g) {
		strcpy(serial,g.serial);
		strcpy(type,g.type);
		price = g.price;
		year = g.year;
	}
	~Gitara(){}
	Gitara &operator=(const Gitara &g) {
		if (this!=&g) {
			strcpy(serial,g.serial);
			strcpy(type,g.type);
			price = g.price;
			year = g.year;
		}
		return *this;
	}
	char *getType(){return type;}
	char *getSerial(){return serial;}
	float getPrice(){return price;}
	int getYear() {return year;}
	bool daliSeIsti(const Gitara &g) {
		return strcmp(serial,g.serial)==0;
	}
	void pecati() {
		cout<<serial<<" "<<type<<" "<<price<<endl;
	}
};
class Magacin {
	char name[30];
	char location[60];
	Gitara *gitari;
	int numberOfGuitars;
	int yearOfOpening;
public:
	Magacin() {
		name[0]='\0';
		location[0]='\0';
		numberOfGuitars = 0;
		yearOfOpening = 0;
		gitari = nullptr;
	}
	Magacin(const char *_name, const char *_location, int _yearOfOpening=0) {
		strcpy(name,_name);
		strcpy(location,_location);;
		yearOfOpening = _yearOfOpening;
		gitari = nullptr;
		numberOfGuitars = 0;
	}
	~Magacin() {
		delete[] gitari;
	}
	Magacin &operator=(const Magacin &m) {
		strcpy(name,m.name);
		strcpy(location,m.location);
		yearOfOpening = m.yearOfOpening;
		numberOfGuitars = m.numberOfGuitars;
		if (m.gitari!=nullptr and numberOfGuitars>0) {
			delete[] gitari;
			gitari = new Gitara[numberOfGuitars];
			for (int i = 0; i<numberOfGuitars; i++)
				gitari[i] = m.gitari[i];
		}
		return *this;
	}
	float vrednost() {
		float sum = 0;
		for (int i = 0; i<numberOfGuitars; i++) {
			sum+=gitari[i].getPrice();
		}
		return sum;
	}
	void dodadi(const Gitara &d) {
		Gitara *temp = new Gitara[numberOfGuitars+1];
		if (gitari!=nullptr) {
			for (int i = 0; i<numberOfGuitars; i++)
				temp[i] = gitari[i];
		}
		temp[numberOfGuitars] = d;
		if (gitari!=nullptr)
			delete[] gitari;
		gitari = temp;
		numberOfGuitars++;
	}
	void _delete(int index) {
		if (index<0 or index>=numberOfGuitars or gitari == nullptr)
			return;
		if (numberOfGuitars==1) {
			delete[] gitari;
			gitari=nullptr;
			numberOfGuitars=0;
			return;
		}
		Gitara *temp = new Gitara[numberOfGuitars-1];
		for (int i = 0; i<index; i++)
			temp[i] = gitari[i];
		for (int i = index+1; i<numberOfGuitars; i++)
			temp[i-1] = gitari[i];
		delete[] gitari;
		gitari = temp;
		numberOfGuitars--;
	}

	void prodadi(const Gitara &p) {
		for (int i = 0; i<numberOfGuitars; i++) {
			if (gitari[i].daliSeIsti(p)) {
				_delete(i);
				i--;
			}
		}
	}
	void pecati(bool daliNovi) {
		cout<<name<<" "<<location<<endl;
		for (int i = 0; i<numberOfGuitars; i++) {
			if (daliNovi) {
				if (gitari[i].getYear()>yearOfOpening)
					gitari[i].pecati();
			}else
				gitari[i].pecati();
		}
	}
};


int main() {
    // se testira zadacata modularno
    int testCase;
    cin >> testCase;

	int n, godina;
	float cena;
	char seriski[50],tip[50];

	if(testCase == 1) {
        cout << "===== Testiranje na klasata Gitara ======" << endl;
        cin>>tip;
        cin>>seriski;
        cin >> godina;
        cin >> cena;
        Gitara g(seriski, cena, godina,tip);
		cout<<g.getType()<<endl;
		cout<<g.getSerial()<<endl;
		cout<<g.getYear()<<endl;
		cout<<g.getPrice()<<endl;
    } else if(testCase == 2){
        cout << "===== Testiranje na klasata Magacin so metodot print() ======" << endl;
		Magacin kb("Magacin1","Lokacija1");
        kb.pecati(false);
	}
    else if(testCase == 3) {
        cout << "===== Testiranje na klasata Magacin so metodot dodadi() ======" << endl;
        Magacin kb("Magacin1","Lokacija1",2005);
		cin>>n;
			for (int i=0;i<n;i++){
                cin>>tip;
                cin>>seriski;
                cin >> godina;
                cin >> cena;
                Gitara g(seriski,cena, godina,tip);
                cout<<"gitara dodadi"<<endl;
				kb.dodadi(g);
			}
        kb.pecati(true);
    }

    else if(testCase == 4) {
        cout << "===== Testiranje na klasata Magacin so metodot prodadi() ======" << endl;
        Magacin kb("Magacin1","Lokacija1",2012);
            cin>>n;
            Gitara brisi;
			for (int i=0;i<n;i++){
                cin>>tip;
                cin>>seriski;
                cin >> godina;
                cin >> cena;

                Gitara g(seriski,cena, godina,tip);
                if(i==2)
                    brisi=g;
                cout<<"gitara dodadi"<<endl;
				kb.dodadi(g);
			}
        kb.pecati(false);
        kb.prodadi(brisi);
        kb.pecati(false);
    }
    else if(testCase == 5) {
        cout << "===== Testiranje na klasata Magacin so metodot prodadi() i pecati(true) ======" << endl;
        Magacin kb("Magacin1","Lokacija1",2011);
            cin>>n;
            Gitara brisi;
			for (int i=0;i<n;i++){
                cin>>tip;
                cin>>seriski;
                cin >> godina;
                cin >> cena;

                Gitara g(seriski,cena, godina,tip);
                if(i==2)
                    brisi=g;
                cout<<"gitara dodadi"<<endl;
				kb.dodadi(g);
			}
        kb.pecati(true);
        kb.prodadi(brisi);
        cout<<"Po brisenje:"<<endl;
        Magacin kb3;
        kb3=kb;
        kb3.pecati(true);
    }
   else if(testCase ==6)
        {
        cout << "===== Testiranje na klasata Magacin so metodot vrednost()======" << endl;
        Magacin kb("Magacin1","Lokacija1",2011);
            cin>>n;
            Gitara brisi;
			for (int i=0;i<n;i++){
                cin>>tip;
                cin>>seriski;
                cin >> godina;
                cin >> cena;

                Gitara g(seriski,cena, godina,tip);
                if(i==2)
                    brisi=g;
				kb.dodadi(g);
			}
        cout<<kb.vrednost()<<endl;
        kb.prodadi(brisi);
        cout<<"Po brisenje:"<<endl;
        cout<<kb.vrednost();
        Magacin kb3;
        kb3=kb;
        }
    return 0;
}
Editor is loading...
Leave a Comment