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('Не введены обязательные данные!');
... отношение к труду, повышение общеобразовательного и технического уровня железнодорожников, совершенствование организации и управления всеми звеньями транспортного хозяйства. [3] 3. Грузовые перевозки и их планирование 3.1 Планирование грузовых перевозок Повышение эффективности и качества работы железных дорог в большой мере зависит от уровня планирования и организации их ...
... 1 пункта 16 Правил положение о том, что поездка пассажиров должна начинаться от станции, указанной в проездном документе (а не ранее), поскольку условие о пункте отправления является одним из существенных условий договора перевозки пассажиров железнодорожным транспортом общего пользования, без которого этот договор не может считаться заключенным. Такой вывод следует, в частности, из статьи 2 ...
... в накладной, ее дубликате и дорожной ведомости, прием отдельно за перевозку по дорогам страны отправления и по транзитным дорогам. 4. Ответственность железных дорог при международных железнодорожных перевозках. СМГС предоставляет грузовладельцу право изменить условия заключенного договора, но такое изменение может быть произведено только один раз отправителем и одни раз получателем. ...
... программ в единый информационный и программный продукт, а также всесторонним применением современных приемов манипулирования такими продуктами с использованием средств вычислительной техники. К середине 90-ых годов в РФ в области фактографических баз данных в науке сложилась ситуация, характеризующая следующими особенностями: 1. Существует значительное количество практически не связанных друг с ...
0 комментариев