Веб-ориентированная подсистема учета работ на железной дороге

  • Вид работы:
    Курсовая работа (т)
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    3,51 Мб
  • Опубликовано:
    2013-09-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Веб-ориентированная подсистема учета работ на железной дороге

Міністерство освіти і науки України, молоді та спорту України

ДВНЗ «Донецький національний технічний університет»

Факультет КНТ

Кафедра автоматизованих систем управління

"Затверджено"

_______________________

підпис викладача-керівника

“____”_____________20__ р.

Завдання на курсову роботу

з дисципліни "Проектування веб-орієнтованих комп’ютерних систем"

студенту групи ІУС-12м Авджи Ніни Іллівни___________________________

(група, прізвище, ім’я, по-батькові студента у родовому відмінку)

1.       Тема курсової роботи: “Спроектувати веб-орієнтовану підсистему обліку робіт на залізниці.__________________________________________

(назва предметної області)

2.       Вхідні дані:

3.       Перелік питань, що підлягають розробці:

4.       Рекомендовані засоби:

сховище даних: реляційна СУБД MySQL.

засіб розробки програмного додатку PHP, JavaScript

Рекомендована література:

6. Зміст пояснювальної записки: типовий, згідно стандартів .

7. Термін здачі роботи на кафедру:

. Дата захисту роботи за графіком:

Завдання видано 05/09/2012.

Завдання видав_________________________________доц. Мартиненко Т.В.

(підпис, посада, ПІБ викладача-керівника)

Консультант_________________доц. Мартиненко Т.В.,асс. Андрієвська Н.К.

(підпис, посада, ПІБ викладача-консультанта)

Завдання до виконання прийняв_____________________________________.

(підпис, ПІБ студента)

РЕФЕРАТ

Цель курсовой работы - разработать компьютеризированную подсистему «Управления движением поездов».

Задачи курсовой работы:

. Анализ основных факторов (незапланированные «окна» в графике движения поездов, возникающие внештатные ситуации (и, как следствие, изменение пропускной способности), ограничения скорости движения поездов на участках, наличие и возможность подвязки локомотивов и локомотивных бригад), влияющих на организацию поездной и местной работы на станциях, участках, полигонах сети;

. Исследование эксплуатационной работы, обеспечивающей рациональный уровень качества перевозочного процесса;

. Изучение технологии организации перевозок на основе твердого графика движения поездов, системы идентификации подвижного состава, методов планирования и управления.

. Выполнение обзора существующих систем

ПЕРЕЧЕНЬ УСЛОВНЫХ ОБОЗНАЧЕНИЙ И СОКРАЩЕНИЙ

БД - база данных.

КП - компьютеризированная подсистема.

МД - модель данных.

ПО - программное обеспечение.

ВВЕДЕНИЕ

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

Железные дороги Украины из-за простоя и задержек полувагонов на подъездных путях за 6 месяцев 2012 года не смогли задействовать в перевозочном процессе 153,649 тыс. полувагонов и недополучили, таким образом, более 96 млн. грн.

Чтобы избежать этого, возникает задача разработки системы, которая отображала данные о передвижении поездов с учетом загрузки узлов, запланированных и незапланированных окон, возникновением внештатных ситуаций, с учетом ограничения скорости движения поездов на участках, с учетом наличия и возможности подвязки локомотивов и локомотивных бригад, что позволит уменьшить часы простоя поездов.

1. ТЕХНИЧЕСКОЕ ЗАДАНИЕ НА РАЗРАБОТКУ СИСТЕМЫ

1.1 Назначение системы

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

Подсистема должна соответствовать современным требованиям и обеспечивать пользователей необходимыми сервисами (учет поездного положения, учет загруженности станций, данные о поездном положении с учетом информации о структуре и состоянии транспортной сети, с учетом пассажирских, пригородных и грузовых поездов высшего приоритета, с учетом запланированных и незапланированных «окон», получение данных о загруженности станции на заданное время, перегонов и местоположении локомотивных бригад).

1.2 Цели создания системы

Целями создания подсистемы являются:

повышение эффективности использования подвижного состава;

повышение эффективности планирования работы станций, отделений железной дороги;

повышение эффективности планирования человеческих и материальных ресурсов различных служб:

) службы перевозок (загрузки станций и перегонов);

) локомотивной (оптимизация использования локомотивов и локомотивных бригад);

) службы пути и службы автоматики и телемеханики (техническое обслуживание и ремонт пути);

повышение эффективности местной работы;

Достичь поставленных целей может комплексное решение задач:

анализ основных факторов (незапланированные «окна» в графике движения поездов, возникающие внештатные ситуации (и, как следствие, изменение пропускной способности), ограничения скорости движения поездов на участках, наличие и возможность подвязки локомотивов и локомотивных бригад), влияющих на организацию поездной и местной работы на станциях, участках, полигонах сети;

исследование эксплуатационной работы, обеспечивающей рациональный уровень качества перевозочного процесса;

изучение технологии организации перевозок на основе твердого графика движения поездов, системы идентификации подвижного состава, методов планирования и управления.

1.3 Требования к подсистеме

Требования, которые заложены в подсистему:

надёжность, использование СУБД, которые зарекомендовали себя, обеспечивающие высокий уровень надежности;

модульность, подсистема должна обеспечивать индивидуальную конфигурацию системы и разрешать расширять и дополнять функциональные возможности уже работающего решения без его остановки;

широкие функциональные возможности, подсистема предоставляет полный набор функциональных возможностей необходимых современному пользователю;

простота использования;

удобство предоставления информации;

Требования к информационному обеспечению:

обеспечение конфиденциальности секретной информации;

достаточная производительность доступа к данным при выполнении запроса;

правильный отбор первичных сведений и источников информации;

правильная систематизация и классификация информации.

Требования к языкам программирования

Для написания статичных страниц должен быть использован язык разметки html 5, для написания интерактивных элементов клиентской части и динамических страниц должен использоваться скриптовый язык php.

Требования к режиму работы:

Система должна функционировать непрерывно и круглосуточно без вмешательства технических администраторов.

Требования к диагностированию:

Диагностирование системы должно выполняться с целью своевременного предупреждения возникновения аварийных ситуаций.

Требования к защите информации от несанкционированного доступа:

идентификация, проверка подлинности и контроль доступа субъектов;

шифрование конфиденциальной информации;

обеспечение целостности программных средств и обрабатываемой информации;

физическая охрана средств вычислительной техники и носителей информации;

использование сертифицированных средств защиты.

Требования к эргономике и эстетике:

. Минимальное расширение для корректной работы сайта 1024х768.

. Максимальное расширение неограниченно.

. Элементы управления должны быть сгруппированы однотипно-горизонтально или вертикально - на всех страницах.

. На каждой странице должны отображаться логотип и контактная информация.

. Интерфейс модулей должен быть выполнен в едином стиле с интерфейсом ядра системы и должен обеспечивать возможность прозрачного перемещения администратора между модулями системы и использования одинаковых процедур управления и навигационных элементов для выполнения однотипных операций.

Требования к ссылкам:

Все ссылки на сайте должны быть относительными, кроме внешних.

Язык интерфейса: русский.

Требования к размеру страницы:

Все элементы дизайна должны быть сжаты таким образом, чтобы размер страницы не превышал 50кб.

Требования к серверной части:

Системные требования:

процессор - 2 ядра, не менее 512МБ ОЗУ, жесткий диск не менее 250 ГБ.

операционная система: Linux, Windows.

версия Apache: 1.3.41+,

версия MySQL: 5.0+,

версия PHP: 5.1+.

Требования к пользовательской части:

Веб-система должна корректно отображаться в следующих браузерах - Internet Explorer 6.0+, Оpеra 9.2+, Firefox 2.0+, Safari 2.0+, Chrome 2+.

Требования к функциям

. Определение положения поездов

Описание: диспетчер вводит данные о маршруте в форму и отправляет данные контент-менеджеру.

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

Выходные данные: данные в виде массива.

. Анализ движения поездов. Описание: контент-менеджер анализирует данные, полученные от диспетчеров в виде массива сортирует их по станциям хода следования поезда

Входные данные: массив данных.

Выходные данные: графическое отображение маршрута поезда с указанными временными интервалами в декартовой системе координат, где ось Х - ось времени, ось У - ось расстояния с учетом всех неисправностей.

. Ведение информации о расположении поездов. Диспетчер ставит задачи машинистам и трудовым бригадам.

Входные данные: график движения поездов.

Выходные данные: постановка задач, координация работы, отслеживание движения поезда на больших расстояниях.

. Статистика отказа по перегонам.

Входная информация: номер и название перегона, состав, тип отказа.

Выходная информация: круговая диаграмма простоя поездов.

Требования к программному обеспечению

Требования к программному обеспечению серверной части.

Для функционирования ВБС, на сервере должно быть следующее программное обеспечение:

СУБД - MySQL;Server - Denver; - Drupal.

Требования к клиентскому программному обеспечению.

ВБС должна быть доступна для полнофункционального пользования и просмотра с помощью следующих браузеров:2.0 и в их более поздние версии;

ВБС Должна быть дееспособна, то есть информация, размещенная на ней, должна быть доступна, при отключенной в браузере поддержки flash і JavaScript.

Требования к техническому обеспечению

Техническое обеспечение системы должно максимально и наиболее эффективным образом использовать существующие технические средства. В состав системы должны входить следующие технические средства:

процессор с тактовой частотой не менее: 1,4 ГГц или выше;

ГБ или более оперативной памяти (ОЗУ);

жесткий диск 120 Гб или более;

графический адаптер;дисковод;

клавиатура и мышь;

сетевой интерфейс 100 мб/сек или более;

Требования к приему-сдаче проекта.

Сдача-приём работы производится поэтапно, в соответствии с рабочей программой и календарным планом.

Сдача-прием осуществляется комиссией, в состав которой входят руководитель курсовой работы и студент-исполнитель. По результатам приема подписывается пояснительная записка и студент получает зачет.

Все создаваемые в рамках настоящей работы программные продукты передаются руководителю, как в виде готовых модулей, так и в виде исходных кодов, представляемых в электронной форме на стандартном машинном носителе (например, на компакт-диске).

Требования к представлению системы

Администратор, который в нашей системе имеет имя Nina, может управлять сайтом и имеет права и менеджера, и диспетчера.

Менеджер может создавать маршруты и управлять ими, создавать перегоны и управлять ими, создавать рейсы и управлять ими, создавать составы и управлять ими и проводить анализ положения составов и предоставлять статистику отказов поездов.

Диспетчер может создавать задачи и управлять ими, регистрировать отказ технических средств и управлять ими, создавать технические работы и управлять ими.

Есть возможность просмотра списка задач для технических бригад на каждой станции.

Макеты страниц для работы диспетчера разработанной системы приведены ниже.

Рисунок 1.1 - Создание технической работы

Рисунок 1.2 - Просмотр всех технических работ

Рисунок 1.3 - Создание отказа технических средств

Рисунок 1.4 - Просмотр всех отказов технических средств

Рисунок 1.5 - Создание задачи трудовой бригаде

Рисунок 1.6 - Просмотр всех задач

Макеты страниц для работы менеджера разработанной системы приведены ниже.

Рисунок 1.7 - Создание маршрута

Рисунок 1.8 - Просмотр всех маршрутов

Рисунок 1.9 - Создание перегона

Рисунок 1.10 - Просмотр всех перегонов

Рисунок 1.11 - Создание рейса

Рисунок 1.12 - Просмотр рейсов

Рисунок 1.13 - Создание состава

Рисунок 1.14 - Просмотр всех составов

Рисунок 1.15 - Анализ движения состава

Рисунок 1.16 - Статистика отказа по перегонам

Макет страницы для работы рабочей бригады разработанной системы приведен ниже.

Рисунок 1.17 - Просмотр задач, поставленных бригадам

2. РАЗРАБОТКА ИНФОРМАЦИОННОГО ОБЕСПЕЧЕНИЯ

.1 Разработка логической модели данных

Была разработана база данных «railway», которая содержит информацию, необходимую для учета передвижения поездов. База данных содержит 8 таблиц: тЗадача, тЗадержка, тМаршрут, тПерегон, тРейс, тСостав, тТехработа, тПользователи.

Стуктура БД и таблиц приведена ниже в таблицах 2.2-2.11.

БД должна помочь диспетчеру и менеджеру ускорить работу и облегчить ведение учета передвижения поездов и постановки задач рабочим бригадам. Для разработки БД была выбрана СУБД phpMyAdmin, а диаграмма разработана в Microsoft SQL Server 2008 Managment Studio.

В таблице 2.1 представлены сущности логической модели данных, а также их описание.

Таблица 2.1 - Сущности логической МД базы данных «railway»

№ пп

Имя таблицы

Назначение

1

тЗадача

Определяет задачу, которую диспетчер может поставить рабочей бригаде

2

т Задержка

Определяет задержку состава на перегоне, вызванной неисправностью либо другими причинами

3

тМаршрут

Описывает маршрут следования состава

4

тПерегон

Определяет часть железнодорожной линии между смежными раздельными пунктами

5

тРейс

Описывает поезд на заданном маршруте, который отправляется в заданное время

6

тСостав

Определяет новый состав (поезд)

7

тТехработа

Определяет работу, связанную с обслуживанием путей

8

тПользователи

Профили пользователей

Определим типы связей между сущностями и индексы обеспечивающие целостность данных. Описание характера связей в БД и условия целостности приведены в табл. 2.2.

Таблица 2.3 - Связи между сущностями

Родительская таблица

Дочерняя таблица

Тип связи

Имя

Индекс

Имя

Индекс


Состав

PK_состав

Рейс

FK_состав

1:∞

Состав

PK_состав

Задержка

FK_состав

1:∞

Маршрут

PK_маршрут

Рейс

FK_маршрут

1:∞

Перегон

PK_перегон

Маршрут

FK_перегон

1:∞

Перегон

PK_перегон

Техработа

FK_перегон

1:∞

Перегон

UQ_начальная_станция

Пользователи

FK_начальная_станция

1:∞

Пользователи

FK_рабочая бригада

Задача

UQ_рабочая бригада

1:∞

Перегон

UQ_конечная_станция

Пользователи

FK_начальная_станция

1:∞

Перегон

PK_перегон

Задержка

FK_перегон

1:∞


Определим свойства таблиц и полей так, чтобы обеспечить максимальный контроль данных.

Таблица 2.4 - Структура таблицы тЗадача (task)

Заголовок

Название

Тип

1

Тип задачи

field_task_type_id

Целое число

2

Рабочая бригада

field_team_id

Ссылка на пользователя


Таблица 2.5 - Структура таблицы тМаршрут (route)

Заголовок

Название

Тип

1

Перегон

field_stage_id

Ссылка на материал

2

Станция отправления

field_start_station_id

Ссылка на пользователя

3

Станция прибытия

field_end_station_id

Ссылка на пользователя

Таблица 2.6 - Структура таблицы тПерегон (stage)

Заголовок

Название

Тип

1

Начальная станция

field_stage_start_station_id

Ссылка на пользователя

2

Конечная станция

field_stage_end_station_id

Ссылка на пользователя

3

Длина перегона

field_stage_distance

Число с плавающей точкой


Таблица 2.7 - Структура таблицы тРейс (trip)

Заголовок

Название

Тип

1

Маршрут

field_route_id

Ссылка на материал

2

Состав

field_train_id

Ссылка на материал

3

Время отправления

field_departure_time

Дата


Таблица 2.8 - Структура таблицы тТехработа (work)

Заголовок

Название

Тип

1

Перегон

field_stage_id

Ссылка на материал

2

Вид работ

field_work_type_id

Целое число

3

Время работ

field_work_time

Целое число

Заголовок

Название

Тип

1

Тип перевозок

field_transport_type_id

Целое число

2

Количество вагонов

field_wagon_qty

Целое число

3

Время разгона

field_acceleration_time

Целое число

4

Время торможения

field_braking_time

Целое число

5

Скорость

field_speed

Целое число


Таблица 2.10 - Структура таблицы тЗадержка (delay)

Заголовок

Название

Тип

1

Тип отказа

field_failure_type_id

Целое число

2

Перегон

field_stage_id

Ссылка на материал

3

Состав

field_train_id

Ссылка на материал


Таблица 2.11 - Структура таблицы тПользователи (users)

Заголовок

Название

Тип

1

Название станции

Profile_station_name

Textfield

2

Межпоездной интервал

Profile_train_interval

Textfield

3

Технические операции

Profile_technical_operations

Textfield

4

Коммерческие операции

Profile_commercial_operations

Textfield


2.2 Разработка физической модели данных

Физическая модель данных приведена на рисунке. 2.1.

Рисунок 2.1 - Физическая модель данных

3. РАЗРАБОТКА ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

.1 Разработка диаграммы классов

Разработка диаграммы классов для диспетчера.

Таблица 3.1 - Классы системы для диспетчера

Класс

Стереотип

Назначение

index.php

Server Page

Построение главной страницы

index.html

Client Page

Отображение главной страницы

stationinfo.php

Server Page

Построение страницы информации о станциях

stationinfo.html

Client Page

Отображение страницы информации о станциях

stationinfo

Form

Форма для ввода информации о станциях

delaystat.php

Server Page

Построение страницы статистики отказов

delaystat.html

Client Page

Отображение страницы статистики отказов

taskmanage.php

Server Page

Построение страницы управления задачами

taskmanage.html

Client Page

Отображение страницы управления задачами

taskaction.php

Server Page

Построение страницы создания задач

taskcreateedit.html

Client Page

Отображение страницы создания задач

task

Form

Форма для ввода задач

delaymanage.php

Server Page

Построение страницы управления отказами

delaymanage.html

Client Page

Отображение страницы управления отказами

delayaction.php

Server Page

Построение страницы создания отказов

delaycreateedit.html

Client Page

Отображение страницы создания отказов

delay

Form

Форма для ввода информации об отказах

workmanage.php

Server Page

Построение страницы управления техработами

workmanage.html

Client Page

Отображение страницы управления техработами

workaction.php

Server Page

Построение страницы создания техработ

workcreateedit.html

Client Page

Отображение страницы создания техработ

work

Form

Форма для ввода данных о техработах


Диаграмма классов приведена в приложении А.

Разработка диаграммы классов для менеджера.

Таблица 3.2 - Классы системы для менеджера

Класс

Стереотип

Назначение

index.php

Server Page

Построение главной страницы

index.html

Client Page

Отображение главной страницы

stagemanage.php

Server Page

Построение страницы управления перегонами

stagemanage.html

Client Page

Отображение страницы управления перегонами

stageaction.php

Server Page

Построение страницы создания перегона

stagecreateedit.html

Client Page

Отображение страницы создания перегона

stage

Form

Форма для создания перегона

analyzeposition.php

Server Page

Построение страницы анализа положения поездов

analyzeposition.html

Client Page

Отображение страницы анализа положения поездов

trainmanage.php

Server Page

Построение страницы управления составами

trainmanage.html

Client Page

Отображение страницы управления составами

trainaction.php

Server Page

Построение страницы создания составов

traincreateedit.html

Client Page

Отображение страницы создания составов

train

Form

Форма для ввода данных о составе

tripmanage.php

Server Page

Построение страницы управления рейсами

tripmanage.html

Client Page

Отображение страницы управления рейсами

tripaction.php

Server Page

Построение страницы создания рейса

tripcreateedit.html

Client Page

Отображение страницы создания рейса

trip

Form

Форма для ввода данных о рейсе

routeaction.php

Server Page

Построение страницы создания маршрута

routecreateedit.html

Client Page

Отображение страницы создания маршрута

route

Form

Форма для ввода данных о маршруте

routemanage.php

Server Page

Построение страницы управления маршрутами

routemanage.html

Client Page

Отображение страницы управления маршрутами


Диаграмма классов приведена в приложении А.

3.2 Разработка схемы взаимодействия объектов системы

Схема иерархии пользователей приведена на рисунке 3.1

Рисунок 3.1 - Иерархия пользователей

Диаграмма вариантов использования приведена на рисунке 3.2.

Рисунок 3.2 - Диаграмма вариантов использования

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

Рассмотрим наиболее важные модули, которые использовались при проектировании системы:

) сck - система создания контента. Позволяет очень гибко управлять материалами на сайте, создавать различные типы полей контента, а также задавать способ отображения этих полей.

) devel - предоставляет различные инструменты (блоки, страницы и функции) для разработчиков.В частности используется возможность быстрого переключения пользователей.

) dhtml_menu - динамически открывает меню, чтобы уменьшить количество переходов по страницам.

) date - предоставляет поля даты для CCK и Views.

) l10n_update - предоставляет возможность автоматической загрузки и обновления переводов.

) potx - обеспечивает web-интерфейс и API-интерфейс, чтобы извлечь переводимый текст из строк установленных модулей.

) views - обеспечивает гибкое управление для разработчиков тем, какие списки составлять, что в них выводить, как по ним искать, в какой форме выводить. Можно сделать галереи изображений и т.д. В Drupal жёстко определены такие списки как термины таксономии и последние изменения на сайте. Модуль позволяет менять их и составлять новые.

) views_customfield - предоставляет дополнительные типы столбцов для модуля views. В частности используется тип столбца phpcode, который позволяет встраивать во views исполняемый код.

) open_flash_chart_api - предоставляет программный интерфейс к функциям обработки графиков.

) railway - наш модуль, предоставляет функции анализа движения и статистки отказов.

4. ТЕСТИРОВАНИЕ ВЕБ-БАЗИРОВАННОЙ СИСТЕМЫ

Зайдем в систему с правами диспетчера и создадим Задачу для локомотивной бригады. Для этого выберем пункт меню «Задачи» и подменю «Создать задачу», после создания сохраним ее и просмотрим внесенные данные, выбрав пункт подменю «Управлять задачами». Созданные задачи можно изменить либо удалить.

Рисунок 4.1 - Создание задачи

Рисунок 4.2 - Просмотр созданной задачи

Теперь создадим отказ технических средств, выбрав пункт меню «Отказы техсредств» и подпункт меню «Регистрировать отказ техсредств», выбрав пункт «Управлять отказами техсредств».

Рисунок 4.3 - Создание задержки

Рисунок 4.4 - Просмотр созданной задержки

Еще в данном режиме можно задать дополнительные критерии отбора.

Рисунок 4.5 - Вывод информации по заданным критериям

Теперь создадим техническую работу, выбрав пункт меню «Техработы» и подпункт меню «Создать техработу» и просмотрим введенные данные, выбрав пункт «Управлять техработами».

Рисунок 4.6 - Создание технической работы

Рисунок 4.7 - Просмотр созданных технических работ

Рисунок 4.8 - Выбор технической работы по заданным критериям

Зайдем в систему с правами менеджера и создадим маршрут. Для этого выберем пункт меню «Маршруты» и подменю «Создать маршрут», после создания сохраним ее и просмотрим внесенные данные, выбрав пункт подменю «Управлять маршрутами».

Рисунок 4.9 - Создание маршрута

Рисунок 4.10 -Просмотр созданных маршрутов

Зайдем в систему с правами менеджера и создадим перегон. Для этого выберем пункт меню «Перегоны» и подменю «Создать перегон», после создания сохраним ее и просмотрим внесенные данные, выбрав пункт подменю «Управлять перегонами».

Рисунок 4.11 -Создание перегона

Рисунок 4.12 - Просмотр созданных перегонов

Зайдем в систему с правами менеджера и создадим рейс. Для этого выберем пункт меню «Рейсы» и подменю «Создать рейс», после создания сохраним ее и просмотрим внесенные данные, выбрав пункт подменю «Управлять рейсами».

Рисунок 4.13 - Создание рейса

Рисунок 4.14 - Просмотр созданных рейсов

Зайдем в систему с правами менеджера и создадим состав. Для этого выберем пункт меню «Составы» и подменю «Создать состав», после создания сохраним ее и просмотрим внесенные данные, выбрав пункт подменю «Управлять составами».

Рисунок 4.15 - Создание состава

Рисунок 4.16 - Просмотр созданных сайтов

Статистическая функция и анализ движения поездов доступны пользователю с правами менеджера. Функция анализа движения поездов реализована подпунктом меню «Анализ движения поездов» пункта меню «Анализ».

На шаге 1 выбираем маршрут и переходи к шагу 2.

Рисунок 4.17 - Выбор маршрута для анализа положения поездов

На шаге 2 выбираем рейс.

Рисунок 4.18 - Выбор рейса для анализа положения поездов

На шаге 3 строится график, по которому производится анализ движения поездов. При передвижении курсора мышки по графику отображаются комментарии о том эффективное или неэффективное движение у поезда. В комментарии выводится информация о том, какой километр, станция, перегон, скорость, операция и подробности. По оси Х откладывается время, по оси У - положение поезда. График приведен на рисунке 4.19.

Рисунок 4.19 - График анализа положения поезда

При выборе пункта меню «Анализ» подменю «Статистика отказов составов» выводится круговая диаграмма с названиями составов и процентами отказов. Диаграмма приведена на рисунке 4.20.

Рисунок 4.20 - Статистика отказов

диспетчер веб данные система

Еще можно зайти в систему с правами рабочей бригады и просмотреть поставленные задачи.

Рисунок 4.21 - Просмотр поставленных задач

ЗАКЛЮЧЕНИЕ

В данном курсовом проекте была разработана веб-базированная система «Железная дорога Мариуполь - Донецк». Были описаны функции, задачи и цель создания системы. Была разработана схема базы данных для качественного управления движением поездов.

Были автоматизированы функции определения положения поездов, анализ движения поездов, ведение информации о расположении поездов, статистика отказа по перегонам

В ходе разработки ВБС мною были применены знания с курса «веб программирование» и «СУБД», а именно - html, css, javascript, php и sql.

СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

1. Э. Гутманс, С. Баккен, Д. Ретанс, «PHP 5 Профессиональное программирование», Символ, 2006 г., 351 с.

2. Джек Д. Харрингтон <#"650889.files/image042.gif">

Рисунок А.1 - Диаграмма классов для диспетчера

Рисунок А.2 - Диаграмма классов для менеджера

ПРИЛОЖЕНИЕ Б

.info= railway= "Railway"= 6.x.module

<?php_once('routes.railway.inc');_once('position.charts.railway.inc');

// права, которые публикует модульrailway_perm() {

return array('access analyze position', 'access delay statistic');

}

// меню модуляrailway_menu() {

$items['analyze/position'] = array(

'title' => t('Analyze position'),

'page callback' => 'railway_analyze_position',

'access arguments' => array('access analyze position'),

'type' => MENU_CALLBACK,

);

$items['statistic/delays'] = array(

'title' => t('Delays statistic'),

'page callback' => 'railway_delay_statistic',

'access arguments' => array('access delay statistic'),

'type' => MENU_CALLBACK,

);$items;

}

// callback-функция менюrailway_analyze_position(){drupal_get_form('railway_analyze_position_form');

}

// конструктор формы Drupalrailway_analyze_position_form(&$form_state){

$step['number'] = 0; // по умолчанию шаг на котором находится форма =0 (начальное состояние)

if(isset($form_state['storage']['stepno'])){

// если форма не на шаге 0, то сохранить в переменную актуальный шаг

$step['number'] = $form_state['storage']['stepno'];

}

$form = array();($step['number']){0:{

// шаг 0_set_title(t('Analyze position. Step 1'));

$stepname =

// получить список всех маршрутов

$routes = railway_get_routes();

// показать список маршрутов радио-кнопками

$form['railway_routes'] = array(

'#type' => 'radios',

'#title' => t("Routes"),

'#description' => t('Select trips that to show on graph.'),

'#required' => TRUE,

'#options' => railway_nodes_to_array($routes),

);

}break;1:{

// шаг 1_set_title(t('Analyze position. Step 2'));

// показать информацию по выбранному маршруту

$form['railway_routes'] = array(

'#suffix' => '</div>',

'#value' => t('Route %routename.', array('%routename'=>node_load($form_state['storage']['step1']['railway_routes'])->title)),

);

// получить список рейсов для выбранного ранее маршрута

$trips = railway_get_trips($form_state['storage']['step1']['railway_routes']);

// показать список рейсов чекбоксами

$form['railway_trips'] = array(

'#type' => 'checkboxes',

'#title' => t("Trips"),

'#required' => TRUE,

'#options' => railway_nodes_to_array($trips,1),

);

}break;2:{

// шаг 2_set_title(t('Analyze position. Step 3'));

$step['name'] = 'Refresh chart';

// показать информацию по выбранному маршруту

$form['railway_routes'] = array(

'#prefix' => '<div>',

'#suffix' => '</div>',

'#value' => t('Route %routename.', array('%routename'=>node_load($form_state['storage']['step1']['railway_routes'])->title)),

);

// показать информацию по выбранным рейсам($form_state['storage']['step2']['railway_trips'] as $trip){

$tripname.=node_load($trip)->title.', ';

}

$tripname = rtrim($tripname,', ');

$form['railway_trips'] = array(

'#prefix' => '<div>',

'#suffix' => '</div>',

'#value' => t('Trips %tripname.',array('%tripname'=>$tripname)),

);

// показать график

$form['graphic'] = array(

'#prefix' => '<div><br>',

'#value' => railway_get_chart($form_state['storage']['step1']['railway_routes'],$form_state['storage']['step2']['railway_trips']),

'#suffix' => '<br></div>',

);

}break;

}

// показать кнопку "к следующему шагу" если шаг 1 или 2, и кнопку "обновить график" если шаг 3

$form['submit'] =array(

'#type' => 'submit',

'#value' => t('Go to step !stepno',array('!stepno'=>$step['number']+2)),

);($step['number']==2)$form['submit']['#value'] = t('Refresh chart');

// показать кнопку "отмена"

$form['cancel'] = array(

'#value' => l(t('Cancel'), 'analyze/position'),

);$form;

}railway_analyze_position_form_submit($form, &$form_state){(!isset($form_state['storage']['step1'])){

$form_state['storage']['stepno'] = 1;

$form_state['storage']['step1'] = $form_state['values'];

}elseif(!isset($form_state['storage']['step2'])){

$form_state['storage']['stepno'] = 2;

$form_state['storage']['step2'] = $form_state['values'];

}

}railway_delay_statistic(){

// получить все поезда

$trains_list = views_get_view_result('train_list');

// для каждого из поездов получить количество отказов

$total = 0;($trains_list as $train){

$cnt = count(views_get_view_result('delay_list',NULL,$train->nid));

$delays['title'][] = $train->node_title;

$delays['count'][] = $cnt;

$total+=$cnt;

}

// рассчитать процентное соотношение($i=0;$i<count($delays['title']);$i++){

$delays['percent'][$i]= round($delays['count'][$i]*100/$total);

}

$chart = new open_flash_chart_api();

// 60% прозрачности

$chart->pie(60,'#505050','{font-size: 12px; color: #404040;');

// передать массив данных и массив названий

$chart->pie_values( $delays['percent'], $delays['title']);

// цвета графика повторяются циклически

$chart->pie_slice_colours( array('#d01f3c','#356aa0','#C79810') );

$chart->set_tool_tip( '#val#%' );

$chart->title( t('Delays statistic'), '{font-size:18px; color: #d01f3c}' );

$chart->set_width(700);

$chart->set_height(400);

$chart->set_bg_colour('0xDFFFDF');$chart->render();

}.charts.railway.inc

<?phprailway_get_chart($route, $trips){

$granularity = 5; // гранулярность времени

$showevery = 60 / $granularity;

$stages = railway_build_route($route);

$works = railway_get_works($stages);

$chart = new open_flash_chart_api();

// найти минимальное время старта рейса

$min_start_date = NULL;

foreach($trips as $trip){(!empty($trip)){

$tmp = node_load($trip);

$train = node_load($tmp->field_train_id[0]['nid']);

$start = date_make_date($tmp->field_departure_time[0]['value'],$tmp->field_departure_time[0]['timezone_db']);_timezone_set($start, timezone_open($tmp->field_departure_time[0]['timezone']));($min_start_date===NULL){

$min_start_date = $start;

}else if($min_start_date>$start){

$min_start_date = $start;

}

$prepared_trips[] = array(

'train'=>$train,

'start'=>$start,

);

}

}

$min_start_hour = date_part_extract($min_start_date,'hour',DATE_OBJECT);

$min_start_hour_date = clone($min_start_date);

$min_start_hour_date->setTime($min_start_hour,0,0);

$colors = array('#3366FF','#CC33FF','#33FF66','#F5B800','#FF6633','#B88A00');

$current_color = 0;($prepared_trips as $trip){

// кол-во пропущенных шагов, от начала оси Х где не нужно прорисовывать график

$skip = date_difference($min_start_hour_date,$trip['start'],'minutes')/$granularity;

$line = new line(2,$colors[$current_color++]);

$trip_results[]=railway_draw_chart($chart,$line,$trip['train'],$trip['start'],$stages,$works,$granularity,$skip);

}

// вычисление параметров для установки границ координатной сетки

$max_distance = NULL;

$max_end_time = NULL;($trip_results as $tr){($max_end_time===NULL){

$max_end_time = $tr['end'];

}else if($max_end_time<$tr['end']){

$max_end_time = $tr['end'];

}($max_distance===NULL){

$max_distance=$tr['distance'];

}else if($max_distance<$tr['distance']){

$max_distance = $tr['distance'];

}

}_init_chart($chart,t('Analyze position'),700,500,$max_distance,$min_start_hour,$max_end_time,$granularity,$showevery);

return $chart->render();

}

// инициализирует координатную сетку графика

function railway_init_chart($chart,$title,$width,$height,$maxdistance,$fromtime,$totime,$granularity,$showevery){

// заголовки

$chart->set_title($title, '{font-size: 20px;}' );

$chart->set_y_legend( 'Position', 12, '#736AFF' );

$chart->set_x_legend( 'Time', 12, '#736AFF' );

// размер и фон

$chart->set_width($width);

$chart->set_height($height);

$chart->set_bg_colour('0xDFFFDF');

// настройка меток по X-оси

$xlabels = array();

$hours = date_part_extract($totime,'hour',DATE_OBJECT);

$mins = date_part_extract($totime,'minute',DATE_OBJECT);

// для красоты($mins>30)$hours+=2;$hours+=1;

// с интервалом в $granularity минут($i=$fromtime;$i<$hours;$i++){($j=0;$j<60;$j+=$granularity){

$xlabels[]=sprintf('%02d:%02d',$i,$j);

}

}

// установить метки

$chart->set_x_labels($xlabels);

// подписывать каждую $showevery метку по оси Х

$chart->set_x_label_style( 12, '#9933CC', 1, $showevery);

// деления

$chart->set_x_axis_steps($showevery/2);

// настройка меток по Y-оси

// добавить к макс. Y 10%

// привести к ближайшему числу кратному 10

$chart->set_y_max(round(($maxdistance+$maxdistance*0.1)/10)*10);

$chart->y_label_steps(10);

}railway_draw_chart($chart,$line,$train,$start,$stages,$works,$granularity,$skip){

// выполнить смещение по оси Х($i=0;$i<$skip;$i++){

$line->add_data_tip('null','');

}

$status = array(

// статические характеристики поезда

'speed' => 0, // максимальная скорость движения

'speed2' => 0, // максимальная скорость движения / 2

'distance_speed' => 0, // расстояние на которое переместиться поезд за 1 интервал измерения при макс.скорости движения

'distance_speed2'=> 0, // расстояние на которое переместиться поезд за 1 интервал измерения при торморжении/ускорении

'time_accelerating' => 0, // время, необходимое на разгон

'distance_accelerating' => 0, // расстояние необходимое поезду для разгона

'distance_braking' => 0, // расстояние необходимое поезду для торможения

'time_braking' => 0, // время, необходимое на торморжение

'trip_start' => 0, // время старта поезда

// динамические характеристики поезда

'current_stage' => 0, // текущий перегон

'current_station' => 0, // текущая станция либо NULL

'local_time' => 0, // локальное время задачи

'total_time' => 0, // общее время движения

'local_distance' => 0, // локальная дистанция

'total_distance' => 0, // общая дистанция

'current_speed' =>0, // текущая скорость движения

'cdist_spd'=> 0, // distance with current speed

'st' => 'technical', // статус, который опеределяет текущую операцию для поезда

'operation_msg' => 'Maintenance', // текст, который выводится в поле Операция

'details_msg' => '', // текст, который выводится в поле Детали

'done' => false,

);

// инициализация статических характеристик

$status['speed']= $train->field_speed[0]['value'];

$status['speed2']= $train->field_speed[0]['value']/2;

$status['distance_speed'] = $train->field_speed[0]['value']*$granularity/60;

$status['distance_speed2']= $train->field_speed[0]['value']*$granularity/120;

$status['distance_accelerating'] = $status['distance_speed2']*$train->field_acceleration_time[0]['value'];

$status['time_accelerating'] = $train->field_acceleration_time[0]['value'];

$status['distance_braking'] = $status['distance_speed2']*$train->field_braking_time[0]['value'];

$status['time_braking'] = $train->field_braking_time[0]['value'];

$status['trip_start'] = $start;(true){(railway_change_status($status,$stages,$works,$train)===false);($status['done']===true)break;

$line->add_data_tip($status['total_distance'],('Stage: !current_stage<br>Station: !current_station<br>Speed: !speed km/h<br>Operation: !op<br>Details: !det',(

'!current_stage'=>$stages[$status['current_stage']]['title'],

'!current_station'=>($status['current_station']===NULL)?'-':$stages[$status['current_stage']]['station'][$status['current_station']]['title'],

'!speed'=>$status['current_speed'],

'!op'=>$status['operation_msg'],

'!det'=>(empty($status['details_msg']))?'-':$status['details_msg'],

)

)

);

$status['local_time']+=$granularity;

$status['total_time']+=$granularity;

}

$chart->data_sets[] = $line;

$chart->set_tool_tip('#x_label# [#val# km]<br>#tip#');

$end = clone($start);

$end->add(new DateInterval('PT'.$status['total_time'].'M'));array('distance'=>$status['total_distance'],'end'=>$end);

}railway_change_status(&$status,$stages,$works,$train){($status['st']){'technical':{

// техническое обслуживание($status['local_time']>$stages[$status['current_stage']]['station'][$status['current_station']]['technical']){

// техническое обслуживание заверешено. перейти к коммерческим операциям

// $status['current_stage'] = 0;

// $status['current_station'] = 0;

$status['local_time'] = 0;

$status['local_distance'] = 0;

//$status['total_distance'] = 0;

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

$status['st'] = 'commercial';

$status['operation_msg'] = t('Commercial operation');

$status['details_msg'] = '';false;

}

}break;'commercial':{

// коммерческие операции($status['local_time']>$stages[$status['current_stage']]['station'][$status['current_station']]['commercial']){

// коммерческие операции заверешены. перейти к техработам

// $status['current_stage'] = 0;

// $status['current_station'] = 0;

$status['local_time'] = 0;

$status['local_distance'] = 0;

//$status['total_distance'] = 0;

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

$status['st'] = 'work';

$status['operation_msg'] = t('Techwork');

$status['details_msg'] = '';false;

}

}break;'work':{

// технические работы

// это последняя станция, остановить моделирование

if($status['current_station']==1){

$status['done'] = true;

}

// если тех.работ не было

// $status['current_stage'] = 0;

//$status['current_station'] = NULL;

$status['local_time'] = 0;

$status['local_distance'] = 0;

//$status['total_distance'] = 0;

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

// если суммарное расстояние, необходимое для разгона и торможения больше длины прогона, то вариант движения 2

if(($status['distance_accelerating']+$status['distance_braking'])>$stages[$status['current_stage']]['distance']){

$status['current_speed'] = $status['speed2'];

$status['cdist_spd'] = $status['distance_speed2'];

$status['st'] = 'moving_inefficiently';

$status['operation_msg'] = t('Moving');

$status['details_msg'] = t('Inefficiently');

$time_to_ride = $stages[$status['current_stage']]['distance']/$status['current_speed']*60;

}else{

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

$status['st'] = 'moving_effectively';

$status['operation_msg'] = t('Moving');

$status['details_msg'] = '';

$time_to_ride = $status['time_accelerating']+$status['time_braking']+($stages[$status['current_stage']]['distance']-$status['distance_accelerating']-$status['distance_braking'])/$status['speed']*60;

}

// проверить ведутся ли в заданное время тех.работы на этом участке

if(in_array($stages[$status['current_stage']]['id'],array_keys($works))===true){

$date_work_start = clone($works[$stages[$status['current_stage']]['id']]['created']);

$date_train_start = clone($status['trip_start']);

$date_train_start->add(new DateInterval('PT'.$status['total_time'].'M'));

$date_work_end = clone($date_work_start);

$date_work_end->add(new DateInterval('PT'.$works[$stages[$status['current_stage']]['id']]['duration'].'M'));

$date_train_end = clone($date_train_start);

$date_train_end->add(new DateInterval('PT'.$time_to_ride.'M'));(($date_work_start<$date_train_start and $date_train_start<$date_work_end)or

($date_work_start<$date_train_end and $date_train_end<$date_work_end)){

// $status['current_stage'] = 0;

//$status['current_station'] = NULL;

$status['local_time'] = 0;

$status['local_distance'] = 0;

//$status['total_distance'] = 0;

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

$status['st'] = 'work';

$status['operation_msg']=t('techwork !wrk',array('!wrk'=>$works[$stages[$status['current_stage']]['id']]['type']));

$status['details_msg'] = $works[$stages[$status['current_stage']]['id']]['title'];true;

}

}false;

}break;

// поезд полностью успевает разогнаться, двигается с макс.скоростью, затем тормозит.

case 'moving_effectively':{

$status['current_station'] = NULL;($status['local_distance']<$status['distance_accelerating']){

// ускорение. считаем, что данное время поезд двигался со скоростью вдвое меньшей обычной

$status['cdist_spd']= $status['distance_speed2'];

$status['current_speed'] = $status['speed2'];

$status['operation_msg'] = t('Moving');

$status['details_msg'] = t('Accelerating');

}else if($status['local_distance']>$stages[$status['current_stage']]['distance']-$status['distance_braking']){

// торморжение. считаем, что данное время поезд двигался со скоростью вдвое меньшей обычной

$status['cdist_spd']= $status['distance_speed2'];

$status['current_speed'] = $status['speed2'];

$status['operation_msg'] = t('Moving');

$status['details_msg'] = t('Braking');

}else{

// движение с максимальной скоростью

$status['cdist_spd']= $status['distance_speed'];

$status['current_speed'] = $status['speed'];

$status['operation_msg'] = t('Moving');

$status['details_msg'] = t('Top speed');

}

$status['local_distance']+= $status['cdist_spd'];($status['local_distance']>$stages[$status['current_stage']]['distance']){

// движение заверешено. перейти к техническому обслуживанию

$status['total_distance']+=$stages[$status['current_stage']]['distance']-$status['local_distance']+$status['cdist_spd'];

// если это последний перегон в рейсе, то переключиться на конечную станцию

if($status['current_stage']==(count($stages)-1)){

$status['current_station'] = 1;

}else{

$status['current_stage']++;

$status['current_station'] = 0;

}

$status['local_time'] = 0;

$status['local_distance'] = 0;

$status['current_speed'] = 0;

$status['cdist_spd'] = 0;

$status['st'] = 'technical';

$status['operation_msg'] = t('Maintenance');

$status['details_msg'] = '';false;

}

$status['total_distance']+=$status['cdist_spd'];

}break;

// поезд не успевает полностью разогнаться, достигает определенной точки прогона и начинает торморжение

// не входя в фазу движения с максимальной скоростью

case 'moving_inefficiently':{

$status['current_station'] = NULL;

$status['local_distance']+= $status['cdist_spd'];($status['local_distance']>$stages[$status['current_stage']]['distance']){

// движение заверешено. перейти к техническому обслуживанию

$status['total_distance']+=$stages[$status['current_stage']]['distance']-$status['local_distance']+$status['cdist_spd'];

// если это последний перегон в рейсе, то переключиться на конечную станцию

if($status['current_stage']==(count($stages)-1)){

$status['current_station'] = 1;

}else{

$status['current_stage']++;

$status['current_station'] = 0;

}

$status['local_time'] = 0;

$status['local_distance'] = 0;

$status['current_speed'] = 0;

$status['st'] = 'technical';

$status['operation_msg'] = t('Maintenance');

$status['details_msg'] = '';false;

}

$status['total_distance']+=$status['cdist_spd'];

}break;

}true;

}.railway.inc

<?phprailway_nodes_to_array($nodes){

$result = array();($nodes as $node){

$result[$node->nid]=$node->node_title;

}$result;

}

// возвращает список маршрутовrailway_get_routes(){

$route_list = views_get_view_result('route_list');

return $route_list;

}

// возвращает список рейсов для маршрута

function railway_get_trips($route){

$route_id = 0;(is_object($route)){

$route_id = $route->nid;

}else if(is_numeric($route)){

$route_id = $route;

}else {NULL;

}

$trip_list = views_get_view_result('trip_list',NULL,$route_id);

return $trip_list;

}

// возвращает массив перегонов и станций, упорядоченных по маршруту

function railway_build_route($route_id){

$route = node_load($route_id);

// загрузить все перегоны маршрута (без сортировки)

$unsorted_stages = array();($route->field_stage_id as $stage){

$unsorted_stages[$stage['nid']]=railway_build_stage($stage['nid']);

}

// выполнить сортировку перегонов

$search_for = $route->field_stage_start_station_id[0]['uid'];

$sorted_stages = array();

$found = 0;(($found=railway_find_stage_by_station($unsorted_stages,$search_for))!==FALSE){

// если вторая станция идет в массиве первой, то поменять станции местами

$first_station = reset($unsorted_stages[$found]['station']);($first_station['id']!=$search_for){

$unsorted_stages[$found]['station'] = array_reverse($unsorted_stages[$found]['station'],TRUE);

}

// запомнить вторую (конечную для этого перегона) станцию для дальнейшего поиска

$end_station = end($unsorted_stages[$found]['station']);

$search_for = $end_station['id'];

// скопировать перегон в новый массив

$sorted_stages[$found] = $unsorted_stages[$found];

// удалить перегон из несортированных элементов($unsorted_stages[$found]);

}

// переиндексировать массив($sorted_stages as &$s)$s['station'] = array_values($s['station']);

$sorted_stages = array_values($sorted_stages);

return $sorted_stages;

}

// возвращает массив перегонов, содержащий необходимую информацию

function railway_build_stage($stage_id){

$stage = node_load($stage_id);array(

'id' => $stage->nid,

'title' => $stage->title,

'distance' => $stage->field_stage_distance[0]['value'],

'station' => array(

$stage->field_stage_start_station_id[0]['uid'] => railway_build_station($stage->field_stage_start_station_id[0]['uid']),

$stage->field_stage_end_station_id[0]['uid'] => railway_build_station($stage->field_stage_end_station_id[0]['uid']),

)

);

}

// возвращает массив станций, содержащий необходимую информацию

function railway_build_station($station_id){

$station = user_load($station_id);array(

'id' => $station->uid,

'title' => $station->profile_station_name,

'interval' => $station->profile_train_interval,

'reception' => $station->profile_reception_interval,

'send' => $station->profile_send_interval,

'technical' => $station->profile_technical_operations,

'commercial' => $station->profile_commercial_operations,

);

}

// возвращает ид перегона, содержащего заданную станцию

function railway_find_stage_by_station($stages, $station_id){($stages as $stage_key=>$stage){(array_key_exists($station_id,$stage['station'])){$stage_key;

}

}FALSE;

}

// возвращает массив сожержащий данные о технических работах для заданного массива перегонов

function railway_get_works($stages){

$works = array();($stages as $stage){

$works = views_get_view_result('work_list',NULL,$stage['id']);(empty($works))continue;

($works as $work){(!empty($work)){($work->node_data_field_work_type_id_field_work_type_id_value){'1':{$work_list[$stage['id']]['type'] = t('Maintenance');}break;'2':{$work_list[$stage['id']]['type'] = t('Path repair');}break;'3':{$work_list[$stage['id']]['type'] = t('Cleaning area');}break;

}($work->node_data_field_work_type_id_field_work_time_value){'1':{$work_list[$stage['id']]['duration'] = 30;}break;'2':{$work_list[$stage['id']]['duration'] = 60;}break;'3':{$work_list[$stage['id']]['duration'] = 90;}break;'4':{$work_list[$stage['id']]['duration'] = 120;}break;

}

$work_list[$stage['id']]['created'] = date_make_date(intval($work->node_created),NULL,DATE_UNIX);

$work_list[$stage['id']]['title'] = $work->node_title;

}

}

}$work_list;

}

Похожие работы на - Веб-ориентированная подсистема учета работ на железной дороге

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!