Просмотр

Изменение записи

Добавление записи

Удаление записи

Отображение на экране значений полей записи

procedure s_geben(s:stadt);

begin процедура отображения на экране значений полей записи, предварительно

writeln(s.key:4,s.name:22,s.ein:9,s.kfz:5); считанной из файла или записываемой в файл

end;

procedure delete(var f:file_typ);

var s:stadt;

k:integer; код города удаляемой записи

c:char;

found:boolean;

begin

writeln('Какую запись удалить?'); Удаление записи путем перепи-

writeln('Задайте код: '); сывания всех записей кроме удаляемой в

readln(k); другой файл и переименованием последнего

reset(f); открытие существующего основного файла

rewrite(kop); открытие нового вспомогательного файла

found:=false;

while not eof(f) do

begin

read(f,s);

if s.key <> k then write(kop,s)

else

begin

found:=true;

s_geben(s);

write('Именно эту запись');

writeln(' удалить?Д/Н');

readln(c);

case c of

'Д','д','L','l':

else write(kop,s)

end;

end;

end;

close(f);close(kop);

if not found then

begin

write('Город с кодом ',k:4);

write(' не найден.');

erase(kop); удаление последнего закрытого файла

writeln('<Enter>');read(c);

end

else

begin

erase(f); удаление основного файла

rename(kop,n); переименование предварительно закрытого файла

assign(kop,'temp.cop'); кор в n. Устанавливается связь

end; логического файла kop с именем физического файла temp.cop

end;

procedure append(var f:file_typ);

var s:stadt;c:char;

begin

reset(f); открытие существующего файла.Добавлять можно только в

seek(f,filesize(f)); конец файла. Позиционирование указателя

lesen(s); в конец файла. Ввод значений полей добавляемой записи.

writeln; вывод на экран пустой строки

s_geben(s); выводим их

writeln('Все правильно?Д/Н');

readln(c);

case c of

'Д','д','L','l':write(f,s) пишем в файл если Да

end;

close(f);

end;

 

procedure change(var f:file_typ); изменение

var s:stadt;k:integer;c:char;

begin

writeln('Какую запись изменить?');

writeln('Задайте код: ');

readln(k);

reset(f);

while not eof(f) and (s.key<>k) do

read(f,s);

if s.key = k then

begin

s_geben(s); вывод старого содержимого полей текущей записи

write('Новое число жителей: ');

readln(s.ein);

s_geben(s); вывод нового содержимого полей

writeln('Все правильно?Д/Н');

readln(c);

case c of 'Д','д','L','l':

begin

seek(f,filepos(f)-1); переход на запись, номер которой

write(f,s); указан вторым аргументом. т.к. указатель

end; установлен на следующую запись, то нужно предварительно

end; вернуться назад

end

else

begin

write('Город с кодом',k:6);

writeln(' не найден');

writeln('<Enter>');read(c);

end;

close(f);

end;

procedure d_geben(var f:file_typ);

var s:stadt;

begin процедура просмотра содержимого файла

reset(f); открытие существующего файла (типизированного

while not eof(f) do для записи и чтения)

begin

read(f,s); читаем

s_geben(s); отображаем

end;

end;