Вот новая редакция программы)) Всё, вроде, работает, только одного понять не могу, почему после того, как ввожу данные, в поиске программа их не находит? Подскажите, пожалуйста, что нужно сделать, чтобы программа не вылетала, а корректно просила ещё раз ввести данные, если, к примеру, вместо фамилии ввести телефон и т. п. И ещё: как всё-таки определить количество байт в файле, если тип данных файла неизвестен (Надо делать с модулем crt)? Просто не знаю, что и предположить...
program Telefonnaya_kniga;
uses crt;
type
book=record
first_name:string[20];
inis:string[5];
telrab1:shortInt;
telrab2:shortint;
teldom:shortint;
end;
Ffile=file of book; {файл для хранения базы}
var f:Ffile;
b:book;
t,k,tel:shortint;
n,i:integer;
s:string[20];
proverka:boolean;
label menu;
begin
assign(f,'tel_book.txt');
reset(f);
menu: writeln('Ввод данных-0; поиск-1; выход-2');
readln(t);
if t=2 then
begin
close(f);
halt;
end;
if t=0 then
begin
writeln('Ввод данных в телефонную книгу');
writeln('Сколько вводить фамилий?');
readln(n);
for i:=1 to n do
begin
with b do
begin
write('Фамилия: ');
readln(first_name);
write('Инициалы: ');
readln(inis);
writeln('Домашний телефон: ');
readln(teldom);
writeln('Рабочий телефон 1: ');
readln(telrab1);
writeln('Рабочий телефон 2: ');
readln(telrab2);
writeln;
n:=n-1;
end;
goto menu;
end;
end;
if t=1 then
begin
writeln('Поиск:');
writeln('по фамилии-0; по телефону-1; возврат в главное меню-2; выход-3');
readln(k);
if k=2 then goto menu;
if k=3 then halt;
if k=0 then
begin
writeln('Введите фамилию');
readln(s);
with b do
begin
proverka:=false;
while not(eof(f)) do
begin
if s=first_name then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
end;
if eof(f) and proverka=false then writeln('Такой фамилии нет');
end;
goto menu;
end;
if k=1 then
begin
writeln('Введите телефон');
readln(tel);
proverka:=false;
with b do
begin
while not(eof(f)) do
begin
if tel=teldom then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
if tel=telrab1 then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
if tel=telrab2 then
begin
writeln(first_name,inis,teldom,telrab1,telrab2);
proverka:=true;
end;
end;
end;
if eof(f) and proverka=false then writeln('Такого телефона нет');
goto menu;
end;
end;
close(f);
readln;
end.
Сообщение отредактировано: Natalia -