Розробка проекту мобільного робочого місця "Нарядчик поїзних бригад"

 

ЗМІСТ


ВСТУП

РОЗДІЛ 1. ПРОБЛЕМИ АВТОМАТИЗАЦІЇ РОБОТИ НАРЯДЧИКА ПАСАЖИРСЬКОЇ ВАГОННОЇ ДІЛЬНИЦІ

1.1. Загальна характеристика задачі автоматизації роботи нарядчика

1.2. Огляд існуючих рішень проблеми автоматизації роботи нарядчика

РОЗДІЛ 2. КОНЦЕПТУАЛЬНЕ ПРОЕКТУВАННЯ СТРУКТУРИ МОБІЛЬНОГО РОБОЧОГО МІСЦЯ НАРЯДЧИКА ТА ХАРАКТЕРИСТИКА ВИКОРИСТАНИХ ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ

2.1 Концептуальна модель мобільного робочого місця «Нарядчик поїзних бригад»

2.2 Характеристика використаних інструментальних засобів

РОЗДІЛ 3. ЕКСПЕРИМЕНТАЛЬНА РОЗРОБКА МОБІЛЬНОГО РОБОЧОГО МІСЦЯ «НАРЯДЧИК ПОЇЗНИХ БРИГАД»

3.1 Загальна характеристика мобільного робочого місця

3.2 Програмна реалізація структурних елементів

3.3 Практичні рекомендації до використання

ВИСНОВКИ

ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ

ДОДАТКИ


ВСТУП


Залізничний транспорт - одна з найбільших галузей народного господарства України. За допомогою нього здійснюється більше половини всіх перевезень нашої країни. Необхідність мати достатні резерви технічних засобів, рухомого складу, пропускної здатності, для своєчасного та ефективного маневрування ними, при швидкій зміні ситуацій в експлуатаційній обстановці, вимагає високої організації перевезень.

Таким чином, для забезпечення оптимальної та безпомилкової роботи залізничного транспорту на такому великому полігоні мережі, необхідно проводити гнучку і якісну політику, від оперативного ведення якої безпосередньо залежить якість роботи транспорту в цілому. Досягти своєчасного контролю і управління таким величезним комплексом взаємопов'язаних підприємств неможливо, маючи тільки професійні якості керівників. Складні і різноманітні завдання не під силу будь-якому керівникові. Виходом з цієї проблеми є перенесення трудомістких, об'ємних і щодня повторюваних завдань на ЕОМ.

Наприкінці 50-х років для вирішення завдань експлуатації залізничного транспорту почали використовувати ЕОМ. Поступово концепція використання електронних машин і математичних методів, а також накопичений досвід і технічний потенціал, призвели до створення комплексної автоматизованої системи управління залізничним транспортом.

Головними цілями були вдосконалення якості управління роботою галузі і, насамперед, її експлуатаційна діяльність, оптимізація всіх видів планування та оперативного керівництва роботою виробничих ланок, найкраще використання основних фондів, матеріальних і трудових ресурсів, освоєння зростаючого обсягу перевезень, поліпшення техніко-економічних показників роботи галузі.

Автоматизоване робоче місце (АРМ) сприяє виконанню найважливішого соціально-економічного завдання з підвищення продуктивності праці перевізного процесу, виключенню втрат часу, трудових і матеріальних ресурсів, зокрема, простоїв поїздів, вагонів і локомотивів.

На жаль, автоматизована система управління для нарядчиків, яку зараз використовують на українській залізниці працює лише у локальному режимі. Мобільний доступ міг би значно спростити можливість перегляду всіх необхідних даних будь-якому співробітникові.

Тому метою роботи є розробка проекту мобільного робочого місця «Нарядчик поїзних бригад».

Обєкт дослідження - планування та облік робіт поїзних бригад нарядчиком пасажирської вагонної дільниці.

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

Завдання роботи полягають у наступному:

. вивчити зміст проблеми автоматизації робочого місця нарядчика пасажирської вагонної дільниці;

. проаналізувати існуючі рішення проблеми автоматизації робочого місця нарядчика;

. здійснити концептуальне проектування структури мобільного робочого місця «Нарядчик поїзних бригад»;

. описати функціональні характеристики інструментальних засобів, обраних для розробки мобільного робочого місця «Нарядчик поїзних бригад»;

. реалізувати окремі функції мобільного робочого місця «Нарядчик поїзних бригад».


РОЗДІЛ 1. ПРОБЛЕМИ АВТОМАТИЗАЦІЇ РОБОТИ НАРЯДЧИКА ПАСАЖИРСЬКОЇ ВАГОННОЇ ДІЛЬНИЦІ


1.1 Загальна характеристика задачі автоматизації роботи нарядчика


Нарядник поїзних бригад пасажирської вагонної дільниці забезпечує роботу бригад згідно з нарядом-графіком, добовим планом і маршрутними листами; заповнює, видає і приймає маршрути поїзних бригад; веде облік та регулює тривалість їх роботи і відпочинку; бере участь у розробленні маршрутних листів і графіків роботи бригад; складає звіт роботи бригади; забезпечує своєчасний вихід на роботу працівників бригад, а також необхідний резерв для виконання господарських і додаткових робіт; контролює проходження робітниками бригад планового медичного огляду; оперативно керує роботою бригад відповідно до встановленого плану; у випадку зміни графіка руху поїздів приймає рішення щодо організації роботи в умовах, що змінюються; бере участь в роботі з аналізу і оцінки діяльності бригад; забезпечує надання відпустки і вихідних днів працівникам бригади згідно з графіками; веде встановлену документацію, забезпечує подання встановленої звітності.

Обовязки нарядчика поїзних бригад (витяг із посадової інструкції):

. Здійснювати безпосереднє керівництво і контроль за правильним використанням робочого часу поїзних працівників, за своєчасним проходженням медичних комісій поїзними працівниками;

. Формувати поїзну бригаду спільно з начальником поїзда з дотриманням норм режиму праці і відпочинку, виробляти розстановку у відповідності зі схемою формування поїзда і урахуванням виконання наказів з обов'язковим підписом нарядчика та начальника поїзда у книзі формування бригад. У тій же книзі провідники вагонів розписуються за отримання маршрутного листа;

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

. Слідкувати за записами в особових картках провідників вагонів, начальників поїздів. При наявності запису про порушення трудової і технологічної дисципліни, маршрутний лист провідникам не видається. Провідник направляється до керівництва резерву провідників для проведення розбору по допущеному порушенню. Якщо розбір з тієї чи іншої причини відкладається, то спільно з начальником резерву провідників нарядчик вирішує питання про надання роботи до моменту розбору;

. Контролювати своєчасний вихід на роботу провідників вагонів;

. Записувати в книги формування поїзних бригад всі відправлені поїзні бригади, окремі причіпні вагони із зазначенням номера поїзда, номера вагона, дати відправлення, ПІБ, табельні номери всіх провідників вагонів і начальників поїздів. Особистий розпис провідника за отримання маршрутного листа в даній книзі обов'язковий;

. Записувати в книги формування поїзних бригад всі бригади, що прибули,окремі причіпні вагони із зазначенням номера поїзда, номера вагона, дати прибуття, ПІБ всіх провідників, дати виходу на роботу та особистої розпису за вихід;

. Складати акт спільно зі старшим нарядчиком і інструктором поїзних бригад про ухід провідника з роботи, де обов'язково вказати дату, час, суть справи (якщо провідник вагону не розписані в книзі за наступний вихід на роботу). Акт повинен підписуватися з повним зазначенням прізвищ і посад і передаватися начальнику резерву провідників. По виходу провідника вагону на роботу, пред'явити йому акт про ухід додому за власним бажанням, зажадати пояснення і з усіма документами відвести до начальника резерву провідників для розбору;

. Оформляти листки непрацездатності поїзних працівників;

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

. Попередити провідника вагону про його своєчасне проходження медичної комісії за місяць з обов'язковим його розписом про ознайомлення.

Певний час автоматизація роботи нарядчика Криворізької пасажирської вагонної дільниці «ЛВЧ-2» здійснюється за допомогою інструментарію автоматизованих систем управління експлуатацією, ремонтом пасажирських вагонів та обслуговуванням пасажирів у поїздах (АСУ ЕРПВ) та «Резерв провідників» (див. пункт 1.2).


1.2 Огляд існуючих рішень проблеми автоматизації роботи нарядчика


У пусковому комплексі АСУ ЕРПВ автоматизовано понад 300 функцій управління, основними серед яких є такі:

облік наявності і конструктивного устрою пасажирських вагонів;

облік знаходження і використання вагонів;

облік пробігу пасажирських вагонів;

облік ремонту і технічного обслуговування вагонів;

планування ремонту вагонів;

контроль парку пасажирських вагонів. Формування і передача інформації про парк пасажирських вагонів на рівень інтеграції даних;

контроль технічного стану пасажирських вагонів в експлуатації;

контроль і планування надходження коштів від надання послуг у пасажирських поїздах;

облік наявності, ремонту і пробігу колісних пар;

контроль парку пасажирських вагонів. Рівень інтеграції даних;

контроль парку пасажирських вагонів. Графічний інтерфейс;

контроль і планування надходження коштів від надання послуг у пасажирських поїздах Рівень інтеграції даних;

контроль та планування роботи поїзних бригад;

облік і планування ремонту устаткування та обєктів підвищеної небезпеки;

контроль роботи вагонів - ресторанів, торгівельної діяльності у поїздах та підрозділах громадського харчування;

контроль забезпечення матеріалами, паливом та запасними частинами;

облік і планування потреби пасажирських вагонів у вугіллі в залежності від прогнозу погоди.

Основним недоліком АСУ ЕРПВ є не оснащеність графічним інтерфейсом та локальний доступ.

Проблема відсутності графічного інтерфейсу була вирішена при розробці АСУ «Резерв провідників» (див. рис. 1.1).


Рис. 1.1. Вікно перегляду електронних маршрутних листів (АСУ «Резерв провідників»)


Проте і дана програма працює лише у локальній мережі з виділеним сервером, через що доступ мають не всі працівники. Тому значним недоліком є немобільність.

В наш час майже всі мають доступ до мережі Internet. Зараз мобільність - це не просто нові технології, це абсолютно новий спосіб життя, нові можливості для роботи. Мобільність відкриває можливість працювати і жити в будь-якому місці, у будь-який час. Маючи інформативний сайт, ви дозволяєте своїм клієнтам і партнерам істотно економити час, не витрачаючи його на телефонні переговори і листування.

Саме тому метою даної роботи є розробка мобільного автоматизованого робочого місця нарядчика пасажирської вагонної дільниці.

У першому розділі було вивчено зміст проблеми автоматизації робочого місця нарядчика та проаналізовані існуючі рішення проблеми автоматизації робочого місця нарядчика.

На сучасному рівні розвитку інформаційних технологій використання компютера для збереження будь-яких видів інформації стає єдиним засобом, що надає широкі можливості керування інформацією. Важливу роль у процесі отримання інформації відіграє мережа Інтернет. Сьогодні в Україні послугами Інтернет з різною періодичністю користуються близько 9 млн. жителів України.сьогодні це найбільш розвинена у світі інформаційна система, за допомогою якої здійснюється комунікація між мільйонами користувачами. За допомогою мережі Internet забезпечується доступ до більш як п'яти мільйонів інформаційних Web-сайтів.

З самого початку розвитку Internet, а особливо з появою Web-технологій, мережа орієнтована на інформаційне забезпечення своїх користувачів.

На сьогодні представлення організацій у мережі Internet є необхідним для покращення ефективності роботи організації, обміну інформацією між усіма учасниками ринкового процесу та способом заявити про свою діяльність великому загалу користувачів глобальної мережі.

Саме тому було обрано використання Web-технологій для створення мобільного робочого місця «Нарядчик поїзних бригад»


РОЗДІЛ 2. КОНЦЕПТУАЛЬНЕ ПРОЕКТУВАННЯ СТРУКТУРИ МОБІЛЬНОГО РОБОЧОГО МІСЦЯ НАРЯДЧИКА ТА ХАРАКТЕРИСТИКА ВИКОРИСТАНИХ ІНСТРУМЕНТАЛЬНИХ ЗАСОБІВ


2.1 Концептуальна модель мобільного робочого місця «Нарядчик поїзних бригад»


Під мобільним робочим місцем (МРМ) спеціаліста розуміють автоматизоване робоче місце (АРМ), т.б. сукупність програмно-технічних засобів, використання яких надає можливість автоматизувати основні функції того чи іншого користувача, із забезпеченням мобільного доступу.

Для уточнення функціональності інформаційної системи, виявлення схеми функціональної структури, визначення підсистем (модулів), які входять до її складу, і вивчення динаміки роботи системи в цілому необхідно побудувати функціональну модель.

Функціональна модель описує обчислення в системі. Вона показує, яким чином вихідні дані обчислюються за вхідним даним, не розглядаючи порядок чи спосіб реалізації обчислень. Функціональна модель складається з набору діаграм потоків даних, що показують потоки значень від зовнішніх входів через операції і внутрішні сховища даних до зовнішніх виходів.

Діаграми потоків даних є основним засобом моделювання функціональних вимог системи при проектуванні. З їхньою допомогою ці вимоги розбиваються на функціональні компоненти (процеси) і представляються у виді мережі, зв'язаної потоками даних. Головна мета таких засобів - продемонструвати, як кожен процес перетворить свої вхідні дані у вихідні, а також, виявити відносини між цими процесами. Далі при побудові діаграми потоків даних буде використовуватися нотація Гейна-Сарсона (Gane-Sarson). Джерела інформації (зовнішні сутності) породжують інформаційні потоки (потоки даних), що переносять інформацію до підсистем чи до процесів. Ті у свою чергу перетворюють інформацію і породжують нові потоки, що переносять інформацію до інших процесів чи підсистемам, накопичувачів даних чи зовнішніх сутностей - споживачів інформації. Таким чином, основними компонентами діаграм потоків даних є:

зовнішні сутності;

процеси;

накопичувачі даних;

потоки даних.

Процес являє собою перетворення вхідних потоків даних у вихідні відповідно до певного алгоритму. Фізично процес може бути реалізований різними способами.

Для системи, що розробляється, основні процеси на діаграмі потоків даних пов'язані з ідентифікацією провідників, нарядчиків, а також із задачами адміністратора системи: ведення бази даних і налагодження системи для коректної ідентифікації.

Накопичувач даних являє собою абстрактний пристрій для збереження інформації, яку можна в будь-який момент помістити в накопичувач і через якийсь час знову взяти, причому способи запису і зчитування можуть бути будь-якими.

Накопичувачем даних у даній системі є база даних системи (зберігає всю інформацію про користувачів, графіки, напрями руху та іншу інформацію).

Потік даних визначає інформацію, яка передається через деяке з'єднання від джерела до приймача. Реальний потік даних може бути інформацією, яка передається по кабелю між двома пристроями, листами, що пересилаються поштою, магнітними стрічками чи дискетами, які переносять з одного комп'ютера на інший і таке інше.

Важливу специфічну роль у моделі грає спеціальний вид діаграми потоків даних - контекстна діаграма, що моделює систему найбільш загальним чином.

Контекстна діаграма відображає інтерфейс системи з зовнішнім світом, а саме, інформаційні потоки між системою і зовнішніми сутностями, з якими вона повинна бути зв'язана. Контекстна діаграма мобільного робочого місця нарядчика пасажирської вагонної дільниці представлена на рисунку 2.1.


Рис. 2.1. Контекстна діаграма потоків мобільного робочого місця «Нарядчик поїзних бригад»


Проведемо декомпозицію потоків даних, показаних на рисунку 2.1


Таблиця 2.1 Декомпозиція потоків даних для контекстної діаграми потоків даних

Потоки даних на контекстній діаграміПотоки на діаграмі першого рівняІнформація від нарядчикаІнформація для ідентифікації Інформація про маршрутні листи Інформація про бригади Інформація про графіки Інформація про добовий розрахунок Інформація про табелі провідниківІнформація для нарядникаІнформація про маршрутні листи (індивідуальні та бригадні) Інформація про бригади Інформація про добовий розрахунок провідника Інформація про табелі провідниківІнформація від провідникаІнформація для ідентифікаціїІнформація для провідникаІнформація про маршрутний лист Інформація про добовий розрахунок провідникаІнформація від адміністратораІнформація Інформація для ідентифікаціїІнформація для адміністратораІнформація Інформація для ідентифікації

Для продовження аналізу функціональної моделі системи будуються діаграми наступних рівнів. При цьому процеси піддаються декомпозиції, існуючі "абстрактні" потоки даних трансформуються в потоки, що представляють обмін даними на більш конкретному рівні.

Діаграма потоків даних першого рівня будується як декомпозиція процесів, що присутні на контекстній діаграмі. Опишемо декомпозицію деяких процесів.

Процес «Вести облік за індивідуальними маршрутними листами»:

Вивести на екран індивідуальні маршрутні листи провідників.

Додати запис про провідника у базу даних.

Змінити запис про провідника у базі даних.

Вилучити запис про провідника з бази даних.

Процес «Вести облік бригадних маршрутних листів»:

Вивести на екран бригадні маршрутні листи.

Додати запис про бригаду у базу даних.

Змінити запис про бригаду у базі даних.

Вилучити запис про бригаду з бази даних.

Процес «Вести облік бригад»:

Вивести на екран бригади.

Додати запис про номер та склад бригади в базу даних.

Змінити запис про номер та склад бригади в базі даних.

Вилучити запис про номер та склад бригади з бази даних.

Процес «Вести облік добового розрахунку»:

Вивести на екран добовий розрахунок поїздним бригадам.

Додати запис у добовий розрахунок до бази даних.

Змінити запис в добовому розрахунку в базі даних.

Вилучити запис в добовому розрахунку з бази даних.

Процес «Вести облік табелів провідників»:

Вивести на екран табелі провідників.

Додати запис у табель провідника в базу даних.

Змінити запис у табелі провідника в базі даних.

Вилучити запис у табелі провідника з бази даних.

Таким чином, функціональність системи цілком визначена. Подальша декомпозиція процесів приведе до опису алгоритмів роботи окремих програмних модулів, що входять до складу програмного забезпечення системи.

Ціль розробки системи - збільшення продуктивності і поліпшення умов праці нарядчиків шляхом автоматизації деяких функцій, які вони виконують та мобільності. Переваги створення МРМ «Нарядчик поїзних бригад» також полягає в тому, що інформація буде зберігатися в єдиній базі даних, вона буде систематизована і придатна для подальшого опрацювання. Цю інформацію зможуть надалі використовувати інші інформаційні системи.

Структура мобільного робочого місця:

реляційна база даних;

web-доступ до бази даних.

Функціонал МРМ «Нарядчик поїзних бригад»:

облік користувачів;

облік індивідуальних маршрутних листів;

облік бригадних маршрутних листів;

облік бригад;

облік добового розрахунку робочого часу поїздним бригадам;

облік табелів провідників;

перегляд провідниками індивідуальних маршрутних листів та табелів;

побудова прогнозу щодо виконання норми годин на квартал;

функції, які виконує адміністратор сайту: управління структурою БД та налаштування авторизації користувачів.

Отже, користувачами системи є адміністратор, нарядчики пасажирської вагонної дільниці та провідники.

Ідентифікація - це процес, у ході якого визначаються права доступу, привілеї, властивості і характеристики користувача за його іменем, логіном чи будь-якою іншою інформацією про нього.

Доступ до будь-яких даних у системі МРМ «Нарядчик поїзних бригад» відбувається вибіркою даних із джерел даних з використанням логіна, табельного номеру та паролю. Табельний номер адміністратор сайту заздалегідь заносить до бази даних та вказує права користувача. Таким чином, при відсутності табельного номера неможливо отримати необхідні дані.

З аналізу функціональної моделі системи можна побудувати концептуальну модель даних системи.

Найбільш розповсюдженим засобом представлення концептуальної моделі даних є діаграми "сутність-зв'язок" (ERD). З їхньою допомогою визначаються важливі для предметної області об'єкти (сутності), їхні властивості (атрибути) і відносини один з одним (зв'язки). ERD безпосередньо використовуються для проектування реляційних баз даних.

Для побудови концептуальної моделі даних системи необхідно виділити сутності і визначити їх атрибути.

Перший крок побудови концептуальної моделі даних - виділення сутностей.

Можна виділити наступні сутності:

Користувачі.

Індивідуальні маршрутні листи.

Бригадні маршрутні листи.

Бригади.

Члени бригади.

Добовий розрахунок часу поїздним бригадам.

Напрямок.

Норма.

Табель провідника.

Наступний крок побудови моделі - ідентифікація атрибутів.

Атрибутами сутностей є:

Сутність «Користувачі».

Код користувача.

Логін.

Хеш-код паролю.

ФІО.

Табельний номер.

Посада(права).

Сутність «Індивідуальні маршрутні листи».

Код індивідуального маршрутного листа.

ПІБ.

Явка.

Потяг.

Напрям.

Уход.

Номер вагону.

Норма.

Хвостовий.

Сутність «Бригадні маршрутні листи».

Код бригади.

Номер бригади.

Начальник потягу.

Потяг.

Напрям.

Явка.

Уход.

Сутність «Бригади».

Код бригади.

Номер бригади.

Табельний номер.

Начальник потягу.

Сутність «Члени бригади».

Код бригади.

Код члена бригади.

Табельний номер.

ПІБ члена бригади.

Сутність «Добовий розрахунок часу поїздним бригадам».

Код календаря.

ПІБ.

Номер потягу.

Напрямок.

Явка.

Уход.

Норма.

Стартова поїздка.

Всього.

Перша доба.

Друга доба.

Третя доба.

Четверта доба.

Пята доба.

Шоста доба.

Сьома доба.

Сутність «Напрямок».

Код напрямку.

Напрямок.

Сутність «Норма».

Код норми.

Норма.

Сутність «Табель провідника».

Код провідника.

ПІБ.

Напрям.

Норма.

1-й день першого місяця.

31-й день першого місяця.

1-й день другого місяця.

30-й день другого місяця.

1-й день третього місяця.

31-й день третього місяця.

Стартова поїздка.

Код добового розрахунку.

З урахуванням наявної інформації побудуємо ER-діаграму (рис. 2.2) у нотації IE (Information Engineering).

Зв'язок «Користувачі є членами бригад».

Опис: користувач може входити до складу членів бригад. Але може і не входити.

Сутність 1: «Користувач».

Сутність 2: «Члени бригад».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: може входити до; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: складається з; мін., макс.: 1, n.

Зв'язок «Члени бригад входять до бригад».

Опис: кожен член бригади входить до складу бригади.

Сутність 1: «Члени бригади».

Сутність 2: «Бригади».

Відношення: багато до багатьох.

Сутність 1 ? Сутність 2; роль: може входити до; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: складається з; мін., макс.: 1, n.


Рис. 2.2. Концептуальна модель даних


Зв'язок «Бригади мають бригадні маршрутні листи».

Опис:кожна бригада має бригадний маршрутний лист.

Сутність 1: «Бригади».

Сутність 2: «Бригадні маршрутні листи».

Відношення: Один до одного.

Сутність 1 ? Сутність 2; роль: мають; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: належать; мін., макс.: 1, n.

Зв'язок «Бригадні маршрутні листи мають напрям».

Опис: кожен бригадний маршрутний лист має напрям.

Сутність 1: «Бригадні маршрутні листи».

Сутність 2: «Напрям».

Відношення:один до одного.

Сутність 1 ? Сутність 2; роль: мають; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: належить; мін., макс.: 1, n.

Зв'язок «Члени бригад мають індивідуальні маршрутні листи».

Опис: кожен член бригади має свої індивідуальні маршрутні листи.

Сутність 1: «Члени бригад».

Сутність 2: «Індивідуальний маршрутний лист».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: належить до; мін., макс.: 1, n.

Зв'язок «Індивідуальні маршрутні листи мають норму».

Опис: кожен індивідуальний маршрутний лист може мати норму.

Сутність 1: «Індивідуальні маршрутні листи».

Сутність 2: «Норма».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: належить до; мін., макс.: 1, n.

Зв'язок «Індивідуальні маршрутні листи мають напрям».

Опис: кожен індивідуальний маршрутний лист може мати напрям.

Сутність 1: «Індивідуальні маршрутні листи».

Сутність 2: «Напрям».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 0, n.

Сутність 2 ? Сутність 1; роль: належить до; мін., макс.: 1, n.

Зв'язок «Члени бригади мають добовий розрахунок часу».

Опис: Деякі члени бригади (провідники) мають добовий розрахунок робочого часу.

Сутність 1: «Члени бригади».

Сутність 2: «Добовий розрахунок робочого часу».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: належить ; мін., макс.: 1, 1.

Зв'язок «Добовий розрахунок часу має норму».

Опис: У добовому розрахунку робочого часу поїздним бригадам вказується норма.

Сутність 1: «Добовий розрахунок часу».

Сутність 2: «Норма».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: вказується у ; мін., макс.: 1, 1.

Зв'язок «Добовий розрахунок часу має напрям».

Опис: У добовому розрахунку робочого часу поїздним бригадам вказується напрям, за яким працюють провідники.

Сутність 1: «Добовий розрахунок часу».

Сутність 2: «Напрям».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: вказується у ; мін., макс.: 1, 1.

Зв'язок «Добовий розрахунок часу має табель провідника».

Опис: На основі добового розрахунку робочого часу поїздним бригадам будуються табелі провідникам.

Сутність 1: «Добовий розрахунок часу».

Сутність 2: «Табель провідника».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: будує; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: відноситься ; мін., макс.: 1, 1.

Зв'язок «Табель провідника має норму».

Опис: У добовому розрахунку робочого часу вказується норма.

Сутність 1: «Табель провідника».

Сутність 2: «Норма».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: відноситься; мін., макс.: 1, 1.

Зв'язок «Табель провідника має напрям».

Опис: У табелі провідника вказується напрям.

Сутність 1: «Табель провідника».

Сутність 2: «Напрям».

Відношення: один до одного.

Сутність 1 ? Сутність 2; роль: має; мін., макс.: 1, 1.

Сутність 2 ? Сутність 1; роль: відноситься; мін., макс.: 1, 1.

Виходячи з аналізу концептуальної моделі даних системи, розробимо логічну структуру бази даних. Логічна структура бази даних системи представлена на рисунку 2.3.


Рис. 2.3. Логічна структура бази даних системи


Розробимо фізичну структуру кожної таблиці, що входить у базу даних. Типи даних будемо вказувати для СУБД My SQL Server.

При описі фізичних таблиць бази даних використані стандартні позначення ключів:

PK (первинний ключ).

ALT (альтернативний ключ).

FK (зовнішній ключ).

Усі таблиці бази даних знаходяться в 1 нормальній формі (НФ), якщо вони є двовимірними, не містять полів, що включають кілька значень, і порожніх ключових полів (PK).

Усі таблиці бази даних знаходяться в 2 НФ, якщо всі їхній поля, що не входять у первинний ключ, зв'язані повною функціональною залежністю з первинним ключем.

Структура фізичної таблиці «Користувачі» представлена в таблиці 2.2. Таблиця «Користувач» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного. Структура фізичної таблиці «Індивідуальні маршрутні листи» представлена в таблиці 2.3. Таблиця «Індивідуальні маршрутні листи» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Бригадні маршрутні листи» представлена в таблиці 2.4. Таблиця «Бригадні маршрутні листи» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Бригади» представлена в таблиці 2.5. Таблиця «Бригади» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Члени бригади» представлена в таблиці 2.6. Таблиця «Члени бригади» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Добовий розрахунок часу поїздним бригадам» представлена в таблиці 2.7. Таблиця «Добовий розрахунок часу поїздним бригадам» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Напрямок» представлена в таблиці 2.8. Таблиця «Напрямок» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Норма» представлена в таблиці 2.9. Таблиця «Норма» знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, не залежать один від одного.

Структура фізичної таблиці «Табель провідника» представлена в таблиці 2.10. Таблиця «Табель провідника» не знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, залежать один від одного.

Структура фізичної таблиці «Змінений табель провідника» представлена в таблиці 2.11. Таблиця «Змінений табель провідника» не знаходиться в 3 НФ, оскільки дані полів, що не входять у первинний ключ, залежать один від одного.


Таблиця 2.2. Структура таблиці «Користувачі» / «Polzovateli»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод користувачаIdint11PKАвтоматично інкремоване числоЛогінLoginvarchar35ALTХеш-парольpasswordvarchar35ALTПІБFiovarchar70ALTТабельний номерtabnomervarchar100ALTПосада(права)doljnostvarchar70ALTПрава користувача (адміністатор, нарядчик, провідник)

Таблиця 2.3. Структура таблиці «Індивідуальні маршрутні листи» / «Individ_marsh_listy»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод індивідуального маршрутного листаid_Individ_ marsh_listyint11PKАвтоматично інкремоване числоПІБFIOvarchar100ALTЯвкаyavkadatetimeALTПотягPotyagvarchar100ALTНапрямокNapryamokvarchar100ALTУходUhoddatetimeALTНомер вагонуnomer_vagonaint10ALTНормаNormavarchar10ALTХвостовийHvostovyivarchar3ALTТаблиця 2.4. Структура таблиці «Бригади» / «brigady»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод бригадиid_brigint11PKАвтоматично інкремоване числоНомер бригадиNomer_brigadyint11ALTТабельний номерtab_nomerint11ALTНачальник потягуnachalnik_poezdavarchar100ALT

Таблиця 2.5. Структура таблиці «Члени бригади» / «chleny_brigady»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод бригадиid_brigadyint11PKАвтоматично інкремоване числоКод члена бригадиid_chlenaint11ALTТабельний номерtab_nomerint11ALTПІБ члена бригадиPIB_chlena_brigvarchar100ALT

Таблиця 2.6. Структура таблиці «Добовий розрахунок часу поїздним бригадам» / «Kalendar»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод календаряid_kalendarint11PKАвтоматично інкеремоване числоПІБFIOvarchar100ALTНомер потягуnomer_potyagavarchar20ALTНапрямокNapryamokvarchar100ALTЯвкаYavkadatetimeУходUhoddatetimeALTНормаNormavarchar5ALTСтартова поїздкаStart_poezdkadatetimeALTВсьогоVsogofloatПерша добаp_dobafloatДруга добаv_dobafloatТретя добаt_dobafloatЧетверта добаch_dobafloatПята добаpya_dobafloatШоста добаsh_dobafloatСьома добаs_dobafloat

Таблиця 2.7. Структура таблиці «Напрямок» / «Napryamok»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод напрямкуid_napryamokint11PKАвтоматично інкремоване числоНапрямокnapryamokvarchar100ALT

Таблиця 2.8. Структура таблиці «Норма» / «Norma»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод нормиid_normaint11PKАвтоматично інкремоване числоНормаnormavarchar10ALT

Для реалізації проекту обрана наступна конфігурація: HTML + CSS + JavaScript + PHP + MYSQL.

Мова розмітки сторінок HTML є простим і зручним інструментом для створення сторінок, за допомогою JavaScript зручно писати скрипти, без PHP сьогодні важко представити сучасні сайти, оскільки ця мова надає практично необмежені можливості програмування Web-сторінок.

У даній клієнтській частині системи керування Web-контентом планується розробити:

) швидкодіючий алгоритм;

) ефективний підхід до розробки;

) простий, але зрозумілий інтерфейс;

) різноманітні модулі;

) надійну функціональність.

Інтерфейс повинен бути мінімізованим і зрозумілим. Суть полягає в заповненні необхідних форм і подальшої передачі запитів з подальшим виведенням сторінки.

Основним кроком при написані є створення бази даних для системи. База створюється вбудованими функціями панелі управління хостингом, інтерфейс представлений на рис. 2.4.


Рис. 2.4. Інтерфейс phpMyAdmin


Планується досягти високої швидкодії за рахунок мінімізації і простоти.

Оптимальним було б рішення використовувати кодування «UTF 8», що забезпечує підтримку майже всіх існуючих мов і кодує ASCII символи одним байтом, а національні алфавіти - кількома.

Для зручності користування сайтом, будуть відведені ролі. Керування доступом на основі ролей можна використовувати, щоб призначати користувачам права. Усі права визначаються ролями керування. Роль керування визначає, до чого користувач має доступ і які завдання може виконувати. Кожний користувач може використовувати лише ті вкладки та параметри, які дозволяє призначена йому роль:

Адміністратор сайту зможе вносити зміни до програму, до таблиць, буде присвоювати кожному користувачу табельний номер та вказувати посаду. Завдяки табельному номеру, працівник зможе зареєструватися на сайті. Буде мати можливість заносити дані про начальників потягів та склад їхніх бригад. Тобто, дана роль призначає можливість адміністрування адміністраторам та іншим фахівцям. Вона дозволяє створювати, змінювати й видаляти інформацію, користувачів, а також скидати паролі, змінювати вигляд сайту і тд.

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

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

Починати наповнення будь-якого веб-сайту слід з планування його інформаційної структури і створення інформаційної моделі. У даній системі існують три рівні організації інформації: «Розділи» - це великі - об'єднання, що складаються з категорій; «Категорії» - невеликі- об'єднання, що вміщають об'єкти; «Об'єкти контенту» - це - будь-який текст, файл, посилання які користувач хоче розмістити на веб-сторінці.

Розібратися в цій системи зберігання інформації можливо уявивши собі наступну систему наповнення: розділи - це ящики, категорії - це папки в ящиках, а об'єкти контенту - це папери в папках. Розділи є наперед визначеними. До них належать файли, книги, новини і посилання.

Категорії будуть створюватися адміністратором сайту. Так для розділу Маршрутні листи можна створити категорії Індивідуальні маршрутні листи і Бригадні маршрутні листи; для розділу Графіки -Добовий розрахунок дня.

Єдина особливість даної структури в тому, що немає можливості створити інформаційний матеріал, попередньо не створивши для нього розділ з категорією.

Зовнішній вигляд сайту має досить велике значення, поряд з пошуковою оптимізацією і зручністю використання. Привабливий зовнішній вигляд створює сприятливе враження у відвідувачів сайту, але при цьому досить складно догодити всім, тому що смаки й уподобання можуть сильно відрізнятися. Так, як наша тема повязана з залізницею, потягами, сайт буде саме в цьому стилі. Наповнення сайту буде витримано в єдиному стилі, при переході з будь-якого посилання, ставатиме очевидно, що стилістика сайту витримана.

Щоб досягти всіх цих результатів, потрібно детальніше ознайомитися з системами управління, веб-орієнтованими мовами програмування та реляційними базами даних.


2.2 Характеристика використаних інструментальних засобів


Веб-орієнтовані мови програмування

Термін HTML (Hyper Text Markup Language) означає "мова маркування гіпертекстів ". Це поняття дуже широке, включає в себе Інтернет і локальні мережі, редактори, браузери, різноманітні програмні продукти, компакт-диски, навчальні курси, дизайн та багато іншого. HTML - своєрідна протилежність мовам програмування, відомим тільки фахівцям.давно перестав бути просто мовою програмування. Людина, яка вивчала цю мову, знаходить можливість робити складні речі простими способами і, головне, швидко, що в комп'ютерному світі не так вже й мало. Гіпертекст підходить для включення елементів мультимедіа в традиційні документи. Практично саме завдяки розвитку гіпертексту, більшість користувачів отримало можливість створювати власні мультимедійні продукти і поширювати їх на компакт-дисках. Такі інформаційні системи, виконані у вигляді набору HTML-сторінок, не вимагають розробки спеціальних програмних засобів, так як всі необхідні інструменти для роботи з даними (WEB-браузери) стали частиною стандартного програмного забезпечення більшості персональних комп'ютерів. Від користувача потрібно виконати тільки ту роботу, яка відноситься до тематики розроблюваного продукту: підготувати тексти, намалювати малюнки, створити HTML-сторінки і продумати зв'язок між ними., як основа створення WEB-сторінок, має пряме відношення і до нового напряму образотворчого мистецтва - WEB-дизайн. Художнику в Інтернеті недостатньо просто намалювати красиві картинки, оригінальний логотип, створити новий фірмовий стиль. Він повинен ще помістити все це в Мережі, продумати зв'язок між WEB-сторінками, щоб все рухалося, відгукувалася на дію користувача, вражало уяву, викликало бажання створити що-небудь своє, оригінальне в цій області.

Перша версія HTML була розроблена в 1989 році Тімом Бенерс-Лі для популярного в минулому браузера Mosaic. Але в той час ні для мови, ні для браузера не знайшлося гідного застосування. У 1993 році з'явився HTML +, і ця версія також залишилася практично непоміченою. Початок широкого використання гіпертексту дала версія 2.0 яка, з'явилася в червні 1994 року. Це був рік зростання популярності WWW по всьому світу. Елементи, включені у версію 2, в більшості своїй використовуються донині. У версії 3.0 HTML, яка з'явилася через рік, була реалізована можливість промальовування математичних символів (знаків інтервалу, нескінченності, дробу, дужок і т.д.) за допомогою елементів мови. Під цю версію був розроблений браузер Arena. Але цей проект не отримав подальшого поширення.

У 1996 році з'явився HTML 3.2. Це було новаторське рішення, в специфікацію мови були введені фрейми, які стали тепер дуже популярні у розробників WEB-сторінок. Навіть зараз на основі цієї специфікації можна реалізувати цікаві дизайнерські рішення. Практично всі сучасні браузери підтримують версію 3.2, тому автори WEB-сторінок впевнені в працездатності всіх елементів.

Поряд з офіційними специфікаціями мови, які розроблялися організацією W3C (W3 Консорціум), компанії-виробники браузерів створювали власні елементи (розширення). Згодом, деякі з цих елементів, після отримання загального визнання включилися в специфікацію наступних версій мови. Новаторське рішення - фрейми, що не були включені в специфікацію 3.2. Але браузери підтримували фрейми і багато книг, присвячені HTML, містили опис фреймів без згадки про те, що це нестандартні елементи. У наслідку, фрейми стали стандартом де-факто. У версії 4 вони вже були включені на повній підставі. Еелементи APPLET і SCRIPT, необхідні для розширення HTML іншими програмними кодами версії 3.2, не зіграли тієї ролі, яку мали зіграти. Це пояснюється тим, що браузери різних версій по-різному інтерпретували програми на різних мовах JAVA, JAVASCKRIPT, Visual Basic (VBScript). В результаті не вдалося отримати достатньо надійний працюючий код, і дані мови використовувалися прихильниками HTML в основному для експериментів.

Офіційна специфікація HTML 4 (Dynamic HTML) з'явилася в 1997 році. У цей час вже було очевидно, що подальший розвиток гіпертексту буде здійснюватися за рахунок скрипт - програмування. Це виявилося ефективніше, ніж вводити в мову всі нові елементи. Що з'явилися в той час браузери (Netscape Navigator 4, Microsoft Internet Explorer 4 і ін) вже досить надійно інтерпретували програмний код (був встановлений певний рівень стандартизації). Однак проблеми у розробників ще залишилися. Як приклад можна відзначити, що багато скриптів починаються з визначення версії браузера, щоб потім використовувати той або інший фрагмент коду. На програміста лягає обов'язок тестування сторінок на всіх популярних браузерах.

В результаті, використання всіх можливостей Dynamic HTML стало спадком програмістів досить великих організацій, де є умови для розробки складних програм і всебічного їх тестування. Творцям особистих WEB-сторінок часом доводиться шукати компроміс між надійністю і новаторством, щоб отримати достатньо грамотний HTML-код.(англ. Cascading Style Sheets - каскадні таблиці стилів) - формальна мова опису зовнішнього вигляду документа, написаного з використанням мови розмітки.

Переважно використовується як засіб опису, оформлення зовнішнього вигляду веб-сторінок, написаних за допомогою мов розмітки HTML і XHTML, але може також застосовуватися до будь-яких XML-документами, наприклад, до SVG або XUL.використовується творцями веб-сторінок для завдання кольорів, шрифтів, розташування окремих блоків та інших аспектів представлення зовнішнього вигляду цих веб-сторінок. Основною метою розробки CSS було розділення опису логічної структури веб-сторінки (яка проводиться за допомогою HTML або інших мов розмітки) від опису зовнішнього вигляду цієї веб-сторінки (яке тепер проводиться за допомогою формальної мови CSS). Такий поділ може збільшити доступність документа, надати велику гнучкість і можливість управління його поданням, а також зменшити складність і повторюваність в структурному вмісті. Крім того, CSS дозволяє представляти один і той же документ в різних стилях або методах виведення, таких як екранне уявлення, друковане подання, читання голосом (спеціальним голосовим браузером або програмою читання з екрану), або при виведенні пристроями, що використовують шрифт Брайля.

Найбільш повно підтримуючими стандарт CSS є браузери, що працюють на двигунах Gecko, WebKit (Safari, Arora) і Presto (Opera).

Колишній колись найпоширеніший браузер Internet Explorer 6 підтримує CSS далеко не повністю. Internet Explorer 7 хоча і значно поліпшив рівень підтримки CSS, але все ще містить значну кількість помилок.

В Internet Explorer 8 використовується новий движок, який повністю підтримує CSS 2.1 і частково - CSS 3.

Для перевірки підтримки браузером веб-стандартів (у тому числі і різних частин стандарту CSS) був розроблений тест Acid. Його друга версія називається Acid2, а третя, відповідно, Acid3.

Основні переваги CSS перед HTML:

управління дизайном будь-якої кількості документів за допомогою однієї таблиці стилів;

більш точний дизайн сторінок, підтримуваний всіма браузерами;

поділ документа на дві складові: структура та дизайн, завдяки чому вихідний код стає чистим і легко читається;

нові розширені можливості порівняно із звичайним html.(англ. PHP: Hypertext Preprocessor - «PHP: препроцесор гіпертексту»; спочатку Personal Home Page Tools - «Інструменти для створення персональних веб-сторінок»; вимовляється пі-ейч-пі) - скриптова мова програмування загального призначення, інтенсивно застосовується для розробки веб-додатків. В даний час підтримується переважною більшістю хостинг-провайдерів і є одним з лідерів серед мов програмування, що застосовуються для створення динамічних веб-сайтів.

Мова і його інтерпретатор розробляються групою ентузіастів у рамках проекту з відкритим кодом. Проект поширюється під власною ліцензією, несумісною з GNU GPL.

У 1994 році датський програміст Расмус Лердорф створив набір скриптів на Perl/CGI для висновку і обліку відвідувачів його онлайн-резюме, які оброблювали шаблони HTML-документів. Лердорф назвав набір Personal Home Page (Особиста Домашня Сторінка). Незабаром функціональності і швидкості Perl-інтерпретатора скриптів - перестало вистачати, і Лердорф розробив з використанням мови C новий інтерпретатор шаблонів PHP/FI (англ. Personal Home Page / Forms Interpreter - «Особиста Домашня Сторінка / Інтерпретатор форм»).

У 1997 році після тривалого бета-тестування вийшла друга версія обробника, написаного на C - PHP/FI 2.0. Її використовували близько 1% (приблизно 50 тисяч) всіх інтернет-доменів світу.

Версія PHP 3.0 піддалася значній переробці, що визначила сучасний вигляд і стиль мови програмування. У 1997 році два ізраїльські програмісти, Енді Гутманс і Зеєв Сураські, повністю переписали код інтерпретатора. PHP 3.0 був офіційно випущений в червні 1998 року.

Однією з найсильніших сторін PHP 3.0 була можливість розширення ядра додатковими модулями. Згодом, інтерфейс написання розширень привернув до PHP безліч сторонніх розробників, що працюють над своїми модулями. Це дало можливість PHP працювати з величезною кількістю баз даних, протоколів, підтримувати велике число API. Велика кількість розробників призвела до швидкого розвитку мови і стрімкого зростання її популярності. З цієї версії акронім php розшифровується як «PHP: hypertext Preprocessor», замість застарілого «Personal Home Page». До зими 1998 року, практично відразу після офіційного виходу PHP 3.0, Енді Гутманс і Зеєв Сураські почали переробку ядра PHP. У завдання входило збільшення продуктивності складних додатків і поліпшення модульності базису коду PHP. Новий движок, названий Zend Engine, успішно справлявся з поставленими завданнями і вперше був представлений в середині 1999 року. PHP 4.0, заснований на цьому движку і приніс з собою набір додаткових функцій. Офіційно вийшов в травні 2000 року. На додаток до поліпшення продуктивності, PHP 4.0 мав ще декілька ключових нововведень, таких як підтримка сесій, буферизація виводу, більш безпечні способи обробки вводиться користувачем, і декілька нових мовних конструкцій.

П'ята версія PHP була випущена розробниками 13 липня 2004. Зміни включають оновлення ядра Zend (Zend Engine 2), що істотно збільшило ефективність інтерпретатора. Введена підтримка мови розмітки XML. Повністю перероблені функції ООП, які стали багато в чому схожі з моделлю, яка використовується в Java. Зокрема, введено деструктор, відкриті, закриті і захищені члени і методи, остаточні члени і методи, інтерфейси і клонування об'єктів. У наступних версіях також були введені простори імен, замикання і цілий ряд досить серйозних змін, кількісно і якісно порівнянних з тими, які з'явилися при переході на PHP 5.0.

Шоста версія PHP розроблялася з жовтня 2006 року. Було безліч нововведень, як, наприклад, виключення з ядра регулярних виразів POSIX і "довгих" суперглобальних масивів, видалення директив safe_mode, magic_quotes_gpc і register_globals з конфігураційного файлу php.ini. Одним з основних нововведень повинна була стати підтримка Юнікоду. .Однак у березні 2010 року розробку PHP 6 було визнано безперспективною через складнощі з підтримкою Юнікоду. Вихідний код PHP 6 переміщений на гілку, а основною лінією розробки стала версія 5.4.

У області програмування для мережі Інтернет PHP - одна з найпопулярніших сценарних мов (разом з JSP, Perl і мовами, що використовуються в ASP.NET) завдяки своїй простоті, швидкості виконання, багатій функціональності, платформам і розповсюдженість початкових кодів на основі ліцензії PHP.

Популярність у галузі побудови веб-сайтів визначається наявністю великого набору вбудованих засобів для розробки веб-додатків. Основні з них:

автоматичний витяг POST і GET-параметрів, а також змінних оточення веб-сервера в зумовлені масиви;

взаємодія з великою кількістю різних систем управління базами даних (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape і Apache Derby, Informix, Ovrimos SQL, Lotus Notes , DB + +, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Інтерфейс PDO);

автоматизована відправка HTTP-заголовків;

робота з HTTP-авторизацією;

робота з cookies і сесіями;

робота з локальними і віддаленими файлами, сокетами;

обробка файлів, що завантажуються на сервер;

робота з XForms.

В даний час PHP використовується сотнями тисяч розробників. Згідно з рейтингом корпорації TIOBE, що базується на даних пошукових системах, у грудні 2012 року PHP знаходився на 6 місці серед мов програмування. До найбільших сайтів, які використовують PHP, відносяться Facebook, Wikipedia і ін..

Входить в LAMP - поширений набір програмного забезпечення для створення та хостингу веб-сайтів (Linux, Apache, MySQL, PHP).. JavaScript - прототипна-орієнтована сценарна мова програмування. Є діалектом мови ECMAScript. JavaScript зазвичай використовується як вбудована мова для програмного доступу до об'єктів додатків. Найбільш широке застосування знаходить в браузерах як мова сценаріїв для додання інтерактивності веб-сторінок.

Основні архітектурні риси: динамічна типізація, слабка типізація, автоматичне керування пам'яттю, прототипне програмування, функції як об'єкти першого класу.

На JavaScript вплинули багато мов, при розробці була мета зробити мову схожою на Java, але при цьому легкою для використання користувачами. Мовою JavaScript не володіє будь-яка компанія або організація, що відрізняє її від ряду мов програмування, які використовуються у веб-розробці.

Назва «JavaScript» зареєстрована товарним знаком компанії Oracle Corporation.

У 1992 році компанія Nombas (згодом придбана Openwave) почала розробку вбудованої скриптової мови Cmm (Сі-мінус-мінус), яка, за задумом розробників, повинна була стати досить потужною, щоб замінити макроси, зберігаючи при цьому схожість з Сі , щоб розробникам не становило жодних труднощів вивчити нову мову. Головною відмінністю від Сі була робота з пам'яттю. У новій мові все управління пам'яттю здійснювалося автоматично: не було необхідності створювати буфери, оголошувати змінні, здійснювати перетворення типів. В усьому іншому мови були сильно схожі одна на однуо: зокрема, Cmm підтримувала стандартні функції і оператори Сі. Cmm була перейменована в ScriptEase, оскільки вихідна назва звучала надто негативно, а згадка в ній Сі «відлякувала» людей.

На основі цієї мови був створений пропрієтарний продукт CEnvi. Наприкінці листопада 1995 Nombas розробила версію CEnvi, впроваджувану у веб-сторінки. Сторінки, які можна було змінювати за допомогою скриптової мови, отримали назву Espresso Pages - вони демонстрували використання скриптової мови для створення гри, перевірки даних, що ввів користувач і створення анімації. Espresso Pages позиціонувалися як демоверсія, покликана допомогти уявити, що трапиться, якщо в браузер буде впроваджено мову Cmm. Працювали вони тільки в 16-бітовому Netscape Navigator під управлінням Windows Перед Бренданом Айком, найнятим в компанію Netscape 4 квітня 1995, було поставлено завдання впровадити мову програмування Scheme або щось схоже в браузер Netscape. Оскільки вимоги були розмиті, Айка перевели в групу, відповідальну за серверні продукти, де він пропрацював місяць, займаючись поліпшенням протоколу HTTP. У травні розробник був перекинутий назад, в команду, що займається клієнтською частиною (браузером), де він негайно почав розробляти концепцію нової мови програмування. Менеджмент розробки браузера, включаючи Тома Пакін (Tom Paquin), Міхаеля Тоя, Ріка Шелла (Rick Schell), був переконаний, що Netscape повинен підтримувати мову програмування, що вбудовується в HTML-код сторінки.

Крім Брендона Айка в розробці брали участь співзасновник Netscape Communications Марк Андрісін і співзасновник Sun Microsystems Білл Джой: щоб встигнути закінчити роботи над мовою до релізу браузера, компанії уклали угоду про співпрацю в розробці. Вони ставили перед собою мету забезпечити «мову для склеювання» складових частин веб-ресурсу: зображень, плагінів, Java-аплетів, які були б зручними для веб-дизайнерів і не висококваліфікованих програмістів.

Спочатку мова називалася LiveScript і призначалася як для програмування на стороні клієнта, так і для програмування на стороні сервера (там вона мала називатися LiveWire). На синтаксис вплинули мови Сі і Java, і, оскільки Java в той час було модним словом, 4 грудня 1995 LiveScript перейменували в JavaScript , отримавши відповідну ліцензію у Sun. Анонс JavaScript з боку представників Netscape і Sun відбувся напередодні випуску другої бета-версії Netscape Navigator. У ньому декларується, що 28 лідируючих ІТ-компаній висловили намір використовувати в своїх майбутніх продуктах JavaScript як об'єктну скрипкову мову з відкритим стандартом.

У 1996 році компанія Microsoft випустила аналог мови JavaScript, названий JScript. Анонсовано цю мову було 18 липня 1996. Першим браузером, що підтримує цю реалізацію, був Internet Explorer 3.0.

За ініціативою компанії Netscape була проведена стандартизація мови асоціацією ECMA. Стандартизована версія має назву ECMAScript, описується стандартом ECMA-262. Першій версії специфікації відповідала JavaScript версії 1.1, а також мови JScript і ScriptEasy.є об'єктно-орієнтованою мовою, але прототипування , яке використовується в мові, обумовлює відмінності в роботі з об'єктами в порівнянні з традиційними клас-орієнтованими мовами. Крім того, JavaScript має ряд властивостей, властивих функціональним мовам, - функції як об'єкти першого класу, об'єкти як списки, каррінг, анонімні функції, замикання - що додає мові додаткову гнучкість.

Незважаючи на схожий з Сі синтаксис, JavaScript порівняно з мовою Сі має корінні відмінності:

об'єкти, з можливістю інтроспекції;

функції як об'єкти першого класу;

автоматичне приведення типів;

автоматичне складання сміття;

анонімні функції.

У мові відсутні такі корисні речі, як:

модульна система: JavaScript не надає можливості управляти залежностями та ізоляцією областей видимості;

стандартна бібліотека: зокрема, відсутній інтерфейс програмування додатків по роботі з файловою системою, управлінню потоками введення / виведення, базових типів для бінарних даних;

стандартні інтерфейси до веб-серверів і баз даних;

система управління пакетами, яка б відстежувала залежності і автоматично встановлювала їх.

Для забезпечення високого рівня абстракції і досягнення прийнятного ступеня крос-браузерності при розробці веб-додатків використовуються бібліотеки JavaScript. Вони являють собою набір багаторазово використовуваних об'єктів і функцій.

Серед відомих JavaScript бібліотек можна відзначити Adobe life, Dojo Toolkit, Extjs, jQuery, Mootools, Prototype, Qooxdoo, Underscore.

На сьогоднішній день підтримку JavaScript забезпечують сучасні версії всіх найбільш часто використовуваних браузерів. В Internet Explorer, Mozilla Firefox, Safari, Google Chrome, Opera є повна підтримка третьої редакції ECMA-262. При цьому в Mozilla Firefox зроблена спроба здійснення підтримки четвертої редакції специфікації, а першим браузером, в якому з'явилася неповна підтримка специфікації 3.1, з'явився Internet Explorer 8.

Помилки, допущені розробниками популярних браузерів в реалізації специфікації, як правило, незначні. Станом на листопад 2009 року об'єктна модель документа має більш обмежену підтримку.- популярна JavaScript-бібліотека з відкритим вихідним кодом. Вона була представлена у січні 2006 року у BarCamp NYC Джоном Ресіґом. jQuery є найпопулярнішою бібліотекою JavaScript, яка посилено використовується на сьогоднішній день.є вільним відкритим програмним забезпеченням під ліцензією MIT .

Синтаксис jQuery розроблений, щоб зробити орієнтування у навігації зручнішим завдяки вибору елементів DOM, створенню анімації, обробки подій, і розробки AJAX-застосунків. jQuery також надає можливості для розробників, для створення плагінів у верхній частині бібліотеки JavaScript. Використовуючи ці об'єкти, розробники можуть створювати абстракції для низькорівневої взаємодії та створювати анімацію для ефектів високого рівня. Це сприяє створенню потужних і динамічних веб-сторінок. Основним завданням jQuery є надання розробнику легкий та гнучкий інструментарій кросбраузерної адресації DOM об'єктів за допомогою CSS та XPath селекторів.

Принцип роботи jQuery полягає в використанні класу (функції), який при звертанні до нього повертає сам себе. Таким чином, це дозволяє будувати послідовний ланцюг методів.UI - бібліотека JavaScript з відкритим вихідним кодом для створення насиченого користувальницького інтерфейсу у веб-додатках, це частина проекту jQuery. Побудована поверх головної бібліотеки jQuery і надає розробникові спрощений доступ до її функцій взаємодії, анімації та ефектів, а також набір віджетів.- це плагін для JQuery бібліотеки Javascript, який дозволяє відображувати данні в табличній формі.є вільним, відкритим вихідним кодом і розповсюджується під ліцензією MIT. Особливостями є:

підтримує AJAX ;

настроюється в CSS;

працює під IE, Firefox, Chrome, Safari, Opera;

швидке редагування комірки та створення на льоту форми для редагування записів;

сумісний з XML / JSON / масивами джерел даних;

користувальницький інтерфейс поставляється в 20 + мов;

пошук і фільтрація;

підтримує підтаблиці і дерева сітки для відображення ієрархічних даних;

Пейджинг та сортування.

Система управління реляційними базами даних MySQL

Розробку та підтримку MySQL здійснює корпорація Oracle, яка отримала права на торговельну марку разом з поглиненою Sun Microsystems, яка раніше придбала шведську компанію MySQL AB. Продукт розповсюджується як під GNU General Public License, так і під власною комерційною ліцензією. Крім цього, розробники створюють функціональність за замовленням ліцензійних користувачів, саме завдяки такому замовленню майже в найраніших версіях з'явився механізм реплікації.є рішенням для малих і середніх застосувань. Входить до складу серверів WAMP, AppServ, LAMP і в портативні зборки серверів Денвер, XAMPP. Зазвичай MySQL використовується як сервер, до якого звертаються локальні або видалені клієнти, проте в дистрибутив входить бібліотека внутрішнього сервера, що дозволяє включати MySQL в автономні програми.

Гнучкість СУБД MySQL забезпечується підтримкою великої кількості типів таблиць: користувачі можуть вибрати як таблиці типу MyISAM, що підтримують повнотекстовий пошук, так і таблиці InnoDB, що підтримують транзакції на рівні окремих записів. Більш того, СУБД MySQL поставляється із спеціальним типом таблиць EXAMPLE, що демонструє принципи створення нових типів таблиць. Завдяки відкритій архітектурі і GPL-ліцензуванню, в СУБД MySQL постійно з'являються нові типи таблиць.

лютого 2008 Sun Microsystems придбала MySQL AB за $ 1 млрд., 27 січня 2010 року Oracle придбала Sun Microsystems і включила MySQL в свою лінійку СУБД.

Спільнотою розробників MySQL створені різні відгалуження коду, такі як Drizzle, OurDelta, Percona Server, і MariaDB. Всі ці відгалуження вже існували на момент поглинання компанії Sun корпорацією Oracle.виникла як спроба застосувати mSQL до власних розробок компанії: таблицям, для яких використовувалися ISAM - підпрограми низького рівня. В результаті був вироблений новий SQL-інтерфейс, але API-інтерфейс залишився в спадок від mSQL. Звідки походить назва «MySQL» - достеменно невідомо. Розробники дають два варіанти: або тому, що практично всі напрацювання компанії починалися з префікса My, або на честь дівчинки на ім'я My, дочки Майкла Монті Віденіус, одного з розробників системи.

Логотип MySQL у вигляді дельфіна носить ім'я «Sakila». Він був обраний з великого списку запропонованих користувачами «імен дельфіна». Ім'я «Sakila» було відправлено Open Source-розробником Ambrose Twebaze.має подвійне ліцензування. MySQL може поширюватися у відповідності з умовами ліцензії GPL. Однак за умовами GPL, якщо яка-небудь програма включає вихідні коди MySQL, то вона теж повинна поширюватися за ліцензією GPL. Це може розходитися з планами розробників, які не бажають відкривати вихідні тексти своїх програм. Для таких випадків передбачена комерційна ліцензія, яка також забезпечує якісну сервісну підтримку.- веб-застосунок з відкритим кодом на мові PHP із графічним веб-інтерфейсом для адміністрування СКБД MySQL. phpMyAdmin дозволяє через браузер здійснювати адміністрування сервера MySQL, запускати запити SQL, переглядати та редагувати вміст таблиць баз даних. Ця програма користується великою популярністю у веб-розробників, оскільки дозволяє керувати СКБД MySQL без безпосереднього вводу SQL команд через дружній інтерфейс і з будь-якого комп'ютера під'єднаного до інтернету без необхідності встановлення додаткового програмного забезпечення.

На сьогоднішній день phpMyAdmin широко застосовується на практиці. Останнє повязано з тим, що розробники інтенсивно розвивають свій продукт, з огляду на всі нововведення СКБД MySQL. Переважна більшість українських провайдерів використовують цей застосунок як панель керування для того, щоб надати своїм клієнтам можливість адміністрування виділених їм баз даних. Програма розповсюджується під ліцензією GNU General Public License і тому деякі інші розробники інтегрують його у свої розробки, наприклад XAMPP, Denwer. Ініціатором є німецький розробник Тобіас Ратшіллер (Tobias Ratschiller) і базується, так само як і phpPgAdmin, на аналогічному застосунку MySQL-Webadmin, що виник у 1997 році. Проект локалізовано понад 50-ма мовами.

У другому розділі була спроектована концептуальна модель мобільного робочого місця «Нарядчик поїзних бригад» та описані функціональні характеристики інструментальних засобів, обраних для розробки мобільного робочого місця «Нарядчик поїзних бригад», а саме MySQL, PHP, JAVASCRIPT, jQuery, JQGrid ,HTML та CSS.


РОЗДІЛ 3. ЕКСПЕРИМЕНТАЛЬНА РОЗРОБКА МОБІЛЬНОГО РОБОЧОГО МІСЦЯ «НАРЯДЧИК ПОЇЗНИХ БРИГАД»


3.1 Загальна характеристика мобільного робочого місця


Мобільне робоче місце «Нарядчик поїзних бригад» (режим доступу: naryadchik.vv.si) являє собою динамічний сайт.

Сайт складається з трьох сторінок:

стартової, на якій користувач авторизується, вказуючи при цьому свій логін та пароль;

сторінки реєстрації, де має вказати табельний номер, який отримує у адміністратора сайту, ПІБ, логін та пароль;

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

Схематичний вміст сайту представлений на рисунку 3.1.


Рис. 3.1. Схема сайту


На схемі видно чотири частин сторінки сайту:

Частина 1: головне меню (header);

Частина 2: вміст сторінки сайту (content);

Частина 3: таблиця з бази данних;

Частина 4: нижня частина сторінки (footer - підпис);

Дана система в основному працює з таблицями. Так як, МРМ представлена у формі сайту, для його запуску необхідно мати доступ до мережі Internet та будь-який браузер. На жаль, сайт не володіє кроссбраузерністю, тому коректно відображається не на всіх моніторах. На цей недолік здебільшого вплинули ресурси.


3.2 Програмна реалізація структурних елементів


Як вже було сказано, структурними елементами сайту є сторінки: стартова, сторінка реєстрації та сторінка користувача. Сайт написано мовами PHP, JAVASCRIPT, HTML та CSS.

База даних складається з наступних основних таблиць:

індивідуальні маршрутні листи (Individ_marsh_listy) - таблиця, у якій зберігаються дані по кожному окремому користувачу;

бригадні маршрутні листи (brigadnie_marsh_listy) - таблиця, у якій зберігаються дані по всім бригадам;

вибір бригади (brigady) - у даній таблиці зберігаються всі начальники потягів, завдяки їй можливо переглянути підлеглих певного начальника;

добовий розрахунок робочого часу поїзним бригадам (Kalendar) - у дану таблицю нарядчик потягу заноситиме дані відносно провідників ;

користувачі (polzovateli) - таблиця, яка зберігає логін, пароль, посаду та табельний номер користувачів;

табель провідника (tabel) - дана таблиця генерується на три місяці за допомогою таблиці «Kalendar», з якої бере напрям, стартову поїздку та години ;

напрям (Napryamok) - таблиця, де зберігаються напрями потягів, завдяки їй, користувач при додаванні напряму до інших таблиць, отримає можливість вибору вже існуючих напрямків;

норма (Norma) - таблиця, у якій зберігаються всі норми, наприклад: 3/2, 2/1 і тд. Дана таблиця слугує для того, щоб користувач у інших таблицях мав можливість вибору норми з вже існуючих.

Структурними елементами МРМ «Нарядчик поїзних бригад» є стартова сторінка, сторінка реєстрації та сторінка користувача.

На стартовій сторінці реалізована авторизація (перший користувач був створений програмно), де користувач має вказати свій логін та пароль:


<?php include $_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';(isset($_POST['login']) && isset($_POST['password']))

{

$login = mysql_real_escape_string($_POST['login']);

$password = md5($_POST['password']);

// посилаємо запрос до БД

// шукаємо polzovateli з таким логіном та паролем

$query = "SELECT `id``polzovateli``login`='{$login}' AND `password`='{$password}'1";

$sql = mysql_query($query) or die(mysql_error());

// якщо такий користувач знайшовся(mysql_num_rows($sql) == 1)

{

// то ми ставимо про це позначку в сесії

$row = mysql_fetch_assoc($sql);_start();

$_SESSION['user_login'] = $login;("Location: /php/menu.php?marshrut"); exit();

// для роботи з сесійними даними у кожному скрипті має знаходитися session_start();

}

{

$error='*Помилка авторизації!';

}

}

?>


Даний код зберігається у файлі index.php. Посилається запит до бази даних, де шукається користувач з таким логіном та паролем через метод POST, який посилає введені дані в php-скрипт. Якщо такий користувач знайшовся, то розпочинаємо сесію. Якщо будь-яке з полів не заповнене, або користувач не зареєстрований, зявиться повідомлення про помилку авторизації (див. рис. 3.2).


Рис. 3.2. Результат неуспішної авторизації


Другим структурним елементом є сторінка реєстрації користувача. При наявному табельному номері, користувач має змогу зареєструватися. Табельний номер адміністратор заносить до бази даних. У випадку, якщо користувач не матиме його, реєстрація буде неможлива. Код реєстрації зберігається у файлі registration.php:


<?php$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$error_create_user='';

$tb_name='polzovateli';

$login = $_POST['login'];

$fio=$_POST['fio'];(isset($_POST['login']) && isset($_POST['password'])&& isset($_POST['ret_password'])&& isset($_POST['kod_naryad'])&& isset($_POST['ret_password']))

{($_POST['login']!='' && $_POST['password']!=''&& $_POST['ret_password']!='' && $_POST['kod_naryad']!='' && $_POST['fio']!='')

{

$kod_naryad=$_POST['kod_naryad'];

$query = "SELECT `id`$tb_name`tabnomer`='{$_POST['kod_naryad']}'1";

$sql = mysql_query($query) or die(mysql_error());

$row =mysql_fetch_array($sql);(mysql_num_rows($sql) == 1 && $row['FIO']=='' && $row['password']=='' &&($row['login']==''))

{($_POST['password']==$_POST['ret_password'])

{

$login = mysql_real_escape_string($_POST['login']);

$query = "SELECT `id`$tb_name`login`='{$login}'1";

$sql = mysql_query($query) or die(mysql_error());(mysql_num_rows($sql) == 0)

{

$password = md5($_POST['password']);

$login = $_POST['login'];_query("UPDATE $tb_name='".$login."',='".$password."',='".$fio."'='{$_POST['kod_naryad']}'

;")die(mysql_error());

$login = "";

$error_create_user = '<h3><b id="error_user_edit" style="color:green">Користувач успішно створений!</b></h3><b><p>Ви будете перенаправлені через <input TYPE="text" id="clock" SIZE="2" value="5" readonly> секунд на стартову сторінку. Зачекайте!</p></b><meta http-equiv="refresh" content="5; url=#"justify">$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Такий логін вже існує!</b></h3>';

}

$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Паролі не співпадають!</b></h3>';

}

$error_create_user = '<h3><b id="error_user_edit" style="color:red">*Такого табличного номеру не існує!</b></h3>';

}

$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Не всі поля заповнені!</b></h3>';

}

?>


Код слугує для відправлення таких даних, як табельний номер, ПІБ, логін та пароль в базу даних методом POST. За допомогою функції md5 пароль однонаправленно зашифровується і в результаті база даних зберігає не пароль у чистому вигляді, а лише його хеш-код. У випадках, якщо не всі поля заповнені, або логін вже існує зявляється повідомлення про помилку.

Наступним структурним елементом є сторінка користувача. В залежності від того, з якими правами користувач заходить до системи, сторінка змінюється. Схематично це можна зобразити так:


Рис. 3.3. Права користувачів за ролями


Код для вибору з меню має наступний вигляд:

<?php

$select_menu = $_SERVER['QUERY_STRING'];($select_menu)

{'exit':($_SESSION['user_login']);_destroy();("Location: ../index.php"); exit();;'marshrut':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/marshrut_list.php';

$name_page='Маршрутні листи';;'grafiki':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/grafiki.php';

$name_page='Графіки';;'polzovateli':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/polzovateli.php';

$name_page='Користувачі';;'redaktirovanie':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/redaktirovanie.php';

$name_page='Дані';;'brigadi':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/brigadi.php';

$name_page='Бригади';;'tabel_provodnika':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/tabel_provodnika.php';

$name_page='Табель провідника';;

?>

Пункти меню, які провідник не має бачити не відображаються :

<?php($doljnost==$vse_prava)'<li>


За допомогою бібліотеки JavaScript - JqGrid створені всі наявні таблиці, які працюють з сервером на основі ajax-запитів. Обмін даними здійснюється за допомогою текстового формату json. Нижче представлений один з прикладів коду таблиці «Табель провідника», яка автоматично генерується на основі таблиці «Добовий розрахунок робочого часу».

Код побудови таблиці:

<?php$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$query = "SELECT start_poezdka,id_provodnika FROM `tabel` WHERE PIB='".$FIO."'";

$result=mysql_query($query) or die (mysql_error());(mysql_num_rows($result) == 1)

{

$row=mysql_fetch_array($result);

$id=$row[id_provodnika];

$start_poezdka = substr($row[start_poezdka],0,10);

$date=explode('-',($start_poezdka));

$k=$date[1]+3;

$end_date=date("Y-m-d", mktime(0, 0, 0, $k,$date[2],$date[0]));

$date_array = array();

$i=$date[2];

$j=0;

$next_date=$start_poezdka;($next_date!=$end_date)

{

$next_date = date("Y-m-d", mktime(0, 0, 0, $date[1],$i,$date[0]));

$date_array[$j]=$next_date;

$i++;

$j++;

}

$param_array=array(…);//в дужках знаходиться вміст масиву


В даному місці за допомогою php скрипта в HTML сторінку роздруковується Java-скрипт:

'<div id="tabel_table">

<table id="tabel_list"></table>

<div id="tabel_page"></div>

</div>';'<script type="text/javascript">'.

"$(document).ready(function(){

$(".'"#tabel_list").jqGrid({'.

"url:'bd_tab_list_provodnik.php?fio=".$FIO."',: 'json',:[";($doljnost==$vse_prava) echo "'ПІБ',";"'Напрям','Норма',";($i=0;$i<count($date_array)-1;$i++)

{($i>0)",";"'".$date_array[$i]."'";

}"],";"colModel:[";($doljnost==$vse_prava) echo "{name:'PIB',index:'PIB',align:'center', width:180,searchoptions:{sopt:['eq','ne','bw','cn']}},";"{name:'Napryam',index:'Napryam', align:'center',width:170,searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Norma',index:'Norma',align:'center',width:170,searchoptions:{sopt:['eq','ne','bw','cn']}},\n";($i=0;$i<count($date_array)-1;$i++)

{($i>0)",\n";"{name:'".$param_array[$i]."',index:'".$param_array[$i]."',align:'center',width:100,searchoptions:{sopt:['eq','ne','bw','cn']}}";

}"],\n";":10,:[10,20,30],: '#tabel_page',: true,: true,: 'desc',:false,:460,:875

});

$(".'"#tabel_list").jqGrid'."('navGrid','#tabel_page',{search:false,edit:false,add:false,del:false});rowData = $('#tabel_list').jqGrid('getCell',8,'vosemn_p');(rowData);

});";"</script>";

}'<h2>Ваш табель ще не заповнено!</h2>';

?>

Схема даного процесу подається на рис.3.4.


Рис. 3.4. Схема побудови таблиць


Прогнозування обсягу відпрацювання годин для провідника генерується на три місяці на сервері:


$id_dob_roz=$row[id_kalendar];

$query_string_param="…";//у кавичках знаходяться параментри

$query_string_value='';($i=0;$i<92;$i++)

{($i>0)

$query_string_value=$query_string_value.',';($i<92)

$query_string_value=$query_string_value."'".$p_doba."',";;($i+1<92)

$query_string_value=$query_string_value."'".$v_doba."',";;($i+2<92)

$query_string_value=$query_string_value."'".$t_doba."',";;($i+3<92)

$query_string_value=$query_string_value."'".$ch_doba."',";;($i+4<92)

$query_string_value=$query_string_value."'".$pya_doba."',";;($i+5<92)

$query_string_value=$query_string_value."'".$sh_doba."',";;($i+6<92)

$query_string_value=$query_string_value."'".$s_doba."'";;

$i=$i+6;(substr($query_string_value,-1)==',')

$query_string_value=substr($query_string_value,0,strlen($query_string_value)-1);

$query="INSERT into tabel(".$query_string_param.")values('".$FIO."','".$Napryamok."','".$Norma."',".$query_string_value.",'".$start_poezdka."','".$id_dob_roz."');";_query($query) or die(mysql_error());;


Редагування в таблицях відбувається за допомогою ajax-запиту. Завдяки йому дані передаються до php-скрипту і вносяться в БД. Під редагуванням мається на увазі видалення, додавання та редагування даних таблиці. Код редагування розглянемо на прикладі таблиці «Індивідуальний маршрутний лист»:


<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$FIO = $_POST['FIO'];

$yavka = $_POST['yavka'];

$Potyag = $_POST['Potyag'];

$Napryamok = $_POST['Napryamok'];

$Uhod = $_POST['Uhod'];

$nomer_vagona = $_POST['nomer_vagona'];

$Norma = $_POST['Norma'];

$Hvostovyi = $_POST['Hvostovyi'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='Individ_marsh_listy';($operaciya)

{'add':_query("INSERT into $tb_name(FIO,yavka,Potyag,Napryamok,Uhod,nomer_vagona,Norma,Hvostovyi)(

'".$FIO."',

'".$yavka."',

'".$Potyag."',

'".$Napryamok."',

'".$Uhod."',

'".$nomer_vagona."',

'".$Norma."',

'".$Hvostovyi."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$FIO."',='".$yavka."',='".$Potyag."',='".$Napryamok."',='".$Uhod."',_vagona='".$nomer_vagona."',='".$Norma."',='".$Hvostovyi."'_Individ_marsh_listy='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_Individ_marsh_listy=".$id);;


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


3.3 Практичні рекомендації до використання


Доступ до тестової версії мобільного робочого місця «Нарядчик поїзних бригад» здійснюється за адресою #"justify">Що стосується реєстрації, то кожному користувачеві адміністратор сайту присвоює табельний номер та посаду. Після чого, видає табельний номер користувачеві. Завдяки цьому, можлива успішна реєстрація. Взагалі табельний номер потрібен для більшої конфеденціальності, адже без нього будь-яка стороння людина зможе зайти на сайт. Окрім табельного номера потрібно ввести: ПІБ, логін та пароль, який потрібно ще раз підтвердити (див. рис. 3.6). Після вдало введених даних, користувач буде пере направлений на стартову сторінку сайту.


Рис. 3.5. Стартова сторінка сайту


Рис. 3.6. Сторінка реєстрації

Як вже було сказано, виділено три ролі користувачів, відповідно до яких, користувач бачить різний контент сторінки. Адміністратору будуть відкриті такі розділи меню: «Маршрутні листи», «Бригади», «Графіки», «Користувачі», «Дані» та «Вихід».

Адміністраторові одразу відкривається меню «Маршрутні листи», у якому дві вкладки з таблицями «Бригадні маршрутні листи» та «Індивідуальні маршрутні листи» (див. рис.3.7). Адміністратор сайту має можливості додавання даних, редагування, видалення та пошуку за таблицями.


Рис. 3.7. Вікно з меню «Маршрутні листи»


Наступним пунктом меню є «Бригади». У даному меню дві таблиці: «Вибір бригади» та «Склад бригади». Завдяки даним таблицям, користувач отримує можливість перегляду інформації про те, хто знаходиться у складі бригади певного начальника потягу. Для цього потрібно натиснути в першій таблиці на прізвище начальника. У другій таблиці зявиться перелік людей з даної бригади. Це можна побачити на рисунку 3.8.


Рис. 3.8. Меню «Бригади»

Наступним пунктом меню є «Графіки». Дане меню відкриває таблицю «Добовий розрахунок робочого часу поїздним бригадам» (рис. 3.9.). За даними таблиці (оновлення якої, здійснюється раз на три місяці), генерується «Табель провідника».


Рис. 3.9. Меню «Графіки»


У пункті меню «Користувачі» (рис. 3.10) адміністратор для реєстрації користувачів на сайті, додає записи з табельними номерами та посадами. Такі дані, як ПІБ та логін заповнюються автоматично під час реєстрації користувача.


Рис. 3.10. Меню «Користувачі»


Пункт меню «Дані» зберігає в собі дві таблиці «Напрями» та «Норма» (рис. 3.11). Вони слугують для подальшого вибору в інших таблицях напрямку та норми. Як і всі інші, дані таблиці підлягають редагуванню, додаванню та видаленню записів, а також пошуку необхідних відомостей у них.

Рис. 3.11. Меню «Дані»


Користувач-нарядчик отримає можливість перегляду та редагуванню всіх таблиць, за виключенням таблиці «Користувачі». На даному етапі роботи, головною задачею нарядчика є заповнення таких таблиць: «Індивідуальний маршрутний лист», «Добовий розрахунок робочого часу поїздним бригадам» та редагування таблиці «Табель провідника». Для процедури редагування нарядчик матиме можливість обрати провідника. Даний процес зображено на рисунку 3.12.


Рис. 3.12. Вибір провідника


Після цього відкриється табель провідника (рис. 3.13).


Рис. 3.13. Редагування табелю провідника

Якщо користувач зайде до системи з правами провідника, його огляду нададуться лише такі пункти меню, як «Індивідуальний маршрутний лист» (рис. 3.14) та «Табель провідника» (рис. 3.15) без права коригування таблиць.


Рис. 3.14. «Індивідуальний маршрутний лист» (режим користувача з роллю «провідник»)


Рис. 3.15. «Табель провідника»


Для завершення роботи з системою достатньо натиснути кнопку «Вихід». Після її натискання, користувач незалежно від його ролі, повернеться на стартову сторінку сайту. МРМ «Нарядчик поїзних бригад» було розроблено у вигляді сайту, що у порівнянні з автоматизованими системами управліннями, якими користаються на Укрзалізниці, має ряд переваг, а саме: доступність, простота розповсюдження, зручність супроводу, ефективність та оперативність оновлення бази знань системи.

Використання мобільного робочого місця «Нарядчик поїзних бригад» надає такі можливості:

вести облік користувачів сайту, членів бригад, напрямків та ін.;

вести облік та контроль табелів провідників, індивідуальних та бригадних маршрутних листів;

прогнозування табелів для провідників на основі добового розрахунку робочого часу поїздним бригадам. Для розробки мобільного робочого місця нарядчика пасажирської вагонної дільниці була використана така конфігурація: HTML, CSS, JavaScript, PHP, MYSQL.

Мобільне робоче місце «Нарядчик поїзних бригад» у вигляді сайту потребує доопрацювання з метою розширення функціоналу.


ВИСНОВКИ


В ході дослідження отримані такі основні результати:

1. вивчено зміст проблеми автоматизації робочого місця нарядчика пасажирської вагонної дільниці;

. проаналізовано існуючі рішення проблеми автоматизації робочого місця нарядчика;

. здійснено концептуальне проектування структури мобільного робочого місця «Нарядчик поїзних бригад»;

. описано функціональні характеристики інструментальних засобів, обраних для розробки мобільного робочого місця «Нарядчик поїзних бригад»;

. реалізовано окремі функції мобільного робочого місця «Нарядчик поїзних бригад».

Мобільне робоче місце реалізовано у вигляді сайта із базою даних, що дозволяє в мінімальні терміни провести швидке опрацювання даних. Він легкий у використанні, завдяки зручному інтерфейсу. Саме завдяки цьому будь-який користувач зможе адаптуватися до свого місця роботи і ознайомитися з даними, необхідними йому надалі.

За допомогою створеного мобільного робочого місця «Нарядчик поїзних бригад» користувач має можливість коректно автоматизувати такі ключові моменти роботи нарядчика:

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

на основі добового розрахунку робочого часу поїздним бригадам, прогнозується табель провідника на три місяці.

З'явилася можливість забезпечувати централізоване зберігання інформації, зменшує витрати часу на введення даних і видалення даних, швидкий відбір і пошук інформації завдяки високій швидкості роботи.

ПЕРЕЛІК ВИКОРИСТАНИХ ДЖЕРЕЛ


1.Босова И.Н. Разработка образовательных программ по информатике на вариативной основе и индивидуальных учебных планов <#"justify">4.Веллинг Л.. МуSQL - учебное пособие. // Люк Велинг, Лора Томпсон- К.: Вильямс, 2006. - 304с.

5.Как происходит процесс разработки создания сайта? [Электронный ресурс]. - Режим доступу// #"justify">6.Коггзолл Дж. Полное руководство РНР5.//Дж. Коггзолл - К.: Вильямс, 2006-752с.

.Кузнецов М.В., Симдянов Й.В. РНР 5: Самоучитель.//М.В. Кузнецов - К.: ВHV, 2009-672с.

8.Лабберс П., Олберс Б., Салим Ф. HTML5 для профессионалов: мощные инструменты для разработки современных веб-приложений = Pro HTML5 Programming: Powerful APIs for Richer Internet Application Development// П. Лабберс, Б. Олберс, Ф. Салим- М.: «Вильямс» <#"justify">9.Обзор CMS. Портал, посвященных системам управления контентом. [Электронный ресурс]. - Режим доступу// #"justify">.Портал CMSList.ru. Русскоязычный проект, посвященных системам управления контентом [Электронный ресурс]. - Режим доступу// #"justify">11.Ромашев В. CMS Drupal: Система управления содержимым сайта.// В. Ромашев- Питер, 2010.- 255с.

12.Скляр Д, Трахтенберг А. РНР. Сборник рецептов. // Д. Скляр, А. Трантенберг- К.: Символ-Плюс, 2005- 672с.

13.Солошенко В.Н. Автоматизированная система коммерческого осмотра поездов и вагонов. Пособие для приемщиков поездов: Учебное пособие / В.Н. Солошенко, Т.А. Винокурова, Е.А. Иконников и др.; под ред. В.Н.Солошенко.-М.:ГОУ «Учебно-методический центр по образованию на железнодорожном транспорте»,2008. - С.5-10.

14.Титтел Эд., Джефф Н. HTML, XHTML и CSS для чайников, 7-е издание = HTML, XHTML & CSS For Dummies, 7th Edition// Эд. Титтел, Н. Джефф- М.: «Диалектика» <#"justify">15.Томпсон Л., Коув А., Новицки С., Гудман Х-А. РНР 5 для профессионалов. РНР5.//Л. Томпсон, А. Коув, С. Новицки.,

Х-А. Гудман - К.: Вильямс, 2006. - 608с.

16.Фримен Э, Фримен Эл. Изучаем HTML, XHTML и CSS = Head First HTML with CSS & XHTML.- 1-е изд.//Э. Фримен, Эл. Фример- М.: «Питер» <#"justify">18.Шлосснейгл Дж. Профессиональное программирование на РНР. Вильямс, 2005- 624с.

19.JQuery UI. [Электронный ресурс]. - Режим доступу// <#"justify">ДОДАТКИ


Додаток А


Таблиця А.1. Структура таблиці «Табель провідника» / «tabel»

Назва поля (українською)Назва поля (англійською)Тип данихДовжина, байтКлючПриміткаКод провідникаid_provodnikaint11PKАвтоматично інкремоване числоПІБPIBvarchar100ALTНапрямNapryamvarchar100ALTНормаNormavarchar6ALTПерший першогоperv_pfloatALTПерший день першого місяцяДругий першогоvtor_pfloatALTДругий день першого місяцяТретій першогоtret_pfloatALTТретій день першого місяцяЧетвертий першогоchet_pfloatALTЧетвертий день першого місяцяПятий першогоpyat_pfloatALTПятий день першого місяцяШостий першогоshest_pfloatALTШостий день першого місяцяСьомий першогоsedm_pfloatALTСьомий день першого місяцяВосьмий першогоvosm_pfloatALTВосьмий день першого місяцяДеятий першогоdevyat_pfloatALTДеятий день першого місяцяДесятий першогоdesyat_pfloatALTДесятий день першого місяцяОдинадцятий першогоodinadc_pfloatALTОдинадцятий день першого місяцяДванадцятий першогоdvenadc_pfloatALTДванадцятий день першого місяцяТринадцятий першогоtrenadc_pfloatALTТринадцятий день першого місяцяЧотирнадцятий першогоchetyrn_pfloatALTЧотирнадцятий день першого місяцяПятнадцятий першогоpyatn_pfloatALTПятнадцятий день першого місяцяШіснадцятий першогоshestn_pfloatALTШіснадцятий день першого місяцяСімнадцятий першогоsemn_pfloatALTСімнадцятий день першого місяцяВісімнадцятий першогоvosemn_pfloatALTВісімнадцятий день першого місяцяДевятнадцятий першогоdevyatn_pfloatALTДевятнадцятий день першого місяцяДвадцятий першогоdvadc_pfloatALTДвадцятий день першого місяцяДвадцять перший першогоdvadc_perv_pfloatALTДвадцять перший день першого місяцяДвадцять другий першогоdvadc_vtor_pfloatALTДвадцять другий день першого місяцяДвадцять третій першогоdvadc_tret_pfloatALTДвадцять третій день першого місяцяДвадцять четвертий першогоdvadc_chetv_pfloatALTДвадцять четвертий першогоДвадцять пятий першогоdvadc_pyat_pfloatALTДвадцять пятий день першого місяцяДвадцять шостий першогоdvadc_shest_pfloatALTДвадцять шостий першогоДвадцять сьомий першогоdvadc_sedm_pfloatALTДвадцять сьомий день першого місяцяДвадцять восьмий першогоdvadc_vosm_pfloatALTДвадцять восьмий день першого місяцяДвадцять восьмий першогоdvadc_vosm_pfloatALTДвадцять восьмий день першого місяцяДвадцять девятий першогоdvadc_devyat_pfloatALTДвадцять девятий день першого місяцяТридцятий першогоtredcatoe_pfloatALTТридцятий день першого місяцяТридцять перший першогоtredcat_perv_pfloatALTТридцять перший день першого місяцяПерший другогоperv_vfloatALTПерший день другого місяцяДругий другогоvtor_vfloatALTДругий день другого місяцяТретій другогоtret_vfloatALTТретій день другого місяцяЧетвертий другогоchet_vfloatALTЧетвертий день другого місяцяПятий другогоpyat_vfloatALTПятий день другого місяцяШостий другогоshest_vfloatALTШостий день другого місяцяСьомий другогоsedm_vfloatALTСьомий день другого місяцяВосьмий другогоvosm_vfloatALTВосьмий день другого місяцяДевятий другогоdevyat_vfloatALTДевятий день другого місяцяДесятий другогоdesyat_vfloatALTДесятий день другого місяцяОдинадцятий другогоodinadc_vfloatALTОдинадцятий день другого місяцяДванадцятий другогоdvenadcat_vfloatALTДванадцятий день другого місяцяТринадцятий другогоtrenadcat_vfloatALTТринадцятий день другого місяцяЧотирнадцятий другогоchetyrn_vfloatALTЧотирнадцятий день другого місяцяПятнадцятий другогоpyatnadc_vfloatALTПятнадцятий день другого місяцяШіснадцятий другогоshestnadc_vfloatALTШіснадцятий день другого місяцяСімнадцятий другогоsemnadc_vfloatALTСімнадцятий день другого місяцяВісімнадцятий другогоvosemnadc_vfloatALTВісімнадцятий день другого місяцяДевятнадцятий другогоdevyatnadc_vfloatALTДевятнадцятий день другого місяцяДвадятий другогоdvadcat_vfloatALTДвадятий день другого місяцяДвадцять перший другогоdvadcat_perv_vfloatALTДвадцять перший день другого місяцяДвадцять другий другогоdvadcat_vtor_vfloatALTДвадцять другий день другого місяцяДвадцять третій другогоdvadcat_tret_vfloatALTДвадцять третій день другого місяцяДвадцять четвертий другогоdvadcat_chetv_vfloatALTДвадцять четвертий день другого місяцяДвадцять пятий другогоdvadcat_pyat_vfloatALTДвадцять пятий день другого місяцяДвадцять шостий другогоdvadcat_shest_vfloatALTДвадцять шостий день другого місяцяДвадцять сьомий другогоdvadcat_sedm_vfloatALTДвадцять сьомий день другого місяцяДвадцять восьмий другогоdvadcat_vosm_vfloatALTДвадцять восьмий день другого місяцяДвадцять девятий другогоdvadcat_devyat_vfloatALTДвадцять девятий день другого місяцяТридцятий другогоtridcatoe_vfloatALTТридцятий день другого місяцяПерший третьогоper_tfloatALTПерший день третього місяцяДругий третьогоvtor_tfloatALTДругий день третього місяцяТретій третьогоtret_tfloatALTТретій день третього місяцяЧетвертий третьогоchet_tfloatALTЧетвертий день третього місяцяПятий третьогоpyat_tfloatALTПятий день третього місяцяШостий третьогоshest_tfloatALTШостий день третього місяцяСьомий третьогоsedm_tfloatALTСьомий день третього місяцяВосьмий третьогоvosm_tfloatALTВосьмий день третього місяцяДевятий третьогоdevyat_tfloatALTДевятий день третього місяцяДесятий третьогоdesyat_tfloatALTДесятий день третього місяцяОдинадцятий третьогоodinadc_tfloatALTОдинадцятий день третього місяцяДванадцятий третьогоdvenadc_tfloatALTДванадцятий день третього місяцяТринадцятий третьогоtrinadc_tfloatALTТринадцятий день третього місяцяЧотирнадцятий третьогоchetyrn_tfloatALTЧотирнадцятий день третього місяцяПятнадцятий третьогоpyatn_tfloatALTПятнадцятий день третього місяцяШіснадцятий третьогоshestn_tfloatALTШіснадцятий день третього місяцяСімнадцятий третьогоsemn_tfloatALTСімнадцятий день третього місяцяВісімнадцятий третьогоvosemn_tfloatALTВісімнадцятий день третього місяцяДевятнадцятий третьогоdevyatn_tfloatALTДевятнадцятий день третього місяцяДвадцятий третьогоdvadc_tfloatALTДвадцятий день третього місяцяДвадцять перший третьогоdvadcat_perv_tfloatALTДвадцять перший день третього місяцяДвадцять другий третьогоdvadcat_vtor_tfloatALTДвадцять другий день третього місяцяДвадцять третій третьогоdvadcat_tret_tfloatALTДвадцять третій день третього місяцяДвадцять четвертий третьогоdvadcat_chetv_tfloatALTДвадцять четвертий день третього місяцяДвадцять пятий третьогоdvadcat_pyat_tfloatALTДвадцять пятий день третього місяцяДвадцять шостий третьогоdvadca_shest_tfloatALTДвадцять шостий день третього місяцяДвадцять сьомий третьогоdvadcat_sedm_tfloatALTДвадцять сьомий день третього місяцяДвадцять восьмий третьогоdvadcat_vosm_tfloatALTДвадцять восьмий день третього місяцяДвадцять девятий третьогоdvadcat_devyat_tfloatALTДвадцять девятий день третього місяцяТридцяте третьогоtridcatoe_tfloatALTТридцятий день третього місяцяТридцять перше третьогоtridc_per_tfloatALTТридцять перший день третього місяцяСтартова поїздкаstart_poezdkadatetimeALTКод добового розрахункуid_dob_rozInt11ALT

Додаток Б

програмний автоматизація робочий місце

Програмна реалізація індексної сторінки

<?php include $_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';(isset($_POST['login']) && isset($_POST['password']))

{

$login =mysql_real_escape_string($_POST['login']);

$password = md5($_POST['password']);

$query = "SELECT `id``polzovateli``login`='{$login}' AND `password`='{$password}'1";

$sql = mysql_query($query) or die(mysql_error());(mysql_num_rows($sql) == 1)

{

$row = mysql_fetch_assoc($sql);_start();

$_SESSION['user_login'] = $login;("Location: /php/menu.php?marshrut"); exit();

}

{

$error='*Помилка авторизації!';

}

}

?>

<?php

$page='Автоматизоване робоче місце нарядчика пасажирської вагонної дільниці';$_SERVER['DOCUMENT_ROOT'].'/php/header.php';

?>

<div id="login_fild">

<form action="index.php" method="POST">

<table id="login">

<td><b>Введіть логін:</b></td>

<td><input>

<td><b>Введіть пароль:</b></td>

<td><input>

<td><input type="submit">

<td><input type="button">

<td><b><font color="red"><?php echo $error; ?></font></b></td>

</tr>

</table>

</form>

</div>

<?php include $_SERVER['DOCUMENT_ROOT'].'/php/footer.php';?>


Додаток В


Програмна реалізація сторінки користувача

Лістинг «menu.php»

<?php

$vse_prava='Адмін';

$providnik='Провідник';$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';_start();

$login = $_SESSION['user_login'];

$query = "SELECT `id``polzovateli``login`='{$login}'1";

$sql = mysql_query($query) or die(mysql_error());(mysql_num_rows($sql) == 0) {($_SESSION['user_login']);_destroy();("Location: index.php"); exit();

}

$result=mysql_query("SELECT * FROM `polzovateli` WHERE login='{$login}'");

$row=mysql_fetch_array($result);

$FIO=$row[FIO];

$tabnomer=$row[tabnomer];

$doljnost=$row[doljnost];

$select_menu = $_SERVER['QUERY_STRING'];($select_menu)

{'exit':($_SESSION['user_login']);_destroy();("Location: ../index.php"); exit();;'marshrut':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/marshrut_list.php';

$name_page='Маршрутні листи';;'grafiki':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/grafiki.php';

$name_page='Графіки';;'polzovateli':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/polzovateli.php';

$name_page='Користувачі';;'glavnoe':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/glavnoe.php';

$name_page='Про систему';;'redaktirovanie':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/redaktirovanie.php';

$name_page='Дані';;'brigadi':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/brigadi.php';

$name_page='Бригади';;'tabel_provodnika':

$url=$_SERVER['DOCUMENT_ROOT'].'/php/tabel_provodnika.php';

$name_page='Табель провідника';;

}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>

<?php(isset($name_page))$name_page;'Автоматизоване робоче місце нарядчика пасажирської вагонної дільниці';?>

</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<link rel="stylesheet" type="text/css" href="../css/style.css" />

<link rel="stylesheet" type="text/css" media="screen" href="../css/dot-luv/jquery-ui.css" />

<link rel="stylesheet" type="text/css" media="screen" href="../css/ui.jqgrid.css" mce_href="css/ui.jqgrid.css" />

<link rel="stylesheet" type="text/css" href="../css/jquery-ui-timepicker-addon.css" />

<script type="text/javascript" src="../js/jquery-1.9.1.js"></script>

<script type="text/javascript" src="../js/jquery-ui-1.10.2.custom.min.js"></script>

<script type="text/javascript" src="../js/i18n/grid.locale-ru.js"></script>

<script type="text/javascript" src="../js/jquery.jqGrid.min.js"></script>

<script type="text/javascript" src="../js/jquery-ui-timepicker-addon.js"></script>

</head>

<body>

<ul>

<?php($doljnost==$vse_prava)'<li>

<li>

</ul>

<div id="wholog">

Ви увійшли як <?php echo $FIO;?>; табельнмй номер: <?php echo $tabnomer;?>

<?php($doljnost==$providnik)'<p>Сьогодні: '.date('Y-m-d').'<p>Норма:173 ч.<p>Відпрацьовано:<div id="vidpraciovano"></div>';

?>

</div>

<div id="content">

<?php if(isset($url))

{($url==$_SERVER['DOCUMENT_ROOT'].'/php/polzovateli.php')

{($doljnost==$vse_prava)$url;

}($url==$_SERVER['DOCUMENT_ROOT'].'/php/tabel_provodnika.php')

{($doljnost==$providnik || $doljnost==$vse_prava)$url;

}$url;

}

?>

</div>

<div id="footer" align="center">

Розробник: Єрмошина Анастасія <?php echo date('Y')?> рік

</div>

</body>

</html>


Додаток Г


Програмна реалізація заповнення таблиць

Лістинг «bd_brig_list.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="brigadnie_marsh_listy";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_br_mr_list];

$responce->rows[$i]['cell']=array($row[nomer_brigady],$row[nachalnik_potyaga],$row[potyag],$row[napryam],substr($row[yavka],0,16),substr($row[uhod],0,16));

$i++;

}json_encode($responce);

?>

Лістинг «bd_brigada.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="brigady";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_brig];

$responce->rows[$i]['cell']=array($row[Nomer_brigady],$row[nachalnik_poezda]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_chleni_brigadi.php»

<?php

$q = $_GET["q"];

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];

$id = $_GET['id'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="chleny_brigady";($q)

{1:

$result = mysql_query("SELECT COUNT(*) AS count FROM $tb_name WHERE id_chlena=".$id);

$row = mysql_fetch_array($result);

$count = $row['count'];( $count >0 )

{

$total_pages = ceil($count/$limit);

}

{

$total_pages = 0;

}

($page > $total_pages)

$page=$total_pages;

$start = $limit*$page - $limit;($start<0)

$start = 0;

$SQL = "SELECT * FROM $tb_name WHERE id_chlena=".$id." ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn?t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result))

{

$responce->rows[$i]['id']=$row[id_brigady];

$responce->rows[$i]['cell']=array($row[tab_nomer],$row[PIB_chlena_brig]);

$i++;

}json_encode($responce);;

}

?>

Лістинг «bd_config.php»

<?php

$db=mysql_connect('mysql.hostinger.com.ua','u757735049_admin','4052552')or die("Помилка!Не можливо з'єднатися з сервером mysql!" . mysql_error());_select_db("u757735049_naryad") or die("Error conecting to db.");

?>

Лістинг «bd_ind_list.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];

$fio=$_GET['fio'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Individ_marsh_listy";(isset($fio))

$query = "SELECT COUNT(*) AS count FROM $tb_name WHERE FIO='".$fio."'";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = $_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = $_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = $_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = $_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

$qWhere=$qWhere." AND";

}

}(isset($fio))

$SQL = "SELECT * FROM $tb_name WHERE $qWhere FIO='".$fio."' ORDER BY $sidx $sord LIMIT $start , $limit";

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_Individ_marsh_listy];(isset($fio))

$responce->rows[$i]['cell']=array(substr($row[yavka],0,16),$row[Potyag],$row[Napryamok],substr($row[Uhod],0,16),$row[nomer_vagona],$row[Norma],$row[Hvostovyi]);

$responce->rows[$i]['cell']=array($row[FIO],substr($row[yavka],0,16),$row[Potyag],$row[Napryamok],substr($row[Uhod],0,16),$row[nomer_vagona],$row[Norma],$row[Hvostovyi]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_kalendar_list.php»

<?php

$page = $_GET['page']; $= $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Kalendar";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_kalendar];

$responce->rows[$i]['cell']=array($row[FIO],$row[nomer_potyaga],$row[Napryamok],substr($row[Start_poezdka],0,16),substr($row[Yavka],0,16),substr($row[Uhod],0,16),$row[Norma],$row[p_doba],$row[v_doba],$row[t_doba],$row[ch_doba],$row[pya_doba],$row[sh_doba],$row[s_doba],$row[Vsogo]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_napryamok.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Napryamok";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result))

{

$responce->rows[$i]['id']=$row[id_napryamok];

$responce->rows[$i]['cell']=array($row[napryamok]);

$i++;

}json_encode($responce);

?>


Лістинг «bd_norma.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Norma";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_norma];

$responce->rows[$i]['cell']=array($row[norma]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_polzovateli.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="polzovateli";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id];

$responce->rows[$i]['cell']=array($row[tabnomer],$row[FIO],$row[doljnost],$row[login]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_rabota.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Rabota";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = "WHERE ".$_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = "WHERE ".$_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '".$_GET['searchString']."%'";'cn':

$qWhere = "WHERE ".$_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

}

}

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result))

{

$responce->rows[$i]['id']=$row[id__rabota];

$responce->rows[$i]['cell']=array($row[Nazvanie]);

$i++;

}json_encode($responce);

?>

Лістинг «bd_tab_list_provodnik.php»

<?php

$page = $_GET['page'];

$limit = $_GET['rows'];

$sidx = $_GET['sidx'];

$sord = $_GET['sord'];

$fio=$_GET['fio'];(!$sidx) $sidx =1;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="tabel";(isset($fio))

$query = "SELECT COUNT(*) AS count FROM $tb_name WHERE PIB='".$fio."'";

$query = "SELECT COUNT(*) AS count FROM $tb_name";

$result=mysql_query($query) or die(mysql_error());

$row=mysql_fetch_array($result);

$count = $row['count'];( $count >0 ) {

$total_pages = ceil($count/$limit);

} else {

$total_pages = 0;

}($page > $total_pages) $page=$total_pages;

$start = $limit*$page - $limit;(isset($_GET['_search']) && $_GET['_search'] == 'true')

{(isset($_GET['searchOper']))

{($_GET['searchOper'])

{'eq':

$qWhere = $_GET['searchField']."='".$_GET['searchString']."'";;'ne':

$qWhere = $_GET['searchField']."<>'".$_GET['searchString']."'";;'bw':

$qWhere = $_GET['searchField']." LIKE '".$_GET['searchString']."%'";;'cn':

$qWhere = $_GET['searchField']." LIKE '%".$_GET['searchString']."%'";;: throw new Exception('Условие не существует!');

}

$qWhere=$qWhere." AND";

}

}(isset($fio))

$SQL = "SELECT * FROM $tb_name WHERE $qWhere PIB='".$fio."' ORDER BY $sidx $sord LIMIT $start , $limit";

$SQL = "SELECT * FROM $tb_name $qWhere ORDER BY $sidx $sord LIMIT $start , $limit";

$result = mysql_query( $SQL ) or die("Couldn t execute query.".mysql_error());

$responce->page = $page;

$responce->total = $total_pages;

$responce->records = $count;

$i=0;($row = mysql_fetch_array($result)) {

$responce->rows[$i]['id']=$row[id_provodnika];(isset($fio))

$responce->rows[$i]['cell']=array(

$row[Napryam],$row[Norma],

$row[perv_p],$row[vtor_p],

$row[tret_p],$row[chet_p],

$row[pyat_p],$row[shest_p],

$row[sedm_p],$row[vosm_p],

$row[devyat_p],$row[desyat_p],

$row[odinadc_p],$row[dvenadc_p],

$row[trenadc_p],$row[chetyrn_p],

$row[pyatn_p],$row[shestn_p],

$row[semn_p],$row[vosemn_p],

$row[devyatn_p],$row[dvadc_p],

$row[dvadc_perv_p],$row[dvadc_vtor_p],

$row[dvadc_tret_p],$row[dvadc_chetv_p],

$row[dvadc_pyat_p],$row[dvadc_shest_p],

$row[dvadc_sedm_p],$row[dvadc_vosm_p],

$row[dvadc_devyat_p],$row[tredcatoe_p],

$row[tredcat_perv_p],$row[perv_v],

$row[vtor_v],$row[tret_v],

$row[chet_v],$row[pyat_v],

$row[shest_v],$row[sedm_v],

$row[vosm_v],$row[devyat_v],

$row[desyat_v],$row[odinadc_v],

$row[dvenadcat_v],$row[trenadcat_v],

$row[chetyrn_v],$row[pyatnadc_v],

$row[shestnadc_v],$row[semnadc_v],

$row[vosemnadc_v],$row[devyatnadc_v],

$row[dvadcat_v],$row[dvadcat_perv_v],

$row[dvadcat_vtor_v],$row[dvadcat_tret_v],

$row[dvadcat_chetv_v],$row[dvadcat_pyat_v],

$row[dvadcat_shest_v],$row[dvadcat_sedm_v],

$row[dvadcat_vosm_v],$row[dvadcat_devyat_v],

$row[tridcatoe_v],$row[per_t],

$row[vtor_t],$row[tret_t],

$row[chet_t],$row[pyat_t],

$row[shest_t],$row[sedm_t],

$row[sedm_t],$row[devyat_t],

$row[desyat_t],$row[odinadc_t],

$row[dvenadc_t],$row[trinadc_t],

$row[chetyrn_t],$row[pyatn_t],

$row[shestn_t],$row[semn_t],

$row[vosemn_t],$row[devyatn_t],

$row[dvadc_t],$row[dvadcat_perv_t],

$row[dvadcat_vtor_t],$row[dvadcat_tret_t],

$row[dvadcat_chetv_t],$row[dvadcat_pyat_t],

$row[dvadca_shest_t],$row[dvadcat_sedm_t],

$row[dvadcat_vosm_t],$row[dvadcat_devyat_t],

$row[tridcatoe_t],$row[tridc_per_t]

);

$i++;

}json_encode($responce);

?>


Додаток Д


Програмна реалізація редагування таблиць

Лістинг «edit_brig_list.php»

<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$nomer_brigady = $_POST['nomer_brigady'];

$nachalnik_potyaga = $_POST['nachalnik_potyaga'];

$potyag = $_POST['potyag'];

$napryam = $_POST['napryam'];

$yavka = $_POST['yavka'];

$uhod = $_POST['uhod'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='brigadnie_marsh_listy';($operaciya)

{'add':_query("INSERT into $tb_name(nomer_brigady,nachalnik_potyaga,potyag,napryam,yavka,uhod)(

'".$nomer_brigady."',

'".$nachalnik_potyaga."',

'".$potyag."',

'".$napryam."',

'".$yavka."',

'".$uhod."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name_brigady='".$nomer_brigady."',_potyaga='".$nachalnik_potyaga."',='".$potyag."',='".$napryam."',='".$yavka."',='".$uhod."'_br_mr_list='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_br_mr_list=".$id);;

}

?>

Лістинг «edit_brigada.php»

<?php$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="brigady";

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$Nomer_brigady = $_POST['Nomer_brigady'];

$nachalnik_poezda = $_POST['nachalnik_poezda'];($operaciya)

{'add':_query("INSERT into $tb_name(Nomer_brigady,nachalnik_poezda)(

'".$Nomer_brigady."',

'".$nachalnik_poezda."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name_brigady='".$Nomer_brigady."',_poezda='".$nachalnik_poezda."',_brig='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_brig=".$id)die(mysql_error());_query("DELETE from `chleny_brigady` where id_brigady=".$id)die(mysql_error());;

}

?>

Лістинг «edit_chleni_brigadi»

<?php

$tb_name="chleny_brigady";

$q = $_GET['q'];

$id = $_POST['id'];

$operaciya =$_POST['oper'];

$id_chlena = $_GET['id_chlena'];

$tab_nomer = $_POST['tab_nomer'];

$PIB_chlena_brig = $_POST['PIB_chlena_brig'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';($q==1)

{($operaciya)

{'add':_query("INSERT into $tb_name(id_chlena,tab_nomer,PIB_chlena_brig)(

'".$id_chlena."',

'".$tab_nomer."',

'".$PIB_chlena_brig."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name_chlena='".$id_chlena."',_nomer='".$tab_nomer."',_chlena_brig='".$PIB_chlena_brig."'_brigady='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_brigady=".$id)die(mysql_error());;

}

}

?>

Лістинг «edit_ind_list.php»

<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$FIO = $_POST['FIO'];

$yavka = $_POST['yavka'];

$Potyag = $_POST['Potyag'];

$Napryamok = $_POST['Napryamok'];

$Uhod = $_POST['Uhod'];

$nomer_vagona = $_POST['nomer_vagona'];

$Norma = $_POST['Norma'];

$Hvostovyi = $_POST['Hvostovyi'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='Individ_marsh_listy';($operaciya)

{'add':_query("INSERT into $tb_name(FIO,yavka,Potyag,Napryamok,Uhod,nomer_vagona,Norma,Hvostovyi)(

'".$FIO."',

'".$yavka."',

'".$Potyag."',

'".$Napryamok."',

'".$Uhod."',

'".$nomer_vagona."',

'".$Norma."',

'".$Hvostovyi."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$FIO."',='".$yavka."',='".$Potyag."',='".$Napryamok."',='".$Uhod."',_vagona='".$nomer_vagona."',='".$Norma."',='".$Hvostovyi."'_Individ_marsh_listy='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_Individ_marsh_listy=".$id);;

}

?>

Лістинг «edit_kalendar_list.php»

<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$FIO = $_POST['FIO'];

$nomer_potyaga = $_POST['nomer_potyaga'];

$Napryamok = $_POST['Napryamok'];

$start_poezdka = $_POST['Start_poezdka'];

$Yavka = $_POST['Yavka'];

$Uhod = $_POST['Uhod'];

$Norma = $_POST['Norma'];

$Vsogo = $_POST['Vsogo'];

$p_doba = $_POST['p_doba'];

$v_doba = $_POST['v_doba'];

$t_doba = $_POST['t_doba'];

$ch_doba = $_POST['ch_doba'];

$pya_doba = $_POST['pya_doba'];

$sh_doba = $_POST['sh_doba'];

$s_doba = $_POST['s_doba'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='Kalendar';($operaciya)

{'add':_query("INSERT into $tb_name(FIO,nomer_potyaga,Napryamok,Start_poezdka,Yavka,Uhod,Vsogo,Norma,p_doba,v_doba,t_doba,ch_doba,pya_doba,sh_doba,s_doba)(

'".$FIO."',

'".$nomer_potyaga."',

'".$Napryamok."',

'".$start_poezdka."',

'".$Yavka."',

'".$Uhod."',

'".($p_doba+$v_doba+$t_doba+$ch_doba+$pya_doba+$sh_doba+$s_doba)."',

'".$Norma."',

'".$p_doba."',

'".$v_doba."',

'".$t_doba."',

'".$ch_doba."',

'".$pya_doba."',

'".$sh_doba."',

'".$s_doba."'

);")die(mysql_error());

$row=mysql_fetch_array(mysql_query("SELECT * FROM $tb_name WHERE FIO='".$FIO."'"));

$id_dob_roz=$row[id_kalendar];

$query_string_param="PIB,,Norma,perv_p,vtor_p,tret_p,chet_p,_p,shest_p,sedm_p,vosm_p,devyat_p,_p,odinadc_p,dvenadc_p,trenadc_p,_p,pyatn_p,shestn_p,semn_p, vosemn_p,_p,dvadc_p,dvadc_perv_p,dvadc_vtor_p,_tret_p,dvadc_chetv_p,_pyat_p, dvadc_shest_p,dvadc_sedm_p,_vosm_p, dvadc_devyat_p,tredcatoe_p,_perv_p, perv_v,vtor_v,tret_v,_v,pyat_v,shest_v,sedm_v,vosm_v,_v,desyat_v,odinadc_v,dvenadcat_v,_v,chetyrn_v,pyatnadc_v,shestnadc_v,_v,vosemnadc_v,devyatnadc_v,dvadcat_v,_perv_v,dvadcat_vtor_v,dvadcat_tret_v,_chetv_v,dvadcat_pyat_v,dvadcat_shest_v,_sedm_v,dvadcat_vosm_v,dvadcat_devyat_v,_v,per_t,vtor_t,tret_t,chet_t,_t, shest_t,sedm_t,vosm_t,devyat_t,_t,odinadc_t,dvenadc_t,trinadc_t,_t,pyatn_t, shestn_t,semn_t,vosemn_t,_t,dvadc_t,dvadcat_perv_t,_vtor_t,dvadcat_tret_t,dvadcat_chetv_t,_pyat_t,dvadca_shest_t, dvadcat_sedm_t,_vosm_t,dvadcat_devyat_t,tridcatoe_t,_per_t,start_poezdka,id_dob_roz";

$query_string_value='';($i=0;$i<92;$i++)

{($i>0)

$query_string_value=$query_string_value.',';($i<92)

$query_string_value=$query_string_value."'".$p_doba."',";;($i+1<92)

$query_string_value=$query_string_value."'".$v_doba."',";;($i+2<92)

$query_string_value=$query_string_value."'".$t_doba."',";;($i+3<92)

$query_string_value=$query_string_value."'".$ch_doba."',";;($i+4<92)

$query_string_value=$query_string_value."'".$pya_doba."',";;($i+5<92)

$query_string_value=$query_string_value."'".$sh_doba."',";;($i+6<92)

$query_string_value=$query_string_value."'".$s_doba."'";;

$i=$i+6;

}(substr($query_string_value,-1)==',')

$query_string_value=substr($query_string_value,0,strlen($query_string_value)-1);

$query="INSERT into tabel(".$query_string_param.")values('".$FIO."','".$Napryamok."','".$Norma."',".$query_string_value.",'".$start_poezdka."','".$id_dob_roz."');";_query($query) or die(mysql_error());;'edit':_query("UPDATE $tb_name='".$FIO."',_potyaga='".$nomer_potyaga."',='".$Napryamok."',_poezdka='".$start_poezdka."',='".$Yavka."',='".$Uhod."',='".($p_doba+$v_doba+$t_doba+$ch_doba+$pya_doba+$sh_doba+$s_doba)."',='".$Norma."',p_doba='".$p_doba."',_doba='".$v_doba."',t_doba='".$t_doba."',_doba='".$ch_doba."',_doba='".$pya_doba."',_doba='".$sh_doba."',s_doba='".$s_doba."'_kalendar='".$id."'

;")die(mysql_error());

$param_array=array(

"perv_p","vtor_p","tret_p","chet_p","pyat_p","shest_p",

"sedm_p","vosm_p","devyat_p","desyat_p","odinadc_p",

"dvenadc_p","trenadc_p","chetyrn_p","pyatn_p","shestn_p",

"semn_p","vosemn_p","devyatn_p","dvadc_p","dvadc_perv_p",

"dvadc_vtor_p","dvadc_tret_p","dvadc_chetv_p",

"dvadc_pyat_p","dvadc_shest_p","dvadc_sedm_p",

"dvadc_vosm_p","dvadc_devyat_p","tredcatoe_p",

"tredcat_perv_p","perv_v","vtor_v","tret_v","chet_v",

"pyat_v","shest_v","sedm_v","vosm_v","devyat_v","desyat_v",

"odinadc_v","dvenadcat_v","trenadcat_v","chetyrn_v",

"pyatnadc_v","shestnadc_v","semnadc_v","vosemnadc_v",

"devyatnadc_v","dvadcat_v","dvadcat_perv_v",

"dvadcat_vtor_v","dvadcat_tret_v","dvadcat_chetv_v",

"dvadcat_pyat_v","dvadcat_shest_v","dvadcat_sedm_v",

"dvadcat_vosm_v","dvadcat_devyat_v","tridcatoe_v","per_t","vtor_t", "tret_t","chet_t","pyat_t","shest_t",

"sedm_t","vosm_t","devyat_t","desyat_t","odinadc_t",

"dvenadc_t","trinadc_t","chetyrn_t","pyatn_t","shestn_t",

"semn_t","vosemn_t","devyatn_t","dvadc_t","dvadcat_perv_t",

"dvadcat_vtor_t","dvadcat_tret_t","dvadcat_chetv_t",

"dvadcat_pyat_t","dvadca_shest_t","dvadcat_sedm_t",

"dvadcat_vosm_t","dvadcat_devyat_t","tridcatoe_t",

"tridc_per_t");

$query="UPDATE tabel='".$FIO."',='".$Napryamok."',='".$Norma."',_poezdka='".$start_poezdka."',";

$query_string_value='';($i=0;$i<92;$i++)($i>0)

$query_string_value=$query_string_value.',';($i<92)

$query_string_value=$query_string_value.$param_array[$i]."="."'".$p_doba."',";;($i+1<92)

$query_string_value=$query_string_value.$param_array[$i+1]."="."'".$v_doba."',";;($i+2<92)

$query_string_value=$query_string_value.$param_array[$i+2]."="."'".$t_doba."',";;($i+3<92)

$query_string_value=$query_string_value.$param_array[$i+3]."="."'".$ch_doba."',";;($i+4<92)

$query_string_value=$query_string_value.$param_array[$i+4]."="."'".$pya_doba."',";;($i+5<92)

$query_string_value=$query_string_value.$param_array[$i+5]."="."'".$sh_doba."',";;($i+6<92)

$query_string_value=$query_string_value.$param_array[$i+6]."="."'".$s_doba."'";;

$i=$i+6;

}(substr($query_string_value,-1)==',')

$query_string_value=substr($query_string_value,0,strlen($query_string_value)-1);

$query=$query.$query_string_value." WHERE id_dob_roz=".$id;_query($query) or die(mysql_error());;'del':_query("DELETE from $tb_name where id_kalendar=".$id);_query("DELETE from tabel where id_dob_roz=".$id);;

}

?>

Лістинг «edit_napryamok.php»

<?php

$id = $_POST['id'];

$oper = $_POST['oper'];

$napryamok = $_POST['napryamok'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Napryamok";($oper)

{'add':_query("INSERT into $tb_name(napryamok)(

'".$napryamok."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$napryamok."'_napryamok='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_napryamok=".$id)die(mysql_error());;

}

?>

Лістинг «edit_norma.php»

<?php

$id = $_POST['id'];

$oper = $_POST['oper'];

$norma = $_POST['norma'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Norma";($oper)

{'add':_query("INSERT into $tb_name(norma)(

'".$norma."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$norma."'_norma='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id_norma=".$id)or die(mysql_error());;

}

?>

Лістинг «edit_polzovateli.php»

<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$login = $_POST['login'];

$FIO = $_POST['FIO'];

$tabnomer = $_POST['tabnomer'];

$doljnost = $_POST['doljnost'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='polzovateli';($operaciya)

{'add':_query("INSERT into $tb_name(FIO,tabnomer,doljnost)(

'".$FIO."',

'".$tabnomer."',

'".$doljnost."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$FIO."',='".$tabnomer."',='".$doljnost."'='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id=".$id);;

}

?>

Лістинг «edit_rabota.php»

<?php

$id = $_POST['id'];

$oper = $_POST['oper'];

$Nazvanie = $_POST['Nazvanie'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name="Rabota";($oper)

{'add':_query("INSERT into $tb_name(Nazvanie)(

'".$Nazvanie."'

);")die(mysql_error());;'edit':_query("UPDATE $tb_name='".$Nazvanie."'__rabota='".$id."'

;")die(mysql_error());;'del':_query("DELETE from $tb_name where id__rabota=".$id)die(mysql_error());;

}

?>

Лістинг «edit_tabel_provodnika.php»

<?php

$id = $_POST['id'];

$operaciya = $_POST['oper'];

$chet_p = $_POST['chet_p'];

$chet_t = $_POST['chet_t'];

$chet_v = $_POST['chet_v'];

$chetyrn_p = $_POST['chetyrn_p'];

$chetyrn_t = $_POST['chetyrn_t'];

$chetyrn_v = $_POST['chetyrn_v'];

$desyat_p = $_POST['desyat_p'];

$desyat_t = $_POST['desyat_t'];

$desyat_v = $_POST['desyat_v'];

$devyat_p = $_POST['devyat_p'];

$devyat_t = $_POST['devyat_t'];

$devyat_v = $_POST['devyat_v'];

$devyatn_p = $_POST['devyatn_p'];

$devyatn_t = $_POST['devyatn_t'];

$devyatnadc_v = $_POST['devyatnadc_v'];

$dvadc_chetv_p = $_POST['dvadc_chetv_p'];

$dvadc_devyat_p = $_POST['dvadc_devyat_p'];

$dvadc_p = $_POST['dvadc_p'];

$dvadc_perv_p = $_POST['dvadc_perv_p'];

$dvadc_pyat_p = $_POST['dvadc_pyat_p'];

$dvadc_sedm_p = $_POST['dvadc_sedm_p'];

$dvadc_shest_p = $_POST['dvadc_shest_p'];

$dvadc_t = $_POST['dvadc_t'];

$dvadc_tret_p = $_POST['dvadc_tret_p'];

$dvadc_vosm_p = $_POST['dvadc_vosm_p'];

$dvadc_vtor_p = $_POST['dvadc_vtor_p'];

$dvadca_shest_t = $_POST['dvadca_shest_t'];

$dvadcat_chetv_t = $_POST['dvadcat_chetv_t'];

$dvadcat_chetv_v = $_POST['dvadcat_chetv_v'];

$dvadcat_devyat_t = $_POST['dvadcat_devyat_t'];

$dvadcat_devyat_v = $_POST['dvadcat_devyat_v'];

$dvadcat_perv_t = $_POST['dvadcat_perv_t'];

$dvadcat_perv_v = $_POST['dvadcat_perv_v'];

$dvadcat_pyat_t = $_POST['dvadcat_pyat_t'];

$dvadcat_pyat_v = $_POST['dvadcat_pyat_v'];

$dvadcat_sedm_t = $_POST['dvadcat_sedm_t'];

$dvadcat_sedm_v = $_POST['dvadcat_sedm_v'];

$dvadcat_shest_v = $_POST['dvadcat_shest_v'];

$dvadcat_tret_t = $_POST['dvadcat_tret_t'];

$dvadcat_tret_v = $_POST['dvadcat_tret_v'];

$dvadcat_v = $_POST['dvadcat_v'];

$dvadcat_vosm_t = $_POST['dvadcat_vosm_t'];

$dvadcat_vosm_v = $_POST['dvadcat_vosm_v'];

$dvadcat_vtor_t = $_POST['dvadcat_vtor_t'];

$dvadcat_vtor_v = $_POST['dvadcat_vtor_v'];

$dvenadc_p = $_POST['dvenadc_p'];

$dvenadc_t = $_POST['dvenadc_t'];

$dvenadcat_v = $_POST['dvenadcat_v'];

$odinadc_p = $_POST['odinadc_p'];

$odinadc_t = $_POST['odinadc_t'];

$odinadc_v = $_POST['odinadc_v'];

$per_t = $_POST['per_t'];

$perv_p = $_POST['perv_p'];

$perv_v = $_POST['perv_v'];

$pyat_p = $_POST['pyat_p'];

$pyat_t = $_POST['pyat_t'];

$pyat_v = $_POST['pyat_v'];

$pyatn_p = $_POST['pyatn_p'];

$pyatn_t = $_POST['pyatn_t'];

$pyatnadc_v = $_POST['pyatnadc_v'];

$sedm_p = $_POST['sedm_p'];

$sedm_t = $_POST['sedm_t'];

$sedm_v = $_POST['sedm_v'];

$semn_p = $_POST['semn_p'];

$semn_t = $_POST['semn_t'];

$semnadc_v = $_POST['semnadc_v'];

$shest_p = $_POST['shest_p'];

$shest_t = $_POST['shest_t'];

$shest_v = $_POST['shest_v'];

$shestn_p = $_POST['shestn_p'];

$shestn_t = $_POST['shestn_t'];

$shestnadc_v = $_POST['shestnadc_v'];

$tredcat_perv_p = $_POST['tredcat_perv_p'];

$tredcatoe_p = $_POST['tredcatoe_p'];

$trenadc_p = $_POST['trenadc_p'];

$trenadcat_v = $_POST['trenadcat_v'];

$tret_p = $_POST['tret_p'];

$tret_t= $_POST['tret_t'];

$tret_v = $_POST['tret_v'];

$tridc_per_t = $_POST['tridc_per_t'];

$tridcatoe_t = $_POST['tridcatoe_t'];

$tridcatoe_v = $_POST['tridcatoe_v'];

$trinadc_t = $_POST['trinadc_t'];

$vosemn_p = $_POST['vosemn_p'];

$vosemn_t = $_POST['vosemn_t'];

$vosemnadc_v = $_POST['vosemnadc_v'];

$vosm_p = $_POST['vosm_p'];

$vosm_t = $_POST['vosm_t'];

$vosm_v = $_POST['vosm_v'];

$vtor_p = $_POST['vtor_p'];

$vtor_t= $_POST['vtor_t'];

$vtor_v = $_POST['vtor_v'];$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$tb_name='tabel';($operaciya)

{'edit':_query("UPDATE $tb_name_p = '".$chet_p."',_t = '".$chet_t."',_v = '".$chet_v."',_p = '".$chetyrn_p."',_t = '".$chetyrn_t."',_v = '".$chetyrn_v."',_p = '".$desyat_p."',_t = '".$desyat_t."',_v = '".$desyat_v."',_p = '".$devyat_p."',_t = '".$devyat_t."',_v = '".$devyat_v."',_p = '".$devyatn_p."',_t = '".$devyatn_t."',_v = '".$devyatnadc_v."',_chetv_p = '".$dvadc_chetv_p."',_devyat_p = '".$dvadc_devyat_p."',_p = '".$dvadc_p."',_perv_p = '".$dvadc_perv_p."',_pyat_p = '".$dvadc_pyat_p."',_sedm_p = '".$dvadc_sedm_p."',_shest_p = '".$dvadc_shest_p."',_t = '".$dvadc_t."',_tret_p = '".$dvadc_tret_p."',_vosm_p = '".$dvadc_vosm_p."',_vtor_p = '".$dvadc_vtor_p."',_shest_t = '".$dvadca_shest_t."',_chetv_t = '".$dvadcat_chetv_t."',_chetv_v = '".$dvadcat_chetv_v."',_devyat_t = '".$dvadcat_devyat_t."',_devyat_v = '".$dvadcat_devyat_v."',_perv_t = '".$dvadcat_perv_t."',_perv_v = '".$dvadcat_perv_v."',_pyat_t = '".$dvadcat_pyat_t."',_pyat_v = '".$dvadcat_pyat_v."',_sedm_t = '".$dvadcat_sedm_t."',_sedm_v = '".$dvadcat_sedm_v."',_shest_v = '".$dvadcat_shest_v."',_tret_t = '".$dvadcat_tret_t."',_tret_v = '".$dvadcat_tret_v."',_v = '".$dvadcat_v."',_vosm_t = '".$dvadcat_vosm_t."',_vosm_v = '".$dvadcat_vosm_v."',_vtor_t = '".$dvadcat_vtor_t."',_vtor_v = '".$dvadcat_vtor_v."',_p = '".$dvenadc_p."',_t = '".$dvenadc_t."',_v = '".$dvenadcat_v."',_p = '".$odinadc_p."',_t = '".$odinadc_t."',_v = '".$odinadc_v."',_t = '".$per_t."',_p = '".$perv_p."',_v = '".$perv_v."',_p = '".$pyat_p."',_t = '".$pyat_t."',_v = '".$pyat_v."',_p = '".$pyatn_p."',_t = '".$pyatn_t."',_v = '".$pyatnadc_v."',_p = '".$sedm_p."',_t = '".$sedm_t."',_v = '".$sedm_v."',_p = '".$semn_p."',_t = '".$semn_t."',_v = '".$semnadc_v."',_p = '".$shest_p."',_t = '".$shest_t."',_v = '".$shest_v."',_p = '".$shestn_p."',_t = '".$shestn_t."',_v = '".$shestnadc_v."',_perv_p = '".$tredcat_perv_p."',_p = '".$tredcatoe_p."',_p = '".$trenadc_p."',_v = '".$trenadcat_v."',_p = '".$tret_p."',_t= '".$tret_t."',_v = '".$tret_v."',_per_t = '".$tridc_per_t."',_t = '".$tridcatoe_t."',_v = '".$tridcatoe_v."',_t = '".$trinadc_t."',_p = '".$vosemn_p."',_t = '".$vosemn_t."',_v = '".$vosemnadc_v."',_p = '".$vosm_p."',_t = '".$vosm_t."',_v = '".$vosm_v."',_p = '".$vtor_p."',_t= '".$vtor_t."',_v = '".$vtor_v."'_provodnika='".$id."'

;")die(mysql_error());;

}


Додаток Е


Програмна реалізація зовнішньго вигляду таблиць

Лістинг «polzovateli.php»

<div id="polzovateli_table">

<table id="polzovateli_list"></table>

<div id="polzovateli_page"></div>

</div>

<script type="text/javascript">

$(document).ready(function(){

jQuery("#polzovateli_list").jqGrid({

url:'bd_polzovateli.php',

datatype: "json",

colNames:['Таб №', 'ФІО','Права','Логін'],

colModel:[

{name:'tabnomer',index:'tabnomer',align:"center", width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'FIO',index:'FIO', align:"center",width:180,editable:true,editoptions:{size:45},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'doljnost',index:'doljnost',align:"center", width:130,editable:true,edittype:"select",editoptions:{value:"Адмін:Адмін;Старший нарядчик:Старший нарядчик;Нарядчик зміни:Нарядчик зміни;Провідник:Провідник;Начальник поїзда:Начальник поїзда"},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'login',index:'login', align:"center",width:170,editable:false,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

rowNum:10,

rowList:[10,20,30],

pager: '#polzovateli_page',

viewrecords: true,

sortorder: "desc",

caption:"Користувачі",

rownumbers: true,

editurl:"edit_polzovateli.php",

height:460,

width:875

});

jQuery("#polzovateli_list").jqGrid('navGrid','#polzovateli_page',{},

{height:225,width:500,reloadAfterSubmit:false,closeAfterEdit:true},

{height:225,width:500,reloadAfterSubmit:false,closeAfterAdd:true},

{reloadAfterSubmit:false},

{closeAfterSearch:true}

);

});

</script>

Лістинг «brig_marsh_list.php»

<div id="brig_table">

<table id="brig_list"></table>

<div id="brig_page"></div>

</div>

<script type="text/javascript">

$(document).ready(function(){napryamok=$.ajax({:'POST',: false,:'vibor_s_bazi.php',:{baza:"Napryamok",fild:"napryamok"}

}).responseText;("#brig_list").jqGrid({:'bd_brig_list.php',: "json",:['Номер бригади', 'Начальник потягу','Потяг','Напрям','Явка','Уход'],:[

{name:'nomer_brigady',index:'nomer_brigady',align:"center", width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'nachalnik_potyaga',index:'nachalnik_potyaga', align:"center",width:180,editable:true,editoptions:{size:45},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'potyag',index:'potyag',align:"center", width:55,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'napryam',index:'napryam', align:"center",width:170,editable:true,edittype:"select",editoptions:{value:napryamok},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'yavka',index:'yavka', align:"center",width:170,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'uhod',index:'uhod',align:"center",width:170,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},:10,:[10,20,30],: '#brig_page',: true,: "desc",: true,:"edit_brig_list.php",:460,:875

});("#brig_list").jqGrid('navGrid','#brig_page',{},

{height:300,width:600,reloadAfterSubmit:false,closeAfterEdit:true},{height:300,width:600,reloadAfterSubmit:false,closeAfterAdd:true},{reloadAfterSubmit:false},

{closeAfterSearch:true}

);

});

</script>

Лістинг «brigadi.php»

<div id="tabs_brigada">

<ul>

<li><a href="#tabs_brigada-1">Бригади</a></li>

</ul>

<div id="tabs_brigada-1">

<?php$_SERVER['DOCUMENT_ROOT'].'/php/brig_list.php';

?>

</div>

</div>

<script type="text/javascript">

$(document).ready(function(){

$("#tabs_brigada").tabs();

});

</script>

Лістинг «grafiki.php»

<div id="tabs1">

<ul>

<li><a href="#tabs1-1">Стан робіт</a></li>

<li><a href="#tabs1-2">Добовий розрахунок робочого часу поїздним бригадам</a></li>

</ul>

<div id="tabs1-1">

<?php$_SERVER['DOCUMENT_ROOT'].'/php/stan_robit.php';

?>

</div>

<div id="tabs1-2">

<?php$_SERVER['DOCUMENT_ROOT'].'/php/kalendar.php';

?>

</div>

</div>

<script type="text/javascript">

$(document).ready(function(){

$("#tabs1").tabs();

});

</script>

Лістинг «ind_list.php»

<div id="ind_table">

<table id="ind_list"></table>

<div id="ind_page"></div>

</div>

<script type="text/javascript">

$(document).ready(function(){napryamok=$.ajax({:'POST',: false,:'vibor_s_bazi.php',:{baza:"Napryamok",fild:"napryamok"}

}).responseText;norma=$.ajax({:'POST',: false,:'vibor_s_bazi.php',:{baza:"Norma",fild:"norma"}

}).responseText;("#ind_list").jqGrid({

<?php($doljnost==$providnik)"url:'bd_ind_list.php?fio=".$FIO."'";($doljnost==$vse_prava)"url:'bd_ind_list.php'";?>,:[<?php if($doljnost==$vse_prava)echo "'ПІБ',";?> 'Явка','Потяг','Напрям','Уход','№ вагона','Норма','Хвостовий'],:[

<?php if($doljnost==$vse_prava)echo "{name:'FIO',index:'FIO',align:'center',width:180,editable:true,editoptions:{size:40},searchoptions:{sopt:['eq','ne','bw','cn']}},";?>

{name:'yavka',index:'yavka', align:"center",width:180,editable:true,editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Potyag',index:'Potyag', align:"center",width:170,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Napryamok',index:'Napryamok', align:"center",width:170,editable:true,edittype:"select",editoptions:{value:napryamok},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Uhod',index:'Uhod',align:"center",width:170,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'nomer_vagona',index:'nomer_vagona',align:"center",width:170,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Norma',index:'Norma',align:"center",width:120,editable:true,edittype:"select",editoptions:{value:norma},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Hvostovyi',index:'Hvostovyi',align:"center",width:170,editable:true,edittype:"select",editoptions:{value:"Так:Так;Ні:Ні"},searchoptions:{sopt:['eq','ne','bw','cn']}},:10,:[10,20,30],: '#ind_page',: true,: "desc",: true,:false,:"edit_ind_list.php",:460,:875

});("#ind_list").jqGrid('navGrid','#ind_page',

<?php($doljnost==$providnik)'{search:true,edit:false,add:false,del:false});';($doljnost==$vse_prava)'{},

{height:400,width:500,reloadAfterSubmit:false,closeAfterEdit:true},

{height:400,width:500,reloadAfterSubmit:false,closeAfterAdd:true},

{reloadAfterSubmit:false},

{closeAfterSearch:true}

);';?>

});

</script>

Лістинг «kalendar.php»

<div id="kalendar_table">

<table id="kalendar_list"></table>

<div id="kalendar_page"></div>

</div>

<script type="text/javascript">

$(document).ready(function(){norma=$.ajax({:'POST',: false,:'vibor_s_bazi.php',:{baza:"Norma",fild:"norma"}

}).responseText;napryamok=$.ajax({:'POST',: false,:'vibor_s_bazi.php',:{baza:"Napryamok",fild:"napryamok"}

}).responseText;("#kalendar_list").jqGrid({:'bd_kalendar_list.php',: "json",:['ПІБ', 'Номер потягу','Напрям','Стартова поїздка','Явка','Уход','Норма','1 доба','2 доба','3 доба','4 доба','5 доба','6 доба','7 доба','Всьго'],

{name:'FIO',index:'FIO',align:"center", width:180,editable:true,editoptions:{size:45},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'nomer_potyaga',index:'nomer_potyaga', align:"center",width:170,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Napryamok',index:'Napryamok',align:"center",width:170,editable:true,edittype:"select",editoptions:{value:napryamok},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Start_poezdka',index:'Start_poezdka', align:"center",width:130,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Yavka',index:'Yavka', align:"center",width:130,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Uhod',index:'Uhod', align:"center",width:130,editable:true,edittype:"text",editoptions:{dataInit:function(el){$(el).datetimepicker({dateFormat:'yy-mm-dd'});}},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Norma',index:'Norma', align:"center",width:120,editable:true,edittype:"select",editoptions:{value:norma},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'p_doba',index:'p_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'v_doba',index:'v_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'t_doba',index:'t_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'ch_doba',index:'ch_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'pya_doba',index:'pya_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'sh_doba',index:'sh_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'s_doba',index:'s_doba', align:"center",width:130,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}},

{name:'Vsogo',index:'Vsogo', align:"center",width:130,editable:false,searchoptions:{sopt:['eq','ne','bw','cn']}}:10,:[10,20,30],: '#kalendar_page',: true,: true,: "desc",:false,:"edit_kalendar_list.php",:460,:875

});("#kalendar_list").jqGrid('navGrid','#kalendar_page',{},

{height:600,width:600,reloadAfterSubmit:false,closeAfterEdit:true},{height:600,width:600,reloadAfterSubmit:false,closeAfterAdd:true},

{reloadAfterSubmit:false},

{closeAfterSearch:true}

);

});

</script>

Лістинг «marshrut_list.php»

<div id="tabs">

<ul>

<?php if($doljnost==$vse_prava)'<li><a href="#tabs-1">Бригадні маршрутні листи</a></li>';?>

<li><a href="#tabs-2">Індивідуальний маршрутний лист</a></li>

</ul>

<?php($doljnost==$vse_prava)

{'<div id="tabs-1">';$_SERVER['DOCUMENT_ROOT'].'/php/brig_marsh_list.php';'</div>';

}

?>

<div id="tabs-2">

<?php$_SERVER['DOCUMENT_ROOT'].'/php/ind_list.php';

?>

</div>

</div>

<script type="text/javascript">

$(document).ready(function(){

$("#tabs").tabs();

});

</script>

Лістинг «napryam.php»

<table id="napryam_list"></table>

<div id="napryam_pager"></div>

<script type="text/javascript">

$(document).ready(function(){("#napryam_list").jqGrid({:'bd_napryamok.php',: "json",:['Напрям'],:[

{name:'napryamok',index:'napryamok', width:160,align:"center",editable:true,editoptions:{size:35},searchoptions:{sopt:['eq','ne','bw','cn']}},:10,:[10,20,30],:'#napryam_pager',: true,:"Напрями",:"edit_napryamok.php",:200,:300

});("#napryam_list").jqGrid('navGrid','#napryam_pager',{},

{height:120,width:400,reloadAfterSubmit:false,closeAfterEdit:true},{height:120,width:400,reloadAfterSubmit:false,closeAfterAdd:true}, // add options

{reloadAfterSubmit:false},

{closeAfterSearch:true}

);

});

</script>

Лістинг «norma.php»

<table id="norma_list"></table>

<div id="norma_pager"></div>

<script type="text/javascript">

$(document).ready(function(){

$("#norma_list").jqGrid({:'bd_norma.php',: "json",:['Норма'],:[

{name:'norma',index:'norma', width:160,align:"center",editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}}:10,:[10,20,30],:'#norma_pager',: true,:"Норма",:"edit_norma.php",:200,:300

});

$("#norma_list").jqGrid('navGrid','#norma_pager',{},

{height:120,reloadAfterSubmit:false,closeAfterEdit:true},

{height:120,reloadAfterSubmit:false,closeAfterAdd:true},

{reloadAfterSubmit:false},

{closeAfterSearch:true}

);

});

</script>


Додаток Ж


Програмна реалізація прогнозування табеля

Лістинг «tab_list_provodnik.php»

<?php

$fio_provodnika=$FIO;$_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';($doljnost==$vse_prava)

{

$vibraniy_provodnik=$_POST['vibraniy_provodnik'];

$fio_provodnika=$vibraniy_provodnik;

}

$query = "SELECT start_poezdka,id_provodnika FROM `tabel` WHERE PIB='".$fio_provodnika."'";

$result=mysql_query($query) or die (mysql_error());(mysql_num_rows($result) == 1)

{

$row=mysql_fetch_array($result);

$id=$row[id_provodnika];

$start_poezdka = substr($row[start_poezdka],0,10);

$date=explode('-',($start_poezdka));

$k=$date[1]+3;

$end_date=date("Y-m-d", mktime(0, 0, 0, $k,$date[2],$date[0]));

$date_array = array();

$i=$date[2];

$j=0;

$next_date=$start_poezdka;($next_date!=$end_date)

{

$next_date = date("Y-m-d", mktime(0, 0, 0, $date[1],$i,$date[0]));

$date_array[$j]=$next_date;

$i++;

$j++;

}

$param_array=array(

"perv_p","vtor_p","tret_p","chet_p","pyat_p",

"shest_p","sedm_p", "vosm_p", "devyat_p",

"desyat_p","odinadc_p","dvenadc_p",

"trenadc_p","chetyrn_p","pyatn_p", "shestn_p",

"semn_p", "vosemn_p","devyatn_p","dvadc_p",

"dvadc_perv_p","dvadc_vtor_p","dvadc_tret_p",

"dvadc_chetv_p","dvadc_pyat_p", "dvadc_shest_p",

"dvadc_sedm_p", "dvadc_vosm_p", "dvadc_devyat_p",

"tredcatoe_p", "tredcat_perv_p", "perv_v",

"vtor_v","tret_v","chet_v","pyat_v","shest_v",

"sedm_v","vosm_v","devyat_v","desyat_v",

"odinadc_v",dvenadcat_v","trenadcat_v",

"chetyrn_v","pyatnadc_v","shestnadc_v",

"semnadc_v","vosemnadc_v","devyatnadc_v",

"dvadcat_v","dvadcat_perv_v","dvadcat_vtor_v",

"dvadcat_tret_v","dvadcat_chetv_v",

"dvadcat_pyat_v","dvadcat_shest_v",

"dvadcat_sedm_v","dvadcat_vosm_v",

"dvadcat_devyat_v","tridcatoe_v","per_t",

"vtor_t", "tret_t","chet_t","pyat_t","shest_t",

"sedm_t","vosm_t","devyat_t","desyat_t",

"odinadc_t","dvenadc_t","trinadc_t","chetyrn_t",

"pyatn_t", "shestn_t","semn_t",

"vosemn_t","devyatn_t","dvadc_t","dvadcat_perv_t",

"dvadcat_vtor_t","dvadcat_tret_t",

"dvadcat_chetv_t","dvadcat_pyat_t",

"dvadca_shest_t", "dvadcat_sedm_t",

"dvadcat_vosm_t","dvadcat_devyat_t",

"tridcatoe_t","tridc_per_t");'<div id="tabel_table">

<table id="tabel_list"></table>

<div id="tabel_page"></div>

</div>';'<script type="text/javascript">'.

"$(document).ready(function(){

$(".'"#tabel_list").jqGrid({'.

"url:'bd_tab_list_provodnik.php?fio=".$fio_provodnika."',: 'json',:['Напрям','Норма',";($i=0;$i<count($date_array)-1;$i++)

{($i>0)",";"'".$date_array[$i]."'";"],";"colModel:[";"{name:'Napryam',index:'Napryam', align:'center',width:170,searchoptions:{sopt:['eq','ne','bw','cn']}},{name:'Norma',index:'Norma',align:'center',width:170,searchoptions:{sopt:['eq','ne','bw','cn']}},\n";($i=0;$i<count($date_array)-1;$i++)($i>0)",\n";"{name:'".$param_array[$i]."',index:'".$param_array[$i]."',align:'center',width:100,editable:true,editoptions:{size:10},searchoptions:{sopt:['eq','ne','bw','cn']}}";

}"],\n";":10,:[10,20,30],: '#tabel_page',: true,: true,: 'desc',:false,";($doljnost==$vse_prava)

{"caption:'Табель провідника : ".$fio_provodnika."',";"editurl:'edit_tabel_provodnika.php',";

}"height:460,:875

});";($doljnost==$vse_prava)"$(".'"#tabel_list").jqGrid'."('navGrid','#tabel_page',{search:false,add:false,del:false},

{height:300,dataheight:200,reloadAfterSubmit:false,closeAfterEdit:true},

{reloadAfterSubmit:false});";"$(".'"#tabel_list").jqGrid'."('navGrid','#tabel_page',{search:false,edit:false,add:false,del:false});";"});";"</script>";

}($doljnost!=$vse_prava)'<h2>Ваш табель ще не заповнено!</h2>';

?>

Лістинг «tabel_provodnika.php»

<?php($doljnost==$vse_prava)

{

$query = "SELECT FIO FROM polzovateli where doljnost='Провідник'";

$result = mysql_query($query) or die(mysql_error());

$i=0;

$list_provodnik=array();($row=mysql_fetch_array($result))

{

$list_provodnik[$i]=$row[FIO];

$i++;

}

}

?>

<div id="tabs2">

<ul>

<?php($doljnost==$providnik || $doljnost==$vse_prava)'<li><a href="#tabs2-1">Табель провідника</a></li>';?>

</ul>

<?php($doljnost==$vse_prava)

{'<form action="../php/menu.php?tabel_provodnika" method="post">';'<select name="vibraniy_provodnik">';'<option selected value="Виберіть провідника...">Виберіть провідника...</option>';($i=0; $i<count($list_provodnik);$i++)'<option value="'.$list_provodnik[$i].'">'.$list_provodnik[$i].'</option>';'</select>';'<input type="submit">

}($doljnost==$providnik || $doljnost==$vse_prava)

{'<div id="tabs2-1">';$_SERVER['DOCUMENT_ROOT'].'/php/tab_list_provodnik.php';'</div>';

}

?>

</div>

<script type="text/javascript">

$(document).ready(function(){

$("#tabs2").tabs();

});

</script>


Додаток З


Програмна реалізація створення користувачів сайту

Лістинг «registration.php»

<?php

include $_SERVER['DOCUMENT_ROOT'].'/php/bd_config.php';

$error_create_user='';

$tb_name='polzovateli';

$login = $_POST['login'];

$fio=$_POST['fio'];

if (isset($_POST['login']) && isset($_POST['password'])&& isset($_POST['ret_password'])&& isset($_POST['kod_naryad'])&& isset($_POST['ret_password']))

{

if ($_POST['login']!='' && $_POST['password']!=''&& $_POST['ret_password']!='' && $_POST['kod_naryad']!='' && $_POST['fio']!='')

{

$kod_naryad=$_POST['kod_naryad'];

$query = "SELECT `id`

FROM $tb_name

WHERE `tabnomer`='{$_POST['kod_naryad']}'

LIMIT 1";

$sql = mysql_query($query) or die(mysql_error());

$row =mysql_fetch_array($sql);

if (mysql_num_rows($sql) == 1 && $row['FIO']=='' && $row['password']=='' &&($row['login']==''))

{

if ($_POST['password']==$_POST['ret_password'])

{

$login = mysql_real_escape_string($_POST['login']);

$query = "SELECT `id`

FROM $tb_name

WHERE `login`='{$login}'

LIMIT 1";

$sql = mysql_query($query) or die(mysql_error());

if (mysql_num_rows($sql) == 0)

{

$password = md5($_POST['password']);

$login = $_POST['login'];

mysql_query("UPDATE $tb_name

SET

login='".$login."',

password='".$password."',

FIO='".$fio."'

WHERE

tabnomer='{$_POST['kod_naryad']}'

or die(mysql_error());

$login = "";

$error_create_user = '<h3><b id="error_user_edit" style="color:green">Користувач успішно створений!</b></h3><b><p>Ви будете перенаправлені через <input TYPE="text" id="clock" SIZE="2" value="5" readonly> секунд на стартову сторінку. Зачекайте!</p></b><meta http-equiv="refresh" content="5; url=#"justify">header("Location: s_reg.php");

}

else

$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Такий логін вже існує!</b></h3>';

}

else

$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Паролі не співпадають!</b></h3>';

}

else

$error_create_user = '<h3><b id="error_user_edit" style="color:red">*Такого табличного номеру не існує!</b></h3>';

}

else

$error_create_user = '<h3><b id="error_user_edit" style="color:red">* Не всі поля заповнені!</b></h3>';

}

?>

<?php

$page='Регістрація';

include $_SERVER['DOCUMENT_ROOT'].'/php/header.php';

?>

<div id="registration_fild">

<form action="registration.php" method="post">

<table id="registration">

<tr>

<td><h2>Створення нового користувача:</h2></td>

<td>Табельний номер:</td>

<td><input type="text">

<td>ФІО:</td>

<td><input type="text">

<td>Логін:</td>

</tr>

<tr>

<td><input type="text">

<td>Пароль:</td>

<td><input type="password">

</tr>

<tr>

<td>Повторіть пароль:</td>

</tr>

<tr>

<td><input type="password">

</tr>

<tr>

</tr>

<td></td>

<tr>

<td><p><input>

</tr>

<tr>

<td><b><font color="red"><?php echo $error_create_user;?></font></b></td>

</tr>

</table>

</form>

</div>

<?php include $_SERVER['DOCUMENT_ROOT'].'/php/footer.php';?>


Додаток К


Дизайн сайту

Лістинг «style.css»

*{:0;:0;

}

.menu_ul{style:none;:70%;:50px;:0 auto;:#000 url(images/bg-nav.gif) top left repeat-x;

}

.menu_li{:left;left:1px solid #333;

}

.menu_li a{:block;:40px;:0 10px;:left;transform: uppercase;:70%/40px Helvetica,"microsoft sans serif",arial,sans-serif;:#fff;decoration:none;align:center;

}

.menu_ul .menu_li a:hover,

.menu_ul .menu_li.active a{:url(images/bg-button.gif) top left repeat-x;

}{:auto;:#000 url(images/background-overlay.png) top left repeat-x;

}

#content{:70%;:90%;:0 auto;:white;

}

#footer{style:none;:70%;:40px;:0 auto;:#000 url(images/bg-nav.gif) top left repeat-x;:white;

}

#tabs{:center;:10px;:875px;:650px;

}

#tabs2{:center;:10px;:875px;:650px;

}

#brig_table{:absolute;:0px;

}

#ind_table{:absolute;:0px;

}

#tabs1{:center;:10px;:875px;:650px;

}

#stan_robit_table{:absolute;:0px;

}

#kalendar_table{:absolute;:0px;

}

#wholog{:0 auto;:70%;:50px;:white;

}

#tabs_brigada{:center;:10px;:875px;:650px;

}

#chleni_brigadi{:absolute;:450px;:60px;

}

#tabel_table{:absolute;:0px;

}

Лістинг «start_style.css»

#header{style:none;:70%;:70px;:0 auto;:#000 url(images/bg-nav.gif) top left repeat-x;:white;size:24px;

}

#login_fild{:0 auto;:70%;:84%;color: white;:#000 url(images/test.jpg) no-repeat;

}

#registration_fild{:0 auto;:70%;:84%;:0 auto;:#000 url(images/test1.jpg) no-repeat;

}

#registration{:0 auto;:275px 350px 0 0;

}

#login{:0 auto;:35px 30px 0 600px;

}

#footer{style:none;:70%;:70px;:0 auto;:#000 url(images/bg-nav.gif) top left repeat-x;:white;

}

#s_reg{:0 auto;:70%;:84%;color: white;:0 auto;:#000 url(images/test1.jpg) no-repeat;

}

.area{: 1px solid #0963ed;: 210px;size: 20px;

}

.button{: 1px solid white;size: 20px;: 210px;: 40px;:white;:#000 url(images/bg-nav.gif) top left repeat-x;transform: uppercase;

}{size:16px;family:Arial;

}{:0 auto;:#000 url(images/background-overlay.png) top left repeat-x;


ЗМІСТ ВСТУП РОЗДІЛ 1. ПРОБЛЕМИ АВТОМАТИЗАЦІЇ РОБОТИ НАРЯДЧИКА ПАСАЖИРСЬКОЇ ВАГОННОЇ ДІЛЬНИЦІ 1.1. Загальна характеристика задачі автоматизації робо

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ