Sunteți pe pagina 1din 7

//Autobuz

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
#include<fstream>
#include<vector>
using namespace std;

class Autobuz
{
private:
int nrLinie;
static int pretBilet;
char* marcaAutobuz;
int numarCurseZilnice;
int numarLocuri;
public:
Autobuz()
{
this->nrLinie = 0;
this->marcaAutobuz = new char[strlen("") + 1];
strcpy(this->marcaAutobuz, "");
this->numarCurseZilnice = 0;
this->numarLocuri = 0;
}
Autobuz(int nrLinie, const char* marcaAutobuz)
{
if (nrLinie >= 1)
{
this->nrLinie = nrLinie;
}
else
{
this->nrLinie = 0;
}
if(strlen(marcaAutobuz)>=3)
{
this->marcaAutobuz = new char[strlen(marcaAutobuz) + 1];
strcpy(this->marcaAutobuz, marcaAutobuz);
}
else
{
this->marcaAutobuz = new char[strlen("") + 1];
strcpy(this->marcaAutobuz, "");
}
this->numarCurseZilnice = 0;
this->numarLocuri = 0;
}
Autobuz(int nrLinie, const char* marcaAutobuz, int numarCurseZilnice, int
numarLocuri)
{
if (nrLinie >= 1)
{
this->nrLinie = nrLinie;
}
else
{
this->nrLinie = 0;
}
if (strlen(marcaAutobuz) >= 3)
{
this->marcaAutobuz = new char[strlen(marcaAutobuz) + 1];
strcpy(this->marcaAutobuz, marcaAutobuz);
}
else
{
this->marcaAutobuz = new char[strlen("") + 1];
strcpy(this->marcaAutobuz, "");
}
this->numarCurseZilnice = numarCurseZilnice;
this->numarLocuri = numarLocuri;
}
Autobuz(const Autobuz& a)
{
if (a.nrLinie >= 1)
{
this->nrLinie = a.nrLinie;
}
else
{
this->nrLinie = 0;
}
if (strlen(a.marcaAutobuz) >= 3)
{
this->marcaAutobuz = new char[strlen(a.marcaAutobuz) + 1];
strcpy(this->marcaAutobuz, a.marcaAutobuz);
}
else
{
this->marcaAutobuz = new char[strlen("") + 1];
strcpy(this->marcaAutobuz, "");
}
this->numarCurseZilnice = a.numarCurseZilnice;
this->numarLocuri = a.numarLocuri;
}
Autobuz& operator =(const Autobuz& a)
{
if (this != &a)
{
if (this->marcaAutobuz != NULL)
{
delete[] this->marcaAutobuz;
}
if (a.nrLinie >= 1)
{
this->nrLinie = a.nrLinie;
}
else
{
this->nrLinie = 0;
}
if (strlen(a.marcaAutobuz) >= 3)
{
this->marcaAutobuz = new char[strlen(a.marcaAutobuz) + 1];
strcpy(this->marcaAutobuz, a.marcaAutobuz);
}
else
{
this->marcaAutobuz = new char[strlen("") + 1];
strcpy(this->marcaAutobuz, "");
}
this->numarCurseZilnice = a.numarCurseZilnice;
this->numarLocuri = a.numarLocuri;
return *this;
}

}
~Autobuz()
{
if (this->marcaAutobuz != NULL)
{
delete[] this->marcaAutobuz;
}
}

float venitMaxim()
{
return this->numarCurseZilnice * this->numarLocuri * this->pretBilet;
}
bool poateRealizaCursa(int nrLocuri)
{
return this->numarLocuri >= nrLocuri;
}
friend ostream& operator<<(ostream& out, const Autobuz& a)
{
out << a.nrLinie << " " << a.marcaAutobuz << " " << a.pretBilet << " "
<< a.numarCurseZilnice << " " << a.numarLocuri << endl;
return out;
}

//operatorul + are 3 forme


//a1= a1+ 4;
// a1= a1+ a2;
// ai = 5 + a1;

Autobuz& operator+(int nr)


{
Autobuz& copie = *this;
copie.numarCurseZilnice = this->numarCurseZilnice + nr;
return copie;
}
friend Autobuz& operator+(int nr, Autobuz& a);

void scriereBinar(ofstream& out)


{
out.write((char*)&nrLinie, sizeof(int));
int dimMarca = strlen(marcaAutobuz) + 1;
out.write((char*)&dimMarca, sizeof(int));
out.write(marcaAutobuz, dimMarca);
out.write((char*)&numarCurseZilnice, sizeof(int));
out.write((char*)&numarLocuri, sizeof(int));
}

void citireBinar(ifstream& in)


{
if (marcaAutobuz != NULL)
{
delete[]this->marcaAutobuz;
}
in.read((char*)&nrLinie, sizeof(int));
int dimMarca = 0;
in.read((char*)&dimMarca, sizeof(int));
marcaAutobuz = new char[dimMarca];
in.read(marcaAutobuz, dimMarca);
in.read((char*)&numarCurseZilnice, sizeof(int));
in.read((char*)&numarLocuri, sizeof(int));
}

char* getMarca()
{
return this->marcaAutobuz;
}
};

Autobuz& operator+(int nr, Autobuz &a)


{
Autobuz& copie = a;
copie.numarCurseZilnice = a.numarCurseZilnice + nr;
return copie;
}
int Autobuz::pretBilet = 10;

/// <summary>
///HAS A/ CONTAINER/COMPUNERE
/// </summary>
class Autobaza
{
int numarAutobuze =0;
Autobuz** lista =NULL;
public:
Autobaza()
{
this->numarAutobuze = 0;
this->lista = NULL;
}
Autobaza(int numarAutobuze, Autobuz** lista)
{
if (numarAutobuze >= 0)
{
this->numarAutobuze = numarAutobuze;
this->lista = new Autobuz*[this->numarAutobuze];
for (int i = 0; i < this->numarAutobuze; i++)
{
if (this->lista[i] != NULL)
{
this->lista[i] = lista[i];
}
}
}

}
Autobaza(const Autobaza& a)
{
if (a.numarAutobuze >= 0)
{
this->numarAutobuze = a.numarAutobuze;
this->lista = new Autobuz * [this->numarAutobuze];
for (int i = 0; i < this->numarAutobuze; i++)
{
if (this->lista[i] != NULL)
{
this->lista[i] = a.lista[i];
}
}
}
}
Autobaza& operator =(const Autobaza& a)
{
if (this != &a)
{
if (this->lista != NULL)
delete[]this->lista;
this->numarAutobuze = a.numarAutobuze;
this->lista = new Autobuz * [this->numarAutobuze];
for (int i = 0; i < this->numarAutobuze; i++)
{
if (this->lista[i] != NULL)
{
this->lista[i] = a.lista[i];
}
}
return *this;
}
}

~Autobaza()
{
if (this->lista != NULL)
delete[]this->lista;
}

int numarAutobuzeProduseDe(const char* marca)


{
int nr = 0;
for (int i = 0; i < this->numarAutobuze; i++)
{
if (strcmp(lista[i]->getMarca(), marca) == 0)
{
nr++;
}
}
return nr;
}
void adaugaAutobuz(Autobuz &autobuz)
{
Autobaza copie = *this;
this->lista = new Autobuz * [this->numarAutobuze + 1];
for (int i = 0; i < this->numarAutobuze; i++)
{
this->lista[i] = copie.lista[i];
}
this->lista[this->numarAutobuze] = &autobuz;
this->numarAutobuze++;
}
};
//clasa template
template <typename T>
class AutobazaTemplate
{
int nr=0;
T* vector = NULL;
public:
AutobazaTemplate()
{

}
AutobazaTemplate(int nr, T* vector)
{
this->nr = nr;
this->vector = new T[this->nr];
for (int i = 0; i < this->nr; i++)
{
this->vector[i] = vector[i];
}

}
~AutobazaTemplate()
{
if (vector != NULL)
delete[]vector;
}
int getNr()
{
return this->nr;
}
T* getVector()
{
return this->vector;
}
};

void main()
{
Autobuz a1;
Autobuz a2(43,"STB");
Autobuz a3(12,"BMW",5,100);
Autobuz a33(12, "BMW", 5, 100);
Autobuz a5(12, "Mercedes", 5, 100);
Autobuz a4 = a2;
a1 = a2;
cout << a1;
cout << a2;
cout << a3;
cout << a4;
cout << a3.venitMaxim() << endl;
if (a3.poateRealizaCursa(70))
{
cout << "Autobuzul poate realiza cursa!" << endl;
}
else
{
cout << "Autobuzul nu poate realiza cursa!" << endl;
}
a1 = a1 + 155;
cout << a1;
a1 = 170 + a1;
cout << a1;
string numeFisBinar;
cout<< "Introduceti numele fisierului binar: ";
cin >> numeFisBinar;
numeFisBinar = numeFisBinar + ".bin";
ofstream outAutobuz(numeFisBinar, ios::out | ios::binary);
if (outAutobuz.is_open())
{
a3.scriereBinar(outAutobuz);
a5.scriereBinar(outAutobuz);
cout << "\n Autobuzele au fost scrise in binar\n";
outAutobuz.close();
}
ifstream inAutobuz(numeFisBinar, ios::in | ios::binary);
if (inAutobuz.is_open())
{
a1.citireBinar(inAutobuz);
a2.citireBinar(inAutobuz);
cout << "\n Autobuzele au fost citite din binar\n";
inAutobuz.close();
}
cout << a1;
cout << a2;
//CONTAINER/HAS A
Autobuz** lista = new Autobuz*[3];
lista[0] = &a1;
lista[1] = &a2;
lista[2] = &a3;
Autobaza ab1;
Autobaza ab2(3, lista);
Autobaza ab3 = ab2;
ab1 = ab2;
cout << ab2.numarAutobuzeProduseDe("BMW") << endl;
ab2.adaugaAutobuz(a33);
cout << ab2.numarAutobuzeProduseDe("BMW") << endl;

//clasa TEMPLATE
AutobazaTemplate<Autobuz*> gestAuto(3, lista);
for (int i = 0; i < gestAuto.getNr(); i++)
{
cout << *gestAuto.getVector()[i];
}
//STL
vector<Autobuz*> vectAuto;
for (int i = 0; i < gestAuto.getNr(); i++)
{
vectAuto.push_back(gestAuto.getVector()[i]);
}
vector<Autobuz*>::iterator it;
for (it = vectAuto.begin(); it != vectAuto.end(); it++)
{
cout << **it;
}
}

S-ar putea să vă placă și