home *** CD-ROM | disk | FTP | other *** search
- (*------------------------------------------------------------*)
- (* ADREWA2.INC *)
- (* Zweite Include-Datei (Folge 6) zur Adressverwaltung *)
- (*------------------------------------------------------------*)
- (* Indexfeld mittels Bubblesort sortieren *)
- PROCEDURE Sortieren;
-
- VAR getauscht, tauschen : BOOLEAN;
- i : INTEGER;
- Hilf : tIndex;
-
- BEGIN
- ClrScr;
- SchreibeUeberschrift('Datei sortieren');
- WriteLn; WriteLn; WriteLn;
- WriteLn('Bitte etwas Geduld !');
- REPEAT (* Feld immer wieder durchgehen *)
- getauscht := FALSE;
- FOR i := 1 TO (MaxDaten - 1) DO BEGIN (* Feldindex *)
- tauschen := FALSE;
- IF ((Indexfeld[i].Schluessel = '@')
- AND (Indexfeld[i + 1].Schluessel <> '@')) THEN
- tauschen := TRUE; (* Geloeschten Datensatz nach hinten *)
- IF (Indexfeld[i].Schluessel > Indexfeld[i + 1].Schluessel)
- AND (Indexfeld[i].Schluessel <> '@') (* zwei gueltige *)
- AND (Indexfeld[i + 1].Schluessel <> '@') THEN (* sortieren *)
- tauschen := TRUE;
- IF tauschen THEN BEGIN (* Uebliche Vertauschung *)
- Hilf := Indexfeld[i];
- Indexfeld[i] := Indexfeld[i + 1];
- Indexfeld[i + 1] := Hilf;
- getauscht := TRUE;
- END;
- END;
- UNTIL NOT (getauscht); (* Alles sortiert *)
- END;
-
- (*------------------------------------------------------------*)
- (* Suchen eines Namens in der Adrewa *)
- PROCEDURE Suchen;
-
- VAR Name : tEintrag;
- Pos, SuchPos : INTEGER;
- Datensatz : tDatensatz;
- weitersuchen : BOOLEAN;
-
- BEGIN
- weitersuchen := FALSE;
- SuchPos := 1;
- ClrScr;
- SchreibeUeberschrift('Datensaetze suchen');
- WriteLn; WriteLn; WriteLn;
- Write(' Zu suchender Name: '); ReadLn(Name);
- WriteLn;
- IF (Name <> '') THEN BEGIN
- REPEAT
- Pos := SucheIndex(Name,SuchPos);
- IF (Pos <> -1) THEN BEGIN
- Seek(Datenfile,Pos);
- Read(Datenfile,Datensatz);
- WriteLn;
- WriteLn('Datensatz gefunden');
- WaitKey;
- Ausgeben(Datensatz);
- ClrScr;
- SchreibeUeberschrift('Datensaetze suchen');
- WriteLn; WriteLn; WriteLn;
- weitersuchen
- := JaNein('Weiteren Datensatz mit diesem Namen suchen ');
- SuchPos := SuchPos + 1;
- END;
- UNTIL ((NOT(weitersuchen)) OR (Pos = -1));
- WriteLn; WriteLn; WriteLn;
- WriteLn('Nichts (mehr) gefunden !');
- WriteLn;
- WaitKey;
- END;
- END;
-
- (*------------------------------------------------------------*)
- (* Loeschen eines Namens in der Adrewa *)
- PROCEDURE Loeschen;
-
- VAR Name : tEintrag;
- Pos, SuchPos : INTEGER;
- Datensatz : tDatensatz;
- weitersuchen, Loeschen : BOOLEAN;
-
- BEGIN
- weitersuchen := FALSE;
- SuchPos := 1;
- ClrScr;
- SchreibeUeberschrift('Datensaetze loeschen');
- WriteLn; WriteLn; WriteLn;
- Write(' Zu loeschender Name: '); ReadLn(Name);
- WriteLn;
- IF (Name <> '') THEN BEGIN
- REPEAT
- Pos := SucheIndex(Name,SuchPos);
- IF (Pos <> -1) THEN BEGIN
- Seek(Datenfile,Pos);
- Read(Datenfile,Datensatz);
- WriteLn;
- WriteLn('Datensatz zum löschen gefunden !');
- WaitKey;
- Ausgeben(Datensatz);
- ClrScr;
- SchreibeUeberschrift('Datensaetze loeschen');
- WriteLn; WriteLn; WriteLn;
- Loeschen :=
- JaNein('Soll der gezeigte Datensatz geloescht werden ');
- IF Loeschen THEN BEGIN (* Datensatz markieren *)
- Indexfeld[SuchPos].Schluessel := '@';
- Datensatz.Name := '@';
- Seek(Datenfile,Pos);
- Write(Datenfile,Datensatz);
- END;
- WriteLn;
- weitersuchen :=
- JaNein('Weiteren (anderen) Datensatz mit diesem Namen loeschen ');
- SuchPos := SuchPos + 1;
- END;
- UNTIL ((NOT(weitersuchen)) OR (Pos = -1));
- WriteLn; WriteLn; WriteLn;
- WriteLn('Nichts (mehr) gefunden !');
- WriteLn;
- WaitKey;
- END;
- END;
-
- (*------------------------------------------------------------*)
- (* Ausgeben einer Gruppe von Datensaetzen *)
- (* auf Drucker oder Bildschirm *)
- PROCEDURE Ausgabe;
-
- VAR Wahl : CHAR;
- NrStr, Name : tEintrag;
- Von, Bis, Hilf, Pos, SuchPos, i : INTEGER;
- KonvFehler : BOOLEAN;
- Datensatz : tDatensatz;
-
- BEGIN
- ClrScr;
- SchreibeUeberschrift('Ausgeben von Datensaetzen');
- WriteLn; WriteLn; WriteLn;
- Write('Fuer diese Programmfunktion muessen die ');
- WriteLn('Datensaetze zuvor sortiert werden !');
- WaitKey;
- Sortieren;
- ClrScr;
- SchreibeUeberschrift('Ausgeben von Datensaetzen');
- WriteLn; WriteLn; WriteLn;
- REPEAT
- Write('Datensaetze nach Nummer (1) oder Namen (2) waehlen ? ');
- ReadLn(Wahl);
- UNTIL Wahl IN ['1','2'];
- WriteLn; WriteLn; WriteLn;
- CASE Wahl OF
- '1' : BEGIN
- WriteLn('Nummernbereich der auszugebenden Datensätze wählen !');
- WriteLn;
- REPEAT
- Write('Von Datensatz: ');
- ReadLn(NrStr);
- StrToInt(NrStr,Von,KonvFehler);
- UNTIL (NOT(KonvFehler));
- WriteLn;
- REPEAT
- Write('Bis Datensatz: ');
- ReadLn(NrStr);
- StrToInt(NrStr,Bis,KonvFehler);
- UNTIL (NOT(KonvFehler));
- IF (Von > Bis) THEN BEGIN
- Hilf := Von;
- Von := Bis;
- Bis := Hilf;
- END;
- IF Von < 1 THEN
- Von := 1;
- IF Bis > MaxDaten THEN
- Bis := MaxDaten;
- WriteLn; WriteLn; WriteLn;
- WriteLn('Ausgabe der Datensätze startet !');
- WaitKey;
- SuchPos := 1;
- FOR i := Von TO Bis DO BEGIN
- Hilf := SucheIndex(Indexfeld[i].Schluessel,SuchPos);
- IF (Hilf <> -1) THEN BEGIN
- Seek(Datenfile,Hilf);
- Read(Datenfile,Datensatz);
- Ausgeben(Datensatz);
- END;
- END;
- END;
- '2' : BEGIN
- Write('Die Namen der ersten und letzten auszugebenden ');
- WriteLn('Datensatz eingeben !');
- WriteLn;
- REPEAT
- SuchPos := 1;
- Write('Name des ersten Datensatz: '); ReadLn(Name);
- Pos := SucheIndex(Name,SuchPos);
- UNTIL (Pos <> -1);
- Von := SuchPos;
- WriteLn;
- REPEAT
- SuchPos := 1;
- Write('Name des letzten Datensatz: '); ReadLn(Name);
- Pos := SucheIndex(Name,SuchPos);
- UNTIL (Pos <> -1);
- Bis := SuchPos;
- SuchPos := SuchPos + 1;
- REPEAT (* Den letzte Eintrag mit "Name" suchen *)
- Pos := SucheIndex(Name,SuchPos);
- IF (Pos <> -1) THEN BEGIN
- Bis := SuchPos;
- SuchPos := SuchPos + 1;
- END;
- UNTIL (Pos = -1);
- IF (Von > Bis) THEN BEGIN
- Hilf := Von;
- Von := Bis;
- Bis := Hilf;
- END;
- WriteLn; WriteLn; WriteLn;
- WriteLn('Ausgabe der Datensätze startet !');
- WaitKey;
- SuchPos := 1;
- FOR i := Von TO Bis DO BEGIN
- Pos := SucheIndex(Indexfeld[i].Schluessel,SuchPos);
- IF (Pos <> -1) THEN BEGIN
- Seek(Datenfile,Pos);
- Read(Datenfile,Datensatz);
- Ausgeben(Datensatz);
- END;
- END;
- END;
- END; (* CASE *)
- END;
-
- (*------------------------------------------------------------*)
- (* Ende ADREWA2.INC *)
-