Menu
Coddy logo textTech

Poniéndolo todo junto

Parte de la sección Lógica y Flujo del Journey de C de Coddy. Lección 54 de 63.

challenge icon

Desafío

Fácil

Completa tu sistema de gestión de contactos integrando todas las funciones que has creado en las lecciones anteriores. Tu programa debe:

  1. Usar la misma definición de la estructura Contact de las lecciones anteriores, con los siguientes miembros:
    • Un arreglo de caracteres name con tamaño 50
    • Un arreglo de caracteres phone con tamaño 20
    • Un arreglo de caracteres email con tamaño 40
    • Un entero age
  2. Usar la misma función createContact de las lecciones anteriores, que:
    • Asigna memoria dinámicamente para una estructura Contact
    • Inicializa todos los miembros con valores predeterminados
    • Devuelve un puntero al contacto
  3. Usar la misma función populateContact de las lecciones anteriores, que:
    • Recibe un puntero a una estructura Contact como parámetro
    • Solicita datos al usuario y rellena todos los campos del contacto
    • Valida los datos de entrada
  4. Escribir una función displayContact que:
    • Recibe un puntero constante a una estructura Contact como parámetro
    • Imprime cada campo en su propia línea con este formato exacto:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Escribir una función llamada updateContact que:
    • Recibe un puntero a una estructura Contact como parámetro
    • No devuelve nada (void)
    • Solicita al usuario que elija qué campo actualizar, imprimiendo:
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Lee la opción del usuario y actualiza el campo correspondiente:
      • Si la opción es 1: imprime Enter new name: y actualiza el nombre
      • Si la opción es 2: imprime Enter new phone: y actualiza el teléfono
      • Si la opción es 3: imprime Enter new email: y actualiza el correo electrónico
      • Si la opción es 4: imprime Enter new age: y actualiza la edad
      • Si la opción no es válida (no está entre 1 y 4): imprime Invalid choice
    • Después de una actualización correcta, imprime Contact updated successfully
  6. En la función principal, implementar un flujo completo de gestión de contactos:
    • Crear un contacto usando la función createContact
    • Comprobar si la creación del contacto fue correcta
    • Llamar a la función populateContact para introducir los datos iniciales del contacto
    • Imprimir --- Initial Contact ---
    • Llamar a la función displayContact para mostrar la información inicial del contacto
    • Imprimir --- Updating Contact ---
    • Llamar a la función updateContact para modificar un campo
    • Imprimir --- Updated Contact ---
    • Llamar de nuevo a la función displayContact para mostrar la información actualizada del contacto
    • Liberar la memoria asignada dinámicamente
    • Imprimir Contact management completed

Nota: La función displayContact de esta lección utiliza un formato sencillo: una línea por campo, sin detalles ni unidades adicionales (por ejemplo, la edad se imprime como un número simple, no como "25 años"). Asegúrate de que tu salida coincida exactamente con el formato mostrado arriba, ya que los casos de prueba dependen de ello.

Este desafío final reúne todos los componentes de tu sistema de gestión de contactos: definición de estructuras, asignación dinámica de memoria, entrada y validación de datos, visualización con formato y modificación de datos. Demostrarás el ciclo de vida completo de una estructura asignada dinámicamente, desde su creación hasta su limpieza, mientras practicas la organización de funciones y el uso correcto de los punteros durante todo el proceso.

Pruébalo tú mismo

#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;
}

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de C online