Aufgabe 2: Geburtstagsdatenbank

Wir wollen nun einmal alles, was wir im ersten Semester so gelernt haben, in einer Anwendung zusammenfassen. Unser Ziel ist ein Programm, das Geburtsdaten verschiedener Personen in einer verketteten Liste speichert. Beim Programmstart soll eine Datei eingelesen werden, die bereits früher eingegebene Daten enthält. Beim Programmende soll diese Liste wieder in die Datei zurückgeschrieben werden. Mit einer Suchfunktion soll ein bestimmtes Geburtsdatum in der Liste gesucht und alle Ergebnisse in einer Liste ausgegeben werden. Neue Listenelemente werden so eingehängt, dass die Liste in aufsteigender Alphabetischer Reihenfolge nach dem Nachnamen sortiert wird.

Im main-Teil soll eine Menü-Schleife zunächst Benutzereingaben auswerten (1 = Neuer Eintrag, 2 = Liste drucken, 3 = Geburtstag suchen, 4= Ende) und dann entsprechende Funktionen aufrufen.

Alle Funktionen sollen unabhängig voneinander sein. Will heißen: Die Funktion, die Daten in die Liste einhängt, ließt diese nicht von der Tastatur ein. Die Suchfunktion ließt weder das Suchdatum ein, noch gibt sie die Werte auf dem Bildschirm aus. Auch ruft keine Funktion eine andere auf.
Ausnahme: Die Funktion PersonEinhaengen kann von der Funktion zum einlesen aus der Datei aufgerufen werden, um die Liste beim Programmstart zu erzeugen und zu füllen.

Die Suchfunktion soll wie folgt arbeiten: Die Struktur erhält zusätzlich eine Zeigerkomponente, die auf das nächste Element mit selbem Suchdatum zeigt. So werden also zusammengehörige Elemente in der Liste querverkettet. Wird als Suchdatum der Nullstring "\0" übergeben, so soll jedes Element mit seinem direkten Nachfolger in der Liste verkettet werden. Es wird ein Zeiger auf das erste Element der so entstandenen Unterliste zurückgegeben werden.

Die Ausgabefunktion SchreibeListe gibt die Daten gemäß der Unterverkettung (search) aus.

Zur Hilfe hier die Strukturdefinition und die Funktionsköpfe:

typedef struct Geburtsdaten{
    struct Geburtsdaten *next;
    struct Geburtsdaten *search;
    char   name[20];
    char   vorname[20];
    char   datum[10];
}element;
typedef element *ptr;

ptr LiesPerson( void );
Legt ein neues Element im Speicher an und gibt einen Zeiger auf das Element zurück (NULL bei Mißerfolg)

int SchreibeListe( ptr anker );
Gibt die Liste auf dem Bildschirm aus und gibt die Anzahl der geschriebenen Datensätze zurück

ptr SucheElemente( ptr anker, char *suchdatum);
Durchsucht die Liste nach dem Suchdatum, setzt die search-Komponenten der Elemente und gibt einen Zeiger auf das erste gefundene Element zurück

int PersonEinhängen( ptr *anker, ptr neues );
Hängt einen neuen Eintrag in die Liste ein und gibt bei Erfolg die Position in der Liste, bei Mißerfolg -1 zurück

int SchreibeDatei( ptr anker );
Speichert die Liste in eine Datei und gibt bei Erfolg die Anzahl der geschriebenen Datensätze, bei Mißerfolg -1 zurück

int LeseDatei( ptr *anker );
Liest die Liste aus einer Datei ein und gibt bei Erfolg die Anzahl der gelesenen Datensätze, bei Mißerfolg -1 zurück

Lösung


Zurück: Aufgabe 1

Vorwärts: Literatur

Einführung

Startseite

Sitemap