Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<fstream>
- #include<conio.h>
- #include<list>
- #include<string>
- #include<iterator>
- #include<exception>
- using namespace std;
- class MyException : public exception {
- private:
- string mesajEroare;
- public:
- MyException(string mesajEroare) {
- this->mesajEroare = mesajEroare;
- }
- const char* what() const throw() {
- if (mesajEroare == "out_limit") return "Valoarea este inafara intervalului";
- if (mesajEroare == "lista_goala") return "lista este goala";
- return "Eroere neprevazuta";
- }
- };
- class Modul {
- protected:
- string denumire;
- int idModul, val;
- bool isDefect, tipModul;
- public:
- Modul(string denumire, int val, bool isDefect, bool tipModul) {
- this->denumire = denumire;
- this->idModul = idModul;
- this->val = val;
- this->isDefect = isDefect;
- this->tipModul = tipModul;
- }
- void SetId(int id) {
- idModul = id;
- }
- virtual void Afisare() = 0;
- string getNume(){
- return denumire;
- }
- };
- class Releu : public Modul {
- private:
- bool tipReleu;
- int histereza;
- static int nrMod;
- public:
- Releu(string denumire, int val, bool isDefect, bool tipReleu, int histereza) : Modul(denumire, val, isDefect, false) {
- this->tipReleu = tipReleu;
- this->histereza = histereza;
- }
- void SetId(int id) {
- nrMod++;
- Modul::SetId(id);
- }
- void Afisare() {
- cout << "\nDenumire " << denumire << "\nidModul" << idModul << "\nvaloare " << val << "\neste defect " << isDefect << "\nTip model " << tipModul << "\nTip releu " << tipReleu;
- cout << "\n Histereza " << histereza << "\nNumar module" << nrMod;
- }
- };
- int Releu::nrMod = 0;
- class Dimmer : public Modul {
- private:
- int putere, valPrag;
- static int nrMod;
- public:
- Dimmer(string denumire, int val, bool isDefect, int putere, int valPrag) : Modul(denumire, val, isDefect, true) {
- this->putere = putere;
- this->valPrag = valPrag;
- }
- void SetId(int id) {
- nrMod++;
- Modul::SetId(id);
- }
- void Afisare() {
- cout << "\nDenumire " << denumire << "\nidModul" << idModul << "\nvaloare " << val << "\neste defect " << isDefect << "\nTip model " << tipModul;
- cout << "\n Putere " << putere << "\nValoare de prag" << valPrag;
- }
- };
- int Dimmer::nrMod = 0;
- istream & operator>>(istream &in, Releu *r) {
- string denumire;
- int val;
- bool isDefect, tipModul;
- bool tipReleu;
- int histereza;
- cout << " denumire "; cin >> denumire;
- cout << "Valoare "; cin >> val;
- cout << "Este defect(0-def, 1 -bun)"; cin >> isDefect;
- cout << "Tip modul(0 / 1) "; cin >> tipModul;
- cout << "Tip releu(0-statc, 1-mcontacte)"; cin >> tipReleu;
- cout << "Histereza "; cin >> histereza;
- r = new Releu(denumire, val, isDefect, tipReleu, histereza);
- return in;
- }
- istream & operator>>(istream &in, Dimmer *d) {
- string denumire;
- int val;
- bool isDefect;
- int putere, valPrag;
- cout << " denumire "; cin >> denumire;
- cout << "Valoare "; cin >> val;
- cout << "Este defect(0-def, 1 -bun)"; cin >> isDefect;
- cout << "Puete "; cin >> putere;
- cout << "val Prag"; cin >> valPrag;
- d = new Dimmer(denumire, val, isDefect, putere, valPrag);
- return in;
- }
- class Client {
- private:
- string nume, adresa;
- list <Modul *> listaModul;
- public:
- Client(string nume, string adresa) {
- this->nume = nume;
- this->adresa = adresa;
- }
- void AddModul(int &idModul) {
- Releu *r = NULL;
- Dimmer *d = NULL;
- int help;
- cout << "0-releu, 1- dimmer "; cin >> help;
- if (help) {
- cin >> d;
- d->SetId(idModul);
- idModul++;
- listaModul.push_back(d);
- }
- else
- {
- cin >> r;
- r->SetId(idModul);
- idModul++;
- listaModul.push_back(r);
- }
- }
- void Afisare() {
- cout << "\nNume " << nume << "\nadresa " << adresa;
- for (auto it = listaModul.begin(); it != listaModul.end(); it++)(*it)->Afisare();
- }
- string getNume() { return nume; }
- void Delete() {
- string den;
- cout << "denumire modul"; cin >>den;
- for (auto it = listaModul.begin(); it != listaModul.end(); it++)if ((*it)->getNume() == nume) {
- listaModul.erase(it);
- break;
- }
- }
- };
- istream & operator>>(istream& in, Client *c) {
- string nume, adresa;
- cout << "nume "; in >> nume;
- cout << "Adresa "; in >> adresa;
- c = new Client(nume, adresa);
- return in;
- }
- int main() {
- int opt, idModul = 1, help;
- list <Client *> listaClient;
- string nume;
- Client *c = NULL;
- list<Client *>::iterator it;
- do {
- cout << "\n0. Iesire";
- cout << "\n1.Citire tastatura";
- cout << "\n2. Afisare";
- cout << "\nOpitunea aleasa"; cin >> opt;
- system("cls");
- switch (opt) {
- case 0: break;
- case 1:
- cout << "Cititi persoana noua(0-nu,1-da) "; cin >> help;
- if (help) {
- cin >> c;
- int nrMod;
- cout << "Numar de module "; cin >> nrMod;
- for (int i = 1; i <= nrMod; i++)
- c->AddModul(idModul);
- cout << "Nume client: "; cin >> nume;
- for (it = listaClient.begin(); it != listaClient.end(); it++) {
- if ((*it)->getNume() > nume) break;
- }
- listaClient.emplace(it);
- }
- else
- {
- try {
- if (listaClient.empty()) throw MyException("lista_goala");
- cout << "Nume client: "; cin >> nume;
- for (auto it = listaClient.begin(); it != listaClient.end(); it++) {
- if ((*it)->getNume() == nume) {
- int nrMod;
- cout << "Numar de module "; cin >> nrMod;
- for(int i =1;i <= nrMod;i++)
- (*it)->AddModul(idModul);
- }
- }
- }
- catch (exception &e) {
- cerr << e.what();
- }
- }
- break;
- case 2:
- for (it = listaClient.begin(); it != listaClient.end(); it++) (*it)->Afisare();
- case 3:
- cout << " nume persoana"; cin >> nume;
- for (it = listaClient.begin(); it != listaClient.end(); it++) {
- if ((*it)->getNume() == nume) break;
- (*it)->Delete();
- }
- }
- } while (1);
- return 0;
- }
RAW Paste Data