46892 (607977), страница 2

Файл №607977 46892 (База данных "Пассажирские железнодорожные перевозки") 2 страница46892 (607977) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

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;

Характеристики

Тип файла
Документ
Размер
23,97 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7028
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее