Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <string.h>
- #include <fstream>
- #include <conio.h>
- using namespace std;
- class domeniu;
- class telefon_fix;
- class telefon_mobil;
- //structura in care se retina data calendaristica
- struct magazin
- {
- int zi, luna, an;
- };
- //clasa lista
- template <class T> class lista
- {
- T *rad;
- T *point;
- public:
- lista();
- ~lista();
- void adaugare(T *q);
- T* cautare(char *nume);
- int stergere(char *nume);
- //returneaza primul nod
- T* prim()
- {
- point = rad;
- return point;
- }
- //returneaza urmatorul nod
- T* next()
- {
- if (point != NULL)
- point = point->urm;
- return point;
- }
- //returneaza daca un nod este vid sau nu
- int vid()
- {
- if (rad == NULL)
- return 1;
- else
- return 0;
- }
- void elibereaza();
- void afisare();
- };
- //se initializeaza radacina cu NULL
- template <class T> lista<T>::lista()
- {
- rad = NULL;
- }
- //stergere lista
- template <class T> void lista<T>::elibereaza()
- {
- T *p, *q;
- for (p = rad; p != NULL; p = q)
- {
- //se inainteaza in lista si se sterg nodurile
- q = p->urm;
- delete p;
- }
- //radacina devine null
- rad = NULL;
- }
- //destructorul care sterge lista
- template <class T> lista<T>::~lista()
- {
- elibereaza();
- }
- //adaugare nod in lista
- template <class T> void lista<T>::adaugare(T *q)
- {
- T *p;
- //daca lista e nula se adauga primul nod
- if (rad == NULL) {
- rad = q;
- return;
- }
- //se adauga ordonat in lista nodurile urmatoare
- for (p = rad; p->urm != NULL; p = p->urm)
- if (strcmp(p->urm->nume, q->nume) > 0)
- break;
- q->urm = p->urm;
- p->urm = q;
- }
- //stergere element in lista
- template <class T> int lista<T>::stergere(char *aux)
- {
- T *p, *q;
- //daca nu sunt elemente in lista
- if (rad == NULL)
- return 0;
- //daca se sterge primul nod
- if (strcmp(rad->nume, aux) == 0)
- {
- q = rad;
- rad = rad->urm;
- delete q;
- return 1;
- }
- //daca se sterge nod in interiorul listei
- for (p = rad; p->urm != NULL; p = p->urm)
- if (strcmp(p->urm->nume, aux) == 0)
- {
- q = p->urm;
- p->urm = p->urm->urm;
- delete q;
- return 1;
- }
- return 0;
- }
- //cautare nod in lista
- template <class T> T* lista<T>::cautare(char *aux)
- {
- T *p;
- for (p = rad; p != NULL; p = p->urm)
- if (strcmp(p->nume, aux) == 0)
- return p;
- return NULL;
- }
- //afisare lista
- template <class T> void lista<T>::afisare()
- {
- T *p;
- for (p = rad; p != NULL; p = p->urm)
- p->afisare();
- }
- class telefon_fix
- {
- char *producator;
- char *culoare;
- char *dimensiune;
- int an;
- int nr;
- telefon_fix *urm;
- public:
- magazin impr;
- telefon_fix(char *, char *, char *, int,int, magazin);
- ~telefon_fix();
- void afisare();
- char* autorbook()
- {
- return culoare;
- }
- char* numebook()
- {
- return producator;
- }
- char* cotabook()
- {
- return dimensiune;
- }
- int anbook()
- {
- return an;
- }
- int nrbook()
- {
- return nr;
- }
- friend class lista<telefon_fix>;
- };
- telefon_fix::telefon_fix(char *n, char *t, char *c,int a, int N, magazin i)
- {
- producator = new char[strlen(n) + 1];
- strcpy(producator, n);
- culoare = new char[strlen(t) + 1];
- strcpy(culoare, t);
- dimensiune = new char[strlen(c) + 1];
- strcpy(dimensiune, c);
- an = a;
- nr = N;
- impr = i;
- urm = NULL;
- }
- telefon_fix::~telefon_fix()
- {
- delete[] producator;
- delete[] culoare;
- delete[] dimensiune;
- impr.zi = impr.luna = impr.an = 0;
- an = nr = 0;
- }
- void telefon_fix::afisare()
- {
- cout << endl;
- cout << "Autorul: " << producator << endl;
- cout << "Titlu: " << culoare << endl;
- cout << "Cota: " << dimensiune << endl;
- cout << "Anul aparitiei: " << an << endl;
- cout << "Numar editie: " << nr << endl;
- cout << "Imprumutata(0/calendar): ";
- if (impr.zi == 0)
- cout << impr.zi << endl;
- else
- cout << impr.zi << "/" << impr.luna << "/" << impr.an << endl;
- }
- //class telefon_fix
- //{
- // char *producator;
- // char *culoare;
- // char *dimensiune;
- //
- // int an;
- // int nr;
- // telefon_fix *urm;
- //public:
- // magazin impr;
- // telefon_fix(char *, char *, char *, int, int, magazin);
- // ~telefon_fix();
- // void afisare();
- // char* autorbook()
- // {
- // return culoare;
- // }
- // char* numebook()
- // {
- // return producator;
- // }
- // char* cotabook()
- // {
- // return dimensiune;
- // }
- //
- // int anbook()
- // {
- // return an;
- // }
- // int nrbook()
- // {
- // return nr;
- // }
- // friend class lista<telefon_fix>;
- //};
- //
- //telefon_fix::telefon_fix(char *n, char *t, char *c, int a, int N, magazin i)
- //{
- // producator = new char[strlen(n) + 1];
- // strcpy(producator, n);
- // culoare = new char[strlen(t) + 1];
- // strcpy(culoare, t);
- // dimensiune = new char[strlen(c) + 1];
- // strcpy(dimensiune, c);
- //
- // an = a;
- // nr = N;
- // impr = i;
- // urm = NULL;
- //}
- //
- //telefon_fix::~telefon_fix()
- //{
- // delete[] producator;
- // delete[] culoare;
- // delete[] dimensiune;
- // impr.zi = impr.luna = impr.an = 0;
- // an = nr = 0;
- //}
- //
- //void telefon_fix::afisare()
- //{
- // cout << endl;
- // cout << "Autorul: " << producator << endl;
- // cout << "Titlu: " << culoare << endl;
- // cout << "Cota: " << dimensiune << endl;
- //
- // cout << "Anul aparitiei: " << an << endl;
- // cout << "Numar editie: " << nr << endl;
- // cout << "Imprumutata(0/calendar): ";
- // if (impr.zi == 0)
- // cout << impr.zi << endl;
- // else
- // cout << impr.zi << "/" << impr.luna << "/" << impr.an << endl;
- //}
- class domeniu
- {
- protected:
- char *nume;
- lista<telefon_fix> book;
- domeniu *urm;
- public:
- domeniu(char *);
- ~domeniu();
- void adaugarebook(telefon_fix *q)
- {
- book.adaugare(q);
- }
- telefon_fix* cautarebook(char *aux)
- {
- return book.cautare(aux);
- }
- int stergerebook(char *aux)
- {
- return book.stergere(aux);
- }
- char* numedom()
- {
- return nume;
- }
- telefon_fix* primbook()
- {
- return book.prim();
- }
- telefon_fix* nextbook()
- {
- return book.next();
- }
- virtual void afisare();
- friend class lista<domeniu>;
- };
- domeniu::domeniu(char *n)
- {
- nume = new char[strlen(n) + 1];
- strcpy(nume, n);
- urm = NULL;
- }
- domeniu::~domeniu()
- {
- delete[] nume;
- }
- void domeniu::afisare()
- {
- cout << endl;
- cout << "Domeniu: " << nume << endl;
- book.afisare();
- }
- class magazin
- {
- lista<domeniu> dom;
- public:
- void adaugaredom(domeniu *aux)
- {
- dom.adaugare(aux);
- }
- domeniu* cautaredom(char *aux)
- {
- return dom.cautare(aux);
- }
- int stergeredom(char *aux)
- {
- return dom.stergere(aux);
- }
- void elibereaza()
- {
- dom.elibereaza();
- }
- void afisare()
- {
- dom.afisare();
- }
- domeniu* primdom()
- {
- return dom.prim();
- }
- domeniu* nextdom()
- {
- return dom.next();
- }
- };
- void meniu()
- {
- cout << endl;
- cout << "1.Incarcare biblioteca dintr-un fisier" << endl;
- cout << "2.Creare domeniu nou" << endl;
- cout << "3.Adaugare carte la un anumit domeniu" << endl;
- cout << "4.Cautare carte in biblioteca" << endl;
- cout << "5.Stergere carte din biblioteca" << endl;
- cout << "6.Salvare in fisier a bibliotecii" << endl;
- cout << "7.Iesire" << endl;
- cout << "0.Afisare" << endl;
- cout << "Optiunea: " << endl;
- }
- telefon_fix* read_book()
- {
- telefon_fix *c;
- char producator[100];
- char culoare[100];
- char dimensiune[100];
- int an;
- int nr;
- magazin impr;
- cout << "\nAutor: "; cin >> producator;
- cout << "\nTitlu: "; cin >> culoare;
- cout << "\nCota: "; cin >> dimensiune;
- cout << "\nAnul aparitiei: "; cin >> an;
- cout << "\nNumar editie: "; cin >> nr;
- cout << "\nImprumutata(0/calendar-zi luna an): ";
- cin >> impr.zi;
- if (impr.zi == 0)
- impr.luna = impr.an = 0;
- else
- {
- cin >> impr.luna;
- cin >> impr.an;
- }
- c = new telefon_fix(producator, culoare, dimensiune, an, nr, impr);
- return c;
- }
- //citire date din fisier
- void cit_fisier(magazin *b)
- {
- domeniu *d;
- telefon_fix *c;
- ifstream f;
- char aux, producator[100], culoare[100], dimensiune[100];
- magazin impr;
- int an, nr;
- f.open("carti.txt");
- while (!f.eof()) {
- aux = f.get();
- if (aux == 'd') {
- f.ignore(1);
- f.getline(producator, 20);
- d = new domeniu(producator);
- b->adaugaredom(d);
- }
- if (aux == 'c') {
- f.ignore(1);
- f >> producator;
- f >> culoare;
- f >> dimensiune;
- f >> an;
- f >> nr;
- f >> impr.zi;
- if (impr.zi == 0)
- impr.luna = impr.an = 0;
- else
- {
- f >> impr.luna;
- f >> impr.an;
- }
- c = new telefon_fix(producator, culoare, dimensiune, an, nr, impr);
- if (d != NULL) d->adaugarebook(c);
- f.ignore(1000, '\n');
- }
- }
- f.close();
- }
- void save_fisier(magazin *b)
- {
- domeniu *d;
- telefon_fix *c;
- ofstream f;
- f.open("carti.txt");
- d = b->primdom();
- while (d != NULL) {
- f << "d ";
- f << d->numedom() << "\n";
- c = d->primbook();
- while (c != NULL) {
- f << "c " << c->autorbook() << " " << c->numebook() << " " << c->cotabook() << " ";
- f << c->anbook() << " " << c->nrbook() << " ";
- if (c->impr.zi == 0)
- f << c->impr.zi << "\n";
- else
- f << c->impr.zi << " " << c->impr.luna << " " << c->impr.an << "\n";
- c = d->nextbook();
- }
- d = b->nextdom();
- }
- }
- int main()
- {
- int opt, x;
- telefon_fix *c = NULL;
- domeniu *d = NULL;
- magazin b;
- char aux[100];
- do {
- meniu();
- cin >> opt;
- switch (opt)
- {
- case 1: cit_fisier(&b);
- b.afisare();
- getch();
- break;
- case 2: cout << "\n Introduceti numele domeniului: ";
- cin >> aux;
- d = b.cautaredom(aux);
- if (d == NULL)
- {
- d = new domeniu(aux);
- b.adaugaredom(d);
- cout << "\n Domeniul a fost adaugat"; getch();
- }
- else
- {
- cout << "\n Domeniul exista deja !";
- getch();
- }
- d = NULL;
- b.afisare();
- getch();
- break;
- case 3:cout << "\n Introduceti numele domeniului:";
- cin >> aux;
- d = b.cautaredom(aux);
- if (d == NULL)
- {
- cout << "\n Domeniul introdus nu exista!";
- getch();
- }
- else
- {
- c = read_book();
- d->adaugarebook(c);
- }
- d = NULL;
- c = NULL;
- b.afisare();
- getch();
- break;
- case 4:cout << "\n Introduceti numele domeniului: ";
- cin >> aux;
- d = b.cautaredom(aux);
- if (d == NULL)
- {
- cout << "\n Domeniul introdus nu exista!";
- getch();
- }
- else
- {
- cout << "\n Introduceti titlul cartii: ";
- cin >> aux;
- c = d->cautarebook(aux);
- if (c != NULL)
- {
- cout << "\n Cartea se afla in biblioteca";
- getch();
- }
- else
- {
- cout << "\n Cartea nu se afla in biblioteca"; getch();
- }
- }
- break;
- case 5:cout << "\n Introduceti numele domeniului: ";
- cin >> aux;
- d = b.cautaredom(aux);
- if (d == NULL)
- {
- cout << "\n Domeniul introdus nu exista";
- getch();
- }
- else
- {
- cout << "\n Introduceti titlul cartii: ";
- cin >> aux;
- x = d->stergerebook(aux);
- }
- if (x == 1)
- {
- cout << "\n Cartea a fost stearsa";
- getch();
- }
- else
- {
- cout << "\n Cartea nu se afla in biblioteca"; getch();
- }
- break;
- case 6: save_fisier(&b);
- cout << "\n Datele au fost salvate in fisier"; getch();
- break;
- case 7: break;
- case 0: b.afisare();
- getch();
- break;
- default: cout << "\n Optiune gresita";
- break;
- }
- } while (opt != 7);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement