Реализация функции просмотра БД




Комплекс программ СУБД

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

- фамилия (строка из 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. Перечень параметров:

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

Статус Назначение Имя Тип Вид
Вход имя физического файла 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 и демонополизируем файл

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

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

Назначение Имя Тип
Имя логического файла 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).

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

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

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

Статус Назначение Имя Тип
Вход имя физического файла с БД 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.

Реализация функции просмотра БД

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

Просмотр на экране содержимого файла типа tfileinfstud. Имя физического файла для просмотра задает пользователь.

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

При выводе информации на экран будем использовать алгоритм вывода большого количества значений.

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

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

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

4) открыть файл в режиме работы с существующим файлом (в данном методе будем только последовательно читать информацию из файла) reset(fbd);

5) очистить экран clrscr;

6) вывести шапку таблицы
writeln('ФАМИЛИЯ ':20,' ДАТА РОЖД.',' ГП ',' БАЛЛ');

7) в счетчик заполненных строк экрана занести 1 k:= 1;

8) пока не достигли признака конца в файле fbd повторять (not eof(fbd) )

a) чтение очередного компонента файла read(fbd,r);

b) вывод на экран компонентов записи r с информацией об учащемся;

c) увеличение счетчика выведенных строк на 1 k:=k+ 1;

d)

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

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

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


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

Статус Назначение Имя Тип
Вход имя физического файла с компонентами типа tinfstud namebd string
Пром имя логического файла fbd tfileinfstud
Пром информация об очередном учащемся r tinfstud
Вход счетчик заполненных строк экрана k integer

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

{программа просмотра файлов с компонентами типа tinfstud (файл z2.pas)}

program z2;

uses CRT;

{$I FILE0.PAS}

var k:integer;

begin

writeln('Введите имя просматриваемого файла ');

readln(namebd);

if not fs(namebd) then

begin

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

halt

end;

assign(fbd,namebd);

reset(fbd);

clrscr;

writeln('ФАМИЛИЯ ':20,' ДАТА РОЖД.',' ГП ',' БАЛЛ');

k:=1;

while not eof(fbd) do

begin

read(fbd,r);

with r do

begin

fam:=copy(fam+' ',1,20);

writeln(fam:20, dr.d:3,'.',dr.m:2,'.', dr.g:4, gp:5, sb:5:2)

k:=k+1;

if k=23 then

begin

writeln('Для продолжения нажмите Enter');

readln;

clrscr;

writeln('ФАМИЛИЯ ':20,' ДАТА РОЖД.',

' ГП ',' БАЛЛ');

k:=1;

end

end

end;

close(fbd);

writeln('Информация исчерпана!!!')

end.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-08-08 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: