home *** CD-ROM | disk | FTP | other *** search
- (* ---------------------------------------------------------------------- *)
- (* VARIANTE.PAS *)
- (* Beispielprogramm (Turbo-Pascal) fuer "Variante Records *)
- (* ---------------------------------------------------------------------- *)
-
- PROGRAM Varianten_Demo (Input,Output);
-
- CONST Namenslaenge = 20;
- GebLaenge = 8;
- Datei_Name = 'Testdat.RM';
-
- TYPE NamensTyp = STRING(.Namenslaenge.);
- GebTyp = STRING(.GebLaenge.);
- GeschlechtsTyp = (m,w,x);
- PersonTyp = RECORD
- Name : NamensTyp;
- CASE geschlecht : GeschlechtsTyp OF
- m: (gebdat : GebTyp;
- gewicht: REAL;
- baertig: CHAR;
- merkmal: STRING(.10.));
- w: (telefon : REAL;
- bemerkung: STRING(.10.));
- x: (zell: CHAR);
- END;
-
- VAR n, i : INTEGER;
- abbrechen : BOOLEAN;
- person : PersonTyp;
- geschl : CHAR;
- antwort : CHAR;
- Datei : FILE OF PersonTyp;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Datei_oeffnen;
-
- BEGIN
- Assign(Datei, Datei_Name);
- (*$I-*) (* I/O-Fehlerbehandlung durch Laufzeitsystem abschalten *)
- ReSet(Datei);
- (*$I+*) (* und wieder an... *)
- IF IOResult = 0 THEN
- ReSet(Datei) (* Datei existiert schon! *)
- ELSE
- ReWrite(Datei); (* sonst neu anlegen! *)
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Ende;
-
- BEGIN
- Close(Datei);
- abbrechen := TRUE;
- ClrScr;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Eintrag;
-
- BEGIN
- ClrScr;
- WITH person DO
- BEGIN
- Write('Name : ');
- ReadLn(Name);
- Write('Geschlecht : '); (* Hilfsvariable fuer CASE-Anweisung *)
- ReadLn(geschl);
- CASE geschl OF
- 'w': person.geschlecht := w;
- 'm': person.geschlecht := m;
- ELSE person.geschlecht := x;
- END;
- CASE geschlecht OF
- m: BEGIN
- Write('Geburtsdatum :'); ReadLn(gebdat);
- Write('Gewicht : '); ReadLn(gewicht);
- Write('baertig : '); ReadLn(baertig);
- Write('Merkmal : '); ReadLn(merkmal);
- END;
- w: BEGIN
- Write('Telefon : '); ReadLn(telefon);
- Write('Bemerkung : '); ReadLn(bemerkung);
- END;
- x: BEGIN
- Write('Fortpflanzung durch Zellteilung : ');
- Read(zell);
- END;
- END;
- ClrScr;
- Seek(Datei, FileSize(Datei)); (* Dateiende suchen... *)
- Write(Datei,person); (* ...und Record anhaengen *)
- END;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Zeige_Satz;
-
- BEGIN
- WITH person DO
- BEGIN
- WriteLn(FilePos(Datei),' ',Name);
- CASE geschlecht OF
- m: BEGIN
- WriteLn('Geburtstag : ',gebdat);
- Write('Gewicht : ',gewicht:6:2,' kg');
- Write(' Barttraeger : ',baertig);
- WriteLn(' Merkmal : ',merkmal);
- END;
- w: WriteLn('Telefon : ',telefon:10:0,' Bemerkung : ',bemerkung);
- x: WriteLn('Zellteiler : ',zell);
- END;
- END;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Liste;
-
- BEGIN
- ClrScr;
- ReSet(Datei);
- i := 1;
- WHILE NOT (Eof(Datei)) DO
- BEGIN
- GotoXY(1,i);
- Read(Datei,person);
- Zeige_Satz;
- WriteLn;
- i := i+4;
- IF i >= 20 THEN
- BEGIN
- i := 1;
- WriteLn; WriteLn('WEITER MIT >>RETURN<<'); Read;
- ClrScr;
- END;
- END;
- WriteLn; WriteLn; WriteLn('Mit <RETURN> geht es weiter!'); Read;
- ClrScr;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Satz;
-
- BEGIN
- ReSet(Datei);
- ClrScr;
- Write('Nummer des Eintrags : '); Read(n);
- WriteLn; WriteLn;
- Seek(Datei,n-1); (* Turbo nummeriert die Saetze ab 0! *)
- Read(Datei,person);
- Zeige_Satz;
- WriteLn; WriteLn; WriteLn; WriteLn('Weiter mit <RETURN>'); Read;
- ClrScr;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- PROCEDURE Suchen;
-
- VAR such : GeschlechtsTyp;
-
- BEGIN
- ClrScr;
- ReSet(Datei);
- WriteLn('Dateiausgabe nach Geschlechtern');
- WriteLn('-------------------------------');
- WriteLn; WriteLn; Write('Geben Sie m, w oder h ein : '); ReadLn(antwort);
- ClrScr;
- antwort := UpCase(antwort);
- CASE antwort OF
- 'M': BEGIN
- such := m;
- WriteLn('A L L E S M A E N N E R'); WriteLn; WriteLn;
- END;
- 'W': BEGIN
- such := w;
- WriteLn('A L L E S F R A U E N'); WriteLn; WriteLn;
- END;
- 'H': BEGIN
- such := x;
- WriteLn('A L L E S H E R M A P H R O D I T E N');
- WriteLn; WriteLn;
- END;
- END;
- WHILE NOT(Eof(Datei)) DO
- BEGIN
- Read(Datei,person);
- WITH person DO
- IF geschlecht = such THEN WriteLn(Name);
- END;
- WriteLn; WriteLn; Write('Weiter mit <RETURN>'); Read;
- ClrScr;
- END;
-
- (* ---------------------------------------------------------------------- *)
-
- BEGIN
- ClrScr;
- Datei_oeffnen;
- abbrechen := FALSE;
- REPEAT
- WriteLn; WriteLn; WriteLn
- ('Beispiel fuer "Varianter Record als Random_Access_Datei"');
- WriteLn
- ('--------------------------------------------------------');
- WriteLn; WriteLn; WriteLn; WriteLn;
- WriteLn; WriteLn('1. Neuer Eintrag');
- WriteLn; WriteLn('2. Liste der Eintraege');
- WriteLn; WriteLn('3. Lesen eines Satzes');
- WriteLn; WriteLn('4. Namensliste nach Geschlechter');
- WriteLn; WriteLn('0. Ende');
- WriteLn; Write('Was ? '); ReadLn(antwort);
- CASE antwort OF
- '1': Eintrag;
- '2': Liste;
- '3': Satz;
- '4': Suchen;
- '0': Ende;
- END;
- UNTIL abbrechen;
- END.
-