home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 09 / adrewa.pas next >
Encoding:
Pascal/Delphi Source File  |  1987-07-01  |  5.1 KB  |  122 lines

  1. (* Jedes Pascalprogramm muss einen Namen haben ! *)
  2. PROGRAM AdressVerwaltung(INPUT, OUTPUT, Datenfile, Indexfile);
  3.     (* In den Klammern hinter dem Programmname muessen die Kanaele stehen*)
  4.     (* ueber die das Programm mit der Aussenwelt kommuniziert. INPUT und *)
  5.     (* OUTPUT ist die Standard Ein- und Ausgabe auf dem Terminal.        *)
  6.     (* "Datenfile" ist der Name der FILE-Variablen fuer die Adressdaten. *)
  7.     (* "Indexfile" ist der Name der FILE-Variablen, mit der die Index-   *)
  8.     (* felder auf Massenspeicher gerettet werden.                        *)
  9.  
  10. (* Als erstes muessen die Konstantendefinitionen kommen. *)
  11. CONST MaxDaten = 300;  (* Maximal 300 Adressen koennen verwaltet werden. *)
  12.                        (* Dieser Wert kann auch beliebig hoeher ange-    *)
  13.                        (* setzt werden. Dabei muss aber beachtet werden, *)
  14.                        (* dass das Indexfeld in den Hauptspeicher passt! *)
  15.       Schluessellaenge = 30; (* Ein Schluessel kann 30 signifikante *)
  16.                              (* Zeichen lang sein. Auch dieser Wert *)
  17.                              (* kann individuellen Beduerfnissen    *)
  18.                              (* angepasst werden.                   *)
  19.       EintragLaenge = 80; (* Laenge der Eintraege i. d. Adressverwaltung *)
  20.  
  21.  
  22. (* Als zweites kommen TYPE-Definitionen. *)
  23. TYPE tSchluessel = STRING[Schluessellaenge]; (* Schluesselstrings dimen- *)
  24.                                              (* sionieren.               *)
  25.  
  26.      tEintrag = STRING[EintragLaenge]; (* Stringtyp fuer Eintraege *)
  27.                                        (* in die Datensaetze.      *)
  28.  
  29.      tDatum = RECORD                         (* Einen Typ fuer Datumein- *)
  30.                 Tag, Monat, Jahr : INTEGER;  (* traege definieren.       *)
  31.               END;
  32.  
  33.      tDatensatz = RECORD          (* Dieser Datensatz kann natuerlich *)
  34.                     Name,         (* persoenlichen Beduerfnissen ent- *)
  35.                     Vorname,      (* sprechend variiert werden.       *)
  36.                     Strasse,
  37.                     Wohnort : tEintrag;
  38.                     PLZ : INTEGER;
  39.                     Geburtstag : tDatum;
  40.                     Kommentar : tEintrag;
  41.                   END;
  42.  
  43.      tDatenfile = FILE OF tDatensatz;
  44.  
  45.      tIndex = RECORD
  46.                 Schluessel : tSchluessel;
  47.                 RecNr : INTEGER;          (* Nr des Datensatzes im File *)
  48.               END;
  49.  
  50.      tIndexfeld = ARRAY[1..MaxDaten] OF tIndex; (* Schluesselfeld *)
  51.  
  52.      tIndexfile = FILE OF tIndexfeld;           (* Zum sichern des Index. *)
  53.  
  54. VAR Datenfile : tDatenfile;
  55.     Indexfile : tIndexfile;
  56.     Wahl : CHAR;            (* Fuer Auswahl im Hauptmenue. *)
  57.  
  58.  
  59.                    (* . *)
  60.                    (* . *)
  61.                    (* . *)
  62. (* Hier kommen dann die Unterprogramme hin. *)
  63.                    (* . *)
  64.                    (* . *)
  65.                    (* . *)
  66.  
  67.  
  68. (* Hier beginnt das Hauptprogramm *)
  69. BEGIN
  70.   REPEAT (* Haupt-Schleife *);
  71.     ClrScr;      (* Bildschirm loeschen, Cursor nach links oben  *)
  72.     (* Menue ausgeben *)
  73.     WriteLn('              > > >  P A S C A L  < < <');
  74.     WriteLn('                  Adressverwaltung');
  75.     WriteLn; WriteLn; WriteLn;   (* Einige Leerzeilen *)
  76.     WriteLn('  O           Oeffnen Adress-Datei');
  77.     WriteLn;
  78.     WriteLn('  E           Eingeben Adressen');
  79.     WriteLn;
  80.     WriteLn('  S           Suchen Adressen');
  81.     WriteLn;
  82.     WriteLn('  R           soRtieren Adressen');
  83.     WriteLn;
  84.     WriteLn('  L           Loeschen Adressen');
  85.     WriteLn;
  86.     WriteLn('  A           Ausgeben Adressen');
  87.     WriteLn;
  88.     WriteLn('  C           sChliessen Adress-Datei');
  89.     WriteLn;
  90.     WriteLn;
  91.     WriteLn('  Q           Quit');
  92.     WriteLn; WriteLn; WriteLn;
  93.     Write('  Ihre Wahl: '); read(Wahl);
  94.     (* Gueltiges Auswahl-Zeichen ? *)
  95.     IF (Wahl IN ['o','O','e','E','s','S','r','R',
  96.                  'l','L','a','A','c','C','q','Q']) THEN
  97.       CASE Wahl OF  (* Fallunterscheidung *)
  98.         'o','O' : (* Adressdatei oeffnen    *) ;
  99.         'e','E' : (* Adressen eingeben      *) ;
  100.         's','S' : (* Adressen suchen        *) ;
  101.         'r','R' : (* Adressen sortieren     *) ;
  102.         'l','L' : (* Adressen loeschen      *) ;
  103.         'a','A' : (* Adressen ausgeben      *) ;
  104.         'c','C' : (* Adressdatei schliessen *) ;
  105.         'q','Q' : BEGIN  (* Programm verlassen ? *)
  106.                     ClrScr;   (* Bildschirm loeschen *)
  107.                     (* Ueberschrift *)
  108.                     WriteLn('          ##### Programm beenden #####');
  109.                     WriteLn;  (* Zwei Leerzeilen     *)
  110.                     WriteLn;
  111.                     (* Sicherheitsabfrage *)
  112.                     Write(' Programm verlassen ');
  113.                     Write('(Datei geschlossen !?) ? (j/n) ');
  114.                     ReadLn(Wahl);
  115.                     IF (Wahl In ['j','J']) THEN
  116.                       Wahl := 'q'   (* Anzeigen, dass Programmende *)
  117.                     ELSE
  118.                       Wahl := '0';  (* Weiter geht's ! *)
  119.                   END;
  120.       END;
  121.   UNTIL (Wahl IN ['q','Q']);  (* Benutzer will raus ! *)
  122. END.