Привет всем! Помогите пожалуйста сделать так, что бы при выборе пункта "ENTER INFO TO DB" (см. прикрепленный файл) можно было вводить информацию о рейсах в базу данных. В прикрепленном файле меню создавалось при помощи Turbo Professional. Назначение программы - продажа билетов на самолеты.
Заранее благодарен.
Вот, что у меня имеется:
type TReys = record NR:integer; PO,PP:string[30]; DateO,DateP:string[10]; TimeO,TimeP:string[5]; KolM:byte; CenaB:string[7]; end;
begin assign(F,'Reys.dat'); {$I-} Reset(F); if IOResult<>0 then Rewrite(F); {$I+} VvodR®; Seek(F,FileSize(F)); write(F,R); Close(F); end;
volvo
9.04.2006 20:12
Что именно не получается? Подключить приведенный выше код с помощью {$I имя файла} к programma.pas, и изменить процедуру P1 вот так:
Procedure P1; begin RReys; end;
?
dmx
9.04.2006 21:19
Пасиб большое! Все работает!
dmx
14.04.2006 23:54
Вот продолжаю модернизировать свою программку... В общем теперь при выборе пункта меню 3, а именно "BUY A TICKET" программа выдает из базы данных № рейса и конечный пункт. Так вот вывести на экран всю информацию, которую содержит запись в одну строчку врядли получится. Как можно сделать так, чтобы эти записи можно было пролистывать стрелочками "вверх"/"вниз"? Соответственно по нажатию "ENTER" на выбранной записи программа отображала бы полную информацию о данной записи. Просто нужно как-то это оформить в виде таблицы. Заранее благодарен. (текст программы в прикрепленном файле)
volvo
15.04.2006 15:01
Я бы делал что-то типа меню. То есть описывал бы вот такую структуру:
Type menuRec = record s: string; offset: longint; end;
создал бы массив (или список, как тебе удобнее, для неизвестного количества элементов - лучше, конечно, список) элементов этого типа, и при чтении из файла добавлял бы в S ту минимальную информацию, что ты выводишь на экран сейчас, а в поле offset - смещение от начала файла записи, содержащей ПОЛНУЮ информацию.
Тогда можно выводить краткое описание, по нажатию ArrowUp/ArrowDown перемещаться по элементам (реализации меню уже выкладывались на форуме), а при нажатии Enter - считать из файла полную информацию (offset же есть), и отображать ее на экране...
alpha
1.05.2006 20:00
Цитата
реализации меню уже выкладывались на форуме
не нашел я их. просто не понятно как в моем случае организовать твою идею с меню...
Цитата
ту минимальную информацию, что ты выводишь на экран сейчас
а что значит "сейчас"?
P. S. Сорри, под другим ником зашел - от старого пароль забыл!
volvo
1.05.2006 20:42
Цитата(alpha @ 1.05.2006 16:00)
а что значит "сейчас"?
А то, что у тебя делается здесь:
while not Eof(F) do begin read(F, R); Writeln(R.NR: 10, R.PP: 20); { <--- Вот это - краткая информация, так? } end;
Вот тебе работающий набросок меню:
uses crt;
type TStr = string[30]; PStrArray = ^TStrArray; TStrArray = array[0 .. pred(maxint div sizeof(TStr))] of TStr;
var menuArr: PStrArray;
const { здесь используй переменную, хранящую количество записей в файле } SizeOfFile = 50;
{ Меню будет отображаться между 5-ой и 20-ой строками экрана } WinStartY = 5; WinFinishY = 20;
function IntToStr(n: integer): string; var S: string[11]; begin Str(n, S); IntToStr := S; end;
function min(A, B: integer): integer; begin min := A; if B < a then min := B; end;
function menu(arr: PStrArray): integer; var scrolled, currMenu: integer; ch: char;
selection: boolean;
procedure Refresh; var i: integer; begin for i := 1 to min(WinFinishY - WinStartY, SizeOfFile) do begin if selection then if i = currmenu then textbackground(red) else textbackground(black) else textbackground(black);
repeat ch := readkey; case ch of #0: case readkey of #72: { up } begin Hide; if currMenu > 1 then dec(currMenu) else if scrolled > 0 then dec(scrolled); Show; end; #80: { dn } begin Hide; if currmenu < WinFinishY - WinStartY then inc(currMenu) else if currmenu + scrolled < sizeoffile then inc(scrolled); Show; end; end; #13: ; end; until ch = #13; menu := pred(currMenu + scrolled); end;
var i, m: integer;
begin GetMem(menuArr, sizeoffile * sizeof(tstr));
{ Вместо след. цикла можешь проходить по файлу, читать данные и формировать из них краткое описание (до 30 символов длиной) } for i := 0 to pred(sizeoffile) do begin menuArr^[i] := 'string #' + inttostr(i + 1); end;
m := menu(menuArr); gotoxy(1, 23);
{ Ну, а здесь - соответсвенно "лезешь" в файл данных через Seek(f, m), читаешь полную информацию и отображаешь там, где тебе удобно } writeln('show the record #', m:2, ' data');
FreeMem(menuArr, sizeoffile * sizeof(tstr)); end.
Это - только набросок, его можно еще улучшать и улучшать. Приведен только для примера...
Но сначала я бы рекомендовал тебе ничего не изменяя прогнать именно эту программку...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.