Текстовые и типизированные файлы. Создание базы данных для отдела кадров, страница 2

if Active=5 then TextBackGround(0);

if Active=6 then TextBackGround(9);

gotoXY(4,9); write('[06] Изменение записи                  ');

if Active=6 then TextBackGround(0);

if Active=7 then TextBackGround(9);

gotoXY(4,10); write('[07] Удаление записи                   ');

if Active=7 then TextBackGround(0);

if Active=8 then TextBackGround(9);

gotoXY(4,11); write('[08] Сохранение в текст. файл          ');

if Active=8 then TextBackGround(0);

if Active=9 then TextBackGround(9);

gotoXY(4,12); write('[09] Сохранение в тип. файл            ');

if Active=9 then TextBackGround(0);

if Active=10 then TextBackGround(9);

gotoXY(4,13); write('[10] О программе                       ');

if Active=10 then TextBackGround(0);

if Active=11 then TextBackGround(9);

gotoXY(4,14); write('[11] Выход                             ');

if Active=7 then TextBackGround(0);

gotoXY(1, 25);

end;

procedure CallMenu;

var zicl, Active: Integer;

Quit: Boolean;

Ch: Char;

begin

TextColor(2);

PrintMainFraime(2, 2, 78, 15);

PrintMainMenu(1);

Quit:=False;

Active:=1;

repeat

ch:=ReadKey;

case ord(Ch) of

27: Quit:=True;

80: begin Inc(Active); If Active=12 then Active:=1; PrintMainMenu(Active); end;

72: begin Dec(Active); If Active=0 then Active:=11; PrintMainMenu(Active); end;

13: case Active of

1: begin Active:=1; LoadTextData(n, BGTU); end;

2: begin Active:=1; LoadTipData(n, BGTU); end;

3: begin Active:=1; InputData(n, BGTU); end;

4: begin Active:=1; OutputData(n, BGTU); end;

5: begin Active:=1; FindData(n, BGTU); end;

6: begin Active:=1; ChangeData(n, BGTU); end;

7: begin Active:=1; DeleteData(n, BGTU); end;

8: begin Active:=1; SaveTextData(n, BGTU); end;

9: begin Active:=1; SaveTipData(n, BGTU); end;

10: begin Active:=1; About; end;

11: Quit:=True;

end;

end;

until Quit;

end;

end.

Файл work.pas

unit Work;

Interface

uses Crt, Structur, Menu;

procedure LoadTextData(var n: Word; BGTU: BasePointer);

procedure LoadTipData(var n: Word; BGTU: BasePointer);

procedure InputData(var n: Word; BGTU: BasePointer);

procedure OutputData(n: Word; BGTU: BasePointer);

procedure FindData(n: Word; BGTU: BasePointer);

procedure ChangeData(n: Word; BGTU: BasePointer);

procedure DeleteData(var n: Word; BGTU: BasePointer);

procedure SaveTextData(n: Word; BGTU: BasePointer);

procedure SaveTipData(n: Word; BGTU: BasePointer);

procedure About;

Implementation

{------Вспомогательные процедуры и функции------}

procedure PressKey;

var clean: char;

begin

gotoXY(1,25);

write('Нажмите любую клавишу...');

repeat

until keypressed;

while keypressed do clean:=readkey;

end;

function SafeRead(MaxLen, MinLen ,Code: Integer): String;

var Poz: Integer;              { code=1 - только цифры }

Flag: Boolean;             { code=0 - все символы  }

Result: string;

Ch: char;

begin

Result:='';

Poz:=0;

Flag:=False;

repeat

Ch:=ReadKey;

case Ch of

#13: if Length(Result)>=MinLen then Flag:=True;

#08: if Length(Result)>0 then

begin

Delete(Result,Length(Result),1);

gotoXY(WhereX-1,WhereY); write(' ');

gotoXY(WhereX-1, WhereY);

end;

else if (Length(Result)<MaxLen) and (Ch<>#27) and ((Code=1) and (ord(Ch)>47)

and (ord(ch)<58) or (code=0)) then

begin

write(Ch);

Result:=Result+Ch;

end;

end;

until Flag;

SafeRead:=Result;

end;

procedure Clear(x1, y1, x2, y2: Integer);

var zicl, zicl2: Integer;

begin

gotoXY(x1, y1);

for zicl:=y1 to y2 do

begin

for zicl2:=x1 to x2 do write(' ');

gotoXY(x1, WhereY+1);

end;

end;

{------Основные процедуры------}

procedure LoadTextData(var n: Word; BGTU: BasePointer); {I Пункт меню}

var F: Text;

Path: String;

Loaded: Word;

begin

ClrScr;

gotoXY(24, 1);

write('Загрузка данных из текст. файла');

PrintMainFraime(2, 2, 78, 15);

gotoXY(4, 3);

write('Введите имя файла: ');

Path:=SafeRead(50,1,0);

gotoXY(4, 5);

Assign(f, Path);

{$I-}

Reset(F);

{$I+}

if IoResult<>0 then

write('Ошибка открытия файла...')

else

begin

Loaded:=n;

while not Eof(f) and (n<Nmax) do

begin

inc(n);

with BGTU^[n] do

begin

readln(f, Name);

readln(f, BirthYear);

readln(f, Address);

readln(f, Phone);

readln(f, Facultet);

readln(f, Group);

end;

end;

Loaded:=n-Loaded;

if not eof(f) then write('База данных заполнена...');

close(f);

gotoXY(4, 7);

write('Загружено записей: ', Loaded);

end;

PressKey;

ClrScr;

PrintMainFraime(2, 2, 78, 15);

PrintMainMenu(1);

end;

procedure LoadTipData(var n: Word; BGTU: BasePointer); {II Пункт меню}

var F: file of Person;

Path: String;

Loaded: Word;

begin

ClrScr;

gotoXY(25, 1);

write('Загрузка данных из тип. файла');

PrintMainFraime(2, 2, 78, 15);

gotoXY(4, 3);

write('Введите имя файла: ');

Path:=SafeRead(50,1,0);

gotoXY(4, 5);

Assign(f, Path);

{$I-}

Reset(F);

if IoResult<>0 then

write('Ошибка открытия файла...')

else

begin