PROGRAM adresse;
USES crt,dos;
TYPE adrrec=RECORD
      name,vorname:string[30];
      telnr:string[15];
     END;
VAR a,b,c,anzahl:word;
    adrfeld:array[1..100]of adrrec;
    adrhilf:adrrec;
    ch:char;
    data:file of adrrec;
PROCEDURE SORT;
 VAR a1,a2:word;
     bool:boolean;
 BEGIN
  if anzahl>1 then for a2:=1 to anzahl Do begin
   bool:=true;
   For a1:=1 to anzahl-a2 Do begin
    if adrfeld[a1].name>adrfeld[a1+1].name then begin
     bool:=false;
     adrhilf:=adrfeld[a1];
     adrfeld[a1]:=adrfeld[a1+1];
     adrfeld[a1+1]:=adrhilf;
    end;
   end;
   if bool then a2:=anzahl;
  End;
END;
PROCEDURE START;
 BEGIN
  CLRSCR;
  GOTOXY(10,10);WRITELN('Neuer Eintrag.......<1>');
  GOTOXY(10,11);WRITELN('Eintrag l”schen.....<2>');
  GOTOXY(10,12);WRITELN('Eintr„ge anzeigen...<3>');
  GOTOXY(10,13);WRITELN('Programm beenden..<Esc>');
END;
PROCEDURE NEU;
 BEGIN
  CLRSCR;
  GOTOXY(10,10);WRITE('Name.......: ');READLN(adrhilf.name);
  GOTOXY(10,11);WRITE('Vorname....: ');READLN(adrhilf.vorname);
  GOTOXY(10,12);WRITE('Telefonnr..: ');READLN(adrhilf.telnr);
  anzahl:=SUCC(anzahl);         {entspricht:  anzahl:=anzahl+1, nur schneller}
  adrfeld[anzahl]:=adrhilf;
  sort;START;
END;
PROCEDURE DEL;
 BEGIN
  CLRSCR;
  GOTOXY(10,10);WRITE('Bitte Nummer des zu l”schenden Eintrags eingeben: ');
  READLN(a);
  adrfeld[a].name[1]:=chr(255);
  SORT;anzahl:=PRED(anzahl);START;
END;
PROCEDURE ANZEIGE;
 BEGIN
  CLRSCR;
  GOTOXY(10,16);WRITE('Weiter mit beliebiger Taste');
  FOR a:=1TO anzahl DO BEGIN
   GOTOXY(10,10);
    WRITE('Name.......: ',adrfeld[a].name,'                             ');
   GOTOXY(10,11);
    WRITE('Vorname....: ',adrfeld[a].vorname,'                             ');
   GOTOXY(10,12);
    WRITE('Telefonnr..: ',adrfeld[a].telnr,'               ');
   GOTOXY(10,14);WRITE('Eintragsnummer: ',a);
   ch:=readkey;
  END;
  START;
END;
BEGIN                                                          {Hauptprogramm}
 ASSIGN(data,'data.doc');
 {Falls data.doc noch nicht existiert, mussen die folgenden 3 Zeilen ersetzt
 werden durch: REWRITE(data);anzahl:=0;
 Nach dem ersten Programmstart sollte man dies wieder rueckgaengig machen!}
 RESET(data);
 anzahl:=FILESIZE(data);
 FOR a:=1TO anzahl DO READ(data,adrfeld[a]);
 CLOSE(data);
 START;
 REPEAT
  ch:=READKEY;
  CASE ch OF
   '1'    : NEU;
   '2'    : DEL;
   '3'    : ANZEIGE;
  END;
 UNTIL ch=chr(27);
 REWRITE(data);
 FOR a:=1TO anzahl DO WRITE(data,adrfeld[a]);
 CLOSE(data);
END.