Организация работы с последовательными файлами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Организация работы с последовательными файлами



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

В последовательных файлах не существует понятия номер компонента файла. Поэтому при работе с последовательными файлами можно использовать все процедуры и функции, определенные для файлов прямого доступа, за исключением процедуры установки на компонент файла seek, функций, связанных с определением номера и количества компонентов filesize и filepos, процедуры усечения файла truncate.

Разработка комплекса программ СУБД

Комплекс программ системы управления базами данных предназначен для создания, ведения и использования баз данных пользователями. Программы – это реализация функций, возложенных на СУБД. В простейшем случае база данных хранится в виде файла прямого доступа. В качестве примера базы данных возьмем базу данных с информацией об учащихся:

- фамилия (строка из 20 символов);

- дата рождения (день, месяц, год);

- год поступления в учебное учреждение (целое без знака);

- средний балл за период обучения (вещественное число).

База данных хранится в файле прямого доступа, компонентами файла являются данные типа запись:

type tdata=record

d:1..31;

m:1..12;

g:word

end;

 

{тип компонента файла}

tinfstud=record

fam:string[20];

dr:tdata;

gp:word;

sb:real

end;

 

{файловый тип}

tfileinfstud=file of tinfstud;

Реализуем следующие функции базы данных:

- создание БД (создание файла прямого доступа);

- просмотр БД на экране (вывод на экран содержимого файла прямого доступа);

- сортировка БД (сортировка записей файла прямого доступа по какому-то полю записи);

- выборка из БД (поиск и выборка информации из файла с БД и создание нового файла прямого доступа с выбранными записями).

Обычно каждая функция БД реализуется в виде отдельной программы, выбор необходимой пользователю функции реализуется с помощью программы-меню. В данном примере реализуем только функции БД в виде отдельных программ и определим технологию работы с ними. Все описания поместим в отдельный текстовый файл (дадим ему имя FILE0.PAS), который будем подключать к тексту каждой программы с помощью директивы компилятору – включить текстовый файл {$I <имя файла>}. В этом же текстовом файле разместим подпрограмму проверки существования файла, так как эта подпрограмма потребуется во всех программах комплекса.

Разработка подпрограммы для проверки существования файла

Спецификация

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

2. Имя: FS

3. Вид: процедура

4. Перечень параметров:

Таблица 24.3. Перечень параметров

Статус Назначение Имя Тип Вид
Вход имя физического файла name string параметр-значение
Возвращ. признак существования файла (true –файл существует, false – нет) fs Boolean -
  1. Заголовок подпрограммы: function fs(name:string):Boolean;

Метод решения

В основу метода решения положено условие выполнения процедуры открытия существующего файла для работы reset(<илф>). Если физический файл соответствующий заданному логическому существует, то файл открывается для работы, если отсутствует, то возникает ошибка ввода-вывода. Поэтому метод решения следующий:

1) связываем физический и логический файлы assign(f, name), где f – имя логического нетипизированного файла. Нетипизированный файл позволяет сделать подпрограмму независимой от вида файла (но с таким файлом нельзя выполнять стандартные операции чтения и записи);

2) отключаем систему прерываний по ошибкам ввода-вывода {$I-};

3) выполняем вызов процедуры reset(f);

4) включаем систему прерываний по ошибкам ввода-вывода {$I+};

5) анализируем наличие ошибки при выполнении последней операции ввода-вывода. Это может быть только одна ошибка – перед выполнением процедуры reset физический файл, соответствующий логическому отсутствует. Если ошибка есть, то формируем результат функции false. Если ошибки нет, то формируем результат функции true и демонополизируем файл

Информационная модель

Таблица 24.4. Информационная модель

Назначение Имя Тип
Имя логического файла f file

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

function fs(name:string):boolean;

var f:file;

begin

assign(f,name);

{$I-}

reset(f);

{$I+}

if ioresult<>0 then

fs:=false

else

begin

fs:=true;

close(f)

end

end;

Реализация функции создания БД

Постановка задачи

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

Метод решения

1) получить от пользователя имя физического файла (namebd) для хранения базы данных;

2) если файл с таким именем существует, то сообщить об этом пользователю и прекратить выполнение программы

3) связать логический и физический файлы assign(fbd,namebd);

4) открыть файл прямого доступа в режиме создания нового файла
rewrite(fbd);

5) повторять до ответа пользователя не продолжать создание файла:

a) ввод информации об очередном студенте (ввод записи r);

b) запись информации в файл write(fbd,r);

c) получение ответа на запрос – продолжать создание базы данных?[Y/N]

6) закрыть файл для работы close(fbd).

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

Информационная модель

Таблица 24.5. Информационная модель

Статус Назначение Имя Тип
Вход имя физического файла с БД namebd string
Пром имя логического файла с БД fbd tfileinfstud
Пром информация об очередном учащемся r tinfstud
Вход ответ на запрос(Y – продолжать, N – нет) otvet char

Программная модель

{программа создания базы данных (файл Z1.pas)}

program z1;

{$I FILE0.PAS}

var otvet:char;

begin

writeln('Введите имя создаваемого файла с базой данных');

readln(namebd);

if fs(namebd) then

begin

writeln('ОШИБКА!!! Файл с именем ',namebd,' уже существует');

halt

end;

assign(fbd,namebd);

rewrite(fbd);

repeat

writeln('Введите информацию об очередном студенте?');

with r do

begin

writeln('Фамилия?');

readln(fam);

writeln('День, месяц, год рождения, год поступления, средний балл ',

'для студента ',fam);

readln(dr.d, dr.m, dr.g, gp, sb);

write(fbd,r)

end;

writeln('Продолжать?[y/n/]');

readln(otvet)

until (upcase(otvet)='N') or (otvet='т') or (otvet='Т');

close(fbd)

end.



Поделиться:


Последнее изменение этой страницы: 2016-06-26; просмотров: 385; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.180.76 (0.01 с.)