Постановка задачи
Выборка из файла с БД записей, в которых средний балл не ниже заданного граничного, и занесение этих записей в новый файл результатов выборки. Имена физических файлов с БД и для результатов выбоки задает пользователь.
Метод решения
1) получить от пользователя имя физического файла с БД readln(namebd);
2) если физический файл с таким именем отсутствует, то сообщить об этом пользователю и прекратить выполнение программы
3) получить от пользователя имя физического файла (namev) для хранения результатов выборки;
4) если файл с таким именем существует, то сообщить об этом пользователю и прекратить выполнение программы
5) получить от пользователя граничный средний балл (gsb)
6) связать логический и физический файлы с БД assign(fbd,namebd);
7) открыть файл прямого доступа с БД в режиме работы с существующим reset(fbd);
8) связать логический и физический файлы для результатов выборки assign(fv,namev);
9) открыть файл прямого доступа для результатов выборки в режиме создания нового файла
rewrite(fv);
10) перебрать все компоненты файла с БД. Пока не достигли конца файла (not eof(fbd))
a) чтение очередного компонента БД read(fbd,r);
b) если r.sb gsb запись r в файл выборки write(fv,r);
11) закрыть файл с БД close(fbd);
12) закрыть файл с результатами выборки close(fv).
Данный метод справедлив и для последовательных файлов, так как никаких особенностей файлов прямого доступа не используется.
Информационная модель
Таблица. Информационная модель
Статус | Назначение | Имя | Тип |
Вход | имя физического файла с БД | namebd | string |
Вход | имя физического файла с результатами выборки | namev | string |
Вход | граничный средний балл | gsb | real |
Пром | имя логического файла с БД | fbd | tfileinfstud |
Пром | имя логического файла с результатами выборки | fv | tfileinfstud |
Пром | информация об учащемся | r | tinfstud |
Программная модель
{программа выборки из файла по среднему баллу (файл Z4.PAS)}
program z4;
{$I FILE0.PAS}
var namev:string;{имя физического файла с выборкой}
fv:tfileinfstud;{илф выборки}
gsb:real;
begin
writeln('Введите имя файла с информацией о студентах');
readln(namebd);
if not fs(namebd) then
begin
writeln('ОШИБКА!!! Файл с именем ',namebd,' не существует');
halt
end;
writeln('Введите имя файла для выборки');
readln(namev);
if fs(namev) then
begin
writeln('ОШИБКА!!! Файл с именем ',namev,' существует');
halt
end;
writeln('Граничный средний балл?');
readln(gsb);
assign(fbd,namebd);
reset(fbd);
assign(fv,namev);
rewrite(fv);
while not eof(fbd) do
begin
read(fbd,r);
if r.sb>=gsb then
write(fv,r);
end;
close(fbd);
close(fv)
end.
Текст файла с общими описаниями
{файл с общими описаниями FILE0.PAS}
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;
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;
var fbd:tfileinfstud;
namebd:string;
r:tinfstud;