Изучение принципов работы с файлами при помощи прямого и последовательного доступов. Программа поиска и корректировки данных в существующем файле

Страницы работы

Содержание работы

ЛАБОРАТОРНАЯ РАБОТА №5

Цель работы: изучить принципы работы с файлами при помощи прямого и последовательного доступов.

Постановка задачи: написатьпрограмму, состоящую из трёх частей:

−  программа создания файла с прямым доступом;

−  программа создания файла с последовательным доступом;

−          программа поиска и корректировки  данных в существующем файле.

Контрольный пример:

Рисунок 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.

Похожие материалы

Информация о работе