Está en la página 1de 12

Header.

h
#include<conio.h>
#include<string.h>
#include <iostream>
using namespace std;
template <class T>
class slista
{
public:
T *val;
class slista <T> *urm;
static slista <T> *prim;
slista <T> (T x)
{
val = new T();
val->copiere(x);
urm=NULL;
}
slista <T>* adaugare (T x);
slista<T>(){};
void afisare (slista <T>*)const;
slista<T> * stergere (slista <T> *prim,char *ptr);
slista<T> * cautare (slista <T> *prim,char *ptr1);
slista<T> * ordonare (slista <T> *prim);

};

template <class T>


slista <T> *slista<T> :: prim=NULL;

template <class T>


slista <T>* slista <T> :: adaugare (T x)
{
slista <T> *q;

q=new slista <T>(x) ;


q->urm=prim;
prim=q;
return prim;
}

template <class T>


void slista<T> :: afisare(slista <T> * prim ) const
{
slista <T> *q;
q=prim;
while(q!=NULL)
{
q->val->afisare();
q=q->urm;
}
getch();
}

template <class T>


slista <T>* slista <T> :: stergere (slista <T> *prim5,char *ptr)
{
slista <T> *r,*q;
if(strcmp(prim5->val->nume,ptr)==0)
{
q=prim5;
prim5=prim5->urm;
delete q;
return prim5;
}
else
{
q=prim5;
while ((q!=NULL) && (strcmp(q->val->nume,ptr)!=0))q=q->urm;
if (q!=NULL)
{
r=prim5;
while(r->urm!=q)r=r->urm;
r->urm=q->urm;
delete q;
};
return prim5;
}

template <class T>


slista <T> * slista <T> :: cautare (slista <T> *prim ,char *ptr1)
{
slista <T> *q;
q=prim;
while ((q!=NULL) && (strcmp(q->val->nume,ptr1)!=0) && (strcmp(q->val->nr_telefon,ptr1)!=0))
q=q->urm;
if (q!=NULL)
cout <<"Abonatul se afla in lista"<<endl;
return q;
}
template <class T>
slista<T> * slista<T> ::ordonare(slista <T> *prim)
{
slista<T> *q,*r;
T *aux;
int ok=-1;
aux=new T();
aux->nume=new char[20];
aux->prenume=new char[20];
aux->adresa=new char[20];
aux->nr_telefon=new char[20];
aux->adresa_mail=new char[20];
while(ok)
{
ok=0;
q=prim;
while(q->urm!=NULL)
{
if(strcmp(q->val->nume,q->urm->val->nume)>0)
{
strcpy(aux->nume,q->val->nume);
strcpy(aux->prenume,q->val->prenume);
strcpy(aux->adresa,q->val->adresa);
strcpy(aux->nr_telefon,q->val->nr_telefon);
strcpy(aux->adresa_mail,q->val->adresa_mail);
aux->nr_birou=q->val->nr_birou;
strcpy(q->val->nume,q->urm->val->nume);
strcpy(q->val->prenume,q->urm->val->prenume);
strcpy(q->val->adresa,q->urm->val->adresa);
strcpy(q->val->nr_telefon,q->urm->val->nr_telefon);
strcpy(q->val->adresa_mail,q->urm->val->adresa_mail);
q->val->nr_birou=q->urm->val->nr_birou;
strcpy(q->urm->val->nume,aux->nume);
strcpy(q->urm->val->prenume,aux->prenume);
strcpy(q->urm->val->adresa,aux->adresa);
strcpy(q->urm->val->nr_telefon,aux->nr_telefon);
strcpy(q->urm->val->adresa_mail,aux->adresa_mail);
q->urm->val->nr_birou=aux->nr_birou;
ok=-1;
}
q=q->urm;
}
}
return prim;
};
#include "header_pro.h"
#include <stdio.h>
#include<string.h>
#include<conio.h>
#include<iostream>
using namespace std;

class lista;

class abonat
{
public:
char *nume;
char *prenume;
char *adresa;
char *nr_telefon;
int nr_birou;
char *adresa_mail;
abonat *urm;
abonat() {};
abonat(char *,char *,char *,char *,int ,char *);
void copiere(abonat w);
virtual void afisare();
};
abonat :: abonat (char *ptr1,char *ptr2,char *ptr3,char *ptr4,int ptr5,char *ptr6)
{
nume=new char[strlen(ptr1)+1];
prenume=new char [strlen(ptr2)+1];
adresa=new char [strlen(ptr3)+1];
nr_telefon=new char [strlen(ptr4)+1];
adresa_mail=new char [strlen(ptr6)+1];
strcpy(nume,ptr1);
strcpy(prenume,ptr2);
strcpy(adresa,ptr3);
strcpy(nr_telefon,ptr4);
nr_birou=ptr5;
strcpy(adresa_mail,ptr6);
urm=NULL;

}
void abonat::copiere(abonat w)
{
nume=new char[strlen(w.nume)+1];
prenume=new char [strlen(w.prenume)+1];
adresa=new char [strlen(w.adresa)+1];
nr_telefon=new char [strlen(w.nr_telefon)+1];
adresa_mail=new char [strlen(w.adresa_mail)+1];
strcpy(nume,w.nume);
strcpy(prenume,w.prenume);
strcpy(adresa,w.adresa);
strcpy(nr_telefon,w.nr_telefon);
nr_birou=w.nr_birou;
strcpy(adresa_mail,w.adresa_mail);
urm=NULL;
}
void abonat::afisare()
{

cout<<"Numele:"<<nume<<endl;
cout<<"Prenumele:"<<prenume<<endl;
cout<<"Adresa:"<<adresa<<endl;
cout<<"Nr telefon:"<<nr_telefon<<endl;
cout<<"Nr birou:"<<nr_birou<<endl;
cout<<"Adresa mail:"<<adresa_mail<<endl;
getch();
}
class institutie
{
public:
char *nume;
institutie *urm;
slista<abonat> *sublista;
institutie(char *ptr1)
{
nume=new char[strlen(ptr1)+1];
strcpy(nume,ptr1);
urm=NULL;
sublista=NULL;
}
virtual void afisare()
{
cout<<nume<<endl;
}
};

class facultate:public institutie


{
public:
facultate(char *ptr1):institutie(ptr1)
{};
void afisare()
{
cout<<"Numele facultatii:";
institutie::afisare();
}
friend class lista;
};
class birou:public institutie
{
public:
birou(char *ptr1):institutie(ptr1){};
void afisare()
{
cout<<"Birou:";
institutie::afisare();
};
friend class lista;
};
class lista
{
public:

static institutie *prim1;


static void adaugare(institutie *f);
static void afisare_lista();
};
institutie *lista::prim1=NULL;
void lista::adaugare(institutie *f)
{
f->urm=prim1;
prim1=f;
}
void lista::afisare_lista()
{
institutie *f;
f=prim1;
if (!f) cout<<"Lista este vida!";
else while(f)
{
f->afisare();
f->sublista->afisare(f->sublista);
f=f->urm;
}
getch();
}
void introducere()
{
int j,i,ptr6,nr;
slista<abonat> *x1,*x2;
institutie *f;
char ptr1[20],ptr2[20],ptr3[30],ptr4[20],ptr5[20],ptr7[20];
cout <<"Ce doriti sa adaugati :facultate--1.....birou--0 "<<endl;
cin >>i;
if(i==1)
{
institutie *p;
cout <<"Numele facultatii este" <<endl;
cin >>ptr1;
p=new facultate(ptr1);
cout<<"Cati membrii doriti sa adaugati?"<<endl;
cin>>nr;
x1->prim=NULL;
for(j=0;j<nr;j++)
{
cout <<"Numele adaugat este : " <<endl;
cin >> ptr2;
cout <<"Prenumele adaugat este: " <<endl;
cin >> ptr3;
cout <<"Adresa adaugata este :" <<endl;
cin >> ptr4;
cout <<"Nr de telefon adaugat este :" <<endl;
cin >>ptr5;
cout <<"Nr birou adaugat este :" <<endl;
cin >> ptr6;
cout <<"Adresa de email adaugata este :" <<endl;
cin >> ptr7;
abonat t(ptr2,ptr3,ptr4,ptr5,ptr6,ptr7);
x1 = x1->adaugare(t);
}
p->sublista=x1;

lista::adaugare(p);

}
else
{
institutie *q;
cout <<"Numele biroului este" <<endl;
cin >> ptr1;
q=new birou(ptr1);
cout<<"Cati membrii doriti sa adaugati?"<<endl;
cin>>nr;
x2->prim=NULL;
for(j=0;j<nr;j++)
{
cout <<"Numele adaugat este : " <<endl;
cin >> ptr2;
cout <<"Prenumele adaugat este: " <<endl;
cin >> ptr3;
cout <<"Adresa adaugata este :" <<endl;
cin >> ptr4;
cout <<"Nr de telefon adaugat este :" <<endl;
cin >>ptr5;
cout <<"Nr birou adaugat este :" <<endl;
cin >> ptr6;
cout <<"Adresa de email adaugata este :" <<endl;
cin >> ptr7;
abonat o(ptr2,ptr3,ptr4,ptr5,ptr6,ptr7);
x2=x2->adaugare(o);
}
q->sublista=x2;

lista::adaugare(q);

}
}
void stergere2()
{
institutie *r;
char *num;
r=lista::prim1;
num=new char[20];
cout <<"Numele abonatului pe care doriti sa il stergeti este:" <<endl;
cin >>num;
while(r!=NULL)
{
r->sublista=r->sublista->stergere(r->sublista,num);
r=r->urm;
};
}

void cautare2()
{
institutie *r;
slista<abonat> *p;
char inst[20];
char a[20],b[20];
r=lista :: prim1;
cout <<"Introduceti numele sau nr. de telefon al abonatului pe care il cautati " <<endl;
cin >>a;
cout <<"Introduceti biroul sau facultatea in care faceti cautarea" <<endl;
cin >>b;

while((r!=NULL)&&(strcmp(r->nume,b)!=0))
{
r=r->urm;
}
if(r!=NULL)
p=r->sublista->cautare(r->sublista,a);
else cout<<"Nu exista biroul sau facultate in care faceti cautarea"<<endl;
}

void modificare_tel (void)


{
char nu[20];
slista<abonat> *p;
institutie *r;
cout <<"Numele abonatului al carui nr de telefon il schimbati este :" <<endl;
cin >>nu;
r=lista::prim1;
while(r!=NULL)
{
p=r->sublista->cautare(r->sublista,nu);
if(p!=NULL)
{
cout<<"Introduceti numarul nou de telefon:";
cin>>p->val->nr_telefon;
break;
}
}
if(r==NULL)cout<<"Nu exista abonatul introdus!"<<endl;
}
void ordonare()
{
institutie *p;
p=lista::prim1;
while(p!=NULL)
{
p->sublista=p->sublista->ordonare(p->sublista);
p=p->urm;
}
}
void afisare_partiala()
{
institutie *p;
char num[20];
p=lista::prim1;
cout<<"Introduceti institutia de afisat:";
cin>>num;
while((p!=NULL)&&(strcmp(p->nume,num)!=0))p=p->urm;
if (p==NULL)cout<<"Nu exista institutia introdusa!"<<endl;
else p->sublista->afisare(p->sublista);
}
void mutare()
{
institutie *p,*w;
slista<abonat> *x,*z;
char cine[20],sosire[20];
cout<<"Introduceti numele abonatului mutat:";
cin>>cine;
cout<<"Introduceti numele institutiei unde este mutat abonatul:";
cin>>sosire;
p=lista::prim1;
while(p!=NULL)
{
x=p->sublista->cautare(p->sublista,cine);
if(x!=NULL)break;
p=p->urm;
};
p=lista::prim1;
while((p!=NULL)&&(strcmp(p->nume,sosire)!=0))p=p->urm;
if(x==NULL)cout<<"Nu exista abonatul introdus!"<<endl;
else if(p==NULL) cout<<"Nu exista institutia introdusa!"<<endl;
else
{
abonat y (x->val->nume,x->val->prenume,x->val->adresa,x->val->nr_telefon,x->val->nr_birou,x->val-
>adresa_mail);
p->sublista->prim=p->sublista;
p->sublista=p->sublista->adaugare(y);
w=lista::prim1;
while(w!=NULL)
{
z=w->sublista;
while((z!=NULL)&&(z!=x))z=z->urm;
if (z!=NULL)break;
else w=w->urm;
}
w->sublista=w->sublista->stergere(w->sublista,cine);
}
}
void scriere()
{
institutie *p;
slista<abonat> *q;
FILE *sd;
sd=fopen("Fisier.txt","wt");
p=lista::prim1;
while(p!=NULL)
{
fprintf(sd,"%s \n \n",p->nume);
q=p->sublista;
while(q!=NULL)
{
fprintf(sd,"Nume: %s \n",q->val->nume);
fprintf(sd,"Prenume: %s \n",q->val->prenume);
fprintf(sd,"Adresa: %s \n",q->val->adresa);
fprintf(sd,"Numar Telefon: %s \n",q->val->nr_telefon);
fprintf(sd,"Numar Birou: %s \n",q->val->nr_birou);
fprintf(sd,"Adresa Mail: %s \n",q->val->adresa_mail);
q=q->urm;
}
fprintf(sd,"\n --------------------------------");
p=p->urm;
}
fclose(sd);
}
int main()
{
int k=0;

while(k!=9)
{
cout <<"1.Adaugare abonat nou." <<endl;
cout <<"2.Afisarea unei institutii "<<endl;
cout <<"3.Stergere" <<endl;
cout <<"4.Cautare dupa nume sau nr.telefon intr-un anumit birou sau facultate" <<endl;
cout <<"5.Schimbare numar de telefon al unui abonat"<<endl;
cout <<"6.Ordonare"<<endl;
cout <<"7.Mutare"<<endl;
cout <<"8.Scriere in fisier"<<endl;
cout <<"9.Iesire"<<endl;
cout <<"Optiunea dumneavoastra este:"<<endl;
cin >>k;
switch(k)
{
case 1:introducere();
break;
case 2:afisare_partiala();
break;
case 3:stergere2();
break;
case 4:cautare2();
break;
case 5:modificare_tel();
break;
case 6:ordonare();
break;
case 7:mutare();
break;
case 8:scriere();
break;
case 9:return 0;
}
}

return 0;
}

También podría gustarte