Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Типизированные файлы+ записи

Автор: Brad Bellick 13.02.2008 21:05

Здравствуйте! С помощью добрых людей, по теории пытался доделать программу:
Информация про читателей библиотеки:
регистрационный номер, имя, фамилия, серия и номер паспорта, количество взятых книг, дата сдачи книги(дата в формате: Деня.Месяц.Год, пример 12.02.2008). В программе нужно взять сегоднейшее число и на экран вывести, всех тех читателей кому надо было сдать книги до этого числа (сегоднейшего). Все это еще надо записать в файл.

Но почему-то не получается записать информацию в файл.

Вот что у меня вышло на данный момент:

uses crt,dos;
type Lib_TP=record
reg_nomer:integer;
imja:string[20];
familija:string[25];
pasport_serija, pasport_nr:integer;
cislo_knig:integer;
cislo, mesjac, god :integer;
end;
var
ba:Lib_TP;
ba_fail:FILE of Lib_TP;
dg_fail:text;
a:byte;
y, m, d, dow : Word;
procedure dolg;
begin
writeln('reg_nomer:',ba.reg_nomer);
writeln(dg_fail,ba.reg_nomer);
writeln('imja:',ba.imja);
writeln(dg_fail,ba.imja);
writeln('familija:',ba.familija);
writeln(dg_fail,ba.familija);
writeln('pasport_serija:',ba.pasport_serija);
writeln(dg_fail,ba.pasport_serija);
writeln('pasport_nr:',ba.pasport_nr);
writeln(dg_fail,ba.pasport_nr);
writeln('cislo_knig:',ba.cislo_knig);
writeln(dg_fail,ba.cislo_knig);
writeln('cislo:',ba.cislo);
write(dg_fail,ba.cislo);
writeln('mesjac:',ba.mesjac);
write(dg_fail,'.',ba.mesjac);
writeln('god:',ba.god);
write(dg_fail,'.',ba.god);
end;
Begin
clrscr;
writeln('Ukazite deistvie:');
writeln('1 = dobavit zapis;');
writeln('2 = prosmotret zadoljenosti i pomestit v file.');
readln(a);
assign(ba_fail,'4itateli.dat');
assign(dg_fail,'dolgi.dat');
rewrite(dg_fail);
if a=1 then
begin
writeln('Vvedite reg_nomer:');
readln(ba.reg_nomer);
writeln('Vvedite imja:');
readln(ba.imja);
writeln('Vvedite familija:');
readln(ba.familija);
writeln('Vvedite pasport_serija:');
readln(ba.pasport_serija);
writeln('Vvedite pasport_nr:');
readln(ba.pasport_nr);
writeln('Vvedite cislo_knig:');
readln(ba.cislo_knig);
writeln('Vvedite cislo:');
readln(ba.cislo);
writeln('Vvedite mesjac:');
readln(ba.mesjac);
writeln('Vvedite god');
readln(ba.god);
reset(ba_fail);
write(ba_fail,ba);
end else
if a=2 then
begin
writeln('Dolgi');
GetDate(y,m,d,dow);
reset(ba_fail);
while not(eof(ba_fail)) do
begin
read(ba_fail,ba);
if (ba.god<y) then dolg;
if (ba.god=y)and(ba.mesjac<m) then dolg;
if (ba.god=y)and(ba.mesjac=m)and(ba.cislo<=d) then dolg;
end;
readkey;
end else writeln('Vi vveli nepravelnoe 4islo');
close(dg_fail);
close(ba_fail);
end.

Автор: мисс_граффити 13.02.2008 22:18

сколько раз можно говорить одно и то же - специальными тегами code пользуйтесь!
ну невозможно же такой код (хоть и зелененький) читать.

Автор: Brad Bellick 13.02.2008 22:23

Цитата(Brad Bellick @ 13.02.2008 16:05) *

Здравствуйте! С помощью добрых людей, по теории пытался доделать программу:
Информация про читателей библиотеки:
регистрационный номер, имя, фамилия, серия и номер паспорта, количество взятых книг, дата сдачи книги(дата в формате: Деня.Месяц.Год, пример 12.02.2008). В программе нужно взять сегоднейшее число и на экран вывести, всех тех читателей кому надо было сдать книги до этого числа (сегоднейшего). Все это еще надо записать в файл.

Но почему-то не получается записать информацию в файл.

Вот что у меня вышло на данный момент:

uses crt,dos;
type Lib_TP=record
reg_nomer:integer;
imja:string[20];
familija:string[25];
pasport_serija, pasport_nr:integer;
cislo_knig:integer;
cislo, mesjac, god :integer;
end;
var
ba:Lib_TP;
ba_fail:FILE of Lib_TP;
dg_fail:text;
a:byte;
y, m, d, dow : Word;
procedure dolg;
begin
writeln('reg_nomer:',ba.reg_nomer);
writeln(dg_fail,ba.reg_nomer);
writeln('imja:',ba.imja);
writeln(dg_fail,ba.imja);
writeln('familija:',ba.familija);
writeln(dg_fail,ba.familija);
writeln('pasport_serija:',ba.pasport_serija);
writeln(dg_fail,ba.pasport_serija);
writeln('pasport_nr:',ba.pasport_nr);
writeln(dg_fail,ba.pasport_nr);
writeln('cislo_knig:',ba.cislo_knig);
writeln(dg_fail,ba.cislo_knig);
writeln('cislo:',ba.cislo);
write(dg_fail,ba.cislo);
writeln('mesjac:',ba.mesjac);
write(dg_fail,'.',ba.mesjac);
writeln('god:',ba.god);
write(dg_fail,'.',ba.god);
end;
Begin
clrscr;
writeln('Ukazite deistvie:');
writeln('1 = dobavit zapis;');
writeln('2 = prosmotret zadoljenosti i pomestit v file.');
readln(a);
assign(ba_fail,'4itateli.dat');
assign(dg_fail,'dolgi.dat');
rewrite(dg_fail);
if a=1 then
begin
writeln('Vvedite reg_nomer:');
readln(ba.reg_nomer);
writeln('Vvedite imja:');
readln(ba.imja);
writeln('Vvedite familija:');
readln(ba.familija);
writeln('Vvedite pasport_serija:');
readln(ba.pasport_serija);
writeln('Vvedite pasport_nr:');
readln(ba.pasport_nr);
writeln('Vvedite cislo_knig:');
readln(ba.cislo_knig);
writeln('Vvedite cislo:');
readln(ba.cislo);
writeln('Vvedite mesjac:');
readln(ba.mesjac);
writeln('Vvedite god');
readln(ba.god);
reset(ba_fail);
write(ba_fail,ba);
end else
if a=2 then
begin
writeln('Dolgi');
GetDate(y,m,d,dow);
reset(ba_fail);
while not(eof(ba_fail)) do
begin
read(ba_fail,ba);
if (ba.god<y) then dolg;
if (ba.god=y)and(ba.mesjac<m) then dolg;
if (ba.god=y)and(ba.mesjac=m)and(ba.cislo<=d) then dolg;
end;
readkey;
end else writeln('Vi vveli nepravelnoe 4islo');
close(dg_fail);
close(ba_fail);
end.





program biblioteka;
uses crt,dos;
type Lib_TP=record
reg_nomer:integer;
imja:string[20];
familija:string[25];
pasport_serija, pasport_nr:integer;
cislo_knig:integer;
cislo, mesjac, god :integer;
end;
var
ba:Lib_TP;
ba_fail:FILE of Lib_TP;
dg_fail:text;
a:byte;
y, m, d, dow : Word;
procedure dolg;
begin
writeln('reg_nomer:',ba.reg_nomer);
writeln(dg_fail,ba.reg_nomer);
writeln('imja:',ba.imja);
writeln(dg_fail,ba.imja);
writeln('familija:',ba.familija);
writeln(dg_fail,ba.familija);
writeln('pasport_serija:',ba.pasport_serija);
writeln(dg_fail,ba.pasport_serija);
writeln('pasport_nr:',ba.pasport_nr);
writeln(dg_fail,ba.pasport_nr);
writeln('cislo_knig:',ba.cislo_knig);
writeln(dg_fail,ba.cislo_knig);
writeln('cislo:',ba.cislo);
write(dg_fail,ba.cislo);
writeln('mesjac:',ba.mesjac);
write(dg_fail,'.',ba.mesjac);
writeln('god:',ba.god);
write(dg_fail,'.',ba.god);
end;
Begin
clrscr;
writeln('Ukazite deistvie:');
writeln('1 = dobavit zapis;');
writeln('2 = prosmotret zadoljenosti i pomestit v file.');
readln(a);
assign(ba_fail,'4itateli.dat');
assign(dg_fail,'dolgi.dat');
rewrite(dg_fail);
if a=1 then
begin
writeln('Vvedite reg_nomer:');
readln(ba.reg_nomer);
writeln('Vvedite imja:');
readln(ba.imja);
writeln('Vvedite familija:');
readln(ba.familija);
writeln('Vvedite pasport_serija:');
readln(ba.pasport_serija);
writeln('Vvedite pasport_nr:');
readln(ba.pasport_nr);
writeln('Vvedite cislo_knig:');
readln(ba.cislo_knig);
writeln('Vvedite cislo:');
readln(ba.cislo);
writeln('Vvedite mesjac:');
readln(ba.mesjac);
writeln('Vvedite god');
readln(ba.god);
reset(ba_fail);
write(ba_fail,ba);
end else
if a=2 then
begin
writeln('Dolgi');
GetDate(y,m,d,dow);{функция возвращающа дату имеется в библиотеке DOS}
reset(ba_fail);
while not(eof(ba_fail)) do
begin
read(ba_fail,ba);
if (ba.god<y) then dolg;
if (ba.god=y)and(ba.mesjac<m) then dolg;
if (ba.god=y)and(ba.mesjac=m)and(ba.cislo<=d) then dolg;
end;
readkey;
end else writeln('Vu vveli nepravelnoe 4islo');
close(dg_fail);
close(ba_fail);
end.


Добавлено через 1 мин.
Цитата(мисс_граффити @ 13.02.2008 17:18) *

сколько раз можно говорить одно и то же - специальными тегами code пользуйтесь!
ну невозможно же такой код (хоть и зелененький) читать.


А вот так нормально?

Автор: volvo 13.02.2008 22:41

Цитата
почему-то не получается записать информацию в файл.
В какой именно файл? В текстовый все пишет прекрасно, а вот с типизированным проблема: будет все время перезаписываться первый элемент, поскольку ты открываешь файл, но не переводишь указатель на его конец... Добавь:

  reset(ba_fail);
seek(ba_fail, filesize(ba_fail)); { <--- Вот эту строку }
write(ba_fail,ba);
, тогда будут записываться и последующие читатели...

Кстати, правило хорошего тона: что, если у пользователя еще нет файла '4itateli.dat'? Надо это проверить и создать его в таком случае, иначе рискуешь получить ошибку - открытые несуществующего файла.

Автор: Brad Bellick 13.02.2008 23:39

Цитата(volvo @ 13.02.2008 17:41) *

В какой именно файл? В текстовый все пишет прекрасно, а вот с типизированным проблема: будет все время перезаписываться первый элемент, поскольку ты открываешь файл, но не переводишь указатель на его конец... Добавь:

  reset(ba_fail);
seek(ba_fail, filesize(ba_fail)); { <--- Вот эту строку }
write(ba_fail,ba);
, тогда будут записываться и последующие читатели...

Кстати, правило хорошего тона: что, если у пользователя еще нет файла '4itateli.dat'? Надо это проверить и создать его в таком случае, иначе рискуешь получить ошибку - открытые несуществующего файла.



Всеравно не записывает, да и в текстовый тоже нет

Автор: volvo 14.02.2008 0:15

Цитата
Всеравно не записывает
Если бы я не проверял - то не сказал бы. У меня все прекрасно записывает, и типизированный файл, и текстовый. Хочешь - могу выслать и тот и другой.

Автор: Brad Bellick 14.02.2008 0:18

Помогите пожалуйста, завтра здавать, не хо4ет он записывать ни в какой файл(даже если я его создаю). В чем именно проблема тогда? Я был бы рад если бы даже в текстовый только записало.

Добавлено через 1 мин.

Цитата(volvo @ 13.02.2008 19:15) *

Если бы я не проверял - то не сказал бы. У меня все прекрасно записывает, и типизированный файл, и текстовый. Хочешь - могу выслать и тот и другой.

ну давай

Добавлено через 1 мин.
Можешь тогда весь этот код выслать? А то я уже запутался

Автор: volvo 14.02.2008 0:32

Не записывает, говоришь? Ну, попробуй вот это: Прикрепленный файл  prog_02.pas ( 2.6 килобайт ) Кол-во скачиваний: 451


Удали свои DAT - файлы, и запусти мою программу. Два раза. Первый раз выбери 1, а второй - 2. И посмотри, выдает тебе должника или нет. Если выдает - то доделывай эту программу, а если нет - то виновата не программа, возможно все, что угодно...

Автор: Brad Bellick 14.02.2008 0:40

Цитата(volvo @ 13.02.2008 19:32) *

Не записывает, говоришь? Ну, попробуй вот это: Прикрепленный файл  prog_02.pas ( 2.6 килобайт ) Кол-во скачиваний: 451


Удали свои DAT - файлы, и запусти мою программу. Два раза. Первый раз выбери 1, а второй - 2. И посмотри, выдает тебе должника или нет. Если выдает - то доделывай эту программу, а если нет - то виновата не программа, возможно все, что угодно...


ну создал, но у вас просто совсем по другому программа выгледит yes2.gif
И чем вобще можно dat файл открыть?

Добавлено через 12 мин.
Вот мой примерно похожий вариант

Добавлено через 2 мин.


Добавлено через 12 мин.
Вот мой примерно похожий вариант
[/quote]
но не записывает(ведь мне же надо сна4ало ввести нескольких читателей, а потом уже и выевить должников)



Прикрепленные файлы
Прикрепленный файл  3UZD3.PAS ( 2.21 килобайт ) Кол-во скачиваний: 227