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) как он сдесь будет выглядеть (делать вариантную часть других полей не хочется, уж слишком много всего получится).
Клавиатура и монитор, а также принтер - тоже файлы.
Ничего подобного: клавиатура и монитор - это ресурсы, с которыми можно работать, как с файлами. А можно - и не совсем как с файлами, а можно - совсем иначе...