1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Система по продаже билетов., Не получается организовать ввод в БД.
Привет всем! Помогите пожалуйста сделать так, что бы при выборе пункта "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;
Вот продолжаю модернизировать свою программку... В общем теперь при выборе пункта меню 3, а именно "BUY A TICKET" программа выдает из базы данных № рейса и конечный пункт. Так вот вывести на экран всю информацию, которую содержит запись в одну строчку врядли получится. Как можно сделать так, чтобы эти записи можно было пролистывать стрелочками "вверх"/"вниз"? Соответственно по нажатию "ENTER" на выбранной записи программа отображала бы полную информацию о данной записи. Просто нужно как-то это оформить в виде таблицы. Заранее благодарен. (текст программы в прикрепленном файле)
Я бы делал что-то типа меню. То есть описывал бы вот такую структуру:
Type menuRec = record s: string; offset: longint; end;
создал бы массив (или список, как тебе удобнее, для неизвестного количества элементов - лучше, конечно, список) элементов этого типа, и при чтении из файла добавлял бы в S ту минимальную информацию, что ты выводишь на экран сейчас, а в поле offset - смещение от начала файла записи, содержащей ПОЛНУЮ информацию.
Тогда можно выводить краткое описание, по нажатию ArrowUp/ArrowDown перемещаться по элементам (реализации меню уже выкладывались на форуме), а при нажатии Enter - считать из файла полную информацию (offset же есть), и отображать ее на экране...
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.
Это - только набросок, его можно еще улучшать и улучшать. Приведен только для примера...
Но сначала я бы рекомендовал тебе ничего не изменяя прогнать именно эту программку...