Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 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; просмотров: 191; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.59.187 (0.031 с.) |