Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Описание программных модулей и их взаимодействиеСодержание книги
Поиск на нашем сайте Данный программный продукт состоит из 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; просмотров: 274; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.128 (0.007 с.) |