IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Система по продаже билетов., Не получается организовать ввод в БД.
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Привет всем! Помогите пожалуйста сделать так, что бы при выборе пункта "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;

TFReys = file of TReys;


procedure VvodR (var R:TReys);
begin
write('Nomer reysa: '); readln(R.NR);
write('Punkt otpravlenija: '); readln(R.PO);
write('Date otpravlenija: '); readln(R.DateO);
write('Vremja otpravlenija: '); readln(R.TimeO);
write('Punkt pribitija: '); readln(R.PP);
write('Date pribitija: '); readln(R.DateP);
write('Vremja pribitija: '); readln(R.TimeP);
write('Kolichestvo mest (biletov): '); readln(R.KolM);
write('Cena bileta: '); readln(R.CenaB);
end;

procedure RReys;
var F:TFReys;
R:TReys;

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;


Прикрепленные файлы
Прикрепленный файл  programma.PAS ( 996 байт ) Кол-во скачиваний: 275
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Что именно не получается? Подключить приведенный выше код с помощью
{$I имя файла}
к programma.pas, и изменить процедуру P1 вот так:
Procedure P1;
begin
RReys;
end;

?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Пасиб большое! Все работает!

Сообщение отредактировано: dmx -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Вот продолжаю модернизировать свою программку... В общем теперь при выборе пункта меню 3, а именно "BUY A TICKET" программа выдает из базы данных № рейса и конечный пункт. Так вот вывести на экран всю информацию, которую содержит запись в одну строчку врядли получится. Как можно сделать так, чтобы эти записи можно было пролистывать стрелочками "вверх"/"вниз"? Соответственно по нажатию "ENTER" на выбранной записи программа отображала бы полную информацию о данной записи. Просто нужно как-то это оформить в виде таблицы. Заранее благодарен. (текст программы в прикрепленном файле)


Прикрепленные файлы
Прикрепленный файл  programma1.PAS ( 2.07 килобайт ) Кол-во скачиваний: 273
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Я бы делал что-то типа меню. То есть описывал бы вот такую структуру:
Type
menuRec = record
s: string;
offset: longint;
end;

создал бы массив (или список, как тебе удобнее, для неизвестного количества элементов - лучше, конечно, список) элементов этого типа, и при чтении из файла добавлял бы в S ту минимальную информацию, что ты выводишь на экран сейчас, а в поле offset - смещение от начала файла записи, содержащей ПОЛНУЮ информацию.

Тогда можно выводить краткое описание, по нажатию ArrowUp/ArrowDown перемещаться по элементам (реализации меню уже выкладывались на форуме), а при нажатии Enter - считать из файла полную информацию (offset же есть), и отображать ее на экране...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





Группа: Пользователи
Сообщений: 1
Пол: Мужской

Репутация: -  0  +


Цитата
реализации меню уже выкладывались на форуме

не нашел я их.
просто не понятно как в моем случае организовать твою идею с меню...


Цитата
ту минимальную информацию, что ты выводишь на экран сейчас

а что значит "сейчас"?

P. S. Сорри, под другим ником зашел - от старого пароль забыл!

Сообщение отредактировано: alpha -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гость






Цитата(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);

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 > 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.

Это - только набросок, его можно еще улучшать и улучшать. Приведен только для примера...

Но сначала я бы рекомендовал тебе ничего не изменяя прогнать именно эту программку...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 17.04.2024 3:29
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name