Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // liste-contacts.c
- #include <stdio.h>
- #include <stdlib.h> // Optional.
- #include <string.h>
- #include "liste-contacts.h"
- NOEUD *debut; // Pointeur vers le premier noeud de la liste.
- int main() {
- int option;
- debut = NULL; // La liste est vide au début du programme.
- do {
- option = afficher_menu();
- switch (option) {
- case INSERER:
- inserer_contact();
- break;
- case EFFACER:
- effacer_contact();
- break;
- case RECHERCHER:
- rechercher_contact();
- break;
- case IMPRIMER:
- imprimer_liste();
- break;
- case SORTIR:
- effacer_liste();
- break;
- default:
- printf("\nOption inconnue! Choisissez une option à nouveau\n");
- }
- } while (option != SORTIR);
- return 0;
- }
- int afficher_menu() {
- int option;
- printf("\n*** Menu Principal ***\n");
- printf("\n1. Insérer contact\n");
- printf("2. Effacer contact\n");
- printf("3. Rechercher contact\n");
- printf("4. Imprimer liste de contacts\n");
- printf("5. Sortir\n");
- printf("\nChoisissez votre option (1-5): ");
- scanf("%d", &option);
- return option;
- }
- void inserer_contact() {
- char prenom[21];
- long numtel;
- NOEUD *p, *q, *r;
- printf("\nEntrez le prénom (jusqu'à 20 caractères): ");
- scanf("%s", prenom);
- printf("\nEntrez le numero: ");
- scanf("%ld", &numtel);
- p = creer_noeud(prenom);
- if (p != NULL) // Si l'allocation de mémoire a réussi.
- p->numtel = numtel;
- else {
- printf("Il n'y a plus de mémoire pour insérer nouveau contact!\n");
- return; // Retourner sans rien faire.
- }
- if (debut == NULL) // Si la liste est vide.
- debut = p;
- else { // Si la liste contient au moins un élément.
- r = debut;
- while (r != NULL) {
- if (strcmp(prenom, r->prenom) > 0) { // Si prenom est alphabétiquement plus grand que r->prenom.
- q = r;
- r = r->suivant;
- } else if (strcmp(prenom, r->prenom) == 0) { // Si prenom est égal à r->prenom.
- r->numtel = numtel;
- free(p->prenom); // Libère l'espace mémoire alloué pour le prénom.
- free(p); // Libère l'espace mémoire alloué pour le noeud.
- return;
- } else
- break;
- }
- if (r == debut) // Si l'insertion doit avoir lieu au début de la liste.
- debut = p;
- else
- q->suivant = p;
- p->suivant = r;
- }
- }
- void effacer_contact() {
- char prenom[21];
- NOEUD *q, *r;
- printf("\nEntrez le prénom du contact a effacer: ");
- scanf("%s", prenom);
- r = debut;
- while (r != NULL) {
- if (strcmp(prenom, r->prenom) != 0) { // Si prenom est différent à r->prenom.
- q = r;
- r = r->suivant;
- } else
- break;
- }
- if (r != NULL) {
- if (r == debut) // Si le noeud à effacer se trouve au début de la liste.
- debut = r->suivant;
- else // Si le noeud à effacer se trouve au milieu ou à la fin de la liste.
- q->suivant = r->suivant;
- free(r->prenom); // Libère l'espace mémoire alloué pour le prénom.
- free(r); // Libère l'espace mémoire alloué pour le noeud.
- printf("\nContact effacé!\n");
- } else
- printf("\nLe contact n'existe pas sur la liste!\n");
- }
- void rechercher_contact() {
- char c; // Stocke la première lettre du contact recherché.
- NOEUD *r;
- int aucun_contact; // Variable booléenne.
- printf("\nEntrez la première lettre du contact recherché: ");
- c = getchar(); // Capture la dernière frappe de la touche ENTRER!
- c = getchar();
- printf("\n");
- aucun_contact = 1; // Initialiser à vrai.
- r = debut;
- while (r != NULL) {
- if (c == r->prenom[0]) { // Si la première lettre de r->prenom est égale a c.
- printf("%-20s 0%ld\n", r->prenom, r->numtel);
- aucun_contact = 0; // Affecter faux puisqu'il y a au moins un contact.
- }
- r = r->suivant;
- }
- if (aucun_contact)
- printf("Aucun contact a pu être trouvé sur la liste!\n");
- }
- void imprimer_liste() {
- NOEUD *p;
- printf("\n");
- p = debut;
- while (p != NULL) {
- printf("%-20s 0%ld\n", p->prenom, p->numtel);
- p = p->suivant;
- }
- }
- void effacer_liste() {
- NOEUD *p;
- while (debut != NULL) {
- p = debut;
- debut = debut->suivant;
- free(p->prenom); // Libère l'espace mémoire alloué pour le prénom.
- free(p); // Libère l'espace mémoire alloué pour le noeud.
- }
- printf("\nLa liste de contacts a été effacée de la mémoire :-)\n");
- }
- NOEUD *creer_noeud(char *prenom) {
- NOEUD *p; // Pointeur vers un noeud.
- char *q; // Pointeur vers une chaîne de caractères.
- p = (NOEUD *) malloc(sizeof(NOEUD)); // Allocation d'espace mémoire pour un noeud.
- q = (char *) malloc(strlen(prenom) + 1); // Allocation d'espace mémoire pour prenom.
- if ((p != NULL) && (q != NULL)) {
- strcpy(q, prenom);
- p->prenom = q;
- p->suivant = NULL;
- return p;
- }
- else {
- free(p);
- free(q);
- return NULL;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement