Работа с файлами без типа




 

- чтение блока данных:

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.

Контрольный пример:

 

 

 

 
 

 


Вывод: Использовали файлы, данного типа файла, выполняли операции над файлами, создавали и дополняли файлы записи, выборка информации из файла по критерию в программах на языке Паскаль.

 



Поделиться:




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

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


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