home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
1990
/
08
/
grdlagen
/
datei.mod
< prev
next >
Wrap
Text File
|
1990-05-15
|
7KB
|
274 lines
(**********************************************************)
(* Modula-Kurs Teil 7 *)
(* (C) M.Schlöter & toolbox 1990 *)
(**********************************************************)
MODULE Datei;
FROM InOut IMPORT WriteString, WriteInt, WriteLn,
Read, ReadInt, ReadString,
Done;
FROM FIO IMPORT File, Exists, Open, Create, RdBin, WrBin,
Seek, Size, Close, EOF;
FROM Str IMPORT Compare;
CONST WahlFuerEnde = 5;
TYPE String40 = ARRAY[1..40] OF CHAR;
EinKunde = RECORD
KundenNr : INTEGER;
Name,
Vorname,
Strasse,
Ort : String40;
END;
VAR Wahl : INTEGER;
DateiOffen : BOOLEAN;
DateiName : String40;
Daten : File;
PROCEDURE ClearScreen;
VAR i : INTEGER;
BEGIN
FOR i := 1 TO 25 DO
WriteLn;
END;
END ClearScreen;
PROCEDURE WaitKey;
VAR Dummy : CHAR;
BEGIN
REPEAT
Read(Dummy);
UNTIL Done;
END WaitKey;
PROCEDURE DateiNichtOffen;
BEGIN
ClearScreen;
WriteString("******************************"); WriteLn;
WriteString("* FEHLER *"); WriteLn;
WriteString("* Datei nicht offen *"); WriteLn;
WriteString("******************************"); WriteLn;
WriteLn;
WriteString(">>> Taste druecken <<<");
WaitKey;
END DateiNichtOffen;
PROCEDURE DateiOeffnen;
BEGIN
IF DateiOffen THEN
ClearScreen;
WriteString("******************************"); WriteLn;
WriteString("* FEHLER *"); WriteLn;
WriteString("* Datei noch offen *"); WriteLn;
WriteString("******************************"); WriteLn;
WriteLn;
WriteString(">>> Taste druecken <<<");
WaitKey;
RETURN
ELSE
ClearScreen;
WriteString(" Oeffnen Datei"); WriteLn;
WriteString(" ============="); WriteLn;
WriteLn;
WriteLn;
WriteString("Name der zu oeffnenden Datei: ");
ReadString(DateiName);
IF Exists(DateiName) THEN
Daten := Open(DateiName);
ELSE
Daten := Create(DateiName);
END;
DateiOffen := TRUE;
END;
END DateiOeffnen;
PROCEDURE DateiSchliessen;
BEGIN
IF NOT DateiOffen THEN
DateiNichtOffen;
RETURN
ELSE
ClearScreen;
WriteString(" Datei schliessen"); WriteLn;
WriteString(" ================"); WriteLn;
WriteLn;
WriteLn;
Close(Daten);
DateiOffen := FALSE;
WriteString(" OK, erledigt !");
WriteLn; WriteLn;
WriteString(">>> Taste druecken <<<");
WaitKey;
END;
END DateiSchliessen;
PROCEDURE DatensatzEingeben;
VAR Kunde : EinKunde;
BEGIN
IF NOT DateiOffen THEN
DateiNichtOffen;
RETURN
ELSE
ClearScreen;
WriteString(" Datensatz Eingeben"); WriteLn;
WriteString(" =================="); WriteLn;
WriteLn;
WriteLn;
WriteString("Kundennummer: "); ReadInt(Kunde.KundenNr);
WriteLn;
WriteString("Name: "); ReadString(Kunde.Name);
WriteLn;
WriteString("Vorname: "); ReadString(Kunde.Vorname);
WriteLn;
WriteString("Strasse: "); ReadString(Kunde.Strasse);
WriteLn;
WriteString("Ort: "); ReadString(Kunde.Ort);
WriteLn;
Seek(Daten,Size(Daten));
WrBin(Daten,Kunde,SIZE(Kunde));
WriteString(" OK, erledigt !");
Close(Daten); (* Zwischenspeichern *)
Daten := Open(DateiName);
WriteLn; WriteLn;
WriteString(">>> Taste druecken <<<");
WaitKey;
END;
END DatensatzEingeben;
PROCEDURE DatensatzSuchen;
PROCEDURE WriteRecord(Kunde : EinKunde);
BEGIN
WriteString("=====================================");
WriteLn;
WriteString("Kundennummer: ");
WriteInt(Kunde.KundenNr,10);
WriteLn;
WriteString("Name: ");
WriteString(Kunde.Name);
WriteLn;
WriteString("Vorname: ");
WriteString(Kunde.Vorname);
WriteLn;
WriteString("Strasse: ");
WriteString(Kunde.Strasse);
WriteLn;
WriteString("Ort: ");
WriteString(Kunde.Ort);
WriteLn;
WriteString("=====================================");
WriteLn; WriteLn; WriteLn; WriteLn;
END WriteRecord;
VAR Kunde : EinKunde;
Name : String40;
NrBytes : CARDINAL;
Zaehler : CARDINAL;
BEGIN
IF NOT DateiOffen THEN
DateiNichtOffen;
RETURN
ELSE
Zaehler := 0;
ClearScreen;
WriteString(" Datensatz Suchen"); WriteLn;
WriteString(" ================"); WriteLn;
WriteLn;
WriteLn;
WriteString("Name: "); ReadString(Name);
WriteLn;
Seek(Daten,0);
WHILE NOT EOF DO
NrBytes := RdBin(Daten,Kunde,SIZE(Kunde));
IF (Compare(Kunde.Name,Name) = 0) THEN
WriteRecord(Kunde);
WriteLn; WriteLn;
INC(Zaehler);
IF Zaehler = 2 THEN
WriteString(">>> Taste druecken <<<");
WaitKey;
WriteLn;
Zaehler := 0;
END;
END
END;
WriteString("------------------"); WriteLn;
WriteString("Dateiende erreicht");
WriteLn; WriteLn;
WriteString(">>> Taste druecken <<<");
WaitKey;
END;
END DatensatzSuchen;
PROCEDURE Rausgehen(Wahl : INTEGER) : BOOLEAN;
BEGIN
IF Wahl <> WahlFuerEnde THEN
RETURN FALSE
ELSE
RETURN TRUE
END;
END Rausgehen;
BEGIN
DateiOffen := FALSE;
REPEAT
REPEAT
ClearScreen;
WriteString(" Kunden-Datei");
WriteLn;
WriteString(" ============");
WriteLn;
WriteLn;
WriteString(" Datei oeffenen ------------- 1");
WriteLn;
WriteString(" Datei schließen ------------ 2");
WriteLn;
WriteString(" Datensatz eingeben --------- 3");
WriteLn;
WriteString(" Datensatz suchen ----------- 4");
WriteLn;
WriteString(" Ende ----------------------- 5");
WriteLn;
WriteLn;
WriteString(" Ihre Wahl: ");
ReadInt(Wahl);
UNTIL Done;
CASE Wahl OF
1 : DateiOeffnen;
| 2 : DateiSchliessen;
| 3 : DatensatzEingeben;
| 4 : DatensatzSuchen;
ELSE
(* Nichts *)
END;
UNTIL Rausgehen(Wahl);
END Datei.
(*********************************************************)
(* Ende DATEI.MOD *)