Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
68
Добавлен:
02.05.2014
Размер:
245.76 Кб
Скачать

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

В основу метода решения положено условие выполнения процедуры открытия существующего файла для работы 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. если файл с таким именем существует, то сообщить об этом пользователю и прекратить выполнение программы

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

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

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

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

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

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

  1. закрыть файл для работы 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.

Соседние файлы в папке Лекции по Паскалю