#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
using namespace std;
class data
{
private:
int cle;
char nom[20];
char prenom[30];
char ville[20];
public:
void set_data_cle(int l_cle)
{
cle=l_cle;
};
void set_data_nom(char * l_nom)
{
strcpy(nom,l_nom);
};
void set_data_prenom(char *l_prenom)
{
strcpy(prenom,l_prenom);
};
void set_data_ville(char *l_ville)
{
strcpy(ville,l_ville);
};
int get_data_cle()
{
return(cle);
};
char *get_data_nom()
{
return(nom);
};
char *get_data_prenom()
{
return(prenom);
};
char *get_data_ville()
{
return(ville);
};
static int lire_data(data &l_d)
{
cout<< "cle:";
cin>> l_d.cle;
if(l_d.cle==-1) return(0);
cout<< "nom:";
cin>> l_d.nom;
cout<< "prenom:";
cin>> l_d.prenom;
cout<< "ville:";
cin>>l_d.ville;
return(1);
}
void print_data()
{
cout<< "\ncle=**"<<cle;
cout<< "\nnom=**"<<nom;
cout<< "\nprenom=**"<<prenom;
cout<< "\nville=**"<<ville;
}
};
class noeud
{
private :
data d;
noeud *gauche;
noeud *droite;
public:
noeud(data l_d)
{
d.set_data_cle(l_d.get_data_cle());
d.set_data_nom(l_d.get_data_nom());
d.set_data_prenom(l_d.get_data_prenom());
d.set_data_ville(l_d.get_data_ville());
gauche=droite=NULL;
}
friend class abr;
friend void affiche_abr(noeud *);
friend void chargement(FILE*fp,noeud *n);
};
class abr
{
private:
noeud *racine;
public:
abr()
{
racine=NULL;
}
void insert_abr(data );
void creer_abr();
noeud *seek_abr(int );
void save_abr(char*);
abr(char*);
void view_abr();
void delete_abr(data );
};
void abr::insert_abr(data l_d)
{
noeud **p;
p=&racine;
while(*p)
{
if(((*p)->d).get_data_cle()==l_d.get_data_cle())
exit(0);
else
{
if(((*p)->d).get_data_cle()<l_d.get_data_cle())
p=&((*p)->droite);
else p=&((*p)->gauche);
}
}
*p=new noeud(l_d);
}
void abr::creer_abr()
{
data l_d;
while(data::lire_data(l_d))
insert_abr(l_d);
};
void abr::view_abr()
{
affiche_abr(racine);
}
void affiche_abr(noeud *n )
{
if(n)
{
affiche_abr(n->gauche);
(n->d).print_data();
affiche_abr(n->droite);
}
}
noeud *abr::seek_abr(int key )
{ noeud *p=racine;
while(p)
{
if((p->d).get_data_cle()==key)
{cout<<"le voila";(p->d).print_data();
return(p);
}
else if((p->d).get_data_cle()<key)
p=p->droite;
else p=p->gauche;
}
return(NULL);
};
abr::abr(char *name)
{
FILE *fp;int l_cle; char l_nom[10],l_prenom[10],l_ville[10],s[100];data l_d;
racine=NULL;
if (!(fp=fopen(name,"r" ))) cout<<"probleme d'ouverture";
else
{
cout<<"ouverture reussite";
rewind(fp);
while(fgets(s,100,fp))
{
sscanf(s,"%3d%10s%10s%10s",&l_cle,l_nom,l_prenom,l_ville);
l_d.set_data_cle(l_cle);
l_d.set_data_nom(l_nom);
l_d.set_data_prenom(l_prenom);
l_d.set_data_ville(l_ville);
insert_abr(l_d);
cout<<"hello";
};
fclose(fp);
}
};
void abr::save_abr(char*name)
{FILE *fp;
if (!(fp=fopen(name,"w+" ))) cout<<"probleme d'ouverture";
else
{
chargement(fp,racine) ;
};
fclose(fp);
};
void chargement(FILE*fp,noeud *n)
{
if(n)
{
chargement(fp,n->gauche);
fprintf(fp,"%3d%10s%10s%10s",(n->d).get_data_cle(),(n->d).get_data_nom(),(n->d).get_data_prenom(),(n->d).get_data_ville());
chargement(fp,n->droite);
}
}
int main()
{ abr a;
a.creer_abr();
a.save_abr("jiji.txt" );
}