home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 12 / adrewa2.inc < prev    next >
Encoding:
Text File  |  1987-10-07  |  7.7 KB  |  243 lines

  1. (*------------------------------------------------------------*)
  2. (*                        ADREWA2.INC                         *)
  3. (*    Zweite Include-Datei (Folge 6) zur Adressverwaltung     *)
  4. (*------------------------------------------------------------*)
  5. (*         Indexfeld mittels Bubblesort sortieren             *)
  6. PROCEDURE Sortieren;
  7.  
  8. VAR getauscht, tauschen : BOOLEAN;
  9.     i : INTEGER;
  10.     Hilf : tIndex;
  11.  
  12. BEGIN
  13.   ClrScr;
  14.   SchreibeUeberschrift('Datei sortieren');
  15.   WriteLn; WriteLn; WriteLn;
  16.   WriteLn('Bitte etwas Geduld !');
  17.   REPEAT  (* Feld immer wieder durchgehen *)
  18.     getauscht := FALSE;
  19.     FOR i := 1 TO (MaxDaten - 1) DO BEGIN  (* Feldindex *)
  20.       tauschen := FALSE;
  21.       IF ((Indexfeld[i].Schluessel = '@')
  22.       AND (Indexfeld[i + 1].Schluessel <> '@')) THEN
  23.         tauschen := TRUE;  (* Geloeschten Datensatz nach hinten *)
  24.      IF  (Indexfeld[i].Schluessel > Indexfeld[i + 1].Schluessel)
  25.       AND (Indexfeld[i].Schluessel <> '@')          (* zwei gueltige *)
  26.       AND (Indexfeld[i + 1].Schluessel <> '@') THEN (* sortieren     *)
  27.         tauschen := TRUE;
  28.       IF tauschen THEN BEGIN  (* Uebliche Vertauschung *)
  29.         Hilf := Indexfeld[i];
  30.         Indexfeld[i] := Indexfeld[i + 1];
  31.         Indexfeld[i + 1] := Hilf;
  32.         getauscht := TRUE;
  33.       END;
  34.     END;
  35.   UNTIL NOT (getauscht); (* Alles sortiert *)
  36. END;
  37.  
  38. (*------------------------------------------------------------*)
  39. (*            Suchen eines Namens in der Adrewa               *)
  40. PROCEDURE Suchen;
  41.  
  42. VAR Name : tEintrag;
  43.     Pos, SuchPos : INTEGER;
  44.     Datensatz : tDatensatz;
  45.     weitersuchen : BOOLEAN;
  46.  
  47. BEGIN
  48.   weitersuchen := FALSE;
  49.   SuchPos := 1;
  50.   ClrScr;
  51.   SchreibeUeberschrift('Datensaetze suchen');
  52.   WriteLn; WriteLn; WriteLn;
  53.   Write(' Zu suchender Name: '); ReadLn(Name);
  54.   WriteLn;
  55.   IF (Name <> '') THEN BEGIN
  56.     REPEAT
  57.       Pos := SucheIndex(Name,SuchPos);
  58.       IF (Pos <> -1) THEN BEGIN
  59.         Seek(Datenfile,Pos);
  60.         Read(Datenfile,Datensatz);
  61.         WriteLn;
  62.         WriteLn('Datensatz gefunden');
  63.         WaitKey;
  64.         Ausgeben(Datensatz);
  65.         ClrScr;
  66.         SchreibeUeberschrift('Datensaetze suchen');
  67.         WriteLn; WriteLn; WriteLn;
  68.         weitersuchen
  69.            := JaNein('Weiteren Datensatz mit diesem Namen suchen ');
  70.         SuchPos := SuchPos + 1;
  71.       END;
  72.     UNTIL ((NOT(weitersuchen)) OR (Pos = -1));
  73.     WriteLn; WriteLn; WriteLn;
  74.     WriteLn('Nichts (mehr) gefunden !');
  75.     WriteLn;
  76.     WaitKey;
  77.   END;
  78. END;
  79.  
  80. (*------------------------------------------------------------*)
  81. (*            Loeschen eines Namens in der Adrewa             *)
  82. PROCEDURE Loeschen;
  83.  
  84. VAR Name : tEintrag;
  85.     Pos, SuchPos : INTEGER;
  86.     Datensatz : tDatensatz;
  87.     weitersuchen, Loeschen : BOOLEAN;
  88.  
  89. BEGIN
  90.   weitersuchen := FALSE;
  91.   SuchPos := 1;
  92.   ClrScr;
  93.   SchreibeUeberschrift('Datensaetze loeschen');
  94.   WriteLn; WriteLn; WriteLn;
  95.   Write(' Zu loeschender Name: '); ReadLn(Name);
  96.   WriteLn;
  97.   IF (Name <> '') THEN BEGIN
  98.     REPEAT
  99.       Pos := SucheIndex(Name,SuchPos);
  100.       IF (Pos <> -1) THEN BEGIN
  101.         Seek(Datenfile,Pos);
  102.         Read(Datenfile,Datensatz);
  103.         WriteLn;
  104.         WriteLn('Datensatz zum löschen gefunden !');
  105.         WaitKey;
  106.         Ausgeben(Datensatz);
  107.         ClrScr;
  108.         SchreibeUeberschrift('Datensaetze loeschen');
  109.         WriteLn; WriteLn; WriteLn;
  110.         Loeschen :=
  111.           JaNein('Soll der gezeigte Datensatz geloescht werden ');
  112.         IF Loeschen THEN BEGIN (* Datensatz markieren *)
  113.           Indexfeld[SuchPos].Schluessel := '@';
  114.           Datensatz.Name := '@';
  115.           Seek(Datenfile,Pos);
  116.           Write(Datenfile,Datensatz);
  117.         END;
  118.         WriteLn;
  119.         weitersuchen :=
  120.           JaNein('Weiteren (anderen) Datensatz mit diesem Namen loeschen ');
  121.         SuchPos := SuchPos + 1;
  122.       END;
  123.     UNTIL ((NOT(weitersuchen)) OR (Pos = -1));
  124.     WriteLn; WriteLn; WriteLn;
  125.     WriteLn('Nichts (mehr) gefunden !');
  126.     WriteLn;
  127.     WaitKey;
  128.   END;
  129. END;
  130.  
  131. (*------------------------------------------------------------*)
  132. (*          Ausgeben einer Gruppe von Datensaetzen            *)
  133. (*                auf Drucker oder Bildschirm                 *)
  134. PROCEDURE Ausgabe;
  135.  
  136. VAR Wahl : CHAR;
  137.     NrStr, Name : tEintrag;
  138.     Von, Bis, Hilf, Pos, SuchPos, i : INTEGER;
  139.     KonvFehler : BOOLEAN;
  140.     Datensatz : tDatensatz;
  141.  
  142. BEGIN
  143.   ClrScr;
  144.   SchreibeUeberschrift('Ausgeben von Datensaetzen');
  145.   WriteLn; WriteLn; WriteLn;
  146.   Write('Fuer diese Programmfunktion muessen die ');
  147.   WriteLn('Datensaetze zuvor sortiert werden !');
  148.   WaitKey;
  149.   Sortieren;
  150.   ClrScr;
  151.   SchreibeUeberschrift('Ausgeben von Datensaetzen');
  152.   WriteLn; WriteLn; WriteLn;
  153.   REPEAT
  154.     Write('Datensaetze nach Nummer (1) oder Namen (2) waehlen ? ');
  155.     ReadLn(Wahl);
  156.   UNTIL Wahl IN ['1','2'];
  157.   WriteLn; WriteLn; WriteLn;
  158.   CASE Wahl OF
  159.     '1' : BEGIN
  160.             WriteLn('Nummernbereich der auszugebenden Datensätze wählen !');
  161.             WriteLn;
  162.             REPEAT
  163.               Write('Von Datensatz: ');
  164.               ReadLn(NrStr);
  165.               StrToInt(NrStr,Von,KonvFehler);
  166.             UNTIL (NOT(KonvFehler));
  167.             WriteLn;
  168.             REPEAT
  169.               Write('Bis Datensatz: ');
  170.               ReadLn(NrStr);
  171.               StrToInt(NrStr,Bis,KonvFehler);
  172.             UNTIL (NOT(KonvFehler));
  173.             IF (Von > Bis) THEN BEGIN
  174.               Hilf := Von;
  175.               Von := Bis;
  176.               Bis := Hilf;
  177.             END;
  178.             IF Von < 1 THEN
  179.               Von := 1;
  180.             IF Bis > MaxDaten THEN
  181.               Bis := MaxDaten;
  182.             WriteLn; WriteLn; WriteLn;
  183.             WriteLn('Ausgabe der Datensätze startet !');
  184.             WaitKey;
  185.             SuchPos := 1;
  186.             FOR i := Von TO Bis DO BEGIN
  187.               Hilf := SucheIndex(Indexfeld[i].Schluessel,SuchPos);
  188.               IF (Hilf <> -1) THEN BEGIN
  189.                 Seek(Datenfile,Hilf);
  190.                 Read(Datenfile,Datensatz);
  191.                 Ausgeben(Datensatz);
  192.               END;
  193.             END;
  194.           END;
  195.     '2' : BEGIN
  196.             Write('Die Namen der ersten und letzten auszugebenden ');
  197.             WriteLn('Datensatz eingeben !');
  198.             WriteLn;
  199.             REPEAT
  200.               SuchPos := 1;
  201.               Write('Name des ersten Datensatz: '); ReadLn(Name);
  202.               Pos := SucheIndex(Name,SuchPos);
  203.             UNTIL (Pos <> -1);
  204.             Von := SuchPos;
  205.             WriteLn;
  206.             REPEAT
  207.               SuchPos := 1;
  208.               Write('Name des letzten Datensatz: '); ReadLn(Name);
  209.               Pos := SucheIndex(Name,SuchPos);
  210.             UNTIL (Pos <> -1);
  211.             Bis := SuchPos;
  212.             SuchPos := SuchPos + 1;
  213.             REPEAT   (* Den letzte Eintrag mit "Name" suchen *)
  214.               Pos := SucheIndex(Name,SuchPos);
  215.               IF (Pos <> -1) THEN BEGIN
  216.                 Bis := SuchPos;
  217.                 SuchPos := SuchPos + 1;
  218.               END;
  219.             UNTIL (Pos = -1);
  220.             IF (Von > Bis) THEN BEGIN
  221.               Hilf := Von;
  222.               Von := Bis;
  223.               Bis := Hilf;
  224.             END;
  225.             WriteLn; WriteLn; WriteLn;
  226.             WriteLn('Ausgabe der Datensätze startet !');
  227.             WaitKey;
  228.             SuchPos := 1;
  229.             FOR i := Von TO Bis DO BEGIN
  230.               Pos := SucheIndex(Indexfeld[i].Schluessel,SuchPos);
  231.               IF (Pos <> -1) THEN BEGIN
  232.                 Seek(Datenfile,Pos);
  233.                 Read(Datenfile,Datensatz);
  234.                 Ausgeben(Datensatz);
  235.               END;
  236.             END;
  237.           END;
  238.   END; (* CASE *)
  239. END;
  240.  
  241. (*------------------------------------------------------------*)
  242. (*                    Ende ADREWA2.INC                        *)
  243.