У меня есть база данных - Автостоянка (типизированные файлы) со следующей структурой записи: Марка, номер машины, цвет, время оплаченное за стоянку, время которое машина стоит на стоянке. Мне необходимо вывести на экран машины, простоявшие 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=file of 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<>0 then 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<>0 then writeln('Error! File not found!') else begin read(f,a); writeln('Марка':11,'№':10,'Цвет':12,'Время опл.':12,'Дата':12,'Время':14); for j:=1 to i do with a[j] do begin 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<>0 then writeln('Error! File not found!') else begin read(f,a); close(f); if i<=25 then with a[i] do begin inc(i); with a[i] do begin writeln('Введите данные:'); writeln; write('Марка машины: '); readln(mark); write('Номер машины: '); readln(num); write('Цвет: '); readln(col); write('Насколько месяцев оплачена стоянка: '); readln(pt); writeln; writeln('Когда машина была поставлена на стоянку?'); with time do begin write('Месяц: '); readln(month); write('День: '); readln(day); write('Час: '); readln(hour); write('Минуты: '); readln(min); end; end; end else 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:=1 to i do with a[j] do if dl-day=10 then begin inc(k); b[k]:=a[j]; end; clrscr; writeln('Марка':11,'№':10,'Цвет':12,'Время опл.':12,'Дата':12,'Время':14); for j:=1 to k do with b[j] do begin 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, отвечающую за вывод этих машин. PARK.rar ( 431 байт )
Кол-во скачиваний: 365
Автор: n4oJllI 22.05.2006 2:12
легче и правильнее будет работать с "File of record" масив использовать тока для output и input при работе с даными ...
Автор: Bokul 22.05.2006 8:32
Тебе надо объединить записи time и autopark в одну. Ище совет: сделай так чтобы время вводил не пользователь, а сама программа. Для етого существует процедуры: