У меня есть база данных - Автостоянка (типизированные файлы) со следующей структурой записи: Марка, номер машины, цвет, время оплаченное за стоянку, время которое машина стоит на стоянке. Мне необходимо вывести на экран машины, простоявшие 10 дней и в этом проблема.
Вот часть кода:
"(Показать/Скрыть)
uses crt;
type time=record
month: byte;
day: byte;
hour: byte;
min: byte;
end;
autopark=record
mark: string[10];
num: word;
col: string[10];
time: time;
pt: byte;
end;
mas=array[1..20] of autopark;
f1=fileof mas;
var i: byte;
ch: char;
way: string;
f: f1;
procedure loadbd(var f:f1; var i:byte);
begin
clrscr;
write('Пропишите путь к БД: '); readln(way);
write('Введите число записей в БД: '); readln(i);
assign(f,way);
{SI-}
reset(f);
{SI+}if IOresult<>0then writeln('Error! File not found!');
end;
procedure showbd(var f: f1; i: byte);
var j: byte;
a: mas;
begin
clrscr;
{SI-}
reset(f);
{SI+}if IOresult<>0then writeln('Error! File not found!') elsebegin
read(f,a);
writeln('Марка':11,'№':10,'Цвет':12,'Время опл.':12,'Дата':12,'Время':14);
for j:=1to i dowith a[j] dobegin
write(mark:11,num:10,col:12,pt:10);
with time do writeln(day:12,'.',month,hour:12,':',min);
end;
close(f);
readkey;
end;
end;
procedure addcar(var f:f1; var i:byte);
Var a: mas;
begin
clrscr;
{SI-}
reset(f);
{SI+}if IOresult<>0then writeln('Error! File not found!') elsebegin
read(f,a);
close(f);
if i<=25thenwith a[i] dobegin
inc(i);
with a[i] dobegin
writeln('Введите данные:'); writeln;
write('Марка машины: '); readln(mark);
write('Номер машины: '); readln(num);
write('Цвет: '); readln(col);
write('Насколько месяцев оплачена стоянка: '); readln(pt); writeln;
writeln('Когда машина была поставлена на стоянку?');
with time dobegin
write('Месяц: '); readln(month);
write('День: '); readln(day);
write('Час: '); readln(hour);
write('Минуты: '); readln(min);
end;
end;
endelse writeln('Imposible');
write(f,a);
close(f);
end;
end;
procedure showcar(var f: f1; i: byte);
var k,j,dl,day: byte;
ch: char;
a: mas;
b: mas;
begin
clrscr;
reset(f);
read(f,a);
close(f);
k:=0;
writeln('Введите дату в Январе: '); readln(dl);
for j:=1to i dowith a[j] doif dl-day=10thenbegin inc(k); b[k]:=a[j]; end;
clrscr;
writeln('Марка':11,'№':10,'Цвет':12,'Время опл.':12,'Дата':12,'Время':14);
for j:=1to k dowith b[j] dobegin
write(mark:11,num:10,col:12,pt:10);
with time do writeln(day:12,'.',month,hour:12,':',min);
end;
readkey;
end;
begin
clrscr;
repeat
clrscr;
writeln('0) Загрузить БД');
writeln('2) Показать БД');
writeln('3) Добавиь машину');
writeln('8) Вывод машин, стоящих более 10 дней'); writeln;
writeln('Esc - Выход');
ch:=readkey;
case ch of'0':loadbd(f,i);
'2':showbd(f,i);
'3':addcar(f,i);
'8':showcar(f,i);
end;
until ch=#27;
end.
Проблема в том, что я не знаю как описать переменную day, относящуюся к записи time, в процедуре showcar, отвечающую за вывод этих машин. Нажмите для просмотра прикрепленного файла
n4oJllI
22.05.2006 2:12
легче и правильнее будет работать с "File of record" масив использовать тока для output и input при работе с даными ...
Bokul
22.05.2006 8:32
Тебе надо объединить записи time и autopark в одну. Ище совет: сделай так чтобы время вводил не пользователь, а сама программа. Для етого существует процедуры: