Das bisherige Programm zur Verwaltung von Personendaten soll nun auf Listen (statt Arrays) umgestellt werden. Dazu seien folgende Definitionsmodule (in Anlehnung an Blatt 4) gegeben:
DEFINITION MODULE Persons; FROM StdIO IMPORT FILE; TYPE PersDat; (* hidden type: pointer to a person's record*) PROCEDURE WriteRec(f: FILE; pers: PersDat); (* f - open stream for writing * writes data with one blank as separator *) PROCEDURE ReadRec(f:FILE; VAR pers: PersDat):BOOLEAN; (* f - open stream for reading ! * reads one record assuming whitespace as separator * TRUE, if done, otherwise FALSE *) END Persons. DEFINITION MODULE PersonsList; (* based on module ``Persons'' *) FROM StdIO IMPORT FILE; TYPE PersList; (* hidden type: pointer to a list's element * which is a record with two components, * one of type Persons.PersDat, * the other pointing to the next list element *) PROCEDURE InitPersList(fromFile: FILE; VAR persList: PersList): BOOLEAN; (* Procedure Persons.ReadRec is used * all data from file ``fromFile'' are stored in * list ``persList'' * returns FALSE, if error *) PROCEDURE WritePersList(to: FILE; persList: PersList); (* the whole list is written to open stream ``to'' * Procedure Persons.WriteRec is used *) END PersonsList.
Implementieren Sie die zugehörigen Implementationsmodule sowie ein Hauptprogramm, das zum Test eine Liste aus einer als Argument übergebenen Datei einliest und wieder auf die Standardausgabe ausgibt. Viel Erfolg!