Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string>
- #include <fstream>
- using namespace std;
- class ExceptieNumarLocuri : public exception {
- };
- class Autobus {
- protected:
- char *model = NULL;
- int numarLocuri = 0;
- int *locuriOcupate = NULL;
- static int NUMAR_MAXIM_LOCURI;
- public:
- Autobus() {
- this->model = NULL;
- this->numarLocuri = 0;
- this->locuriOcupate = NULL;
- }
- Autobus(const char* Model, int Nr) {
- this->model = new char[strlen(Model) + 1];
- strcpy(this->model, Model);
- this->numarLocuri = Nr;
- this->locuriOcupate = new int[this->numarLocuri];
- for (int i = 0; i < this->numarLocuri; i++) {
- this->locuriOcupate[i] = 0;
- }
- }
- Autobus(const Autobus &bus) {
- if (this->model != NULL) {
- delete[] this->model;
- }
- this->model = new char[strlen(bus.model) + 1];
- strcpy(this->model, bus.model);
- this->numarLocuri = bus.numarLocuri;
- if (this->locuriOcupate != NULL) {
- delete[] this->locuriOcupate;
- }
- this->locuriOcupate = new int[this->numarLocuri];
- for(int i = 0; i < this->numarLocuri; i++) {
- this->locuriOcupate[i] = bus.locuriOcupate[i];
- }
- }
- void operator=(const Autobus &bus) {
- if (this->model != NULL) {
- delete[] this->model;
- }
- this->model = new char[strlen(bus.model) + 1];
- strcpy(this->model, bus.model);
- this->numarLocuri = bus.numarLocuri;
- if (this->locuriOcupate != NULL) {
- delete[] this->locuriOcupate;
- }
- this->locuriOcupate = new int[this->numarLocuri];
- for (int i = 0; i < this->numarLocuri; i++) {
- this->locuriOcupate[i] = bus.locuriOcupate[i];
- }
- }
- void setModel(const char* Model) {
- if (this->model != NULL) {
- delete[] this->model;
- }
- this->model = new char[strlen(Model) + 1];
- strcpy(this->model, Model);
- }
- void updateLoc(int index) {
- if (index > 0 && index < this->numarLocuri) {
- this->locuriOcupate[index] = 1;
- }
- else {
- throw new ExceptieNumarLocuri;
- }
- }
- explicit operator int() {
- int counter = 0;
- for (int i = 0; i < this->numarLocuri; i++) {
- if (this->locuriOcupate[i] == 1) {
- counter++;
- }
- }
- return counter;
- }
- friend ostream &operator<<(ostream &out, Autobus &bus) {
- out << endl << "The model: " << bus.model;
- out << endl << "The numarLocuri: " << bus.numarLocuri;
- out << endl << "The locuriOcupate: "<<endl;
- for (int i = 0; i < bus.numarLocuri; i++) {
- cout << "Locul "<<i << " are indexul " << bus.locuriOcupate[i] << endl;
- }
- out << endl;
- return out;
- }
- friend istream& operator>>(istream &in, Autobus &bus) {
- cout << endl << "New model: ";
- if (bus.model != NULL)
- {
- delete[] bus.model;
- }
- char buffer[100];
- in >> buffer;
- bus.model = new char[strlen(buffer) + 1];
- strcpy(bus.model, buffer);
- cout << endl << "New nrLocuri: ";
- in >> bus.numarLocuri;
- if (bus.locuriOcupate != NULL) {
- delete[] bus.locuriOcupate;
- }
- bus.locuriOcupate = new int[bus.numarLocuri];
- for (int i = 0; i < bus.numarLocuri; i++) {
- bus.locuriOcupate[i] = 0;
- }
- return in;
- }
- friend Autobus operator+(int nr, Autobus bus) {
- int* newV = new int[bus.numarLocuri + nr];
- for (int i = 0; i < bus.numarLocuri; i++) {
- newV[i] = bus.locuriOcupate[i];
- }
- for (int i = bus.numarLocuri; i < bus.numarLocuri + nr; i++) {
- newV[i] = 0;
- }
- delete[] bus.locuriOcupate;
- bus.locuriOcupate = newV;
- bus.numarLocuri += nr;
- return bus;
- }
- bool operator<(Autobus bus) {
- if (this->numarLocuri < bus.numarLocuri) {
- return true;
- }
- else {
- return false;
- }
- }
- };
- class Comercial {
- public:
- virtual double getVenit() = 0;
- };
- class LinieUrbana : public Autobus, Comercial {
- private:
- double pretBilet = 0.0f;
- const int numarLinie;
- public:
- double getVenit() {
- double valoare = 0.0f;
- int nrLocuriOcupate = (int)*this;
- return nrLocuriOcupate * this->pretBilet;
- }
- LinieUrbana() : numarLinie(0), Autobus() {
- this->pretBilet = 0.0f;
- }
- LinieUrbana(int Code, const char* Model, int NrLocuri, double Pret) :numarLinie(Code), Autobus(Model,NrLocuri) {
- this->pretBilet = Pret;
- }
- friend ostream& operator<<(ostream &out, LinieUrbana &linie) {
- out << endl <<"The pret: "<< linie.pretBilet;
- out << endl << "The nrLinie: " << linie.numarLinie;
- out << (Autobus&)linie;
- return out;
- }
- friend istream& operator>>(istream &in, LinieUrbana &linie) {
- in >> (Autobus&)linie;
- cout << endl << "New pret: ";
- in >> linie.pretBilet;
- return in;
- }
- friend ofstream& operator<<(ofstream& out, LinieUrbana &linie) {
- out.open("LinieUrbana2.txt", ios::out | ios::trunc);
- if (out) {
- out << linie.model<<endl;
- out << linie.numarLinie << endl;
- out << linie.pretBilet << endl;
- out << linie.numarLocuri << endl;
- for (int i = 0; i < linie.numarLocuri; i++) {
- out << linie.locuriOcupate[i] << endl;
- }
- out.close();
- }
- else {
- cout << "Nu merge";
- }
- return out;
- }
- ~LinieUrbana() {
- }
- void updateLoc(int a, int b) {
- for (int i = a; i < b; i++) {
- this->locuriOcupate[i] = 1;
- }
- }
- int &operator[](int i) {
- if (i > 0 && i < this->numarLocuri)
- {
- return this->locuriOcupate[i];
- }
- }
- int getNumarLinie() {
- return this->numarLinie;
- }
- void citireFisier(const char* Fisier) {
- ifstream in;
- in.open(Fisier, ios::in);
- if (in) {
- char buffer[100];
- in >> buffer;
- this->model = new char[strlen(buffer) + 1];
- strcpy(this->model, buffer);
- int nrLinie;
- in >> nrLinie;
- in >> this->pretBilet;
- in >> this->numarLocuri;
- if (this->locuriOcupate != NULL) {
- delete[] this->locuriOcupate;
- }
- this->locuriOcupate = new int[this->numarLocuri];
- for (int i = 0; i < this->numarLocuri; i++) {
- in >> this->locuriOcupate[i];
- }
- }
- in.close();
- }
- };
- int Autobus::NUMAR_MAXIM_LOCURI = 54;
- void main() {
- Autobus a1("Mercedes", 28);
- Autobus a2 = a1;
- Autobus a3;
- a3 = a1;
- a3.setModel("Otokar");
- try {
- a3.updateLoc(30);
- }
- catch (ExceptieNumarLocuri * ex) {
- cout << "BUUN";
- int numar;
- cin >> numar;
- a3.updateLoc(numar);
- }
- catch (...) {
- cout << "alta";
- }
- cout << a3;
- int nrLocuriOcupate = (int)a3;
- cout << a1;
- a1 = 10 + a1;
- if (a3 < a1) {
- cout << endl << "A3 are mai putine locuri";
- }
- else {
- cout << endl << "A1 are mai putine locuri";
- }
- LinieUrbana linie1(300, "Mercedes", 100, 2.5f);
- cout << linie1;
- linie1.updateLoc(10, 45);
- linie1[60] = 1;
- cout << "\n Valoarea cursei " << linie1.getNumarLinie() << " este " << linie1.getVenit();
- LinieUrbana linie2;
- cin >> linie2;
- cout << " \n Linia urbana citita " << linie2;
- ofstream fisierLinieUrbana;
- fisierLinieUrbana << linie2;
- LinieUrbana linie3;
- linie3.citireFisier("LinieUrbana2.txt");
- cout << "\nRestaurat din fisier: " << linie3;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement