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
|
Zurück: Aufgabe 1 |
Vorwärts: Literatur |
Einführung |
Startseite |
Sitemap |