Choubisoft Admin
Messages : 123 Points : 7129 Date de naissance : 02/11/1989 Date d'inscription : 18/02/2010 Age : 35 Localisation : Casablanca Emploi/loisirs : Etudiant
| Sujet: Algorithme de l'Annuaire Dim 23 Mai - 12:23 | |
| Bonjour / Bonsoir chers membres,
Voila le code source de l'annuaire bon le code est simple, bien commenter, les fonctions sont si simple a comprendre mais ça empêche d'en discuter si vous rencontrez des difficulté ....
juste je doit motionner que si les barre des encadrement des tableaux et tout; s'il s'affiche bizarrement enlever les et remplacer les par leur code ASCII que vous pouvez retrouver ICI
Donc sans tarder voila le code C: - Code:
-
/** Name: Annuaire Author : Boukhris Chouaib. Date: 09/05/10 12:25. Derniere Mise a Jour : 23/05/10 19:04. Description: Manipulation des listes chainées . Licence : Copyleft OpenSource. **/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h>
//Liste Chainé de l'annuaire. typedef struct Annuaire{ char nom[30]; char tel[11]; // Type Char Pour un controle facile du numéro saisie.
struct Annuaire *next; }Liste;
typedef Liste* Annu;
//============================================================================================================================ // Fonction qui saisie l'annuaire (Ajouter en fin de liste). Annu Saisie(Annu anu_tel){
char c; Annu new_element = (Annu)malloc(sizeof(Liste));
// Vider le buffer. while( (c=getchar())!='\n' && c!=EOF );
printf("\n\tDonnez le Nom : "); gets(new_element->nom);
do{ printf("\tDonnez le Numéro de téléphone : "); gets(new_element->tel); }while((strncmp(new_element->tel, "06", 2)!=0 && strncmp(new_element->tel, "05", 2)!=0) || strlen(new_element->tel)!=10);
/* On ajoute en fin, donc aucun élément ne va suivre */ new_element->next = NULL;
if(anu_tel == NULL) { /* Si la liste est videé il suffit de renvoyer l'élément créé */ return new_element; } else { /* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on indique que le dernier élément de la liste est relié au nouvel élément */ Annu temp= anu_tel; while(temp->next != NULL) { temp = temp->next; } temp->next = new_element; return anu_tel; }
}
//================================================================================================================= // Afficher le numéro de tel d’un abonné. void Affiche_abo(Annu liste){
char nom[30], c;
if(liste== NULL) { printf("Saisissez daord la liste ...!!"); } else{ // Création de variable temporaire pour ne pas perdre l'adresse de la tête. Annu temp= liste; while( (c=getchar())!='\n' && c!=EOF ); printf("Vous cherchez quel abonné :"); gets(nom);
while(temp!= NULL) { if(strcmp(temp->nom, nom) == 0) printf("\n\t%s : %s", temp->nom, temp->tel);
temp = temp->next; }
}
}
//================================================================================================================== // Afficher la liste des abonnés. void Aff_Li_Abo(Annu liste){
Annu temp = liste; if(liste == NULL){ printf("\n\tSaisissez daord la liste ...!!"); } else{ printf("\n\n╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Liste des abonnés │\n"); printf("├─────────────────────────────────────┬─────────────────────────────────────┤\n"); printf("│ Nom │ Tél │\n"); printf("├─────────────────────────────────────┼─────────────────────────────────────┤\n");
/* Tant que l'on n'est pas au bout de la liste */ while(temp) { /* On affiche */ printf("│ %20s │ %10s │\n", temp->nom, temp->tel); /* On avance d'une case */ temp = temp->next; }
printf("╰─────────────────────────────────────┴─────────────────────────────────────╯"); } }
//================================================================================================================== // Fonction récursive pour Supprimer un abonnés. Annu Sppr_Abo(Annu liste , char *Abo){
/* Liste vide, il n'y a plus rien à supprimer */ if(liste == NULL){ printf("\n\tSaisissez daord la liste ...!!"); return NULL; }
/* Si l'élément en cours de traitement doit être supprimé */ if(strcmp(liste->nom, Abo) == 0){
/* On le supprime en prenant soin de mémoriser l'adresse de l'élément suivant */ Annu temp = liste->next; free(liste);
/* L'élément ayant été supprimé, la liste commencera à l'élément suivant pointant sur une liste qui ne contient plus aucun élément ayant la valeur recherchée */ temp = Sppr_Abo(temp, Abo); return temp; } else{
/* Si l'élement en cours de traitement ne doit pas être supprimé, alors la liste finale commencera par cet élément et suivra une liste ne contenant plus d'élément ayant la valeur recherchée */ liste->next = Sppr_Abo(liste->next, Abo); return liste; } }
//================================================================================================================== // Fonction de tri de la liste chainée avec boucle for. Annu Tri_for(Annu liste){
Annu i, j, min; char aux_nom[30], aux_tel[11];
/* Liste vide, il n'y a rien à trié */ if(liste == NULL){ printf("\n\tSaisissez daord la liste ...!!"); return NULL; }
for(i= liste; i->next != NULL; i= i->next){ min= i;
for(j= i->next; j != NULL; j= j->next){ if(strcmp(min->nom, j->nom) > 0) min=j; }
if(min != i){ strcpy(aux_nom, min->nom); strcpy(min->nom, i->nom); strcpy(i->nom, aux_nom);
strcpy(aux_tel, min->tel); strcpy(min->tel, i->tel); strcpy(i->tel, aux_tel); } }
return liste;
}
//==================================================================================================================== // Fonction de tri de la liste chainée avec boucle while. Annu Tri_while(Annu liste){
Annu i, j, min; char aux_nom[30], aux_tel[11];
/* Liste vide, il n'y a rien à trié */ if(liste == NULL){ printf("\n\tSaisissez daord la liste ...!!"); return NULL; }
i= liste; while(i->next){ min= i;
j= i->next; while(j){ if(strcmp(min->nom, j->nom) > 0) min=j;
j= j->next; }
if(min != i){ strcpy(aux_nom, min->nom); strcpy(min->nom, i->nom); strcpy(i->nom, aux_nom);
strcpy(aux_tel, min->tel); strcpy(min->tel, i->tel); strcpy(i->tel, aux_tel); }
i= i->next; }
return liste;
}
//==================================================================================================================== //Effacer complètement une liste chaînée de la mémoire. Annu Effacer(Annu liste){
if(liste == NULL) { /* Si la liste est vide, il n'y a rien à effacer, on retourne une liste vide i.e. NULL */ return NULL; } else { /* Sinon, on efface le premier élément et on retourne le reste de la liste effacée */ Annu temp; temp = liste->next; free(liste); return Effacer(temp); } }
//==================================================================================================================== // Menu //==================================================================================================================== // Menu. int menu(void){
int choix;
printf("\n\n╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Menu │\n"); printf("├─────────┬─────────────────────────────────────────────────────────────────┤\n"); printf("│ N° │ Choix │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 1 │ Saisir l'annuaire │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 2 │ Afficher le numéro de tel d’un abonné │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 3 │ Afficher la liste des abonnés │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 4 │ Supprimer un abonné │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 5 │ Trier l’annuaire │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 0 │ ** Qutier le programme ** │\n"); printf("╰─────────┴─────────────────────────────────────────────────────────────────╯"); printf("\n\t\t\tTapez votre choix : ");
scanf("%d",&choix);
return (choix); }
//==================================================================================================================== // Main int main(void){
Annu Mon_Annu= NULL; char ch, abo[30], c; int choix;
while(1){ choix=menu();
switch (choix){ case 0: exit (0); // end of programme.
case 1: system("clear"); do{ Mon_Annu=Saisie(Mon_Annu); printf("voulez vous saisre Oui/Non :"); ch=getchar();
}while(tolower(ch) != 'n');
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
case 2: system("clear"); Affiche_abo(Mon_Annu);
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
case 3: system("clear"); Aff_Li_Abo(Mon_Annu);
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
case 4: system("clear"); printf("\n\n\tDonnez le nom de l'abonné a supprimé : "); scanf("%s", abo); Mon_Annu=Sppr_Abo(Mon_Annu , abo);
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
case 5: system("clear"); Mon_Annu= Tri_while(Mon_Annu); printf("\n\n\tTrie réussi :D ...");
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
default: system("clear"); printf("\n\n╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Choix invalide │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break;
} }
Mon_Annu = Effacer(Mon_Annu); return 0; }
Cordialement.
Dernière édition par Choubisoft le Mar 25 Mai - 4:04, édité 1 fois | |
|
adib jihad
Messages : 21 Points : 5435 Date d'inscription : 23/02/2010
| Sujet: Re: Algorithme de l'Annuaire Dim 23 Mai - 13:03 | |
| | |
|
nowara
Messages : 3 Points : 5330 Date d'inscription : 02/05/2010
| Sujet: Re: Algorithme de l'Annuaire Dim 23 Mai - 13:11 | |
| | |
|
khalidmaroc1988
Messages : 39 Points : 5510 Date de naissance : 19/11/1988 Date d'inscription : 01/03/2010 Age : 36
| Sujet: Re: Algorithme de l'Annuaire Ven 28 Mai - 17:17 | |
| | |
|
pecmaker
Messages : 4 Points : 5398 Date d'inscription : 25/02/2010
| Sujet: Re: Algorithme de l'Annuaire Sam 5 Juin - 15:05 | |
| Bonsoir, Merci pour l algorithme >_< j ai besoin de l énoncé de cet exercice ... merci d avance ^^ | |
|
Choubisoft Admin
Messages : 123 Points : 7129 Date de naissance : 02/11/1989 Date d'inscription : 18/02/2010 Age : 35 Localisation : Casablanca Emploi/loisirs : Etudiant
| Sujet: Re: Algorithme de l'Annuaire Dim 6 Juin - 8:21 | |
| Voila le lien de la serie Lien
Cordialement.
| |
|
Contenu sponsorisé
| Sujet: Re: Algorithme de l'Annuaire | |
| |
|