Файлы с прямым доступом. Принципы работы с файлами, при помощи прямого доступа. Программа для создания файла с прямым доступом и заполнением фиктивными данными

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

6 страниц (Word-файл)

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

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

Тема: Файлы с прямым доступом.

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

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

Псевдокод программы:

program lab_5_1;

type {описание типов}

zap = record       {запись}

fam: string[20];

end;

var

f: file of zap;   {файловая переменная}

i,n: integer;     {целочисленные переменные}

z: zap;           {переменная типа запись}

otvet: byte;      {переменная выхода из циклов}

function poz(nt: integer): integer; {хэш-функция позиционирования}

function nt(poz: integer): integer; {хэш-функция для вывода}

begin

{Выбор действия и его обработка}

case n of

1: begin

{Инициализация файла}

{Цикл прохода по файлу}

for i:=0 to 1000 do

{запись пустых данных для возможности редактирования}

repeat

repeat

{Запрос ввода номера}

{Проверка номера на правильность}

if (n<3000) or (n>3999) then

Writeln('Неверный номер. Повторите ввод.');

until (n<=3999) and (n>=3000);

{Позиционирование}

Seek(f, poz(n));

{Ввод данных и запись в файл}

Readln(z.fam);

Write(f,z);

{Запрос выхода}

Readln(otvet);

until otvet=2;

{Инициализация файла}

{Цикл прохода по файлу}

while not Eof(f) do

{Считываение и печать данных, если они заполнены}

end;

2: begin

{Инициализация файла}

{Цикл прохода по файлу}

for i:=1 to 1000 do

{Заполнение файла фиктивными данными}

write('Файл создан.');

end;

end;

end.

program lab_5_2;

type {описание типов}

zap = record       {запись}

fam: string[20];

end;

var {описание переменных}

f: file of zap; {файловая переменная}

n: integer;     {целочисленная переменная}

fpath: string;  {переменная пути файла}

z: zap;         {переменная типа запись}

otvet: byte;    {переменная выхода из циклов}

flag: boolean;  {логическая переменная}

{описание процедур и функций}

function poz(nt: integer): integer; {хэш-функция позиционирования}

function nt(poz: integer): integer; {хэш-функция для вывода}

begin

{Выбор действия и его обработка}

case n of

1: begin

{Инициализация файла}

{Цикл прохода по файлу}

while not Eof(f) do

begin

{Считывание записи}

{Если запись не пуста - вывод на экран}

if (z.fam<>'') and (z.fam<>'*') then

Writeln(nt(filepos(f)-1),' ',z.fam);

end;

end;

2: begin

{Инициализация файла}

repeat

{Ввод номера и позиционирование}

seek(f,poz(n));

{Редактирование записи}

Readln(z.fam);

Write(f,z);

{Запрос выхода}

Readln(otvet)

until otvet=2;

end;

end;

end.

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

Введём в программу путь до исходного файла, который необходимо скопировать. Далее введём новый путь, по которому нужно сохранить копию файла. По завершении работы копия файла будет находиться по указанному пути.

Результат работы программы:

Рисунок 1 – Заполнение файла данными и их вывод

Рисунок 2 – Создание файла с фиктивными данными

Рисунок 3 – Редактирование ранее созданного файла

Рисунок 3 – Просмотр ранее отредактированного файла

Текст программы:

program lab_5_1;

type

zap = record

fam: string[20];

end;

var

f: file of zap;

i,n: integer;

z: zap;

otvet: byte;

function poz(nt: integer): integer;

begin

poz:=nt-3000;

end;

function nt(poz: integer): integer;

begin

nt:=poz+3000;

end;

begin

Writeln('Тел. база района насчитывает 1000 номеров, в диапазоне [3000-3999].');

Writeln('Вы можете заполнить базу в файл с прямым доступом.');

Writeln('Или можете создать файл с пустыми данными, и редактировать его отдельно.');

Write('Ваш выбор? (1-заполнить, 2-пустой файл): ');

Readln(n);

case n of

1: begin

Assign(f, 'baza1.dat');

Rewrite(f);

for i:=0 to 1000 do

begin

z.fam:='*';

write(f,z);

end;

{end for}

repeat

repeat

Write('Введите номер телефона: ');

Readln(n);

if (n<3000) or (n>3999) then

begin

Writeln('Неверный номер. Повторите ввод.');

Writeln;

end;

{end if}

until (n<=3999) and (n>=3000);

Seek(f, poz(n));

Write('Введите фамилию: ');

Readln(z.fam);

Write(f,z);

Write('Продолжить ввод? (1-да/2-нет): ');

Readln(otvet);

Writeln;

until otvet=2;

Reset(f);

while not Eof(f) do

begin

Read(f,z);

if (z.fam<>'') and (z.fam<>'*') then

Writeln(nt(filepos(f)-1),' ',z.fam);

end;

{end while}

close(f);

end;

2: begin

Assign(f, 'baza2.dat');

Rewrite(f);

for i:=1 to 1000 do

begin

z.fam:='*';

write(f,z);

end;

{end for}

write('Файл создан.');

end;

end;

end.

program lab_5_2;

type

zap = record

fam: string[20];

end;

var

f: file of zap;

n: integer;

fpath: string;

z: zap;

otvet: byte;

flag: boolean;

function poz(nt: integer): integer;

begin

poz:=nt-3000;

end;

function nt(poz: integer): integer;

begin

nt:=poz+3000;

end;

begin

Writeln('В этой программе вы можете отредактировать телефонную базу,');

Writeln('Независимо заполнена ли она, или является пустой.');

Writeln('Вы можете просмотреть файл перед редактированием.');

Write('Ваш выбор? (1-посмотреть, 2-редактировать): ');

Readln(n);

case n of

1: begin

Write('Введите имя файла: ');

Readln(fpath);

Assign(f, fpath);

Reset(f);

flag:=true;

while not Eof(f) do

begin

Read(f,z);

if (z.fam<>'') and (z.fam<>'*') then

begin

Writeln(nt(filepos(f)-1),' ',z.fam);

flag:=false;

end;

{end if}

end;

{end while}

if flag then Write('Файл пуст');

close(f);

end;

2: begin

Write('Введите имя файла: ');

Readln(fpath);

Assign(f, fpath);

Reset(f);

repeat

Write('Введите номер: ');

Readln(n);

seek(f,poz(n));

Write('Введите нового владельца, или введите звёздочку чтобы удалить его: ');

Readln(z.fam);

Write(f,z);

Write('Редактировать ещё? (1-да,2-нет): ');

Readln(otvet)

until otvet=2;

end;

end;

end.

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

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

Тип:
Написанные программы на языках программирования
Размер файла:
100 Kb
Скачали:
0