Цель работы: изучить принципы работы с файлами при помощи прямого и последовательного доступов.
Постановка задачи: написатьпрограмму, состоящую из трёх частей:
− программа создания файла с прямым доступом;
− программа создания файла с последовательным доступом;
− программа поиска и корректировки данных в существующем файле.
Контрольный пример:
Рисунок 1 – скриншот работы программы
Текст программы:
program laba5;
uses crt;
type
rec = record
nom : byte;
name : string[20];
sum_stip : string[20];
end;
var
a : rec;
f : file of rec;
d : string;
procedure sozdpos(p : string);
var
ch : char;
begin
assign(f,p);
rewrite(f);
repeat
writeln('Введите номер автобуса: ');
readln(a.nom);
writeln('Bведите пункт назначения: ');
readLn(a.name);
writeLn('Bведите длину маршрута: ');
readln(a.sum_stip);
write(f,a);
write('Для продолжения нажмите y; для прекращения нажмите n: ');
readln(ch);
until (ch = 'n') or (ch = 'N');
close(f);
end;
procedure sozdpr(p:string);
const
N = 5;
var
ch : char;
nom, i : longint;
begin
assign(f,p);
rewrite(f);
for i:=1 to N do
begin
a.name := ' * ';
a.sum_stip := ' * ';
write(f,a);
end;
{endfor i:=1 to N}
repeat
writeLn('Введите номер автобуса: ');
readLn(nom);
seek(f,nom-1);
writeLn('Введите пункт назначения: ');
readln(a.name);
writeln('Введите длину маршрута: ');
readln(a.sum_stip);
write(f,a);
write('Для продолжения нажмите y; для прекращения нажмите n: ');
readLn(ch);
until (ch = 'n') or (ch= 'N');
close(f);
end;
procedure prosmotrpos(s:string);
begin
assign(f,s);
reset(f);
while not eof(f) do
begin
read(f,a);
write('Номер автобуса: ');
writeln(a.nom);
write('Пункт назначения: ');
writeLn(a.name);
write('Длина маршрута: ');
writeLn(a.sum_stip);
end;
close(f);
readln;
end;
procedure prosmotrpr(s:string);
var
n :longint;
ch : char;
i : byte;
begin
assign(f,s);
reset(f);
n := filesize(f);
for i:=1 to n do
begin
read(f,a);
writeln('Номер автобуса: ', i);
writeLn('Пункт назначения: ', a.name);
writeLn('Пункт назначения: ', a.sum_stip);
end;
{endfor i:=1 to n}
readLn;
close(f);
end;
procedure delpos(s:string);
var
f2 : file of rec;
q : byte;
begin
assign(f, s);
reset(f);
assign(f2, 'e:\sad1.dat');
rewrite(f2);
writeLn('Bведите номер автобуса: ');
readLn(q);
while not eof(f) do
begin
read(f,a);
if a.nom <> q then
write(f2,a);
end;
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
procedure delpr(s:string);
var
f2 : file of rec;
m, n, i : longint;
begin
assign(f,s);
reset(f);
assign(f2,'e:\sad1.dat');
rewrite(f2);
n := filesize(f);
writeLn('Bведите номер автобуса: ');
readln(m);
if m>=n then
writeLn('Автобуса с таким номером нет!')
else
begin
for i:=1 to m-1 do
begin
read(f,a);
write(f2,a);
end;
{endfor i:=1 to m-1}
a.name := ' * ';
write(f2,a);
read(f,a);
for i:=m+1 to n do
begin
read(f,a);
write(f2,a);
end;
{endfor i:=m+1 to n}
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
{endif m>=n}
end;
procedure zamenapos(s:string);
var
f2 : file of rec;
q : byte;
begin
assign(f,s);
reset(f);
assign(f2, 'e:\sad1.dat');
rewrite(f2);
writeLn('Введите номер автобуса: ');
readLn(q);
while not eof(f) do
begin
read(f,a);
if a.nom <> q then
write(f2,a)
else
begin
a.nom := q;
writeLn('Введите пункт назначения: ');
readLn(a.name);
writeLn('Введите длину маршрута: ');
readLn(a.sum_stip);
write(f2,a);
end;
end;
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
procedure zamenapr(s:string);
var
f2 : file of rec;
m, n, i : longint;
begin
assign(f,s);
reset(f);
assign(f2, 'e:\sad1.dat');
rewrite(f2);
n := filesize(f);
writeLn('Bведите номер автобуса: ');
readLn(m);
if m>=n then
writeLn('Автобуса с таким номером нет!')
else
begin
for i:=1 to m-1 do
begin
read(f,a);
write(f2,a);
end;
{endfor i:=1 to m-1}
read(f,a);
writeLn('Bведите пункт назначения: ');
readLn(a.name);
writeLn('Введите длину маршрута: ');
readLn(a.sum_stip);
write(f2,a);
for i:=m+1 to n do
begin
read(f,a);
write(f2,a);
end;
{endfor i:=m+1 to n}
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
{endof m>=n}
end;
procedure addpos(s:string);
var
f2 : file of rec;
begin
assign(f,s);
reset(f);
assign(f2,'e:\sad1.dat');
rewrite(f2);
while not eof(f) do
begin
read(f,a);
write(f2,a)
end;
writeln('Введите номер автобуса: ');
readln(a.nom);
writeLn('Введите пункт назначения: ');
readLn(a.name);
writeLn('Введите длину маршрута: ');
readLn(a.sum_stip);
write(f2,a);
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
procedure addpr(s:string);
var
n, m, i :longint;
f2 : file of rec;
begin
assign(f,s);
reset(f);
assign(f2, 'e:\sad1.dat');
rewrite(f2);
n := filesize(f);
writeln('Bведите номер нового автобуса: ');
readLn(m);
for i:=1 to n do
if i<> m then
begin
read(f,a);
write(f2,a);
end
else
begin
writeLn('Введите пункт назначения: ');
readLn(a.name);
writeLn('Введите длину маршрута: ');
readLn(a.sum_stip);
write(f2,a);
read(f,a);
end;
{endif i<> m}
{endfor i:=1 to n}
close(f);
close(f2);
erase(f);
rename(f2,s);
end;
var
n, m : byte;
l : string;
begin
clrscr;
writeLn('Каким методом доступа воспользуемся?:');
writeLn('1 - с последовательным методом доступа');
writeLn('2 - с прямым методом доступа');
readLn(n);
clrscr;
writeln('1 - создание файла');
writeln('2 - просмотр всего файла');
writeln('3 - удаление элемента из файла');
writeln('4 - замена элемента файла');
writeln('5 - добавление нового элемента в файл');
readln(m);
clrscr;
writeln('введите путь к файлу');
readln(l);
case n of
1 : case m of
1 : sozdpos(l);
2 : prosmotrpos(l);
3 : delpos(l);
4 : zamenapos(l);
5 : addpos(l);
else
writeln('Oшибка при выборе');
end;
2 : case m of
1 : sozdpr(l);
2 : prosmotrpr(l);
3 : delpr(l);
4 : zamenapr(l);
5 : addpr(l);
else
writeLn('Oшибка при выборе');
end;
else
writeLn('Oшибка при выборе');
end;
end.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.