- //Bibliothèques à inclure
- #include <stdio.h> //pour printf(),scanf(),gets(),fflush()
- #include <stdlib.h> //utilisé pour malloc() et free()
- #include <conio.h> //utilisé pour clrscr(), textcolor() et getch()
-
-
- //Constantes
- #define TAILLE_PRENOM 30
- #define NB_CONTACT_MAX 30
-
- //Structure
- typedef struct p_maillon maillon;
- struct p_maillon {
- char prenom[TAILLE_PRENOM];
- char tel[15];
- maillon *suivant; //pointeur sur le maillon suivant
- };
-
- //Prototypes des fonctions
- maillon* InsereNom(maillon *precedent); //Insere un nouveau contact à l'agenda
- maillon* InsereTete(void); //Insere le premier contact
- void Affiche(maillon* tete,int cmpt); //Affiche tout votre agenda
-
-
- void main(void)
- {
- maillon *liste[NB_CONTACT_MAX]; //Tableau de pointeur sur les différents maillons
- char choix, quitter; //Caractère utilisé dans le menu
- int C_contact=0,i; //C_contact est le compteur de contact cad qu'il indique le nbre de personne enregistre dans la liste
-
- textcolor(240); //Changement de la couleur de la console
- do
- {
- do
- {
- clrscr(); //On efface l'écran
- fflush(stdin); //On vide le tampon du clavier
- printf("\\t - AGENDA TELEPHONIQUE -\\n\\n\\n");
- printf(" Que voulez faire :\\n\\n");
- printf(" Ajouter un nouveau contact à lagenda...............taper 1\\n");
- printf(" Afficher les contacts de lagenda...................taper 2\\n");
- printf(" Quitter l'agenda telephonique......................taper q\\n");
- printf("\\tVotre choix : ");
- scanf("%c",&choix);
- }
- while(choix!='1' && choix!='2' && choix!='q'); //on ne sort pas de la boucle tant que le choix n'est pas valide
-
- //Selon le choix de l'utilisateur
- switch(choix)
- {
- case '1' : if(C_contact==0) //Si cest le premier contact a etre inserer
- {
- liste[0]=InsereTete(); //on utilise la fonction InsereTete()
- C_contact++; //on incremente le nb de contact
- }
- else
- {
- liste[C_contact]=InsereNom(liste[C_contact-1]); //On utilise la fonction InsereNom
- C_contact++; //on incrément le nb de contacts
- }
- break;
-
- case '2' : Affiche(liste[0],C_contact); //AFFICHAGE COMPLET DE L'AGENDA
- break;
-
- case 'q' : quitter=1; //on met la variable quitter à 1 pour sortir de la grande boucle
- break;
-
- default : quitter=0; //on met la variable quitter à 0 pour eviter de sortir de la boucle
- break;
- }
- } while(quitter!=1);
-
- clrscr(); //on efface lecran
- printf("\\n\\n Au revoir.........");
- if(C_contact!=0) //On libère seulement la memoire que lon a alloué
- for(i=0;liste[i]->suivant!=NULL;i++)
- free(liste[i]);
- getch();
-
- }
-
-
-
- // AJOUTE UN NOUVEAU CONTACT DANS L'AGENDA
- maillon* InsereNom(maillon *precedent)
- {
- //Variables locales
- char prenom[TAILLE_PRENOM];
- char tel[15];
- maillon *p; //pointeur sur maillon qui sera renvoyé par la fonction
-
- clrscr();
- printf("\\t - AJOUT DUN CONTACT A LAGENDA-\\n\\n");
- p=(maillon *)malloc(sizeof(maillon)); //on alloue un espace memoire à p de la taille d'un maillon
- if(p!= NULL) //si p est different de NULL donc si la memoire a pu etre allouée
- {
- fflush(stdin);
- printf("Entrer le nom : ");
- gets(p->prenom); //on demande le prenom et on le stock dans le champ prenom du maillon p
- printf("Entrer le numero de telephone : ");
- gets(p->tel); //on demande le numero de telephone et on le stock dans le champ tel du maillon p
- p->suivant=NULL; //Le maillon suivant n'existe pas encore donc on met l'addresse NULL dans le champ *suivant du maillon p
- precedent->suivant=p; //On met l'addresse de p dans le champ *suivant du maillon precedent mis en paramètre
- }
- return p; //et on retourne le pointeur sur maillon p
- }
-
-
-
- // CREE LE PREMIER CONTACT DE l'AGENDA
- maillon* InsereTete(void)
- {
- maillon *p; //pointeur sur maillon qui sera renvoyé par la fonction
- char prenom[TAILLE_PRENOM];
- char tel[15];
-
- clrscr(); //on efface l'ecran
- fflush(stdin); //on vide le tampon du clavier au cas ou
- printf("\\t - AJOUT DUN CONTACT A LAGENDA-\\n\\n");
- p=(maillon*)malloc(sizeof(maillon)); //on alloue un espace memoire a p de la taille d'un maillon
- if(p!=NULL)
- {
- printf("Entrer le nom du nouveau contact : ");
- gets(p->prenom);
- printf("Son numero de telephone : ");
- gets(p->tel);
- p->suivant=NULL;
- }
- return p; //on retourne le pointeur
- }
-
-
-
- // AFFICHE LE CONTENU DE L'AGENDA
- void Affiche(maillon* tete,int cmpt) //*tete correspond à l'adresse du premier maillon et cmpt au nombre de contact dans l'agenda
- {
- maillon* temp; //pointeur temporaire pour naviguer entre les differents maillons
- int i;
-
- clrscr();
- printf("\\t - AFFICHAGE DUN CONTACT -\\n\\n");
- printf("Voici tous vos contact : \\n\\n");
- if(cmpt==0) printf("Il n'y a aucun contact de sauvegarder dans l'agenda");
- else
- {
- temp=tete; //le pointeur temp pointe le meme maillon que tete
- while(i!=0)
- {
- if(temp->suivant==NULL) //si le maillon d'apres n'existe pas
- {
- printf("%s\\t",temp->prenom); //on affiche quand meme les different champ du maillon
- printf("%s\\n",temp->tel);
- i=0; //on affecte 0 à i pour sortir de la boucle
- }
- else
- {
- printf("%s\\t",temp->prenom);
- printf("%s\\n",temp->tel);
- temp=temp->suivant; //temp prend l'adresse du maillon suivant
- }
- }
- }
- getch(); //pour avoir le temps de voir s'afficher lagenda
- }
//Bibliothèques à inclure
#include <stdio.h> //pour printf(),scanf(),gets(),fflush()
#include <stdlib.h> //utilisé pour malloc() et free()
#include <conio.h> //utilisé pour clrscr(), textcolor() et getch()
//Constantes
#define TAILLE_PRENOM 30
#define NB_CONTACT_MAX 30
//Structure
typedef struct p_maillon maillon;
struct p_maillon {
char prenom[TAILLE_PRENOM];
char tel[15];
maillon *suivant; //pointeur sur le maillon suivant
};
//Prototypes des fonctions
maillon* InsereNom(maillon *precedent); //Insere un nouveau contact à l'agenda
maillon* InsereTete(void); //Insere le premier contact
void Affiche(maillon* tete,int cmpt); //Affiche tout votre agenda
void main(void)
{
maillon *liste[NB_CONTACT_MAX]; //Tableau de pointeur sur les différents maillons
char choix, quitter; //Caractère utilisé dans le menu
int C_contact=0,i; //C_contact est le compteur de contact cad qu'il indique le nbre de personne enregistre dans la liste
textcolor(240); //Changement de la couleur de la console
do
{
do
{
clrscr(); //On efface l'écran
fflush(stdin); //On vide le tampon du clavier
printf("\\t - AGENDA TELEPHONIQUE -\\n\\n\\n");
printf(" Que voulez faire :\\n\\n");
printf(" Ajouter un nouveau contact à lagenda...............taper 1\\n");
printf(" Afficher les contacts de lagenda...................taper 2\\n");
printf(" Quitter l'agenda telephonique......................taper q\\n");
printf("\\tVotre choix : ");
scanf("%c",&choix);
}
while(choix!='1' && choix!='2' && choix!='q'); //on ne sort pas de la boucle tant que le choix n'est pas valide
//Selon le choix de l'utilisateur
switch(choix)
{
case '1' : if(C_contact==0) //Si cest le premier contact a etre inserer
{
liste[0]=InsereTete(); //on utilise la fonction InsereTete()
C_contact++; //on incremente le nb de contact
}
else
{
liste[C_contact]=InsereNom(liste[C_contact-1]); //On utilise la fonction InsereNom
C_contact++; //on incrément le nb de contacts
}
break;
case '2' : Affiche(liste[0],C_contact); //AFFICHAGE COMPLET DE L'AGENDA
break;
case 'q' : quitter=1; //on met la variable quitter à 1 pour sortir de la grande boucle
break;
default : quitter=0; //on met la variable quitter à 0 pour eviter de sortir de la boucle
break;
}
} while(quitter!=1);
clrscr(); //on efface lecran
printf("\\n\\n Au revoir.........");
if(C_contact!=0) //On libère seulement la memoire que lon a alloué
for(i=0;liste[i]->suivant!=NULL;i++)
free(liste[i]);
getch();
}
// AJOUTE UN NOUVEAU CONTACT DANS L'AGENDA
maillon* InsereNom(maillon *precedent)
{
//Variables locales
char prenom[TAILLE_PRENOM];
char tel[15];
maillon *p; //pointeur sur maillon qui sera renvoyé par la fonction
clrscr();
printf("\\t - AJOUT DUN CONTACT A LAGENDA-\\n\\n");
p=(maillon *)malloc(sizeof(maillon)); //on alloue un espace memoire à p de la taille d'un maillon
if(p!= NULL) //si p est different de NULL donc si la memoire a pu etre allouée
{
fflush(stdin);
printf("Entrer le nom : ");
gets(p->prenom); //on demande le prenom et on le stock dans le champ prenom du maillon p
printf("Entrer le numero de telephone : ");
gets(p->tel); //on demande le numero de telephone et on le stock dans le champ tel du maillon p
p->suivant=NULL; //Le maillon suivant n'existe pas encore donc on met l'addresse NULL dans le champ *suivant du maillon p
precedent->suivant=p; //On met l'addresse de p dans le champ *suivant du maillon precedent mis en paramètre
}
return p; //et on retourne le pointeur sur maillon p
}
// CREE LE PREMIER CONTACT DE l'AGENDA
maillon* InsereTete(void)
{
maillon *p; //pointeur sur maillon qui sera renvoyé par la fonction
char prenom[TAILLE_PRENOM];
char tel[15];
clrscr(); //on efface l'ecran
fflush(stdin); //on vide le tampon du clavier au cas ou
printf("\\t - AJOUT DUN CONTACT A LAGENDA-\\n\\n");
p=(maillon*)malloc(sizeof(maillon)); //on alloue un espace memoire a p de la taille d'un maillon
if(p!=NULL)
{
printf("Entrer le nom du nouveau contact : ");
gets(p->prenom);
printf("Son numero de telephone : ");
gets(p->tel);
p->suivant=NULL;
}
return p; //on retourne le pointeur
}
// AFFICHE LE CONTENU DE L'AGENDA
void Affiche(maillon* tete,int cmpt) //*tete correspond à l'adresse du premier maillon et cmpt au nombre de contact dans l'agenda
{
maillon* temp; //pointeur temporaire pour naviguer entre les differents maillons
int i;
clrscr();
printf("\\t - AFFICHAGE DUN CONTACT -\\n\\n");
printf("Voici tous vos contact : \\n\\n");
if(cmpt==0) printf("Il n'y a aucun contact de sauvegarder dans l'agenda");
else
{
temp=tete; //le pointeur temp pointe le meme maillon que tete
while(i!=0)
{
if(temp->suivant==NULL) //si le maillon d'apres n'existe pas
{
printf("%s\\t",temp->prenom); //on affiche quand meme les different champ du maillon
printf("%s\\n",temp->tel);
i=0; //on affecte 0 à i pour sortir de la boucle
}
else
{
printf("%s\\t",temp->prenom);
printf("%s\\n",temp->tel);
temp=temp->suivant; //temp prend l'adresse du maillon suivant
}
}
}
getch(); //pour avoir le temps de voir s'afficher lagenda
}