#include #include ///************** ++++++ PERSOANA ++++++ **************** class persoana{ public: char* nume,*loc; long int telefon; persoana(char* n="Necunoscut",char *l="Necunoscut", long int tel=0):telefon(tel){ nume=new char[30]; loc=new char[30]; strcpy(nume,n); strcpy(loc,l); } friend ostream &operator<<(ostream &out,persoana p); friend istream &operator>>(istream &in, persoana &p); }; ostream &operator<<(ostream &out,persoana p){ out<<"Nume: "<>(istream &in,persoana& p){ cout<<"Nume: "; in>>p.nume; cout<<"Locatie: "; in>>p.loc; cout<<"Telefon: "; in>>p.telefon; return in; } ///************** ---- persoana ---- **************** templateclass nod{ public: T info; nod *next; nod(T i){ info=i;next=NULL; }; }; ///************** ++++++ LISTA +++++++ **************** template class lista { public: nod *cap; lista() { cap=NULL;} void operator+(T p){ nod *a=new nod(p); nod *p1; if(!cap) cap=a; else{ for(p1=cap;p1->next!=NULL;p1=p1->next); p1->next=a; } }; int operator-(char* nume){ nod *p1,*p2; int gasit=0; for (p1=cap;p1!=NULL;p1=p1->next) if(strcmp(p1->info.nume , nume)==0){ gasit=1; if (p1==cap) cap=cap->next; else {for(p2=cap;p2->next!=p1;p2=p2->next); p2->next=p1->next; delete(p1); break; } } return gasit; } void swap(T *p1, T *p2){ T aux; aux=*p1; *p1=*p2; *p2=aux; } void sort_num(){ nod *p1; int gasit; do{ gasit=0; if(cap->next!=NULL){ for(p1=cap;p1->next!=NULL;p1=p1->next){ if ( strcmp(p1->info.nume,p1->next->info.nume)>0 ) {swap(&p1->info,&p1->next->info); gasit=1;} } } } while(gasit==1); } void sort_loc(){ nod *p1; int gasit; do{ gasit=0; for(p1=cap;p1->next!=NULL;p1=p1->next){ if ( strcmp(p1->info.loc,p1->next->info.loc)>0 ) { swap(&p1->info,&p1->next->info); gasit=1;} } } while(gasit==1); } void sort_tel(){ nod *p1; int gasit; do{ gasit=0; for(p1=cap;p1->next!=NULL;p1=p1->next){ if ( p1->info.telefon>p1->next->info.telefon ) { swap(&p1->info,&p1->next->info); gasit=1;} } } while(gasit==1); } }; ///************** ------ lista ------ **************** ///********* ++++++ AGENDA TELEFONICÃ +++++++ *********** class agenda{ public: lista lnum,lloc,ltel; void operator+(persoana p){ lnum+p; lnum.sort_num(); lloc+p; lloc.sort_loc(); ltel+p; ltel.sort_tel(); } int operator-(char* nume){ lloc-nume; ltel-nume; return lnum-nume; } friend ostream &operator<<(ostream &out,agenda a); friend istream &operator>>(istream &in, agenda &a); persoana* operator[](char* str){ nod *p; for(p=lnum.cap;p!=NULL;p=p->next) if(! strcmp(p->info.nume,str) ) return &p->info; return NULL; } }; ostream &operator<<(ostream &out,agenda a){ nod *p; char opt; cout<<"\nAgenda contine urmatoarele persoane:"; cout<<"\nIntroduceti o optiune (n-dupa nume; l-dupa localitate; t-dupa telefon): "; cin>>opt; switch(opt){ case 'n':p=a.lnum.cap;break; case 't':p=a.ltel.cap;break; case 'l':p=a.lloc.cap;break; default:p=NULL;break; } for(;p!=NULL;p=p->next) cout<info<<"\n\n"; return out; } istream &operator>>(istream &in, agenda &a){ int n; cout<<"Cate persoane? "; cin>>n; for (int i=1;i<=n;i++){ persoana p; cout<<"\nPersoana "<>p; a+(p); p.~persoana(); } return in; } ///********* ------ Agenda telefonicã ------ *********** ///********* ++++++++++ MAIN +++++++++++++ *********** void main(){ agenda a; char* str=new char[30]; cin>>a; cout<>str; p2=a[str]; if (p2) cout<<(*p2); else cout<<"Persoana "<>(*p); a+(*p); cout<>str; if(!(a-str)) cout<<"\nPersoana "<