home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1990 / 08 / grdlagen / datei.mod < prev    next >
Text File  |  1990-05-15  |  7KB  |  274 lines

  1. (**********************************************************)
  2. (*                   Modula-Kurs Teil 7                   *)
  3. (*              (C) M.Schlöter & toolbox 1990             *)
  4. (**********************************************************)
  5.  
  6. MODULE Datei;
  7.  
  8. FROM InOut IMPORT WriteString, WriteInt, WriteLn,
  9.                   Read, ReadInt, ReadString,
  10.                   Done;
  11.  
  12. FROM FIO IMPORT File, Exists, Open, Create, RdBin, WrBin,
  13.                 Seek, Size, Close, EOF;
  14.  
  15. FROM Str IMPORT Compare;
  16.  
  17. CONST WahlFuerEnde = 5;
  18.  
  19.  
  20. TYPE String40 = ARRAY[1..40] OF CHAR;
  21.      EinKunde = RECORD
  22.                   KundenNr : INTEGER;
  23.                   Name,
  24.                   Vorname,
  25.                   Strasse,
  26.                   Ort    : String40;
  27.                 END;
  28.  
  29.  
  30. VAR Wahl : INTEGER;
  31.     DateiOffen : BOOLEAN;
  32.     DateiName : String40;
  33.     Daten : File;
  34.  
  35.  
  36. PROCEDURE ClearScreen;
  37.  
  38. VAR i : INTEGER;
  39.  
  40. BEGIN
  41.   FOR i := 1 TO 25 DO
  42.     WriteLn;
  43.   END;
  44. END ClearScreen;
  45.  
  46.  
  47. PROCEDURE WaitKey;
  48. VAR Dummy : CHAR;
  49. BEGIN
  50.   REPEAT
  51.     Read(Dummy);
  52.   UNTIL Done;
  53. END WaitKey;
  54.  
  55.  
  56. PROCEDURE DateiNichtOffen;
  57. BEGIN
  58.   ClearScreen;
  59.   WriteString("******************************"); WriteLn;
  60.   WriteString("*           FEHLER           *"); WriteLn;
  61.   WriteString("*       Datei nicht offen    *"); WriteLn;
  62.   WriteString("******************************"); WriteLn;
  63.   WriteLn;
  64.   WriteString(">>> Taste druecken <<<");
  65.   WaitKey;
  66. END DateiNichtOffen;
  67.  
  68.  
  69. PROCEDURE DateiOeffnen;
  70. BEGIN
  71.   IF DateiOffen THEN
  72.     ClearScreen;
  73.     WriteString("******************************"); WriteLn;
  74.     WriteString("*           FEHLER           *"); WriteLn;
  75.     WriteString("*       Datei noch offen     *"); WriteLn;
  76.     WriteString("******************************"); WriteLn;
  77.     WriteLn;
  78.     WriteString(">>> Taste druecken <<<");
  79.     WaitKey;
  80.     RETURN
  81.   ELSE
  82.     ClearScreen;
  83.     WriteString("        Oeffnen Datei"); WriteLn;
  84.     WriteString("        ============="); WriteLn;
  85.     WriteLn;
  86.     WriteLn;
  87.     WriteString("Name der zu oeffnenden Datei: ");
  88.     ReadString(DateiName);
  89.     IF Exists(DateiName) THEN
  90.       Daten := Open(DateiName);
  91.     ELSE
  92.       Daten := Create(DateiName);
  93.     END;
  94.     DateiOffen := TRUE;
  95.   END;
  96. END DateiOeffnen;
  97.  
  98.  
  99. PROCEDURE DateiSchliessen;
  100.  
  101. BEGIN
  102.   IF NOT DateiOffen THEN
  103.     DateiNichtOffen;
  104.     RETURN
  105.   ELSE
  106.     ClearScreen;
  107.     WriteString("        Datei schliessen"); WriteLn;
  108.     WriteString("        ================"); WriteLn;
  109.     WriteLn;
  110.     WriteLn;
  111.     Close(Daten);
  112.     DateiOffen := FALSE;
  113.     WriteString("         OK, erledigt !");
  114.     WriteLn; WriteLn;
  115.     WriteString(">>> Taste druecken <<<");
  116.     WaitKey;
  117.   END;
  118. END DateiSchliessen;
  119.  
  120.  
  121.  
  122. PROCEDURE DatensatzEingeben;
  123.  
  124. VAR Kunde : EinKunde;
  125.  
  126. BEGIN
  127.   IF NOT DateiOffen THEN
  128.     DateiNichtOffen;
  129.     RETURN
  130.   ELSE
  131.     ClearScreen;
  132.     WriteString("        Datensatz Eingeben"); WriteLn;
  133.     WriteString("        =================="); WriteLn;
  134.     WriteLn;
  135.     WriteLn;
  136.     WriteString("Kundennummer: "); ReadInt(Kunde.KundenNr);
  137.     WriteLn;
  138.     WriteString("Name: "); ReadString(Kunde.Name);
  139.     WriteLn;
  140.     WriteString("Vorname: "); ReadString(Kunde.Vorname);
  141.     WriteLn;
  142.     WriteString("Strasse: "); ReadString(Kunde.Strasse);
  143.     WriteLn;
  144.     WriteString("Ort: "); ReadString(Kunde.Ort);
  145.     WriteLn;
  146.     Seek(Daten,Size(Daten));
  147.     WrBin(Daten,Kunde,SIZE(Kunde));
  148.     WriteString("         OK, erledigt !");
  149.     Close(Daten);             (* Zwischenspeichern *)
  150.     Daten := Open(DateiName);
  151.     WriteLn; WriteLn;
  152.     WriteString(">>> Taste druecken <<<");
  153.     WaitKey;
  154.   END;
  155. END DatensatzEingeben;
  156.  
  157.  
  158.  
  159. PROCEDURE DatensatzSuchen;
  160.  
  161.   PROCEDURE WriteRecord(Kunde : EinKunde);
  162.   BEGIN
  163.     WriteString("=====================================");
  164.     WriteLn;
  165.     WriteString("Kundennummer: ");
  166.     WriteInt(Kunde.KundenNr,10);
  167.     WriteLn;
  168.     WriteString("Name: ");
  169.     WriteString(Kunde.Name);
  170.     WriteLn;
  171.     WriteString("Vorname: ");
  172.     WriteString(Kunde.Vorname);
  173.     WriteLn;
  174.     WriteString("Strasse: ");
  175.     WriteString(Kunde.Strasse);
  176.     WriteLn;
  177.     WriteString("Ort: ");
  178.     WriteString(Kunde.Ort);
  179.     WriteLn;
  180.     WriteString("=====================================");
  181.     WriteLn; WriteLn; WriteLn; WriteLn;
  182.   END WriteRecord;
  183.  
  184. VAR Kunde : EinKunde;
  185.     Name : String40;
  186.     NrBytes : CARDINAL;
  187.     Zaehler : CARDINAL;
  188.  
  189. BEGIN
  190.   IF NOT DateiOffen THEN
  191.     DateiNichtOffen;
  192.     RETURN
  193.   ELSE
  194.     Zaehler := 0;
  195.     ClearScreen;
  196.     WriteString("        Datensatz Suchen"); WriteLn;
  197.     WriteString("        ================"); WriteLn;
  198.     WriteLn;
  199.     WriteLn;
  200.     WriteString("Name: "); ReadString(Name);
  201.     WriteLn;
  202.     Seek(Daten,0);
  203.     WHILE NOT EOF DO
  204.       NrBytes := RdBin(Daten,Kunde,SIZE(Kunde));
  205.       IF (Compare(Kunde.Name,Name) = 0) THEN
  206.         WriteRecord(Kunde);
  207.         WriteLn; WriteLn;
  208.         INC(Zaehler);
  209.         IF Zaehler = 2 THEN
  210.           WriteString(">>> Taste druecken <<<");
  211.           WaitKey;
  212.           WriteLn;
  213.           Zaehler := 0;
  214.         END;
  215.       END
  216.     END;
  217.     WriteString("------------------"); WriteLn;
  218.     WriteString("Dateiende erreicht");
  219.     WriteLn; WriteLn;
  220.     WriteString(">>> Taste druecken <<<");
  221.     WaitKey;
  222.   END;
  223. END DatensatzSuchen;
  224.  
  225.  
  226.  
  227. PROCEDURE Rausgehen(Wahl : INTEGER) : BOOLEAN;
  228. BEGIN
  229.   IF Wahl <> WahlFuerEnde THEN
  230.     RETURN FALSE
  231.   ELSE
  232.     RETURN TRUE
  233.   END;
  234. END Rausgehen;
  235.  
  236.  
  237. BEGIN
  238.   DateiOffen := FALSE;
  239.   REPEAT
  240.     REPEAT
  241.       ClearScreen;
  242.       WriteString("                 Kunden-Datei");
  243.       WriteLn;
  244.       WriteString("                 ============");
  245.       WriteLn;
  246.       WriteLn;
  247.       WriteString("     Datei oeffenen ------------- 1");
  248.       WriteLn;
  249.       WriteString("     Datei schließen ------------ 2");
  250.       WriteLn;
  251.       WriteString("     Datensatz eingeben --------- 3");
  252.       WriteLn;
  253.       WriteString("     Datensatz suchen ----------- 4");
  254.       WriteLn;
  255.       WriteString("     Ende ----------------------- 5");
  256.       WriteLn;
  257.       WriteLn;
  258.       WriteString("           Ihre Wahl: ");
  259.       ReadInt(Wahl);
  260.     UNTIL Done;
  261.     CASE Wahl OF
  262.       1 : DateiOeffnen;
  263.     | 2 : DateiSchliessen;
  264.     | 3 : DatensatzEingeben;
  265.     | 4 : DatensatzSuchen;
  266.     ELSE
  267.        (* Nichts *)
  268.     END;
  269.   UNTIL Rausgehen(Wahl);
  270. END Datei.
  271.  
  272. (*********************************************************)
  273. (*                     Ende DATEI.MOD                    *)
  274.