Menu
Coddy logo textTech

Alles zusammenfügen

Teil des Abschnitts Logic & Flow der C-Journey von Coddy — Lektion 54 von 63.

challenge icon

Aufgabe

Einfach

Vervollständigen Sie Ihr Kontaktverwaltungssystem, indem Sie alle Funktionen integrieren, die Sie in den vorherigen Lektionen erstellt haben. Ihr Programm sollte:

  1. Dieselbe Contact-Strukturdefinition aus den vorherigen Lektionen mit folgenden Elementen verwenden:
    • Ein Zeichen-Array name mit der Größe 50
    • Ein Zeichen-Array phone mit der Größe 20
    • Ein Zeichen-Array email mit der Größe 40
    • Eine Ganzzahl age
  2. Dieselbe createContact-Funktion aus den vorherigen Lektionen verwenden, die:
    • Dynamisch Speicher für eine Contact-Struktur reserviert
    • Alle Elemente mit Standardwerten initialisiert
    • Einen Pointer auf den Kontakt zurückgibt
  3. Dieselbe populateContact-Funktion aus den vorherigen Lektionen verwenden, die:
    • Einen Pointer auf eine Contact-Struktur als Parameter entgegennimmt
    • Benutzereingaben anfordert und alle Kontaktfelder ausfüllt
    • Die Eingabedaten validiert
  4. Schreiben Sie eine displayContact-Funktion, die:
    • Einen konstanten Pointer auf eine Contact-Struktur als Parameter entgegennimmt
    • Jedes Feld in einer eigenen Zeile in genau diesem Format ausgibt:
      Name: John
      Phone: 555-1234
      Email: john@email.com
      Age: 25
  5. Schreiben Sie eine Funktion namens updateContact, die:
    • Einen Pointer auf eine Contact-Struktur als Parameter entgegennimmt
    • Nichts zurückgibt (void)
    • Den Benutzer auffordert, das zu aktualisierende Feld zu wählen, indem sie Folgendes ausgibt:
      • What would you like to update?
      • 1. Name
      • 2. Phone
      • 3. Email
      • 4. Age
      • Enter choice (1-4):
    • Die Auswahl des Benutzers liest und das entsprechende Feld aktualisiert:
      • Wenn die Wahl 1 ist: gibt Enter new name: aus und aktualisiert den Namen
      • Wenn die Wahl 2 ist: gibt Enter new phone: aus und aktualisiert die Telefonnummer
      • Wenn die Wahl 3 ist: gibt Enter new email: aus und aktualisiert die E-Mail
      • Wenn die Wahl 4 ist: gibt Enter new age: aus und aktualisiert das Alter
      • Wenn die Wahl ungültig ist (nicht 1-4): gibt Invalid choice aus
    • Nach einer erfolgreichen Aktualisierung Contact updated successfully ausgibt
  6. Implementieren Sie in der Hauptfunktion (main) einen vollständigen Workflow zur Kontaktverwaltung:
    • Erstellen Sie einen Kontakt mit der Funktion createContact
    • Prüfen Sie, ob die Erstellung des Kontakts erfolgreich war
    • Rufen Sie die Funktion populateContact auf, um die initialen Kontaktdaten auszufüllen
    • Geben Sie --- Initial Contact --- aus
    • Rufen Sie die Funktion displayContact auf, um die initialen Kontaktinformationen anzuzeigen
    • Geben Sie --- Updating Contact --- aus
    • Rufen Sie die Funktion updateContact auf, um ein Feld zu ändern
    • Geben Sie --- Updated Contact --- aus
    • Rufen Sie die Funktion displayContact erneut auf, um die aktualisierten Kontaktinformationen anzuzeigen
    • Geben Sie den dynamisch reservierten Speicher frei
    • Geben Sie Contact management completed aus

Hinweis: Die Funktion displayContact in dieser Lektion verwendet ein einfaches Format — eine Zeile pro Feld ohne zusätzliche Details oder Einheiten (z. B. wird das Alter als einfache Zahl ausgegeben, nicht als "25 years old"). Stellen Sie sicher, dass Ihre Ausgabe exakt dem oben gezeigten Format entspricht, da die Testfälle davon abhängen.

Diese abschließende Herausforderung führt alle Komponenten Ihres Kontaktverwaltungssystems zusammen: Strukturdefinition, dynamische Speicherreservierung, Dateneingabe und -validierung, formatierte Anzeige und Datenänderung. Sie demonstrieren den vollständigen Lebenszyklus einer dynamisch reservierten Struktur von der Erstellung bis zur Bereinigung, während Sie die Funktionsorganisation und die korrekte Verwendung von Pointern während des gesamten Prozesses üben.

Probier es selbst

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

Alle Lektionen in Logic & Flow