#include
using namespace std;
class Restoran {
private:
char * ime;
char * adresa;
int godina_na_osnovanje;
float dohod;
float prodadeni_vafli;
char odgovorno_lice[100];
public:
Restoran() {
ime = new char[100];
adresa = new char[100];
}
Restoran(const char * _ime, const char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice) {
ime = new char[(strlen(_ime))];
strcpy(ime, _ime);
adresa = new char[strlen(_adresa)];
strcpy(adresa, _adresa);
godina_na_osnovanje = _godina_na_osnovanje;
dohod = _dohod;
prodadeni_vafli = _prodadeni_vafli;
strcpy(odgovorno_lice, _odgovorno_lice);
}
Restoran(const Restoran & tmp) {
ime = new char[(strlen(tmp.ime))];
strcpy(ime, tmp.ime);
adresa = new char[strlen(tmp.adresa)];
strcpy(adresa, tmp.adresa);
godina_na_osnovanje = tmp.godina_na_osnovanje;
dohod = tmp.dohod;
prodadeni_vafli = tmp.prodadeni_vafli;
strcpy(odgovorno_lice, tmp.odgovorno_lice);
}
Restoran & operator = (const Restoran & tmp) {
ime = new char[(strlen(tmp.ime))];
strcpy(ime, tmp.ime);
adresa = new char[strlen(tmp.adresa)];
strcpy(adresa, tmp.adresa);
godina_na_osnovanje = tmp.godina_na_osnovanje;
dohod = tmp.dohod;
prodadeni_vafli = tmp.prodadeni_vafli;
strcpy(odgovorno_lice, tmp.odgovorno_lice);
return *this;
}
~Restoran() {
delete[] ime;
delete [] adresa;
}
bool operator >= (Restoran tmp) {
if(dohod >= tmp.dohod) {
return true;
}
return false;
}
friend istream & operator >> (istream & stream, Restoran & tmp);
virtual float presmetaj_dohod() {
return dohod;
}
virtual void print() {
cout << ime << " " << adresa << " " << godina_na_osnovanje << " " << dohod << " " << prodadeni_vafli << " "<< odgovorno_lice << endl;
}
};
class RestoranBezIsporaka : public Restoran {
private:
string najpopularna_vafla;
string tip_na_zacini;
float rejting;
float zarabotka;
public:
RestoranBezIsporaka() : Restoran(){}
RestoranBezIsporaka(char * _ime, char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice, string _najpopularna_vafla, string _tip_na_zacini, float _rating, float _zarabotka) : Restoran(_ime, _adresa, _godina_na_osnovanje, _dohod, _prodadeni_vafli, _odgovorno_lice){
najpopularna_vafla = _najpopularna_vafla;
tip_na_zacini = _tip_na_zacini;
rejting = _rating;
zarabotka = _zarabotka;
}
RestoranBezIsporaka(const RestoranBezIsporaka & tmp) : Restoran(tmp) {
najpopularna_vafla = tmp.najpopularna_vafla;
tip_na_zacini = tmp.tip_na_zacini;
rejting = tmp.rejting;
zarabotka = tmp.zarabotka;
}
virtual float presmetaj_dohod() override {
float osnoven_dohod = Restoran::presmetaj_dohod();
if(zarabotka >= 40000) {
float result = osnoven_dohod + (0.15 * zarabotka);
return result;
}
return osnoven_dohod;
}
virtual void print() override {
Restoran::print();
cout << najpopularna_vafla << " " << tip_na_zacini << " " << rejting << " " << zarabotka << endl;
}
};
class RestoranSoIsoraka : public Restoran {
private:
string najklikana;
string komentari;
string webstrana;
float rejting;
public:
RestoranSoIsoraka() : Restoran() {
}
RestoranSoIsoraka(char * _ime, char * _adresa, int _godina_na_osnovanje, float _dohod, float _prodadeni_vafli, char * _odgovorno_lice, string _najklikana, string _komentari, string _webstrana, float _rejting) : Restoran(_ime, _adresa, _godina_na_osnovanje, _dohod, _prodadeni_vafli, _odgovorno_lice){
najklikana = _najklikana;
komentari = _komentari;
webstrana = _webstrana;
rejting = _rejting;
}
RestoranSoIsoraka(RestoranSoIsoraka & tmp) : Restoran(tmp) {
najklikana = tmp.najklikana;
komentari = tmp.komentari;
webstrana = tmp.webstrana;
rejting = tmp.rejting;
}
virtual float presmetaj_dohod() override{
float osnoven_dohod = Restoran::presmetaj_dohod();
if(rejting > 3) {
return osnoven_dohod * rejting;
}
return osnoven_dohod;
}
virtual void print() override {
Restoran::print();
cout << najklikana << " " << komentari << " " << webstrana << " "<< rejting << endl;
}
};
istream & operator >> (istream & stream, Restoran & tmp) {
char _ime[100], _adresa[100];
stream >> _ime;
stream >> _adresa;
tmp.ime = new char[strlen(_ime)];
strcpy(tmp.ime, _ime);
tmp.adresa = new char[strlen(_adresa)];
strcpy(tmp.adresa, _adresa);
stream >> tmp.godina_na_osnovanje;
stream >> tmp.dohod;
stream >> tmp.prodadeni_vafli;
stream >> tmp.odgovorno_lice;
return stream;
}
void najgolem_dohod(int n, Restoran ** restorani) {
float najgolem_dohod = 0.0;
for(int i = 0; i < n; i++) {
if(restorani[i]->presmetaj_dohod() > najgolem_dohod) {
najgolem_dohod = restorani[i]->presmetaj_dohod();
}
}
for(int i =0; i < n; i++) {
if(restorani[i]->presmetaj_dohod() == najgolem_dohod) {
restorani[i]->print();
}
}
}
int main()
{
Restoran * restorani[3];
restorani[0] = new RestoranSoIsoraka("gino", "centar", 1900, 500, 50, "lice", "krem", "dobri", "www.gino.mk", 4.5);
restorani[1] = new RestoranBezIsporaka("abc", "karpos", 2000, 600, 50, "abc", "nutela", "seakkvi", 10.5, 20000);
restorani[2] = new Restoran("rew", "aerodrom", 2025, 1000, 80, "rew");
najgolem_dohod(3, restorani);
return 0;
}