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

Loaded:=n;

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

begin

inc(n);

read(f, BGTU^[n]);

if IoResult<>0 then

begin

write('Ошибка ввода...');

gotoXY(4, 7);

n:= Loaded;

break;

end;

end;

Loaded:=n-Loaded;

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

close(f);

gotoXY(4, 9);

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

end;

{$I+}

PressKey;

ClrScr;

PrintMainFraime(2, 2, 78, 15);

PrintMainMenu(1);

end;

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

begin

ClrScr;

gotoXY(32, 1);

write('Добавление записи');

PrintMainFraime(2, 2, 78, 15);

gotoXY(4, 3);

writeln('Ввод записи номер ', n+1);

gotoXY(4,5);

with BGTU^[n+1] do

begin

write('Фамилия:      '); Name:=SafeRead(20, 1, 0);

gotoXY(4,6);

write('Год Рождения: '); BirthYear:=SafeRead(4, 1, 1);

gotoXY(4, 7);

write('Дом. адрес:   '); Address:=SafeRead(50, 1, 0);

gotoXY(4, 8);

write('Телефон:      '); Phone:=SafeRead(20, 1, 0);

gotoXY(4, 9);

write('Факультет:    '); Facultet:=SafeRead(1, 1, 0);

gotoXY(4, 10);

write('Группа:       '); Group:=SafeRead(3, 1, 0);

end;

inc(n);

gotoXY(4, 12);

write('Ввод успешно завершен.');

PressKey;

ClrScr;

PrintMainFraime(2, 2, 78, 11);

PrintMainMenu(1);

end;

procedure OutputData(n: Word; BGTU: BasePointer); {IV пункт меню}

var Start, Finish: Word;

Quit: Boolean;

Ch: Char;

procedure PrintPart(Start, Finish: Word);

var zicl, zicl2: Word;

begin

GotoXY(4,3);

for zicl:=Start to Finish do

begin

write('[');

if zicl<100 then write('0');

if zicl<10 then write('0');

write(zicl,']');

with BGTU^[zicl] do

begin

gotoXY(10,WhereY); write(Name);

for zicl2:=1 to 20-Length(Name) do write(' ');

gotoXY(35, WhereY); write(Facultet);

gotoXY(36, WhereY); write(Group);

for zicl2:=1 to 3-Length(Group) do write(' ');

gotoXY(44, WhereY); write(Phone);

for zicl2:=1 to 20-Length(Phone) do write(' ');

gotoXY(4, WhereY+1);

end;

    end;

gotoXY(1, 25);

end;

begin {OutputData}

ClrScr;

gotoXY(23, 1);

write('Вывод сведений о всех сотрудниках');

PrintMainFraime(2, 2, 78, 23);

if n=0 then

begin

gotoXY(4, 4);

write('База данных пуста...');

PressKey;

end

  else

begin

Quit:=False;

Start:=1;

if n>20 then Finish:=20 else Finish:=n;

PrintPart(Start, Finish);

repeat

Ch:=ReadKey;

case Ord(Ch) of

27: Quit:=True;

80: if Finish<n then begin Inc(Start); Inc(Finish); PrintPart(Start, Finish);End;

72: if Start>1 then begin Dec(Start); Dec(Finish); PrintPart(Start, Finish); End;

end;

until Quit;

end;

ClrScr;

PrintMainFraime(2, 2, 78, 11);

PrintMainMenu(1);

end;

procedure FindData(n: Word; BGTU: BasePointer); {V Пункт меню}

var Search: Person;

Quit, QuitAll: Boolean;

Ch: Char;

zicl: Integer;

procedure PrintAllData(poz: Integer);

begin

Clear(18, 14, 70, 19);

with BGTU^[zicl] do

begin

gotoXY(4, 13); write('Фамилия:      ',Name);

gotoXY(4, 14); write('Год рождения: ',BirthYear);

gotoXY(4, 15); write('Адрес:        ',Address);

gotoXY(4, 16); write('Телефон:      ',Phone);

gotoXY(4, 17); write('Факультет:    ',Facultet);

gotoXY(4, 18); write('Группа:       ',Group);

    end;

end;

begin {FindData}

ClrScr;

gotoXY(38, 1);

write('Поиск');

PrintMainFraime(2, 2, 78, 22);

gotoXY(4,4);

if n=0 then

begin

write('База данных пуста...');

PressKey;

end

  else

begin

write('Фамилия:      '); Search.Name:=SafeRead(20, 0, 0);

gotoXY(4,5);

write('Год Рождения: '); Search.BirthYear:=SafeRead(4, 0, 1);

gotoXY(4, 6);

write('Дом. адрес:   '); Search.Address:=SafeRead(50, 0, 0);

gotoXY(4, 7);

write('Телефон:      '); Search.Phone:=SafeRead(20, 0, 0);

gotoXY(4, 8);

write('Факультет:    '); Search.Facultet:=SafeRead(1, 0, 0);

gotoXY(4, 9);

write('Группа:       '); Search.Group:=SafeRead(5, 0, 0);

gotoXY(4, 11); write('Результаты поиска:');

gotoXY(4, 20); write('Чтобы выйти из Поиска, нажмите Esc');

gotoXY(4, 21); write('Чтобы продолжить Поиск, нажмите Enter');

zicl:=1;

Quit:=False;

QuitAll:=False;

while (zicl<=n) and not QuitAll do

begin

if (Search.Name<>'') and (BGTU^[zicl].Name=Search.Name) or

(Search.BirthYear<>'') and (BGTU^[zicl].BirthYear=Search.BirthYear) or

(Search.Address<>'') and (BGTU^[zicl].Address=Search.Address) or

(Search.Phone<>'') and (BGTU^[zicl].Phone=Search.Phone) or

(Search.Facultet<>'') and (BGTU^[zicl].Facultet=Search.Facultet) or

(Search.Group<>'') and (BGTU^[zicl].Group=Search.Group) then

begin

PrintAllData(zicl);

repeat

Ch:=ReadKey;

case Ord(ch) of

27: begin Quit:=True; QuitAll:=True; end;

13: begin inc(zicl); Quit:=True; end;

end;

until Quit;

end else inc(zicl);

         end;

    end;

if not QuitAll then PressKey;

ClrScr;

PrintMainFraime(2, 2, 78, 11);

PrintMainMenu(1);

end;

procedure ChangeData(n: Word; BGTU: BasePointer); {VI пункт меню}

var ChangeName: String;

zicl, poz: Integer;