1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code]. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
В файле хранится информация о книгах, взятых в библиотеке: Инвентарный номер Название Автор Срок возврата книги Признак того, сдана книга или нет.
Необходимо проверить, есть ли среди несданных книг "просроченные" (на текущую дату), сли такие книги есть, то сдать их (изменить признак) или продлить еще на один срок (изменить срок возврата). В новый файл поместить информацию о всех несданных книгах.
Вот что у меня есть
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;
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;}
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.
Добавлено через 7 мин. Я думаю, что вся собака зарыта в процедуре {SEARCH PROSROCHENNYX BOOKS} )) (что по английски знал -написал) нужно както сравнить текущую дату(вопрос как ее задать(как новую запись?)) и изменить статус тех книг которые просрочены (перевести дату на текущую и изменить сам статус книги).
И еще бы хотелось увидеть вариантную часть какого нить небольшого поля, например поля status(true/false) как он сдесь будет выглядеть (делать вариантную часть других полей не хочется, уж слишком много всего получится).
Сделал вариантную часть. Сделал сортировку по полю 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;
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;}
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.