- чтение блока данных:
BLOCKREAD(<программный файл>, переменная, n[, m]);
- запись блока данных:
BLOCKWRITE(<программный файл>, переменная n[, m]);
где переменная - переменная любого типа
n - размер блока,
m – необязательный параметр, определяющий размер блока в записях.
При чтении блока данных формируется значение m.
Задание: Вариант 19
§ недели
§ Группа
§ № пары
§ Предмет
§ Преподаватель
Аудитория
Ход выполнения работы:
program kursovaya;
uses crt;
type
stdata=string[16];
stnomernedeli=string[50];
stgryppa=1..20;
stpara=1..7;
stpredmet=string[20];
stprepodavatel=string[20];
stauditoria=1..1000;
stchasov=1..25;
recbook=record
data:stdata;
nomernedeli:stnomernedeli;
gryppa:stgryppa;
para:stpara;
predmet:stpredmet;
prepodavatel:stprepodavatel;
auditoria:stauditoria;
chasov:stchasov;
end;
var bookfile:file of recbook;
work:recbook;
vid:byte;
end_menu:boolean;
name:string[12];
ioresult:REAL;
procedure name_file; {процедура для задания имени файла}
begin
write('введите имя файла: ');
readln(name);
end;
procedure addRec; {процедура для добавления записи в файл}
begin
write('ввод данных ', filepos(bookfile)+1);
with work do
begin
write('введите дату: '); readln(data);
write('введите номер недели: '); readln(nomernedeli);
write('введите группу: '); readln(gryppa);
write('введите пару: '); readln(para);
write('введите предмет: '); readln(predmet);
write('введите преподавателя: '); readln(prepodavatel);
write('введите аудиторию: '); readln(auditoria);
write('введите количество часов в неделю'); readln(chasov);
write(bookfile, work);
end;
end;
procedure create_book_raspisanie; {процедура для создания нового файла данных}
var
ind, count:integer;
begin
name_file;
assign(bookfile,name);
rewrite(bookfile);
writeln('создание расписания "', name, '"!');
writeln('введите число записей в расписание: ');
readln(count);
for ind:=1 to count do addRec;
writeln('создание файла о расписание завершена.');
writeln('файл имеет данных ', filesize(bookfile), ' записей');
close(bookfile);
end;
procedure outputRec; {процедура вывода текущей записи на экран}
begin
read (bookfile, work);
with work do
begin
writeln('Запись ', filepos(bookfile), ': ');
writeln('РАСПИСАНИЕ ЗАНЯТИЙ ПРЕПОДАВАТЕЛЯ: ',prepodavatel,' НА НЕДЕЛЮ №',nomernedeli);
writeln('---------------------------------------------');
writeln('! Дата! № пары! Предмет! Группа! Аудитория!');
writeln('---------------------------------------------');
writeln('!',Data:6,'! ',para:7,'! ',predmet:8,'! ',gryppa:6,'! ',auditoria:9,'!');
writeln('---------------------------------------------');
writeln('ВСЕГО ЧАСОВ:',chasov);
end; end;
procedure outputAllRec; {процедура вывода всех записей файла на экран}
begin
name_file;
assign(bookfile,name);
reset(bookfile);
if ioresult=0 then
begin
seek(bookfile,0);
writeln('***сведения о ', name, '***');
while (not eof (bookfile)) do outputrec;
end
else writeln('файл с именем ', name, ' на диске не найден');
end;
procedure updateRec; {изменение записи файла}
var
numrec:longint;
begin
name_file;
assign(bookfile,name);
{$I-}
reset(bookfile);
{$I+}
if IOresult=0 then
begin
write('укажите номер изменяемой записи');
readln(numrec);
seek(bookfile,numrec-1);
writeln('старое значение записи-');
outputRec;
seek(bookfile,numrec-1);
writeln('задаем новое значение',numrec, 'записи');
addRec;
close(bookfile);
end
else writeln('файла с именем',name,'на диске нет');
end;
procedure addRectoend; { процедура дополнения записи в конец файла}
begin
name_file;
assign(bookfile,name);
{$I-}
reset(bookfile);
{$I+}
if IOresult=0 then
begin
seek(bookfile,filesize(bookfile));
addRec;
write('изменение файла данных имеет-',filesize(bookfile), 'записей');
close(bookfile);
end
else writeln('файла и именем',name,'на диске нет');
end;
procedure Findnomernedeli; {процедура поиска по номеру недели}
var
maska:stnomernedeli;
rez_Find:boolean;
CountRec:integer;
begin
name_file;
assign(bookfile,name);
{$I-}
reset(bookfile);
{$I+}
if IOresult=0 then
begin
write('введите номер недели');
readln(maska);
rez_Find:=false;
CountRec:=0;
while (not eof(bookfile)) do
begin
read(bookfile,work);
with work do
if pos(maska,nomernedeli)<>0 then
begin
rez_Find:=true;
inc(CountRec);
writeln('РАСПИСАНИЕ ГРУППЫ: ',gryppa,' НА НЕДЕЛЮ №',nomernedeli);
writeln('---------------------------------------------');
writeln('! N! Предмет! преподаватель! количество часов за неделю!');
writeln('---------------------------------------------');
writeln('!',FilePos(Bookfile):5,'! ',predmet:14,'! ',prepodavatel:10,'! ',chasov:27,'!');
writeln('---------------------------------------------');
end;
end;
if rez_Find then
writeln('число записей для переменной неделя:',maska,'=',CountRec)
else write('в сведениях нет расписания с номером недели-',maska);
close(bookfile);
end
else writeln('файла с именем',name,'на диске нет');
end;
begin
clrscr;
end_menu:=false;
repeat
writeln('*** РАСПИСАНИЕ ***');
writeln('Выберите вид работы');
writeln('1-создание нового файла');
writeln('2-просмотр списка сведений');
writeln('3-изменение записи');
writeln('4-дополнение списка сведений');
writeln('5-поиск недели');
writeln('0-завершение работы');
write('ваш выбор:');
readln(vid);
case vid of
1:create_book_raspisanie;
2:outputAllRec;
3:updateRec;
4:addRectoend;
5:Findnomernedeli;
0:end_menu:=true;
end;
writeln('для продолжения нажмите Enter');
readln;
until end_menu;
end.
Контрольный пример:
Вывод: Использовали файлы, данного типа файла, выполняли операции над файлами, создавали и дополняли файлы записи, выборка информации из файла по критерию в программах на языке Паскаль.