Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<conio.h>
- #include<string.h>
- using namespace std;
- class Lista;
- class Produse_magazin
- {
- private:
- int tip_produs;
- int cod_produs;
- char *producator;
- char *rezolutie;
- char *dimensiuni;
- Produse_magazin *urm; //adresa urmat elem din lista
- public:
- Produse_magazin(int t, int cod, char *prod, char*rez, char*dim)
- {
- tip_produs = t;
- cod_produs = cod;
- producator = new char[strlen(prod) + 1];
- strcpy(producator, prod);
- rezolutie = new char[strlen(rez) + 1];
- strcpy(rezolutie, rez);
- dimensiuni = new char[strlen(dim) + 1];
- strcpy(dimensiuni, dim);
- urm = NULL; //adresa urmat nod e initial null
- }
- virtual void afisare() //fct de afisare a elem din clasa de baza
- {
- cout << "codul produsului: " << cod_produs << endl;
- cout << "producatorul: " << producator << endl;
- cout << "rezolutie: " << rezolutie << endl;
- cout << "dimensiuni: " << dimensiuni << endl;
- }
- friend class Lista; //declara clasa Lista friend la clasa Produse_magazin
- };
- class Scanner :public Produse_magazin
- {
- private:
- char *soft;
- int viteza;
- public:
- Scanner(int t, char *prod, int cod, char*rez, char*dim, char *sof, int vitez) :Produse_magazin(t, cod, prod, rez, dim)
- {
- soft = new char[strlen(sof) + 1];
- strcpy(soft, sof);
- viteza = vitez;
- }
- void afisare() //afisare elem din scanner
- {
- Produse_magazin::afisare();
- cout << "softul : " << soft << endl;
- cout << "viteza: " << viteza << endl;
- }
- friend class Lista;
- };
- class Imprimante :public Produse_magazin //a 2-a clasa derivata
- {
- private:
- char *format;
- char *tip;
- public:
- Imprimante(int t, int cod, char *prod, char*rez, char*dim, char *form, char *tp) :Produse_magazin(t, cod, prod, rez, dim)
- {
- format = new char[strlen(form) + 1];
- strcpy(format, form);
- tip = new char[strlen(tp) + 1];
- strcpy(tip, tp);
- }
- void afisare()
- {
- Produse_magazin::afisare();
- cout << "format: " << format << endl;
- cout << "tip: " << tip << endl;
- }
- friend class Lista;
- };
- class Lista
- {
- public:
- Produse_magazin *head; //capul listei
- void adaugare(Produse_magazin *a);
- void afisare_lista();
- //void afisare_scannere(char *soft); //afisarea unui anumit scanner dupa soft
- //void stergere(char *prod); //stergearea din lista dupa producator
- };
- void Lista::adaugare(Produse_magazin *a)
- {
- Produse_magazin *p;
- p = head;
- if (p)
- {
- if (strcmp(a->producator, p->producator) < 0)
- {
- a->urm = head;
- head = a;
- }
- else
- {
- while (p->urm && strcmp((p->urm)->producator, a->producator) < 0)
- p = p->urm;
- a->urm = p->urm;
- p->urm = a;
- }
- }
- else
- head = a;
- }
- void Lista::afisare_lista()
- {
- Produse_magazin *a;
- a = head;
- if (!a)
- cout << "nu exista elem in lista";
- else
- {
- while (a)
- {
- a->afisare();
- a = a->urm;
- // _getch();
- }
- }
- }
- void introducere(Lista &l, int x) //introducere info in noduri
- {
- int tip_produs;
- char producator[50];
- int cod_produs;
- char rezolutie[50];
- char dimensiuni[100];
- char soft[100];
- int viteza;
- char format[20];
- char tip[20];
- Produse_magazin *prodMag;
- cout << "Introduceti producatorul: ";
- cin >> producator;
- cout << "Introduceti codul de produs: ";
- cin >> cod_produs;
- cout << "Introduceti rezolutia: ";
- cin >> rezolutie;
- cout << "Introduceti dimensiunile: ";
- cin >> dimensiuni;
- if (x == 0) // daca s-a ales adaugarea unui nou Scaner
- {
- Scanner *Sc;
- cout << "Introduceti softul inclus: ";
- cin >> soft;
- cout << "Introduceti viteza de scanare: ";
- cin >> viteza;
- Sc = new Scanner(1, producator, cod_produs, rezolutie, dimensiuni, soft, viteza); //apelare constructor cu info citite
- prodMag = Sc; //cast pentru clasa de baza
- l.adaugare(prodMag); //se adauga nodul
- }
- else if (x == 1) //daca s-a ales adaugarea unei pensiuni
- {
- Imprimante *Imprim;
- cout << "Introduceti formatul imprimantei: ";
- cin >> format;
- cout << "Introduceti tipul imprimantei: ";
- cin >> tip;
- Imprim = new Imprimante(2, cod_produs, producator, rezolutie, dimensiuni, format, tip);//apelare constructor cu info citite
- prodMag = Imprim;//cast pentru clasa de baza
- l.adaugare(prodMag);//se adauga nodul
- }
- }
- void main() //programul principal
- {
- int opt;
- Lista l;
- l.head = NULL;
- do
- {
- //system("CLS");
- //meniu
- cout << "1.Adaugare scanere in lista, ordonat dupa producator.\n";
- cout << "2.Adaugare imprimante in lista, ordonat dupa producator.\n";
- cout << "3.Afisare articole din magazin.\n";
- //cout << "4.Afisare scanere cu un anumit Soft_includ citit de la tastatura.\n";
- //cout << "5.Stergere articol dupa producator.\n";
- cout << "0.Iesire.\n";
- cout << "Dati optiunea dvs: ";
- cin >> opt;
- //apelare functii in functie de optiunea aleasa
- switch (opt)
- {
- case 1: introducere(l, 0);
- break;
- case 2: introducere(l, 1);
- break;
- case 3: l.afisare_lista();
- break;
- //case 4: char soft[100];
- // cout << "Introduceti numele softului pentru care se vor afisa scanerele: ";
- // cin >> soft;
- // l.afisare_conditionata(soft);
- // getch();
- // break;
- //case 5: char produc[20];
- //cout << "Introduceti producatorul care doriti sa il stergeti: ";
- //cin >> produc;
- //l.stergere(produc);
- //cout << "Apasati o tasta pt continuare...";
- //getch();
- //break;
- case 0: break;
- default:cout << "Comanda gresita!";
- }
- } while (opt != 0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement