1

 avatar
gorazd
c_cpp
a month ago
3.6 kB
3
Indexable
1kolok_OOP
#include <iostream>
#include <cstring>
using namespace std;

enum type{DEFAULT = -1,pop,rap,rock};

class Pesna {
	char *name;
	int length;
	type songType;

	public:
	Pesna(char *_name = "", int _length = 0,enum type _type = DEFAULT) {
		name = new char[strlen(_name) + 1];
		strcpy(name, _name);
		length = _length;
		songType = _type;
	};
	~Pesna() {
		delete[] name;
	}
	Pesna(const Pesna &p) {
		name = new char[strlen(p.name)+1];
		strcpy(name,p.name);
		length = p.length;
		songType = p.songType;
	}

	Pesna &operator= (const Pesna &p) {
		if (this != &p) { // Self-assignment check
			delete[] name; // Free old memory
			name = new char[strlen(p.name) + 1];
			strcpy(name, p.name);
			length = p.length;
			songType = p.songType;
		}
		return *this;
	}

	enum type getType(){return songType;}
	int getLength(){return length;}

	void pecati() {
		cout<<"\""<<name<<"\"-"<<length<<"min"<<endl;
	}
};

class CD {
	Pesna pesni[10];
	int numberOfSongs;
	int maxLength;

public:
	CD(int maxLength) {
		this->maxLength=maxLength;
		numberOfSongs = 0;
	}
	~CD(){}

	int get_max_length(){return maxLength;}
	Pesna getPesna(int i){return pesni[i];}
	int getBroj(){return numberOfSongs;}

	void dodadiPesna(Pesna p) {
		int totalLength = 0;
		for (int i = 0; i<numberOfSongs; i++)
			totalLength += pesni[i].getLength();
		if (numberOfSongs<10 and totalLength+p.getLength()<=maxLength) {
			pesni[numberOfSongs] = p;
			numberOfSongs++;
		}
	}
	void pecatiPesniPoTip(type t) {
		for (int i = 0; i<numberOfSongs; i++) {
			if (pesni[i].getType()==t)
				pesni[i].pecati();
		}
	}
};

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

	int n, minuti, kojtip;
	char ime[50];

	if(testCase == 1) {
        cout << "===== Testiranje na klasata Pesna ======" << endl;
        cin >> ime;
        cin >> minuti;
        cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
        Pesna p(ime,minuti,(type)kojtip);
		p.pecati();
    } else if(testCase == 2) {
        cout << "===== Testiranje na klasata CD ======" << endl;
		CD omileno(20);
		cin>>n;
			for (int i=0;i<n;i++){
				cin >> ime;
				cin >> minuti;
				cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
				Pesna p(ime,minuti,(type)kojtip);
				omileno.dodadiPesna(p);
			}
        	for (int i=0; i<n; i++)
				(omileno.getPesna(i)).pecati();
	}
    else if(testCase == 3) {
        cout << "===== Testiranje na metodot dodadiPesna() od klasata CD ======" << endl;
		CD omileno(20);
		cin>>n;
			for (int i=0;i<n;i++){
				cin >> ime;
				cin >> minuti;
				cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
				Pesna p(ime,minuti,(type)kojtip);
				omileno.dodadiPesna(p);
			}
        	for (int i=0; i<omileno.getBroj(); i++)
				(omileno.getPesna(i)).pecati();
    }
    else if(testCase == 4) {
        cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
		CD omileno(20);
		cin>>n;
			for (int i=0;i<n;i++){
				cin >> ime;
				cin >> minuti;
				cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
				Pesna p(ime,minuti,(type)kojtip);
				omileno.dodadiPesna(p);
			}
        cin>>kojtip;
        omileno.pecatiPesniPoTip((type)kojtip);

    }
    else if(testCase == 5) {
        cout << "===== Testiranje na metodot pecatiPesniPoTip() od klasata CD ======" << endl;
		CD omileno(20);
		cin>>n;
			for (int i=0;i<n;i++){
				cin >> ime;
				cin >> minuti;
				cin >> kojtip; //se vnesuva 0 za POP,1 za RAP i 2 za ROK
				Pesna p(ime,minuti,(type)kojtip);
				omileno.dodadiPesna(p);
			}
        cin>>kojtip;
        omileno.pecatiPesniPoTip((type)kojtip);

    }

return 0;
}
Editor is loading...
Leave a Comment