Вот как звучит задание:
В файле хранится информация о книгах, взятых в библиотеке:
Инвентарный номер
Название
Автор
Срок возврата книги
Признак того, сдана книга или нет.
Необходимо проверить, есть ли среди несданных книг "просроченные" (на текущую дату), сли такие книги есть, то сдать их (изменить признак) или продлить еще на один срок (изменить срок возврата). В новый файл поместить информацию о всех несданных книгах.
Вот что у меня есть
program lib;
uses crt;
type books=record
number:integer;
name:string;
avtor:string;
srok:record
d:byte;
m:byte;
end;
status:string; {SDANA ILI NET(true or false)}
end;
var
book_file : file of books;
rec : books;
finder_d : byte;
finder_m : byte;
file_name : string;
key : integer;
exit : boolean;
x : string;
{CREATE NAME OF FILE}
procedure name_of_file;
begin
write('Enter name of file of data of book: ');
readln(file_name);
end;
{ADD RECORD IN THE FILE}
procedure add_record;
begin
writeln('Record N ',filepos(book_file)+1);
with rec do
begin
write('Inventory number: ');
readln(number);
write('Name of the book: ');
readln(name);
write('Author of the book: ');
readln(avtor);
write('Srok vozvrata: ');
readln(srok.d, srok.m);
write('Status of the book: ');
readln(status);
write(book_file,rec);
end;
end;
{CREATE NEW NULL FILE}
procedure create_new_nul_file;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
end;
{CREATE NEW FILE}
procedure create_new_book_file;
var
i,n:integer;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
writeln('Create records of file ',file_name);
write('Enter count records: ');
readln(n);
for i:=1 to n do add_record;
writeln('FILE CREATED');
writeln('File of data have ',filesize(book_file),' records');
close(book_file);
end;
{OUTPUT TEMP RECORD}
procedure output_record;
begin
read(book_file,rec);
with rec do
begin
write('N ',filepos(book_file),' : ');
writeln('Name of book: ',name);
writeln('Author of book: ',avtor);
writeln('Srok vozvrata: ',srok.d,'.',srok.m);
writeln('Status of book: ',status);
end;
end;
{OUTPUT ALL RECORDS}
procedure output_all_records;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,0);
writeln('OUTPUT INFORMATION ABOUT BOOK ','"',file_name,'"');
while (not eof(book_file)) do output_record;
end
else
writeln('File '+file_name+' is not');
end;
{REWRITE PARTS OF FILE}
procedure update_records;
var
number_of_record:integer;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
writeln('Enter number of rewrite record :');
readln(number_of_record);
seek(book_file,number_of_record-1);
writeln('Zna4enie of this record: ');
output_record;
seek(book_file,number_of_record-1);
writeln('Enter new zna4enie ',number_of_record,' record');
add_record;
close(book_file);
end
else
writeln('” ©« б Ё¬ҐҐ¬ '+file_name+' Ґ бгйҐбвўгҐв');
end;
{ADD RECORDS IN THE END OF FILE}
procedure add_records_in_the_end;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,filesize(book_file));
add_record;
writeln('Data is wrote. So ',filesize(book_file),' records');
close(book_file);
end
else
writeln('File with name '+file_name+' is not');
end;
{SEARCH PROSROCHENNYX BOOKS}
procedure find_book;
var
book_file2:file of books;
finder:integer;
flag:boolean;
counter:integer;
d:char;
begin
name_of_file;
assign(book_file,file_name);
writeln('Enter name of file for prosro4ennyx book: ');
readln(x);
assign(book_file2,x);
rewrite(book_file2);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
write('Enter Tekywyu daty: ');
readln(finder_d, finder_m);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if ((srok.d<finder_d) and (srok.m<finder_m)) or
((srok.d>=finder_d) and (srok.m<finder_m)) then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name of book: ',name);
writeln('Author of book: ',avtor);
writeln('Srok vozvrata: ',srok.d,'.',srok.m);
writeln('Status of book: ',status);
write(book_file2,rec);
status:='y';
srok.d:=finder_d;
srok.m:=finder_m+1;
end;
end;
{ seek(book_file,0);
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if (srok.d<finder) and (srok.m<finder) then
begin
status:='y';
srok:=finder;
srok.m:=srok.m+1;
write(book_file,rec);
end;
end;}
if flag then
begin
writeln('Finded ',counter,' records');
{ writeln('‚ҐбвЁ ¤ лҐ § ЇЁбЁ ў ®ўл© д ©«?');
write('Yes or No');
readln(d);
if (d='y') or (d='Y') then
begin
create_new_nul_file;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if srok>finder then
begin write('N ',filepos(book_file),' : ');
writeln('Ќ §ў ЁҐ ЄЁЈЁ: ',name);
writeln('Ђўв®а ЄЁЈЁ: ',avtor);
writeln('‘а®Є ў®§ўа в : ',srok);
writeln('Ђўв®а ЄЁЈЁ: ',avtor);
writeln('ЉЁЈ б¤ : ',status);
write(file_name,rec);
end;
close(name_file);
end }
end
else
writeln('NO FIND RECORDS');
close(book_file);
end
else
writeln('File with name '+file_name+' is not');
end;
{=============MAIN PROGRAM==============}
begin
exit:=false;
clrscr;
repeat
writeln(' DATABASE OF BOOK');
writeln;
writeln('1 - CREATE NEW FILE');
writeln('2 - VIEW INFORMATION ABOUT BOOKS');
writeln('3 - REWRITE OLD RECORD');
writeln('4 - ADD NEW RECORDS');
writeln('5 - SEARCH PROSRO$ENNYX BOOK');
writeln('6 - EXIT');
write('Your choose: ');
readln(key);
case key of
1:create_new_book_file;
2:output_all_records;
3:update_records;
4:add_records_in_the_end;
5:find_book;
6:exit:=true;
end;
writeln('Executed. <ENTER>');
readln;
clrscr;
until exit;
end.
status:string;
if ((srok.d<finder_d) and (srok.m<finder_m)) or
((srok.d>=finder_d) and (srok.m<finder_m)) then
Сначала было string, т.к писал yes/no, а щас думаю, через булин будет лучше.
Вот файл:
Добавлено через 9 мин.
У меня в процедуре статус изменяется для всех просроченных книг, тоесть не нужно запрашивать изменение статуса для кажой книги, но в при просмотре файла, обнаруживается, что статус изменился только у первой(записи) просроченной книги, статус же других просроч. книг не изменился. Почему так??
Прикрепленные файлы
LIBRARY.PAS ( 7.79 килобайт )
Кол-во скачиваний: 249
прикрепи файл.
нет ни времени, ни желания набивать инфу о книгах.
Какой файл?
Если вы про файл в котором инфа о книгах хранится, то нету такого, файл то логический.
Ниче себе, действительно есть такой файл, а я думал, что такие файлы в оперативной памяти хранятся .
Прогу из учебника набирал, менял под себя, впринципе все работает, кроме последней процедуры, которая ищет(должна искать ) просроченные книги и изменяет их статус, и день на текущий.
А сама информация неважна, я для примера вбил инфу о 5 книгах и это не суть важно.
Вот файл:
(пришлось в архив загнать, так как "у меня нет прав для загр. файла с таким расширением")
Прикрепленные файлы
FILE.rar ( 224 байт )
Кол-во скачиваний: 185
с учетом, что файл (по определению) - это именованная область на диске...
раз обещала - буду искать ошибку
Кое-что я исправила:
procedure find_book;
var
book_file2:file of books;
finder:integer;
flag:boolean;
counter:integer;
d:char;
begin
name_of_file;
assign(book_file,file_name);
writeln('Enter name of file for prosro4ennyx book: ');
readln(x);
assign(book_file2,x);
rewrite(book_file2);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
write('Enter current date: ');
readln(finder_d, finder_m);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
//другое условие
if (srok.m<finder_m) or
((srok.m=finder_m) and (srok.d<finder_d)) then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name of book: ',name);
writeln('Author of book: ',avtor);
writeln('Srok vozvrata: ',srok.d,'.',srok.m);
writeln('Status of book: ',status);
write(book_file2,rec);
status:='y';
srok.d:=finder_d;
if finder_m=12 then //чтобы не было 13-го месяца
srok.m:=1
else
srok.m:=finder_m+1;
//записываем изменения в исходный файл
seek(book_file,filepos(book_file)-1);
write(book_file,rec);
end;
end;
if flag then
writeln('Finded ',counter,' records')
else
writeln('NO FIND RECORDS');
close(book_file);
//этот файл тоже закрываем
close(book_file2);
end
else
writeln('File with name '+file_name+' is not');
end;
Спасибо, ща буду дописывать прогу
Все прекрасно работает. Респект Вам за помощь.
Ну а с вариантной частью сам попробую написать.
Сделал вариантную часть. Сделал сортировку по полю NAME.
Никак не могу сделать сортировку по полю из вариантной части. Процедура не работает.
Вот: (извиняюсь за плохое форматирование)
program lib;
uses crt;
type sel=(book, journal);
books=record
number:integer;
name:string;
avtor:string;
srok:record
d:byte;
m:byte;
end;
status:string; {SDANA ILI NET(true or false)}
case s:sel of
book:(izdanie:integer);
journal:(nomer:integer);
end;
var
book_file : file of books;
rec : books;
finder_d : byte;
finder_m : byte;
file_name : string;
key : integer;
exit : boolean;
x : string;
data : array[1..70] of books;
{CREATE NAME OF FILE}
procedure name_of_file;
begin
write('Enter name of file of data of book: ');
readln(file_name);
end;
{ADD RECORD IN THE FILE}
procedure add_record;
var select : integer;
begin
writeln('Record N ',filepos(book_file)+1);
Write('1 - Book 2 - Journal: ');
ReadLn(select);
case select of
1:rec.s := book;
2:rec.s := journal;
end;
with rec do
begin
write('Inventory number: ');
readln(number);
write('Name: ');
readln(name);
write('Author: ');
readln(avtor);
case s of
book:begin
write('Izdanie: ');
readln(izdanie);
end;
journal:begin
write('Nomer journala: ');
readln(nomer);
end;
end;
write('Srok vozvrata(day.mes): ');
readln(srok.d, srok.m);
write('Status: ');
readln(status);
end; write(book_file,rec);
end;
{CREATE NEW NULL FILE}
procedure create_new_nul_file;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
end;
{CREATE NEW FILE}
procedure create_new_book_file;
var
i,n:integer;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
writeln('Create records of file ',file_name);
write('Enter count records: ');
readln(n);
for i:=1 to n do add_record;
writeln('FILE CREATED');
writeln('File of data have ',filesize(book_file),' records');
close(book_file);
end;
{OUTPUT TEMP RECORD}
procedure output_record;
begin
read(book_file,rec);
with rec do
begin
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Indanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata (day.mes)): ',srok.d,'.',srok.m);
writeln('Status: ',status);
end;
end;
{OUTPUT ALL RECORDS}
procedure output_all_records;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,0);
writeln('OUTPUT INFORMATION ABOUT BOOK ','"',file_name,'"');
while (not eof(book_file)) do output_record;
end
else
writeln('File '+file_name+' is not');
end;
{REWRITE PARTS OF FILE}
procedure update_records;
var
number_of_record:integer;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
writeln('Enter number of rewrite record :');
readln(number_of_record);
seek(book_file,number_of_record-1);
writeln('Zna4enie of this record: ');
output_record;
seek(book_file,number_of_record-1);
writeln('Enter new zna4enie ',number_of_record,' record');
add_record;
close(book_file);
end
else
writeln('” ©« б Ё¬ҐҐ¬ '+file_name+' Ґ бгйҐбвўгҐв');
end;
{ADD RECORDS IN THE END OF FILE}
procedure add_records_in_the_end;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,filesize(book_file));
add_record;
writeln('Data is wrote. So ',filesize(book_file),' records');
close(book_file);
end
else
writeln('File with name '+file_name+' is not');
end;
{SEARCH PROSROCHENNYX BOOKS}
{procedure find_book;
var
book_file2:file of books;
finder:integer;
flag:boolean;
counter:integer;
d:char;
begin
name_of_file;
assign(book_file,file_name);
writeln('Enter name of file for prosro4ennyx book: ');
readln(x);
assign(book_file2,x);
rewrite(book_file2);
{$I-}
{ reset(book_file);
{$I+}
{ if IOresult = 0 then
begin
write('Enter Tekywyu daty: ');
readln(finder_d, finder_m);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if ((srok.d<finder_d) and (srok.m<finder_m)) or
((srok.d>=finder_d) and (srok.m<finder_m)) then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name of book: ',name);
writeln('Author of book: ',avtor);
writeln('Srok vozvrata: ',srok.d,'.',srok.m);
writeln('Status of book: ',status);
write(book_file2,rec);
status:='y';
srok.d:=finder_d;
srok.m:=finder_m+1;
end;
end;
{ seek(book_file,0);
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if (srok.d<finder) and (srok.m<finder) then
begin
status:='y';
srok:=finder;
srok.m:=srok.m+1;
write(book_file,rec);
end;
end;}
{ if flag then
begin
writeln('Finded ',counter,' records');
{ writeln('‚ҐбвЁ ¤ лҐ § ЇЁбЁ ў ®ўл© д ©«?');
write('Yes or No');
readln(d);
if (d='y') or (d='Y') then
begin
create_new_nul_file;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if srok>finder then
begin write('N ',filepos(book_file),' : ');
writeln('Ќ §ў ЁҐ ЄЁЈЁ: ',name);
writeln('Ђўв®а ЄЁЈЁ: ',avtor);
writeln('‘а®Є ў®§ўа в : ',srok);
writeln('Ђўв®а ЄЁЈЁ: ',avtor);
writeln('ЉЁЈ б¤ : ',status);
write(file_name,rec);
end;
close(name_file);
end }
{ end
else
writeln('NO FIND RECORDS');
close(book_file);
end
else
writeln('File with name '+file_name+' is not');
end;}
procedure find_book;
var
book_file2:file of books;
finder:integer;
flag:boolean;
counter:integer;
d:char;
begin
name_of_file;
assign(book_file,file_name);
writeln('Enter name of file for prosro4ennyx book: ');
readln(x);
assign(book_file2,x);
rewrite(book_file2);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
write('Enter current date: ');
readln(finder_d, finder_m);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
{//другое условие }
if (srok.m<finder_m) or
((srok.m=finder_m) and (srok.d<finder_d)) then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Izdanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata(day.mes): ',srok.d,'.',srok.m);
writeln('Status: ',status);
write(book_file2,rec);
status:='y';
srok.d:=finder_d;
if finder_m=12 then{ //чтобы не было 13-го месяца }
srok.m:=1
else
srok.m:=finder_m+1;
{ //записываем изменения в исходный файл }
seek(book_file,filepos(book_file)-1);
write(book_file,rec);
end;
end;
if flag then
writeln('Finded ',counter,' records')
else
writeln('NO FIND RECORDS');
close(book_file);
{ //этот файл тоже закрываем}
close(book_file2);
end
else
writeln('File with name '+file_name+' is not');
end;
{SORT OF FILE}
Procedure sorting;
var i,j,n:integer;
book_file3:file of books;
sort:string;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if ioresult <> 0 then writeln('file with name '+file_name+' is not')
else
begin
writeln;
n:=0;
while (not eof(book_file)) do begin
read(book_file,rec);
inc(n);
data[n]:=rec; end;
for i:=1 to n-1 do
for j:=1 to n-i do
if data[j].name>data[j+1].name then
begin
rec:=data[j];
data[j]:=data[j+1];
data[j+1]:=rec;
end;
writeln('Enter name of sortfile: ');
readln(file_name);
assign(book_file,file_name);
rewrite(book_file);
for i:=1 to n do
begin
seek(book_file,i-1);
rec:=data[i];
write(book_file,rec);
end;
close(book_file); end;
{ with rec do
begin
writeln('Inventory number: ',data[i].number);
writeln('Name: ',data[i].name);
writeln('Author: ',data[i].avtor);
case s of
book : begin
writeln('Indanie #: ',data[i].izdanie);
end;
journal: begin
writeln('Nomer: ',data[i].nomer);
end;
end;
writeln('Srok vozvrata (4islo.mesyac)): ',data[i].srok.d,'.',data[i].srok.m);
writeln('Status: ',data[i].status);
end; write(book_file3,rec);
end; }
end;
{ЭТА ПРОЦЕДУРА НЕ РОБИТ(ЗАПИСЫВАЕТ В УКАЗАННЫЙ ФАЙЛ РЕЗУЛЬТАТ РАБОТЫ НО ЗАПИСИ ОКАЗЫВАЮТСЯ НЕ ОТСОРТИРОВАННЫМИ)}
Procedure casesort;
var i,j,n,f,l:integer;
book_file4:file of books;
sort4:string;
begin
i:=0;
j:=0;
n:=0;
f:=0;
l:=0;
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if ioresult <> 0 then writeln('file with name '+file_name+' is not')
else
begin
writeln;
n:=0;
while (not eof(book_file)) do begin
read(book_file,rec);
inc(n);
data[n]:=rec; end;
for i:=1 to n-1 do
for j:=1 to n-j do
begin
with data[j] do
begin
case s of
book: f:=izdanie;
journal: f:=nomer;
end;
end;
with data[j+1] do
begin
case s of
book: l:=izdanie;
journal: l:=nomer;
end;
end;
if (f>l) then
begin
rec:=data[j];
data[j]:=data[j+1];
data[j+1]:=rec;
end;
end;
{ for j:=1 to filesize() }
writeln('Enter name of sortfile: ');
close(book_file);
readln(file_name);
assign(book_file,file_name);
rewrite(book_file);
for i:=1 to n do
begin
seek(book_file,i-1);
rec:=data[i];
write(book_file,rec);
end;
close(book_file); end;
end;
{=============MAIN PROGRAM==============}
begin
exit:=false;
clrscr;
repeat
writeln(' DATABASE OF BOOK');
writeln;
writeln('1 - CREATE NEW FILE');
writeln('2 - VIEW INFORMATION ABOUT BOOKS');
writeln('3 - REWRITE OLD RECORD');
writeln('4 - ADD NEW RECORDS');
writeln('5 - SEARCH PROSRO$ENNYX BOOK');
writeln('6 - SORTING BY NAME');
writeln('7 - SORTING BY CASE');
writeln('8 - EXIT');
write('Your choose: ');
readln(key);
case key of
1:create_new_book_file;
2:output_all_records;
3:update_records;
4:add_records_in_the_end;
5:find_book;
6:sorting;
7:casesort;
8:exit:=true;
end;
writeln('Executed. <ENTER>');
readln;
clrscr;
until exit;
end.
Да не имел я в виду CP/M. Не имел!
Я привел пример.
Чем этот пример провинился? Невсеобщностью? ... Так на то он и пример!!
нет слов.
andriano, проследи логику, не поленись, вернись к началу дискуссии. И перестань обвинять всех невежестве. Ей Богу, просто несолидно.
Знаем мы, в какой системе счисления и в каком представлении записано i.
Знаем про файлы.
Кончай флуд.
Тема про файлы конечно животрепещущая и требует большого внимания, но на данный момент мне бы хотелось увидеть советы по своему вопросу.
Ээхх, никакой помощи не дождешься. Ну да ладна, прогу доделал, вот готовый вариант.
(ЕСЛИ НАЙДЕТЕ КАКИЕТО ОШИБКИ ИЛИ НЕДОЧЕТЫ - СООБЩИТЕ!!)
program lib;
uses crt;
type sel=(book, journal);
books=record
number:integer;
name:string;
avtor:string;
srok:record
d:byte;
m:byte;
god:longint;
end;
status:string;
case s:sel of
book:(izdanie:integer);
journal:(nomer:integer);
end;
var
book_file : file of books;
rec : books;
finder_d : byte;
finder_m : byte;
finder_god : longint;
file_name : string;
key : integer;
exit : boolean;
data : array[1..77] of books;
{CREATE NAME OF FILE}
procedure name_of_file;
begin
write('Enter name of file of data of book: ');
readln(file_name);
end;
{ADD RECORD IN THE FILE}
procedure add_record;
var select : integer;
begin
writeln('Record N ',filepos(book_file)+1);
Write('1 - Book 2 - Journal: ');
ReadLn(select);
case select of
1:rec.s := book;
2:rec.s := journal;
end;
with rec do
begin
write('Inventory number: ');
readln(number);
write('Name: ');
readln(name);
write('Author: ');
readln(avtor);
case s of
book:begin
write('Izdanie: ');
readln(izdanie);
end;
journal:begin
write('Nomer journala: ');
readln(nomer);
end;
end;
write('Srok vozvrata(day mes god): ');
readln(srok.d, srok.m, srok.god);
write('Status: ');
readln(status);
end; write(book_file,rec);
end;
{CREATE NEW NULL FILE}
procedure create_new_nul_file;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
end;
{CREATE NEW FILE}
procedure create_new_book_file;
var
i,n:integer;
begin
name_of_file;
assign(book_file,file_name);
rewrite(book_file);
writeln('Create records of file ',file_name);
write('Enter count records: ');
readln(n);
for i:=1 to n do add_record;
writeln('FILE CREATED');
writeln('File of data have ',filesize(book_file),' records');
close(book_file);
end;
{OUTPUT TEMP RECORD}
procedure output_record;
begin
read(book_file,rec);
with rec do
begin
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Indanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata (day mes god)): ',srok.d,'.',srok.m,'.',srok.god);
writeln('Status: ',status);
end;
end;
{OUTPUT ALL RECORDS}
procedure output_all_records;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,0);
writeln('OUTPUT INFORMATION ABOUT BOOK ','"',file_name,'"');
while (not eof(book_file)) do output_record;
end
else
writeln('File '+file_name+' is not');
end;
{REWRITE PARTS OF FILE}
procedure update_records;
var
number_of_record:integer;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
writeln('Enter number of rewrite record :');
readln(number_of_record);
seek(book_file,number_of_record-1);
writeln('Zna4enie of this record: ');
output_record;
seek(book_file,number_of_record-1);
writeln('Enter new zna4enie ',number_of_record,' record');
add_record;
close(book_file);
end
else
writeln('” ©« б Ё¬ҐҐ¬ '+file_name+' Ґ бгйҐбвўгҐв');
end;
{ADD RECORDS IN THE END OF FILE}
procedure add_records_in_the_end;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
seek(book_file,filesize(book_file));
add_record;
writeln('Data is wrote. So ',filesize(book_file),' records');
close(book_file);
end
else
writeln('File with name '+file_name+' is not');
end;
procedure find_book;
var
book_file2:file of books;
finder:integer;
flag:boolean;
counter:integer;
begin
name_of_file;
assign(book_file,file_name);
write('Enter name of file for prosro4ennyx book: ');
readln(file_name);
assign(book_file2,file_name);
rewrite(book_file2);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
write('Enter current date: ');
readln(finder_d, finder_m);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if (srok.god<finder_god) or
((srok.god=finder_god) and (srok.m<finder_m)) or
((srok.god=finder_god) and (srok.m=finder_m) and (srok.d<finder_d))
then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Izdanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata(day mes god): ',srok.d,'.',srok.m,'.',srok.god);
writeln('Status: ',status);
write(book_file2,rec);
status:='y';
srok.d:=finder_d;
if finder_m=12 then
begin srok.m:=1; srok.god:=finder_god+1; end
else
begin srok.m:=finder_m+1; srok.god:=finder_god; end;
seek(book_file,filepos(book_file)-1);
write(book_file,rec);
end;
end;
if flag then
writeln('Finded ',counter,' records')
else
writeln('NO FIND RECORDS');
close(book_file);
close(book_file2);
end
else
writeln('File with name '+file_name+' is not');
end;
{SORT OF FILE}
Procedure sorting;
var i,j,n:integer;
begin
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if ioresult <> 0 then writeln('file with name '+file_name+' is not')
else
begin
writeln;
n:=0;
while (not eof(book_file)) do begin
read(book_file,rec);
inc(n);
data[n]:=rec; end;
for i:=1 to n-1 do
for j:=1 to n-i do
if data[j].name>data[j+1].name then
begin
rec:=data[j];
data[j]:=data[j+1];
data[j+1]:=rec;
end;
Write('Enter name of file for result: ');
Read(file_name);
assign(book_file,file_name);
rewrite(book_file);
for i:=1 to n do
begin
seek(book_file,i-1);
rec:=data[i];
write(book_file,rec);
end;
close(book_file);
end;
end;
Procedure casesort;
var i,j,n,f,l:integer;
begin
i:=0;
j:=0;
n:=0;
f:=0;
l:=0;
name_of_file;
assign(book_file,file_name);
{$I-}
reset(book_file);
{$I+}
if ioresult <> 0 then writeln('file with name '+file_name+' is not')
else
begin
writeln;
n:=0;
while (not eof(book_file)) do begin
read(book_file,rec);
inc(n);
data[n]:=rec; end;
for i:=1 to n-1 do
for j:=1 to n-i do
begin
with data[j] do
begin
case s of
book: f:=izdanie;
journal: f:=nomer;
end;
end;
with data[j+1] do
begin
case s of
book: l:=izdanie;
journal: l:=nomer;
end;
end;
if (f>l) then
begin
rec:=data[j];
data[j]:=data[j+1];
data[j+1]:=rec;
end;
end;
Write('Enter name of file for result: ');
Read(file_name);
assign(book_file,file_name);
rewrite(book_file);
for i:=1 to n do
begin
seek(book_file,i-1);
rec:=data[i];
write(book_file,rec);
end;
close(book_file);
end;
end;
Procedure SearchingByField;
var
book_file2:file of books;
FinderOfField:string;
flag:boolean;
counter:integer;
selecter:integer;
begin
name_of_file;
assign(book_file,file_name);
write('Enter name of file for finded objects: ');
readln(file_name);
assign(book_file2,file_name);
rewrite(book_file2);
{$I-}
reset(book_file);
{$I+}
if IOresult = 0 then
begin
write('Search by ... : 1 - Name 2 - Avtor ');
readln(selecter);
case selecter of
1:begin
writeln('>>SEARCHING BY "NAME"<<');
writeln;
write('Enter NAME of object: ');
readln(FinderOfField);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if Pos(FinderOfField, name) <> 0 then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Izdanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata(day mes god): ',srok.d,'.',srok.m,'.',srok.god);
writeln('Status: ',status);
write(book_file2,rec);
seek(book_file,filepos(book_file)-1);
write(book_file,rec);
end;
end;
end;
2:begin
writeln('>>SEARCHING BY "AVTOR"<<');
writeln;
write('Enter AVTOR of object: ');
readln(FinderOfField);
flag:=false;
counter:=0;
while (not eof(book_file)) do
begin
read(book_file,rec);
with rec do
if Pos(FinderOfField, avtor) <> 0 then
begin
flag:=true;
inc(counter);
write('N ',filepos(book_file),' : ');
writeln('Name: ',name);
writeln('Author: ',avtor);
case s of
book : begin
writeln('Izdanie #: ',izdanie);
end;
journal: begin
writeln('Nomer: ',nomer);
end;
end;
writeln('Srok vozvrata(day mes god): ',srok.d,'.',srok.m,'.',srok.god);
writeln('Status: ',status);
write(book_file2,rec);
seek(book_file,filepos(book_file)-1);
write(book_file,rec);
end;
end;
end;
end;
if flag then
writeln('Finded ',counter,' records')
else
writeln('NO FIND RECORDS');
close(book_file);
close(book_file2);
end
else
writeln('File with name '+file_name+' is not');
end;
{=============MAIN PROGRAM==============}
begin
exit:=false;
clrscr;
repeat
writeln(' DATABASE OF BOOK');
writeln;
writeln('1 - CREATE NEW FILE');
writeln('2 - VIEW INFORMATION ABOUT BOOKS');
writeln('3 - REWRITE OLD RECORD');
writeln('4 - ADD NEW RECORDS');
writeln('5 - SEARCH BY FIELDS: "NAME" or "AVTOR"');
writeln('6 - SEARCH PROSRO$ENNYX BOOK');
writeln('7 - SORTING BY NAME');
writeln('8 - SORTING BY CASE');
writeln('9 - EXIT');
write('Your choose: ');
readln(key);
case key of
1:create_new_book_file;
2:output_all_records;
3:update_records;
4:add_records_in_the_end;
5:SearchingByField;
6:find_book;
7:sorting;
8:casesort;
9:exit:=true;
end;
writeln('Executed. <ENTER>');
readln;
clrscr;
until exit;
end.