Привет всем! Помогите пожалуйста сделать так, что бы при выборе пункта "ENTER INFO TO DB" (см. прикрепленный файл) можно было вводить информацию о рейсах в базу данных. В прикрепленном файле меню создавалось при помощи Turbo Professional. Назначение программы - продажа билетов на самолеты.
Что именно не получается? Подключить приведенный выше код с помощью {$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)
а что значит "сейчас"?
А то, что у тебя делается здесь:
whilenot Eof(F) dobegin
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;
beginfor i := 1to min(WinFinishY - WinStartY, SizeOfFile) dobeginif selection thenif i = currmenu then textbackground(red) else textbackground(black)
else textbackground(black);
gotoxy(10, winstartY + i);
write('':2, arr^[Pred(scrolled + i)]:30, '':2);
end;
end;
procedure Show;
begin
selection := true;
refresh;
end;
procedure Hide;
begin
selection := false;
refresh;
end;
begin
scrolled := 0; currMenu := 1;
show;
repeat
ch := readkey;
case ch of#0:
case readkey of#72: { up }begin
Hide;
if currMenu > 1then dec(currMenu)
elseif scrolled > 0then dec(scrolled);
Show;
end;
#80: { dn }begin
Hide;
if currmenu < WinFinishY - WinStartY then inc(currMenu)
elseif 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 := 0to pred(sizeoffile) dobegin
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.
Это - только набросок, его можно еще улучшать и улучшать. Приведен только для примера...
Но сначала я бы рекомендовал тебе ничего не изменяя прогнать именно эту программку...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.