3 Описание программного обеспечения

 

3.1 Выбор и обоснование инструментальных средств

Данная система создана с использованием технологии «файл-сервер». Разработанная база данных является локальной. Приложение написано с помощью средств разработки Delphi 7 и осуществляет многопользовательский режим доступа.

Delphi 7 – мощная система визуального объектно-ориентированного программмирования. С ее помощью даже начинающие программисты могут создавать оконные интерфейсы, удовлетворяющие стандартам Windows, причем очень быстро. Спектр отраслей, в которых можно применять Delphi, достаточно широк: инженерные, офисные, торговые и др. К тому же Delphi является одним из самых распространенных средств создания приложений баз данных. Простота языка и эффективность (небольшие размеры и высокая производительность) создаваемых с его помощью программ сделали Delphi незаменимым средством разработки приложений для доступа к базам данных. Delphi используется для генерирования и вывода на печать сложных отчетов баз данных, а также предоставляет возможность связываться из своего приложения с такими продуктами Microsoft, как Word, Excel и другие, используя их возможности в создании мощных систем помощи.

Занимает 16 Мб дискового пространства. Оперативная память должна быть 64 Мб минимум.

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

 

Данный программный продукт состоит из 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('Не введены обязательные данные!');

 


Информация о работе «База данных "Пассажирские железнодорожные перевозки"»
Раздел: Информатика, программирование
Количество знаков с пробелами: 25084
Количество таблиц: 0
Количество изображений: 12

Похожие работы

Скачать
43642
0
0

... отношение к труду, повышение общеобразовательного и технического уровня железнодорожников, совершенствование организации и управления всеми звеньями транспортного хозяйства. [3] 3. Грузовые перевозки и их планирование   3.1 Планирование грузовых перевозок   Повышение эффективности и качества работы железных дорог в большой мере зависит от уровня планирования и организации их ...

Скачать
145068
0
0

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

Скачать
56283
0
0

... в накладной, ее дубликате и дорожной ведомости, прием отдельно за перевозку по дорогам страны отправления и по транзитным дорогам. 4. Ответственность железных дорог при международных железнодорожных перевозках. СМГС предоставляет грузовладельцу право изменить условия заключенного договора, но такое изменение может быть произведено только один раз отправителем и одни раз получателем. ...

Скачать
54157
0
0

... программ в единый информационный и программный продукт, а также всесторонним применением современных приемов манипулирования такими продуктами с использованием средств вычислительной техники. К середине 90-ых годов в РФ в области фактографических баз данных в науке сложилась ситуация, характеризующая следующими особенностями: 1. Существует значительное количество практически не связанных друг с ...

0 комментариев


Наверх