#include <iostream>
#include <string.h>
using namespace std;
//Treba samo metodite da gi napisis(metodot contains mi e napisan samo proveri dali e tocen i daj mi primer kako da gi testiram metodive i += operatorot vo main fala mnogu) i += operatorot
class Line {
private:
int sifraLinija;
int sifra_sofer;
char trgnuva[30];
char pristignuva[30];
public:
Line() {
sifraLinija = -1;
sifra_sofer = -1;
trgnuva[0] = '\0';
pristignuva[0] = '\0';
}
Line(const char *t, const char *p, int sifra_sofer, int sifraLinija) {
this->sifraLinija=sifraLinija;
this->sifra_sofer=sifra_sofer;
strncpy(trgnuva,t,30);
trgnuva[30]='\0';
strncpy(pristignuva,p,30);
pristignuva[30]='\0';
}
int getSifraLinija() {
return sifraLinija;
}
int getSifraSofer() {
return sifra_sofer;
}
Line(const Line &l) {
sifraLinija=l.sifraLinija;
strncpy(trgnuva,l.trgnuva,30);
trgnuva[30]='\0';
strncpy(pristignuva,l.pristignuva,30);
trgnuva[30]='\0';
sifra_sofer=l.sifra_sofer;
}
friend ostream & operator <<(ostream & out, Line &l) {
out << l.getSifraSofer() << " - " <<l.trgnuva<< " -> " << l.pristignuva<<endl;
return out;
}
~Line() {}
};
class Driver {
private:
int sifra_sofer;
double plata;
char ime[30];
public:
Driver( const char *ime, double plata, int sifra_sofer) {
this->sifra_sofer=sifra_sofer;
this->plata=plata;
strncpy(this->ime,ime,30);
this->ime[30]='\0';
}
int getSifraSofer() {
return sifra_sofer;
}
double getPlata() {
return plata;
}
char* getImeSofer() {
return ime;
}
};
class BusCompany {
private:
Line *linii;
int br_letovi;
char ime[50];
public:
BusCompany( char *m, Line *l,int br) {
br_letovi = br;
linii=new Line[br_letovi];
for(int i=0; i < br_letovi; i++) {
linii[i] = l[i];
}
strncpy(ime,m,50);
ime[50]='\0';
}
int contains(int id) {
for(int i=0; i<br_letovi; i++) {
if(linii[i].getSifraLinija() == id) {
return i;
}
}
return -1;
}
void salary(Driver *drivers, int brSoferi) {
for(int i = 0; i < brSoferi; i++) { //izminuva site soferi sto se od vlezot
double sumaPlata = 0;
for(int j = 0; j < this->br_letovi; j++) { // izminuva site liniii vo firmata
if(drivers[i].getSifraSofer() == this->linii[j].getSifraSofer()) { // proveruva dali ID to na I tiot sofer e ist so ID to na J linija
sumaPlata += drivers[i].getPlata();
}
}
cout << "Plata na " << drivers[i].getImeSofer() << " so ID \"" << drivers[i].getSifraSofer() << "\""<< " : " << sumaPlata << endl;
}
}
void pintSite() {
for(int i = 0; i < br_letovi; i++) {
cout << linii[i];
}
}
BusCompany& operator+=(const Line& linija){
Line *tmp = new Line[br_letovi+1];
for(int i = 0; i < br_letovi; i++){
tmp[i] = this->linii[i];
}
delete [] linii;
tmp[br_letovi++] = linija;
linii = tmp;
return *this;
}
};
int main () {
Line lines[3] = { Line("Skopje","Struga", 1,22),Line("Skopje","Kumanovo", 2,22), Line("Skopje","Mars", 3,33)};
Driver driver[3] = {Driver("Prv", 25000,1), Driver("Vtor", 25000,2), Driver("Tret", 25000,3)};
BusCompany comp ("Firma", lines, 3);
comp.pintSite();
comp.salary(driver,3);
cout << comp.contains(22) << endl;
comp +=lines[0];
comp +=lines[0];
comp.salary(driver,3);
}