Описание программных модулей и их взаимодействие 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Описание программных модулей и их взаимодействие



Данный программный продукт состоит из 4 основных вычисляющих модулей:

а) поиск всех возможных рейсов, последовательно проходящих через заданные начальную и конечную точки маршрута.

Для каждого из существующих рейсов указываются станции, через которые поезд проходит последовательно, к примеру, Москва – Санкт-Петербург – Казань – Воронеж.

Следует отметить, что поезд может идти только в одном направлении (из Москвы в Воронеж).

Задаются пункт отправления и пункт прибытия, указанные пассажиром. Рейс считается подходящим, если в его маршруте содержатся пункты отправления и прибытия, причем пункт прибытия следует после пункта отправления. Например, если пассажир следует из Санкт-Петербурга в Воронеж, то указанный выше рейс считается подходящим. Если же пункт его отправления Казань, а пункт назначения Санкт-Петербург, то рейс №100 не будет соответствовать заданному условию.

Листинг программного модуля:

 

if (ComboBox1.Text <> '') and (ComboBox2.Text <> '') and (RzDateTimeEdit1.Text <> '') then

 begin

 Query1.Destroy;

 DS1.Destroy;

 Query1:=CreateQuery('select * from reis');

 Query1.Open;

 nomera:='';

 Query1.First;

 while not Query1.Eof do

begin

m:=-1;

n:=-1;

trains:= TStringList.Create;

trains.Text:= StringReplace(Query1.FieldValues['stancii'],'-',#13#10,[rfReplaceAll]);

for i:=0 to trains.Count-1 do

begin

if trains[i] = ComboBox1.Text then m:=i;

if trains[i] = ComboBox2.Text then n:=i;

end;

if (m <> -1) and (n <> -1) then

if (m < n) then

begin

nomera:=nomera+Query1.Fields[0].AsString+',';

end;

trains.Destroy;

Query1.Next;

end;

 if nomera = '' then

begin

Application.MessageBox('Таких рейсов нет','Внимание',MB_OK+MB_ICONERROR);

DS1:= CreateDataSource(Query1);

// DBGrid1.DataSource:= DS1;

end else

begin

Delete(nomera,length(nomera),1);

Query1.SQL.Clear;

SQLString:='select * from reis where no_reisa in ('+nomera+')';

Query1.SQL.Add(SQLString);

Query1.Open;

DS1:=CreateDataSource(Query1);

DBGrid1.DataSource:= DS1;

end;

 end;

Результатом работы программного модуля является список подходящих рейсов.

б) визуальное отображение всех занятых и свободных мест выбранного рейса с учетом даты отправления, проверка освободившихся мест.

После выбора необходимого рейса и даты отправления пассажира таблично отображаются занятые и свободные места. Для каждого занятого места запоминаются пункт назначения и дата прибытия. Место считается освободившимся для данного пассажира, если выполняется два условия: запомненный для места пункт назначения находится до пункта отправления пассажира или совпадает с ним; запомненная дата прибытия для места совпадает с датой отправления пассажира или дата отправления является более поздней.

 

Листинг программного модуля:

SQLString:= 'select * from typevag where no_reisa="'+DBGrid1.Fields[0].Text+'"';

 Query2:= CreateQuery(SQLString);

 Query2.Open;

 plackart:= TStringList.Create;

 kupe:= TStringList.Create;

 plackart.Text:=StringReplace(Query2.Fields[1].AsString,' ',#13#10,[rfReplaceAll]);

 kupe.Text:=StringReplace(Query2.Fields[2].AsString,' ',#13#10,[rfReplaceAll]);

 StringGrid1.RowCount:=plackart.Count+kupe.Count+1;

 for i:=0 to plackart.Count-1 do

 begin

 StringGrid1.Cells[0,StrToInt(plackart[i])]:=plackart[i]+' плацкарт';

 for j:=1 to 55 do StringGrid1.Cells[j,i]:='';

 end;

 for i:=0 to kupe.Count-1 do

 begin

 StringGrid1.Cells[0,StrToInt(kupe[i])]:=kupe[i]+' купе';

 // for j:=1 to 55 do StringGrid1.Cells[j,i]:='';

 for j:=37 to 55 do StringGrid1.Cells[j,StrToInt(kupe[i])]:='X';

 end;

 plackart.Destroy;

 kupe.Destroy;

 

 with Query2 do

 begin

 SQLString:='select * from tickets where no_reisa="'+DBGrid1.Fields[0].Text+'"and startdate="'+FormatDateTime('dd.mm',RzDateTimeEdit1.Date)+'"';

 SQL.Clear;

 SQL.Add(SQLString);

 Open;

 end;

 Query2.First;

 while not Query2.Eof do

 begin

 v:= Query2.Fields[8].AsInteger;

 p:= Query2.Fields[9].AsInteger;

 StringGrid1.Cells[p,v]:='*';

 pnaz:= Query2.FieldValues['EndPoint'];

 SQLString:= 'select * from stationofreis where No_reisa="'+DBGrid1.Fields[0].AsString+'"';

 Query3:= CreateQuery(SQLString);

 Query3.Open;

 Query3.First;

 while Query3.Fields[1].AsString <> pnaz do

 begin

if Query3.FieldByName('station').AsString = ComboBox1.Text then

{if FormatDateTime() < FormatDateTime() then} goto m1;

Query3.Next;

end;

  Query3.Destroy;

  StringGrid1.Cells[p,v]:='';

  m1:

  Query2.Next;

  end;

  Query2.Destroy;

 

в) вычисление основных параметров для заданного маршрута: даты прибытия, времени в пути, стоимости билета.

Для каждого пункта маршрута в отдельной таблице указываются следующие параметры: стоимость участка пути от предыдущей до текущей станции и время его прохождения, время прибытия, стоянки и отправления. Для того, чтобы вычислить стоимость маршрута, по которому следует пассажир, нужно суммировать стоимости участков пути, составляющих данный маршрут. К цене маршрута добавляется наценка за класс вагона и обязательный страховой сбор. Чтобы вычислить время.проведенное в пути, нужно суммировать время прохождения каждого участка пути и время стоянки в каждом пункте. Дата прибытия вычисляется прибавлением времени в пути к дате отправления.

Листинг программного модуля:  

 

 if (StringGrid1.Cells[ACol,ARow] <> '*') and (StringGrid1.Cells[ACol,ARow] <> 'X') then

 begin

 if (ComboBox1.Text <> '') and (ComboBox2.Text <> '') and (RzDateTimeEdit1.Text <> '') then

 begin

 if MessageDlg('Приступить к гегистрации пассажира?',mtConfirmation,[mbYes,mbNo],0) = mrYes then

 begin

 Application.CreateForm(TFormTicket, FormTicket);

 with FormTicket do

begin

Label2.Caption:= DBGrid1.Fields[0].Text;

Label3.Caption:= DBGrid1.Fields[2].Text;

Label6.Caption:= FormatDateTime('dd.mm',RzDateTimeEdit1.Date);

Label17.Caption:= IntToStr(ACol);

Label15.Caption:= IntToStr(ARow);

Label10.Caption:= ComboBox1.Text;

Label11.Caption:= ComboBox2.Text;

time:=TStringList.Create;

time.Text:=StringReplace(StringGrid1.Cells[0,ARow],' ',#13#10,[rfreplaceall]);

Label13.Caption:= time[1];

time.Destroy;

Label19.Caption:= FormatDateTime('dd.mm',RzDateTimeEdit1.Date);

SQLString:='select * from stationofreis where no_reisa="'+DBGrid1.Fields[0].Text+'"';

Query2:= CreateQuery(SQLString);

Query2.Open;

Query2.First;

hour:=0;

minute:=0;

price:=0;

s:='0';

while not Query2.Eof do

begin

if Query2.Fields[1].AsString = ComboBox1.Text then

begin

Label21.Caption:=Query2.Fields[6].AsString;

s1:= Query2.Fields[6].AsFloat;

while not Query2.Eof do

begin

Query2.Next;

s2:= Query2.Fields[4].AsFloat;

if s1>s2 then

begin

Label6.Caption:= FormatDateTime('dd.mm',RzDateTimeEdit1.Date+1);

s1:=s2;

end;

if Query2.Fields[1].AsString = ComboBox2.Text then

begin

if s = '' then

  begin

  s:= Query2.Fields[3].AsString;

  end;

Label23.Caption:=Query2.Fields[4].AsString;

s:= FloatToStr(sumhhmm(StrToFloat(s),Query2.Fields[3].AsFloat));

Label25.Caption:= s;

priceway:= price;

GetDir(0,Path);

with TIniFile.Create(Path+'\zd.ini') do

  try

  price:= price+Query2.Fields[2].AsFloat+StrToFloat(ReadString('cash',Label13.Caption,'no val ues'))+StrToFloat(ReadString('cash','сбор','no values'));

finally

  Free;

end;

Label27.Caption:= FloatToStr(price);

  // Edit3.Text:= StringReplace(Label27.Caption,',','.',[rfReplaceAll]);

{!!!!!добавить указание стоимости проезда!!!!!}

goto m1;

end;

 

price:=price+Query2.Fields[2].AsFloat;

s:= FloatToStr(sumhhmm(StrToFloat(s),Query2.Fields[3].AsFloat));

s:= FloatToStr(sumhhmm(StrToFloat(s),Query2.Fields[5].AsFloat));

s1:=s2;

end;

end;

Query2.Next;

end;

 m1:

end;

FormTicket.ShowModal;

end;

end;

end;

 

г) регистрация пассажира и формирование проездного документа.

После заполнения данных пассажира (фамилии, имени, отчества, номера документа, удостоверяющего личность) происходит регистрация пассажира на данный рейс и формируется проездной документ, в котором указываются рейс, вычисленные ранее стоимость билета, время пути, время отправления и прибытия, дата прибытия, данные пассажира, пункт отправления и пункт следования.

 

Листинг программного модуля:

  if (Edit1.Text <> '') or (MaskEdit1.Text <> '') then

  begin

  dat:= FormatDateTime('ddmmyyhhmm',Now);

  SQLString:='insert into tickets values("'+FormatDateTime('ddmmyyhhmm',Now)+'","'+Edit1.Text+'","'+MaskEdit1.Text+'","'+Label2.Caption+'","'+Label10.Caption+'","'+Label11.Caption+'","'+Label19.Caption+'","'+Label6.Caption+'","'+Label15.Caption+'","'+Label17.Caption+'","'+Label13.Caption+'","'+StringReplace(Label27.Caption,',','.',[rfReplaceAll])+'")';

  if ExecuteSQL(SQLString) then

begin

GetDir(0,Path);

with TIniFile.Create(Path+'\zd.ini') do

try

SQLString:= 'insert into prices values("'+Label21.Caption+'","'+Label23.Caption+'","'+Label25.Caption+'","'+StringReplace(ReadString('cash',Label13.Caption,'no values'),',','.',[rfReplaceAll])+'","'+StringReplace(ReadString('cash','сбор','no values'),',','.',[rfReplaceAll])+'","'+StringReplace(FloatToStr(priceway),',','.',[rfReplaceAll])+'")';

finally

Free;

end;

ExecuteSQL('delete from prices');

if ExecuteSQL(SQLString) then

begin

  // ShowMessage('Успешная регистрация');

FormTicket.Close;

SQLString:= 'select * from tickets, prices where tickets.no_ticket="'+dat+'"';

QReport.SQL.Clear;

QReport.SQL.Add(SQLString);

QReport.Open;

frReport1.LoadFromFile(Path+'\ticket.frf');

frReport1.ShowReport;

with FormPay do

begin

ComboBox1.Text:= '';

ComboBox2.Text:= '';

RzDateTimeEdit1.Text:= '';

  // RzToolButton1Click(sender);

with StringGrid1 do

begin

RowCount:= 2;

ColCount:=55;

for i:=1 to ColCount-1 do

begin

ColWidths[i]:=20;

Cells[i,0]:=IntToStr(i);

end;

end;

end;

end;

   end;

end else ShowMessage('Не введены обязательные данные!');



Поделиться:


Последнее изменение этой страницы: 2019-10-15; просмотров: 191; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.59.187 (0.031 с.)