Menu
Coddy logo textTech

Assembler le tout

Fait partie de la section Logique & Flux du Journey C de Coddy. Leçon 54 sur 63.

challenge icon

Défi

Facile

Terminez votre système de gestion des contacts en intégrant toutes les fonctions que vous avez créées dans les leçons précédentes. Votre programme doit :

  1. Utiliser la même définition de structure Contact que dans les leçons précédentes, avec les membres suivants :
    • Un tableau de caractères name de taille 50
    • Un tableau de caractères phone de taille 20
    • Un tableau de caractères email de taille 40
    • Un entier age
  2. Utiliser la même fonction createContact que dans les leçons précédentes, qui :
    • Alloue dynamiquement de la mémoire pour une structure Contact
    • Initialise tous les membres avec des valeurs par défaut
    • Retourne un pointeur vers le contact
  3. Utiliser la même fonction populateContact que dans les leçons précédentes, qui :
    • Prend un pointeur vers une structure Contact comme paramètre
    • Demande une saisie à l’utilisateur et renseigne tous les champs du contact
    • Valide les données saisies
  4. Écrire une fonction displayContact qui :
    • Prend un pointeur constant vers une structure Contact comme paramètre
    • Affiche chaque champ sur sa propre ligne dans ce format exact :
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Écrire une fonction nommée updateContact qui :
    • Prend un pointeur vers une structure Contact comme paramètre
    • Ne retourne rien (void)
    • Demande à l’utilisateur de choisir le champ à mettre à jour en affichant :
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Lit le choix de l’utilisateur et met à jour le champ correspondant :
      • Si le choix est 1 : affiche Enter new name: et met à jour le nom
      • Si le choix est 2 : affiche Enter new phone: et met à jour le numéro de téléphone
      • Si le choix est 3 : affiche Enter new email: et met à jour l’adresse e-mail
      • Si le choix est 4 : affiche Enter new age: et met à jour l’âge
      • Si le choix est invalide (différent de 1 à 4) : affiche Invalid choice
    • Après une mise à jour réussie, affiche Contact updated successfully
  6. Dans la fonction main, implémenter un workflow complet de gestion des contacts :
    • Créer un contact à l’aide de la fonction createContact
    • Vérifier que la création du contact a réussi
    • Appeler la fonction populateContact pour renseigner les données initiales du contact
    • Afficher --- Initial Contact ---
    • Appeler la fonction displayContact pour afficher les informations initiales du contact
    • Afficher --- Updating Contact ---
    • Appeler la fonction updateContact pour modifier un champ
    • Afficher --- Updated Contact ---
    • Appeler à nouveau la fonction displayContact pour afficher les informations mises à jour du contact
    • Libérer la mémoire allouée dynamiquement
    • Afficher Contact management completed

Remarque : La fonction displayContact de cette leçon utilise un format simple : une ligne par champ, sans détails ni unités supplémentaires (par exemple, l’âge est affiché comme un nombre simple, et non comme "25 ans"). Assurez-vous que votre sortie correspond exactement au format présenté ci-dessus, car les cas de test en dépendent.

Ce défi final rassemble tous les composants de votre système de gestion des contacts : définition d’une structure, allocation dynamique de mémoire, saisie et validation des données, affichage formaté et modification des données. Vous démontrerez le cycle de vie complet d’une structure allouée dynamiquement, de sa création à sa libération, tout en vous exerçant à organiser les fonctions et à utiliser correctement les pointeurs pendant tout le processus.

Essayez vous-même

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct Contact {
    char name[50];
    char phone[20];
    char email[40];
    int age;
};

struct Contact* createContact() {
    struct Contact* contact = (struct Contact*)malloc(sizeof(struct Contact));
    if (contact != NULL) {
        strcpy(contact->name, "");
        strcpy(contact->phone, "");
        strcpy(contact->email, "");
        contact->age = 0;
    }
    return contact;
}

void populateContact(struct Contact* contactPtr) {
    printf("Enter name: ");
    fgets(contactPtr->name, sizeof(contactPtr->name), stdin);
    contactPtr->name[strcspn(contactPtr->name, "\n")] = '\0';
    
    printf("Enter phone: ");
    fgets(contactPtr->phone, sizeof(contactPtr->phone), stdin);
    contactPtr->phone[strcspn(contactPtr->phone, "\n")] = '\0';
    
    printf("Enter email: ");
    fgets(contactPtr->email, sizeof(contactPtr->email), stdin);
    contactPtr->email[strcspn(contactPtr->email, "\n")] = '\0';
    
    printf("Enter age: ");
    scanf("%d", &contactPtr->age);
}

void displayContact(const struct Contact *contactPtr) {
    printf("=== CONTACT DETAILS ===\n");
    printf("Name: %s\n", contactPtr->name);
    printf("Phone: %s\n", contactPtr->phone);
    printf("Email: %s\n", contactPtr->email);
    printf("Age: %d years old\n", contactPtr->age);
    printf("========================\n");
    
    printf("Name length: %lu characters\n", strlen(contactPtr->name));
    
    if (contactPtr->age >= 0 && contactPtr->age <= 12) {
        printf("Generation: Child\n");
    } else if (contactPtr->age >= 13 && contactPtr->age <= 19) {
        printf("Generation: Teenager\n");
    } else if (contactPtr->age >= 20 && contactPtr->age <= 39) {
        printf("Generation: Young Adult\n");
    } else if (contactPtr->age >= 40 && contactPtr->age <= 59) {
        printf("Generation: Middle-aged Adult\n");
    } else if (contactPtr->age >= 60) {
        printf("Generation: Senior\n");
    }
    
    if (strchr(contactPtr->email, '@') != NULL) {
        printf("Email format: Valid\n");
    } else {
        printf("Email format: Invalid\n");
    }
}

int main() {
    struct Contact* contact = createContact();
    
    if (contact != NULL) {
        populateContact(contact);
        displayContact(contact);
        free(contact);
        printf("Program completed successfully\n");
    }
    
    return 0;
}

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur C en ligne