In diesem Tutorial verwendetes Programmbeispiel

Hier finden Sie das vollständige in diesem C Tutorial verwendete Programmbeispiel einer Adressverwaltung.

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

typedef struct {
    int id;
    char vorname[50];
    char nachname[50];
    char strasse[100];
    int  plz;
    char ort[100];
} adresse_typ;

const int MAX_ANZAHL = 100;

adresse_typ *adressen[100];
int adresse_idx = 0;

void print_menu() {
    printf("----------------------------\n");    
    printf("Menu\n");    
    printf("----------------------------\n");    
    printf("1 - Adressen anzeigen\n");    
    printf("2 - Adresse eingeben\n");    
    printf("3 - Adresse löschen\n");    
    printf("4 - Adresse ändern\n");    
    printf("5 - Adressen auflisten\n");    
    printf("q - Programm beenden\n");    
    printf("----------------------------\n");    
    printf("Kommando: ");    
}

void adresse_anzeigen(adresse_typ *adresse) {
    printf("----------------------------\n");    
    printf("Adresse anzeigen");
    printf("----------------------------\n");    
    printf("Id:        %d\n", adresse->id);
    printf("Vorname:   %s\n", adresse->vorname);
    printf("Nachname:  %s\n", adresse->nachname);
    printf("Strasse:   %s\n", adresse->strasse);
    printf("Plz:       %d\n", adresse->plz);
    printf("Ort:       %s\n", adresse->ort);
}

void adressen_auflisten(adresse_typ **adressen) {
    int i = 0;
    adresse_typ *adresse;
    if (adresse_idx == 0) {
        printf("\nEs wurden noch keine Adressen angelegt!\n\n");
        return;
    }
    printf("----------------------------\n");    
    printf("Angelegte Adressen\n");
    printf("----------------------------\n");    
    for (i = 0; i < adresse_idx; i++) {
        adresse = adressen[i];
        if (adresse != NULL) {
            printf("%d. %s %s\n", adresse->id, adresse->vorname, adresse->nachname);
        }
    }
}

void adresse_eingeben(adresse_typ *adresse) {
    printf("----------------------------\n");    
    printf("Adresse eingeben\n");
    printf("----------------------------\n");    
    printf("Vorname:    ");
    scanf("%s", adresse->vorname);
    printf("Nachname:   ");
    scanf("%s", adresse->nachname);
    printf("Strasse:    ");
    scanf("%s", adresse->strasse);
    printf("Plz:        ");
    scanf("%d", &adresse->plz);
    printf("Ort:        ");
    scanf("%s", adresse->ort);
}

int adresse_nr_abfragen() {
    int adresse_nr;
    short eingabe_ok = 0;
    do {
        printf("\nGeben Sie die Adresse Nr. ");
        scanf("%d", &adresse_nr);
        if (adresse_nr > 0 && adresse_nr <= MAX_ANZAHL && adressen[adresse_nr] != NULL) {
            eingabe_ok = 1;
        }
    } while (!eingabe_ok);
    
    /* Es wird der Array Index zurückgegeben */
    return adresse_nr-1; 
}

int adressen_vorhanden() {
    int i;
    for (i = 0; i < MAX_ANZAHL; i++) {
        if (adressen[i] != NULL) {
            return 1;
        }
    }
    return 0;
}

char befehl_eingeben() {
    char  c;
    c = getchar();
    while (getchar() != '\n');
    return c;    
}

int main() {
    /* auszuführender Befehl siehe print_menu */
    char befehl; 
    int adresse_id = 0;
    adresse_typ *adresse;
    
    /* Endlosschleife zum Abarbeiten der Befehle */
    while (1) {   
        print_menu();
        befehl = befehl_eingeben();

        switch (befehl) {
            case '1':        /* Adresse anzeigen */
                /* Prüfen, ob es bereits Adressen gibt */
                if (adressen_vorhanden() == 1) {
                    /* Adresse Nr abfragen */
                    adresse_id = adresse_nr_abfragen();
                    /* Adresse anzeigen */
                    adresse_anzeigen(adressen[adresse_id]);
                } else {
                    printf("Keine Adressen vorhanden!\n");
                }
                break;
            case '2':        /* Adresse eingeben */
                /* Speicherbereich für Adresse reservieren */
                adresse = (adresse_typ *)malloc(sizeof(adresse_typ));
                /* Adresse Id anhand des Index bestimmen */
                adresse->id = adresse_idx+1;
                /* Adresse eingeben */
                adresse_eingeben(adresse);
                /* Adresse im Adressen Array speichern */
                adressen[adresse_idx] = adresse;
                /* Adressen Index um 1 erhöhen */
                ++adresse_idx;
                /* Adressen zu Kontrolle auflisten */
                adressen_auflisten(adressen);
                break;
            case '3':        /* Adresse löschen */
                /* Adressen Id abfragen (Adressen Index wird zurückgegeben!) */
                adresse_id = adresse_nr_abfragen();
                /* Speicher freigeben */
                free(adressen[adresse_id]);
                /* Zeiger auf Speicherbereich löschen */
                adressen[adresse_id] = NULL;
                break;
            case '4':        /* Adresse ändern */
                /* TODO */
                break;
            case '5':        /* Adressen auflisten */
                /* Alle vorhandenen Adressen auflisten */
                adressen_auflisten(adressen);
                break;
            case 'q':        /* Programm verlassen */
                return 0;
            default:
                printf("falscher Befehl\n");
                break;
        }
    }

    return 0;
}



26 Aug 2012