Exemple d'utilsation des fonctions local en C++, liste chainée circulaire.
# include <alloc.h>
# include <fcntl.h>
# include <io.h>
# include <sys\stat.h>
void cls(void);
char menu(void);
void ajouter(void);
void lister(void);
void cherche(void);
void ecrire(void);
void suprime(void);
struct aderant
{
struct aderant *apres;
struct aderant *avant;
char nom[20];
int age;
};
struct aderant *debut , *dernier, *preced;
void main(void)
{
char option;
debut = (struct aderant *) malloc(sizeof(*debut) );
preced = dernier = debut;
while ((option = menu()) != 27)
{
cls();
switch(option)
{
case 59:
ajouter();
break;
case 60:
lister();
break;
case 61:
cherche();
break;
case 62:
suprime();
break;
case 63:
ecrire();
break;
default:
break;
}
}
cls();
return 0;
}
void cls(void)
{
puts("\33[H\33[2J");
}
char menu(void)
{
char touche;
printf("\n\t F1 - Ajouter une fiche ");
printf("\n\t F2 - liste des fiches ");
printf("\n\t F3 - Chercher une fiche ");
printf("\n\t F4 - Supprimer une fiche ");
printf("\n\t F5 - Ecrire sur disque ");
printf("\n\t ESC - Fin de programme ");
if ((touche = getch())==0)
touche = getch();
return(touche);
}
void ajouter(void)
{
struct aderant *ptr = dernier;
printf("\n Entrez votre nom :");
scanf("%s",&ptr->nom);
printf("\Entrez votre age :" );
scanf("%d",&ptr->age);
dernier = (struct aderant *) malloc(sizeof *dernier);
ptr->avant = preced;
ptr->apres = dernier;
preced = ptr;
}
void lister(void)
{
struct aderant *ptr;
for( ptr = debut; ptr != dernier; ptr = ptr->apres )
printf("\n Nom / %s : Age : %d ", ptr->nom, ptr->age);
}
void cherche(void)
{
struct aderant *ptr;
char reponse[20];
printf("Entrez le nom rechercher :");
scanf("%s",&reponse);
for( ptr = debut ; ptr != dernier ; ptr = ptr->apres )
if( strcmp(reponse,ptr->nom) == 0 )
{
printf("Nom :%s Age :%d \n",ptr->nom,ptr->age);
return;
}
printf("Pas trouve..\n");
}
void ecrire(void)
{
struct aderant *ptr;
int fd1,fd2;
long numero=0;
fd1 = open("donne.dat", O_CREAT | O_BINARY , S_IREAD | S_IWRITE);
fd2 = open("donne.ind", O_CREAT | O_BINARY , S_IREAD | S_IWRITE);
for( ptr = debut; ptr != dernier; ptr = ptr->apres, numero++ );
{
lseek(fd1, numero * sizeof(*ptr),0);
lseek(fd2, numero * sizeof(int),0);
write(fd1,(char *)&ptr,sizeof(*ptr));
write(fd2,(char *)&ptr->age,sizeof(int));
}
close(fd1);
close(fd2);
}
void suprime(void)
{
struct aderant *ptr;
char reponse[20];
printf("Entrez le nom … supprimer :");
scanf("%s",&reponse);
for( ptr = debut; ptr != dernier ; ptr = ptr->apres)
if(strcmp(reponse,ptr->nom) == 0)
{
if( ptr = debut)
{
debut = ptr->apres;
free(ptr);
return;
}
if( (ptr->apres) == dernier)
{
free(dernier);
dernier = ptr;
return;
}
(ptr->avant)->apres = ptr->apres ;
(ptr->apres)->avant = ptr->avant;
free(ptr);
return;
}
printf("\n %s Pas trouve ",reponse);
}