Изменение записи
Добавление записи
Удаление записи
Отображение на экране значений полей записи
Ввод в программу значений полей очередной записи файла
procedure lesen(var s:stadt);
begin ввод в программу значений полей очередной записи файла:
clrscr; код, название, число жителей и автомобилей.
writeln('Конец ввода:код = 0');
write('Код: ');readln(s.key);
if s.key <>0 then признаком окончания ввода является ввод нуля
begin
write('Название: ');readln(s.name);
write('Жителей : ');readln(s.ein);
write('Автомобилей: ');readln(s.kfz);
end;
end;
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;