Разработка приложения "Фрахт"

 

Оглавление


Введение

. Характеристика предприятия

.1 Структура предприятия

.2 Вид деятельности

.3 Программное обеспечение, используемое на предприятии

.4 Компьютерная сеть

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

. Создание базы данных

. Разработка программных модулей системы "Фрахт"

.1 Работа с пользователями

.1.1 Файлы join.php и dblib.inc

.1.2 Файл updateclub.php

.1.3 Файл membersmenu.php

.1.4 Файл login.php

.1.5 Файл updateevent.php

.1.6 Файл reviewevents.php

.2 Экран предложений

.2.1 Файл viewevents.php

.2.2 Файл viewclubs.php

.2.3 Файл viewclub.php

.2.4 Файл viewevent.php

. Руководство пользователя

. Технико-экономическое обоснование

.1 Расчет экономической эффективности создания и внедрения программного продукта

.2 Расчет годовых эксплуатационных расходов при ручном методе решения управленческой задачи

.3 Расчет годовых текущих затрат, связанных с эксплуатацией программного продукта

.4 Расчет совокупных единовременных затрат на создание программного продукта

. Производственная и экологическая безопасность

.1 Общие требования

.2 Производственная санитария

.3 Техника безопасности

.3.1 Электробезопасность

.3.2 Шум

.3.3 Излучение

.4 Пожарная безопасность помещения

Заключение

Список использованных источников

Приложение

экспедиционный программный модуль фрахт

Введение


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

Состав и структура спектра оказываемых услуг современной экспедиционной компании весьма разнообразны и мобильны. Это связано с сезонными изменениями на рынке грузоперевозок, с нововведениями в таможенном и налоговом законодательстве. Таким образом, экспедиционным компаниям необходимо быстро реагировать на все события, происходящие на рынке грузоперевозок. В силу исторической традиции, основной функцией экспедиционных компаний является поиск свободного груза и, соответственно, транспорта для его перевозки. Чтобы оставаться конкурентоспособными, необходимо оперативно реагировать на требования, предъявляемые клиентами. Для этого необходимо быть в курсе актуальной и релевантной информации по поводу наличия свободного транспорта в разных странах, его виде и особенностях, об изменениях цен на грузоперевозки у конкурентов, снижении платежеспособности клиентов и т.п.

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

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

Для достижения поставленной цели в работе ставятся следующие задачи:

·рассмотреть основные теоретические аспекты, связанные с понятием экспедиционной деятельности;

·определить цели и проблемы оценки качества экспедиционных услуг;

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

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

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

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

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


1. Характеристика предприятия


1.1 Структура предприятия


ООО "Еврофрахт" - компания, которая появилась на белорусском рынке в 2001 году. Основным направлением функционирования является транспортно-экспедиционная деятельность. Компания представляет собой часть холдинга, состав которого выглядит следующим образом [13]:

·"Eurofreight Logistic Polska sp.z o.o", г. Варшава, г. Белосток (автоперевозки грузов, таможенное оформление, складская логистика в ЕС).

·ООО "Еврофрахт", г. Минск

·ООО "Еврофрахт-Брокер", ООО "Еврофрахт-Логистик", г. Москва (таможенное оформление на территории Российской Федерации, также сертификация и страхование). В ООО "Еврофрахт" г. Минск действуют 6 транспортных отделов, которые занимаются непосредственной работой с клиентами, перевозчиками, а также поиском грузов и транспорта. Штат каждого транспортного отдела составляют 3 человека: начальник транспортного отдела и два менеджера по организации международных грузоперевозок. Кроме того, существует отдел продаж, который занимается поиском новых клиентов и установлением торговых отношений, после чего передает их в транспортные отделы. Этот отдел состоит из четырех человек: начальника отдела и трех менеджеров по работе с клиентами. В компании также имеется отдел кадров и бухгалтерия. Для обеспечения нормального функционирования систем и сетей существует отдел оперативной поддержки, который представлен двумя системными администраторами. Для оказания юридических и нотариальных консультаций компания пользуется услугами консультанта, который также состоит в штате. Организуют, контролируют и руководят деятельностью компании директор и два его заместителя.

1.2 Вид деятельности


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

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

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

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

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

Одним из основных видов деятельности компании "Еврофрахт" г. Минск - международные грузовые автоперевозки. Компания предоставляет полный пакет услуг по доставке грузов из стран Западной Европы в Российскую Федерацию, Республику Беларусь, Украину и страны Азии.

ООО "Еврофрахт-Логистик" организует международные грузовые авиаперевозки во все регионы Российской Федерации и других стран мира. Тут также использует принцип "от двери до двери". На сегодняшний день среди клиентов компании наиболее востребованными являются авиаперевозки из Китая, стран Юго-Восточной Азии и США в Российскую Федерацию. Авиаперевозки грузов осуществляются чартерными рейсами авиакомпаний "Аэрофлот", "Lufthansa Cargo", "Air France", "Delta Airlines", "British Airways", "SwissAir" и др. Специалисты компании занимаются всем процессом подготовки груза к перевозке (от маркировки до переупаковки и взвешивания). Кроме того, компания:

·обеспечивает таможенное оформление;

·занимается товаросопроводительной документацией;

·оказывает помощь в страховании, получении сертификатов и т.д.;

Также "Еврофрахт-Логистик" занимается организацией морских грузоперевозок. Морские грузоперевозки - сложный процесс, в котором задействовано большое количество различных служб и отдельных сотрудников. Благодаря наличию контактов с компаниями-судовладельцами морские грузоперевозки осуществляются по оптимальным схемам, которые разрабатываются в "Еврофрахт-Логистик". В данной сфере предлагаются следующие виды услуг:

·морские грузоперевозки консолидированных грузов в 20- и 40-футовых контейнерах;

·сотрудничество с известными перевозчиками "P&O", "ZIM", "MSC", "CMA-CGM", "China-Shiping Container Lines Co.Ltd", "BSCS";

·работа в морских портах Котка (Финляндия), Хамина (Финляндия), Санкт-Петербург, Новороссийск, Астрахань, Владивосток, Находка, Одесса (Украина);

·морские перевозки негабаритных грузов;

·стивидорные работы, релизы, обеспечение возврата пустых контейнеров;

·фрахтование морских судов;

·морские грузоперевозки контейнеров на склад отправителя или прием контейнера по пломбе в порту;

·транзит контейнеров в Москву или другие города.

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

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

Одним из приоритетных направлений деятельности являются грузоперевозки из Китая. По большей части грузов доставляются в 20- и 40- футовых контейнерах из города или порта Республики в Российскую Федерацию, СНГ и ЕС. При осуществлении доставки грузов из Китая, компания занимается страхованием грузов и таможенным оформлением импортных грузов на таможенных терминалах различных российских городов (в т.ч. Москвы, Санкт-Петербурга, Новороссийска, Новосибирска, Находки, Владивостока и др.) При необходимости решаются вопросы с консолидацией, складированием и хранением грузов.

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

Предлагаемые "Еврофрахт-Логистик" программы страхования включают подготовку необходимых документов и заключение договоров страхования с соответствующими компаниями.

Кроме того оказываются услуги в сфере таможенного оформления товаров и грузов в Центральном, Северо-Западном и Южном округах Российской Федерации. Данным направлением деятельности занимаются квалифицированные специалисты в сфере таможенного дела. В данной области компания занимается:

. Таможенным оформлением:

·импорта/экспорта,

·временного ввоза/вывоза,

·ввозом товаров "под ключ",

·получением лицензий: переработка на таможенной территории; переработка вне таможенной территории,

·получением разрешения на временный ввоз; временный вывоз,

·получением классификационного решения на уровне ЦТУ и ФТС России,

·предварительным расчетом и оптимизацией затрат по доставке и хранению грузов и таможенных платежей; получение заключений, разрешений, подтверждений и др., согласно направлений сотрудников таможенных служб, в вышестоящих таможенных органах на СТ-1, радиационный контроль, контроль стоимости товара, освобождения от НДС, кодов ТН ВЭД, составление предварительной ГТД и т.д.

. Оказанием консультационных услуг в сфере ВЭД:

·экспертизой внешнеэкономических контрактов,

·помощью в составлении внешнеэкономических контрактов,

·юридическими консультациями по таможенному оформлению.

. Сертификацией:

·ветеринарных лицензий,

·оформлением разрешений на ввоз-вывоз,

·предоставлением сертификатов соответствия,

·санитарно-эпидемиологическое заключений,

·отказных писем.


1.3 Программное обеспечение, используемое на предприятии


В ООО "Еврофрахт" рабочее место каждого сотрудника оборудовано компьютером, принтером, факсом и телефоном. На всех персональных компьютерах, за исключением сервера, установлена операционная система Microsoft Windows XP, пакет Microsoft Office 2003, антивирус Avast 4 Professional, а также программа для работы с факсимильными сообщениями ActiveFax client. Для передачи сообщений посредством локальной сети используется программа Fchat. Для общения с клиентами, перевозчиками и между сотрудниками используются программы ICQ, Skype, JustVoip, а также Outlook Express для электронной переписки. Для автоматизации учета (бухгалтерского и управленческого) грузоперевозок используется программа 1С. Предприятие, которая установлена и настроена на компьютерах в отделе бухгалтерии.

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


1.4 Компьютерная сеть


Компьютерная сеть на ООО "Еврофрахт" включает 31 компьютер, 1 сервер, а также нескольких сетевых принтеров. Они объединены в сеть при помощи маршрутизаторов и коммутаторов (свитчей). На сервере установлена операционная система Microsoft Windows 2000 Server, антивирус Nod 32, серверная часть 1С. Предприятие, установлена программа ActiveFax server, тут также хранятся документы, договоры, необходимые для работы всем сотрудникам компании, база данных 1С. Предприятие, база данных клиентов и перевозчиков. Сервер подключен к Интернет, что обеспечивает доступом в Интернет все компьютеры сети.

На чертеже №1, прилагаемом к дипломному проекту показана принципиальная схема ЛВС ООО "Еврофрахт".


2. Системное проектирование


Перед тем, как писать любую программу, необходимо ясно представлять, как она будет работать, каким образом пользователь будет перемещаться по узлу и, какой интерфейс она будет иметь.

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

На чертеже №2, прилагаемом к дипломному проекту показана структура такого приложения.

Пользователям необходимо начинать со страницы join.php, где можно будет зарегистрироваться, для чего потребуется ввести имя и пароль. В том случае, если выбранное ими имя еще не использовалось, программа переадресует их к форме updateclub.php, где можно будет ввести информацию о своей компании. Пока эта форма не будет заполнена, пользователи не будут иметь возможность вносить свои предложения. После того как пользователь регистрируется, осуществляется переход на страницу меню (membersmenu.php), с которой можно вызывать утилиты, предназначенные для зарегистрированных пользователей.

Если пользователь уже зарегистрирован, он сначала попадает на страницу ввода имени и пароля (login.php). После проверки имени и пароля его направят прямо на страницу membersmenu.php.

На странице меню пользователи будут иметь возможность добавлять новые предложения (updateevent.php) и просматривать список уже существующих (reviewevents.php). Кроме того, пользователи смогут в любой момент изменить информацию о компании (updateclub.php). Все пользователи будут иметь возможность с одной страницы (viewevents.php) просмотреть список предложений по дням, месяцам, годам, стране отправления и стране назначения. Кроме того, пользователи смогут просмотреть список компаний в соответствии с их страной регистрации на странице viewclubs.php. При щелчке на названии компании или предложении пользователи получат более детальную информацию со страниц viewevent.php и viewclub.php соответственно.


3. Создание базы данных


Сначала создается база данных под названием organizer, в которой создаются пять таблиц: clubs, events, gorts, frcountrys и tcountrys. Информацию о компаниях и предложениях необходимо хранить в разных таблицах, поскольку одна компания может быть связана с несколькими предложениями. Отдельные таблицы создаются для того, чтобы иметь возможность определять типы предложений и места загрузок и разгрузок, поскольку это упрощает построение выпадающих меню, а также поиск и добавление данных. Таблицы заполняются вручную. Первой создается таблица пользователей [1]:


create table clubs(

id INT NOT NULL AUTO_INCREMENT,KEY( id ),VARCHAR(50),CHAR(3),VARCHAR(30),VARCHAR(20),VARCHAR(20),VARCHAR(8),VARCHAR(6)

);


Пользователь должен вводить данные в поля name, phone, mail, contact, login и password. Поле frcountry будет содержать идентификатор, связанный с таблицей frcountrys.

Таблица events будет содержать информацию о каждом предложении каждой компании:

create table events(INT NOT NULL AUTO_INCREMENT,KEY( id ),CHAR(2),edate INT,CHAR(3),CHAR(2),CHAR(3),CHAR(2),VARCHAR(20),VARCHAR(40), INT NOT NULL);


Стоит обратить внимание на то, что данная таблица также содержит поля gort, tocountry и frcountry. Компания может находиться в одной стране, однако предлагать грузы и транспорт из или в другие страны. Компании также могут предлагать как грузы, так и транспорт. Поле eclub будет содержать идентификатор компании, которая добавила предложение. В программе он может быть использован для создания списка всех предложений, добавленных данной компанией, или для получения информации о компании из списка предложений.

Поля frcountrys и tocountrys достаточно просты:


create table gorts(CHAR(2), gort VARCHAR(10));table frcountrys(CHAR(3), frcountry VARCHAR(20) );table tocountrys(CHAR(3), tocountry VARCHAR(20) );


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


INSERT INTO gorts(, gort ) VALUES ("tr", "Транспорт");


На чертеже №3, прилагаемом к дипломному проекту показана схема базы данных.


4. Разработка программных модулей системы "Фрахт"


Ветвления для этого проекта были разобраны выше. Было решено реализовывать данный проект на разных страницах, а не создавать одну монолитную страницу. Такой метод построения имеет свои преимущества и недостатки.

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


.1 Работа с пользователями


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


.1.1 Файлы join.php и dblib.inc.

Файл join.inc содержит форму для ввода имени и пароля. Для проверки того, что имя не дублируется, и того, что имеется возможность добавлять информацию о пользователях, необходимо открыть базу данных. Поскольку по мере создания системы приходится довольно часто сталкиваться с необходимостью открывать базу данных, имеет смысл сразу написать соответствующую функцию. Данная функция сохраняется в отдельном документе. Затем можно будет иметь возможность добавлять ее в любую программу с помощью директивы include(). Данный документ будет называться dblib.inc и в дальнейшем будет использоваться для хранения всех функций, работающих с базами данных. Увидеть его код можно в приложении 1. Это позволит не вносить SQL-конструкции в основные РНР-программы.

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

Ниже приведена функция, которая соединяется с базой данных [1]:


$link;();connectToDB()

{$link;

$link = mysql_connect("localhost", "root", ""); ( ! $link )

die ("Не могу подключиться к MySQL");

mysql_select_db( "organizer", $link ) die (

"Не могу подключиться к организатору: ".mysql_error() );

}


В функции connectToDB() объявляется глобальная переменная $link, которая будет хранить идентификатор базы данных, возвращаемый функцией mysql_connect(). Глобальной переменной была объявлена переменная $link для того, чтобы остальные функции взаимодействия с базами данных имели доступ к идентификатору базы. Функции $connectToDB позволяет не только соединиться с демоном mysql, а также выбрать базу данных organizer. Поскольку успех этой операции определяет работу всего приложения, в случае если функция mysql_connect() или mysql_select_db() не завершаются успешно, выполнение программы прекращается.

Далее создается библиотека, к которой имеют доступ все страницы. Она называется сlublib.inc и содержит функции управления сессией и авторизации. Листинг библиотеки clublib.inc приведен в листинге 2. Были использованы функции работы с сессиями для хранения ассоциативного массива под названием $session. В файле clublib.inc используется функция session_start() для открытия или создания сессии, а также функция session_register() для того, чтобы зарегистрировать в сессии переменную [2]:


session_start();

session_register( "session" );


Необходимо помнить, что все конструкции РНР во включаемых файлах должны начинаться с начального дескриптора PHP (<?php) и завершаться концевым дескриптором РНР (?>). Может сложится впечатление, что хранение функций в отдельном файле неоправданно усложняет программу, однако на самом деле это помогает уберечься от дублирования фрагментов программы в проекте. После этого создается страница join.php. Исходный код этой страницы приведен в приложении 3.

В первую очередь в страницу join.php с помощью директивы include() включаются библиотеки, созданные ранее. После этого появляется открытое соединение с базой данных и активная сессия. Затем инициализируется переменная под названием $message. Эта переменная будет встречаться на многих страницах в проекте. Она имеет двойное назначение. Во-первых, в нее записывается информация об ошибках при проверке пересланных пользователем данных. Это сообщение затем может выводиться в окно браузера. Кроме того, эта переменная может использоваться в качестве флага, сигнализирующего о возникновении проблем. Если переменная $message остается пустой, можно заключить, что все проверки были пройдены нормально.

Далее проверяется наличие и содержимое переменной $actionflag. Это еще одна переменная, которая будет встречаться в ходе дальнейшего написания программы. Скрытое поле actionflag было установлено в каждой созданной форме и данному полю было присвоено соответствующее значение. Если переменная $actionflag существует и заполнена ожидаемым значением, то можно считать, что форма была переслана и необходимо приступать к проверке ее содержимого. Если переменной не существует, это говорит о том, что пользователь пришел по ссылке или закладке и до сих пор не пересылал данные.

Теперь давайте перейдем к написанию HTML. В элементе BODY сначала включается дополнительный файл. Этот файл содержит глобальные элементы навигации, с которой нужно определиться вначале. Это упрощает проверку окружения в процессе написания проекта. Навигационные элементы были сохранены во включаемом файле под названием publicnav.php. Его код можно увидеть в приложении 4. Изначально данный файл будет содержать навигационные элементы только для общедоступных страниц [3].


<a href=viewclubs.php?<?php print SID ?>>Посмотреть список компаний</a> |

<a href=viewevents.php?<?php print SID ?>>Посмотреть грузы и транспорт</a> |

<a href=join.php?<?php print SID?>>Регистрация</a>|

<a href=login.php?<?php print SID ?>>Авторизация</a> |

<a href=index.php?<?php print SID?>>На главную</a>|


Благодаря тому, навигационные элементы были включены в отдельный файл, появилась возможность быстро обновлять внешний вид навигационных элементов всего узла. После вывода названия страницы осуществляется проверка переменной $message. Если в этой переменной не содержится пустая строка, выводится содержимое данной переменной в окно браузера. Такой механизм позволяет посылать пользователю ответ в случае, если нет возможности работать с введенной им информацией. HTML-форма имеет три видимых поля: form[login], form[password1] и form[password2]. При написании программы использовалась особая техника именования полей, поскольку РНР преобразует имена и соответствующие им значения в один ассоциативный массив под названием $form. Данный прием использован для того, чтобы в будущем не возникло проблем с большинством похожих имен. Все переменные сессии хранятся в массиве под названием $session, а переменные формы - в массиве $form. Это помогает упорядочить программу. Кроме того, стоит сводить количество глобальных переменных к минимуму для избегания конфликтов имен, что может случиться в проекте такого размера. Массив $form будет встречаться в каждой программе, где есть формы. В программе также был создан скрытый элемент под названием actionflag и еще один, который содержит имена и значения переменных сессии. В течение проекта от страницы к странице постоянно передается ID сессии, что не позволяет потерять клиентов, которые не используют cookies.

После создания этой HTML-формы, необходимо создать часть программы, проверяющую корректность ввода. Происходит проверка заполнения пользователем всех полей, также того, не содержат ли эти поля больше восьми символов. Затем вызывается новая функцию под названием getRow(), которая является одной из функций, входящих в файл dblib.inc. Данной функции передается имя таблицы, имя поля и значение поля. Эти значения используются данной функцией для поиска соответствующей строки в базе данных. Функция getRow() возвращает массив.

function getRow ( $table, $fnm, $fval )

{

global $lik;

$result = mysql_query(

"SELECT * FROM $table WHERE $fnm='$fval'", $link );

if ( ! $result )(" Фатальная ошибка при выполнении функции getRow : ".mysql_error() );

return mysql_fetch_array( $result );

}


Функции передается имя таблицы clubs и имя поля login, а также значение, переданное нам пользователем в $form[login]. Если функция mysql_fetch_array[login] возвращает заполненный массив, то становится понятно, что пользователь с таким именем уже существует, и поэтому создается сообщение об ошибке. Если переменная $message все еще содержит пустую строку, можно продолжать выполнение программы и создавать нового пользователя. Создание записи нового пользователя делится на два этапа. Во-первых, дополняется база данных. Для этого создается новая функция для файла dblib.inc под названием newUser():


function newUser ( $login, $pass )

{$link;

$result = mysql_query( "INSERT INTO clubs (login, password) VALUES ('$login', '$pass')", $link);mysql_insert_id( $link );

}


Этой функции передается имя и пароль нового пользователя. Данные значения применяются для добавления новой строки в таблицу clubs. Эта функция использует функцию mysql_insert_id() для того, чтобы автоматически инкрементировать идентификатор поля.

Теперь, когда имеется значение идентификатора, можно вызывать еще одну функцию из уже созданной библиотеки. cleanMemeberSession() должна находиться в файле dblib.inc. Этой функции передается идентификатор, имя члена и пароль. После того как cleanMemeberSession() сохранит все эти данные в массиве $session, они будут доступны каждой странице, работающей с сессиями. Таким образом, пользователь получает возможность идентифицироваться на каждой странице.


function cleanMemberSession( $id, $login, $pass )

{$session;

$session[id] = $id;

$session[login] = $login;

$session[password] = $pass;

$session[logged_in] = true;

}


Как только установлен идентификатор, имя и пароль, нужно установить элемент под названием logged_in в значение true.

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


4.1.2 Файл updateclub.php

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

Программа update.php приведена приложении 5.

Далее снова включаются библиотеки dblib.inc и clublib.inc, что позволяет больше не заниматься открытием базы данных и сессии в данной программе. После вызывается новая функция под названием checkUser(), которая относится к библиотеке clublib(). Эта функция сверяет информацию сессии с информацией из базы данных.


function checkUser(){$session, $logged_in;

$session[logged] = false;

$club_row = getRow("clubs", "id", $session[id] );( !club_row || $club_row[login] != $session[login] || $club_row[password] != $session[password] ){("Location: login.php");();}

$session[logged_in] = true; $club_row;}


Данная функция относительно проста. В ней используется элемент массива $session[id] вместе с функцией getRow(), которая выбирает соответствующие данные из базы данных. В функции checkUser() этот ассоциативный массив сохраняется в переменной $club row, после чего элементы имени и пароля данного массива сравниваются с такими же элементами массива $session. Если эти значения не совпадают, пользователь направляется на страницу login.php.

Обращение к базе данных необходимо, потому что в отличие от обыкновенной проверки элемента logged_in в массиве $session, он не приводит к возникновению прорех в системе безопасности. "Злонамеренный" пользователь сможет ввести в строку запроса следующее:


Session%5Blogged_in%5D=1&session%5Bid%5D=l


РНР преобразует это в массив $session из параметров GET и в результате сможет пройти не очень строгую проверку. Теперь пользователь не сможет использовать этот простой прием, чтобы обмануть функцию checkUser(), поскольку сравниваются имя и пароль со значениями из базы данных, так что для успешной проверки переменная $session должна содержать правильную информацию.

Кроме того, при проверке функция checkUser() возвращает данные, связанные с клубом. Страницы для проверки членов клуба могут работать с этими данными.

Когда вызывается функция checkUser() в программе updateclub.php, возвращаемое ей значение сохраняется в переменной $check_row. Перейдя к тексту HTML, снова включаются навигационные элементы из файла publicnav.inc. Далее документ расширяется с помощью включения в него навигационные элементы для зарегистрированных пользователей [3]:


<p>

<a href=viewclubs.php?<?php print SID ?>>Посмотреть список компаний</a> |

<a href=viewevents.php?<?php print SID ?>>Посмотреть грузы и транспорт</a> |

<a href=join.php?<?php print SID ?>>Регистрация</a> |

<a href=login.php?<?php print SID ?>>Авторизация</a> |

<a href=index.php?<?php print SID ?>>На главную</a> |

</p>

<?php( $session[logged_in] )

{

?>

<p>

<a href=updateclub.php?<?php print SID ?>>Описание компании</a> |

<a href=reviewevents.php?<?php print SID ?>>Ваши грузы и транспорт</a> |

<a href=updateevents.php?<?php print SID ?>>Добавить грузы и транспорт</a> |

<a href=membersmenu.php?<?php print SID ?>>Посмотреть список компаний</a> |

</p>

<?php

}

?>

<br>


Если флаг $session[logged_in] установлен в значение true, то ссыпки только для членов клуба тоже будут выведены в окно браузера. Стоит обратить внимание на то, что константа SID включается во все ссылки. Таким образом, можно утверждать, что идентификатор сессии передается от страницы к странице, даже если использование cookie запрещено.

Форма updateclub.php в этой программе не является уникальной. Кроме того, в форму включаются скрытые элементы actionflag и идентификатор сессии. Текстовые поля созданы для названия компании, контактных телефонов, адреса электронной почты и контактного лица. Чтобы задать выпадающие меню для страны регистрации компании, вызывается новая функция writeOptionList(), которая сохраняется в библиотеке функций работы с базами данных, dblib.inc. Ей передается имя таблицы и строчное значение. Эта функция использует переменную $table для считывания каждой строки таблиц gorts, frcountrys и tocountrys. После этого в теле цикла просматривается каждая строка и в окно браузера выводятся HTML-элементы OPTION. Если второй элемент массива, который вернула функция mysql_fetch_row(), совпадает с $id, следующий параметр - строка "SELECTED" - добавляется к элементу. Такая методика позволяет оставить второй элемент выпадающего меню формы выбранным.


function writeOptionList( $table, $id )

{$link;

$result = mysql_query( "SELECT * FORM $table", $link );( ! $result )

{"failed to open $table<p>";false;

}( $a_row = mysql_fetch_row( $result ) )

{"option value=$a_row[0]";( $id == $a_row[0] )"SELECTED";

print ">$a_row[1]\n";

}

}


Фрагмент PHP-программы, отвечающий за проверку информации, введенной пользователем, сначала определяет, заполнено ли поле form[name]. Кроме того, проверяется правильность значений в поле form[frcountry]. Если переменная $message содержит пустую строку, считается, что условия для пересланных пользователем данных выполняются. После этого пользовательская информация передается функции под названием updateOrg(), которая заполняет соответствующую строку таблицы clubs. Функции updateOrg() передается идентификатор компании вместе со значением полей name, frcountry, phone, mail, contact в таблице clubs.


function updateOrg( $id, $name, $frcountry, $phone, $mail, $contact )

{$link;

$query = "UPDATE clubs set name = '$name', frcountry = '$frcountry', phone = '$phone', mail = '$mail',= 'contact' WHERE id = '$id'";

$result = mysql_query( $query, $link );( ! $result )( "updateOrg: ошибка прм обновлении ".mysql_error() );

}


После того как строка базы данных модифицируется, пользователь переадресуется на страницу, содержащую меню членов клуба - membersmenu. php. Если пользователь попал на страницу updateclub.php по ссылке или закладке, переменная $actionflag не будет установлена, поэтому фрагмент, отвечающий за проверку и модификацию, будет пропущен. Ассоциативный массив $club_row заполнялся, когда вызывалась функция checkUser(). Этот массив содержит имена и значения из текущей строки базы данных. Значения из данного массива записываются в переменную $form. Таким образом, форма модификации строки базы данных будет заполнена текущей информацией.

4.1.3 Файл membersmenu.php

Страница membership.php - главная станица для зарегистрированных пользователей. По сути, это список ссылок, куда можно добавлять новости и торговые предложения, которые могут быть интересны для сотрудников компании. Эту программу можно увидеть в листинге приложении 6.

На этой странице используется новый прием. После вызова функции checkUser(), проверяющей, является ли пользователь сотрудником компании, передается массив, возвращаемый этой функцией, другой функции, которая содержится в файле clublib.inc. Функция checkClubData() проверяет, ввел ли пользователь описание компании. Пользователям нельзя вводить и изменять предложения, до того как они заполнят информацию о своей компании. Нам нужно как минимум название компании.


function checkClubData( $clubarray )

{

if ( ! isset( $clubarray[name] ) )

{( "Location: updateclub.php?".SID );

exit;

}

}


.1.4 Файл login.php

Перед тем как перейти на страницы, где зарегистрированные пользователи смогут вводить предложения по грузам и транспорту, необходимо создать программу login.php. Эта программа будет разрешать зарегистрированному пользователю входить в окружение. Программа login.php приведена в приложении 7.

Структура этой программы уже использовалась. Тут опять используются файлы dblib.inc и clublib.inc для инициализации соединения с базой данных и открытия сессии.

Если флаг $actionflag установлен, проверяются поля формы. Здесь используется новая функция из библиотеки dblib.inc. Эта функция проверяет элементы $form[login] и $form[password].


function checkPass( $login, $password )

{$link;

$result = mysql_query( "SELECT id, login, password FROM clubs WHERE login='$login' and password='$password'", $link );( ! $result )( "Ошибка checkPass: ".mysql_error() );( mysql_num_rows( $result ) )mysql_fetch_array( $result );

return false;

}


Функция checkPass () принимает имя и пароль, пересылая простой запрос SELECT таблице clubs.

Если не произошло никаких ошибок, вызывается функция cleanMemberSession(), которая инициализирует элементы password и session переменной $session. После этого член клуба перенаправляется на страницу membersmenu. php.


.1.5 Файл updateevent.php

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

На этой странице создается форма, соответствующая полям из таблицы events. Как обычно, проверяется ее значения и заносятся в базу данных. Кроме того, нужно обновлять вид таблицы предложений, если она редактируется. Переменная $event_id будет передана на эту страницу в строке запроса, если осуществляется работа с существующим списком. Если переменная $event_id не пустая, используется функция getRow(), чтобы записать в переменную $event_row информацию о предложении. Если переменной $event_id не существует или она пустая, ей присваивается значение false.

Если форма была переслана, проверяется наличие в ней всех обязательных данных. Кроме того, контролируется, наступило ли время, переданное в этой форме. После этого устанавливается глобальная переменная $date в значение абсолютного времени, которое отвечает времени, переданному в форме.

Если переданная информация отвечает заданным требованиям, вызывается еще одна функция из dblib.inc - insertEvent(). Данной функции передаются все поля таблицы events. Последним полем передается идентификатор предложения. Это значение будет передано функции insertEvent(), которая решит, нужно ли модифицировать существующее предложение или создавать новое. Стоит обратить внимание на то, что идентификатор компании хранится в переменной $session[id]. Это значение будет записано в поле eclub таблицы events. Кроме того, штамп времени записывается в базу данных.


function insertEvent(

$gort, $frcountry, $frcode, $tocountry, $tocode,

$cargo, $typetrans, $club_id, $timestamp, $event_id )

{$link;( ! $event_id )

{

$query = "INSERT INTO events (gort, frcountry, frcode, tocountry, tocode,, typetrans, eclub, edate )( '$gort', '$frcountry', '$frcode', '$tocountry', '$tocode',

'$cargo', '$typetrans', '$club_id', '$timestamp')";}

{

$query = "UPDATE events SET gort='$gort', frcountry='$frcountry', frcode='$frcode',='$tocountry', tocode='$tocode', cargo='$cargo', typetrans='$typetrans',='$club_id', edate='$timestamp' WHERE id='$event_id'";

}

$result = mysql_query( $query, $link );( ! $result )( "insertEvent error: ".mysql_error() );

}


Как видно, функция insertEvent() проверяет аргумент $event[id]. Если он равен false, то используется конструкция INSERT. В противном случае будет задействована конструкция UPDATE.

После модификации базы данных пользователь направляется программой на страницу reviewevents.php, где он сможет увидеть все предложения.

Если пользователь до сих пор не переслал данные, то фрагмент программы, выполняющий проверку и модификацию, будет пропущен. Если переменная $event_id существует, то это означает, что предложение было взято из базы данных для занесения в форму. Для этого просто записываются значения из переменной $event_row в переменную $form. Кроме того, значение элемента edate переменной $event_row записывается в глобальную переменную $date.

Если форма не была переслана и не существует переменной $event_id, соответствующие значения из $club_row записываются в элементы $form[type] и $form[area]. $club_row содержит строку из таблицы club. Это необходимо для того, чтобы соответствующие меню для типа и места имели значение по умолчанию.

В HTML-форме единственным стоящим внимания фрагментом является тот, который отвечает за создание меню даты и времени. Эти меню достаточно просто создать, однако необходимо, чтобы в них автоматически выбирались текущие время и дата, время и дата, выбранные в последний раз, или время и дата из таблицы events. Это абсолютное время уже хранится в переменной $date. В начале программы в эту переменную записывается абсолютное время, которое отвечает текущему моменту. Если пользователь вводит информацию, создается новое абсолютное время, соответствующее введенному времени, и записываем его в переменную $date.

Каждое меню передает в переменной $date абсолютное время соответствующей функции из библиотеки под названием date.inc. Эта библиотека приведена в приложении 9.

Всем этим функциям передается абсолютное время, в результате чего создается список HTML-дескрипторов OPTION. В этих функциях используется функция getDate() для получения индекса соответствующей части времени (год, месяц, день месяца).

Затем производится проверка того, находятся ли эти переменные в допустимом диапазоне значений. Если это так, то данные функции добавляют строку SELECTED к элементу OPTION, который выводится в окно браузера.


4.1.6 Файл reviewevents.php

Теперь необходимо предоставить пользователю возможность просматривать добавленные предложения. Пользователь должен иметь возможность просматривать список своих предложений, а также редактировать и удалять любое из них.

Страница reviewevents.php достаточно проста. Она приведена в приложении 10.

Использованием библиотеки dblib.inc для открытия соединения с базой данных и библиотеки clublib.inc для открытия сессии, а также для закрытия доступа неавторизированным пользователям, создается функцию writeEvents (). Эта функция может быть вызвана из любой точки HTML-текста и выводит афишу прямо в окно браузера. Информация о компании уже существует в переменной $club_row, которая была записана туда после запуска функции getEvents(). Идентификатор клуба, находящийся в элементе $club_row[id], можно использовать как ключ, открывающий доступ ко всем предложениям. Для этого используется функция getEvents(). Данная функцию далее рассматривается более детально. Этой функции передается идентификатор компании, в результате чего она возвращает многомерный массив, содержащий каждое предложение данной компании.

Значение, возвращаемое функцией getEvents(), сохраняется в переменной под названием $events. Таким образом получается больше информации, чем нужно, однако функция getEvents() достаточно гибка. Эта функция используется до тех пор, пока не разрешатся все проблемы, возникающие при написании проекта. Если значение из $events равно false, в окно браузера выводится соответствующее сообщение и прекращается выполнение функции. В противном случае создается HTML-таблица. Считывая информацию из массива $array, выводятся некоторые элементы из его подмассивов в отдельную таблицу.

В отформатированном виде дата выводится на экран и передается элемент edate каждого массива функции date(). Кроме того, создается HTML-ссылка с помощью элементf id каждой афиши. Поле id используется вместе с константой SID для создания строки запроса, которая может быть передана странице updateevent.php для получения редактируемой таблицы предложений. Кроме того для каждого из элементов создаются ссылки, которые указывают на текущую страницу. Для этого конструируется строка запроса, в которой есть идентификатор предложения и параметр actionflag со значением deleteEvent. Эта строка потом может быть использована для удаления данного предложения, поэтому создается обработчик события на JavaScript, который позволит отменить активацию ссылки в том случае, если пользователь передумает.

При создании функции writeEvents() нужно учесть возможность того, что пользователь может захотеть удалить афишу. Для этого проверяются переменные $actionflag и $event_id. Если проверка проходит удачно, вызывается функцию deleteEvent(), передавая ей переменную $event_id.

deleteEvent( $id )

{$link;

$query = "DELETE FROM events WHERE id='$id'";

$result = mysql_query( $query, $link );( ! $result )( "deleteEvent fatal error: ".mysql_error() );( mysql_affected_rows($link) );

}


4.2 Экран предложений


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

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


.2.1 Файл viewevents.php

С помощью страницы viewevents.php пользователь может просматривать существующие предложения. Эта страница похожа на страницу reviewevents.php, которая была описана ранее. Данная страница более гибкая и предоставляет пользователю больше возможностей для просмотра, однако на ней нельзя редактировать информацию. Исходная программа для такой страницы приведена в приложении 11.

Эту программа начиснается с включения библиотек dblib.inc, date.inc и clublib.inc. Таким образом, предоставляется доступ ко всем функциям, входящим в первую и последнюю из вышеперечисленных библиотек. Одновременно с этим открывается соединение с базой данных и сессия.

После этого проверяется, была ли переслана форма, при этом считывается содержимое переменной $actionflag. Соответствующее поле формы является скрытым. Если пользователь переслал форму, выбранные им настройки должны иметь приоритетное значение перед ранее сохраненными. Ранее регистрировался ассоциативный массив в сессии пользователя для сохранения имени и пароля пользователя. Теперь к нему добавляются новые элементы к тому же массиву, который будет хранить настройки пользователя.

Переменная $session была зарегистрирована в сессии пользователя, как только мы включили библиотеку clublib.inc.


session_start();_register("session");

Теперь переменная $session превращается в многомерный массив, что происходит благодаря записи последней в элемент $session[viewevents]. При этом сохраняется структура настроек и данные переменные приписываются к этой странице. Здесь пользователь может выбрать такие параметры, как тип (транспорт или груз), страна загрузки, страна разгрузки, день, месяц и год. Сохраняется информация, пересланная пользователем, в соответствующие элементы массива $session[viewevents].

Если пользователь не переслал данных, это может означать, что он сделал это раньше. В таком случае массив $session[viewevents] будет существовать, однако переменная $actionflag не будет установлена. Если это так, в массив $form записываются те же значения. Таким образом, в форме точно будут представлены правильные значения.

Если пользователь не переслал экранную форму и элемент $session[viewevents] пуст, тогда нужно создать массив, содержащий значения по умолчанию. Функция getDate() используется для создания массива дат. Этот массив применяется для записи в элемент session[viewevents] [day] текущего дня месяца, $session [viewevents] [month] текущего месяца и в элемент $session[viewevents] [year] текущего года.

Теперь точно известно, что вышеуказанные два элемента содержат корректный день, месяц и год. Эти значения можно потом изменять, использовав информацию, пересланную в форме, или информацию из переменных сессии. Данные значения функции передаются из библиотеки date.inc под названием getDateRange(). Данная функция принимает номера дня, месяца и года, а также возвращает массив, состоящий из двух значений абсолютного времени, соответствующих началу и концу дня.


function getDateRange( $mon, $day, $year )

{

$start = mktime( 0, 0, 0, $mon, $day, $year );

$end = mktime( 0, 0, 0, $mon+,$day+1, $year );

$end --;array( $start, $end );

}


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

Далее создается функция displayEvents(), которая будет выводить краткое содержание предложения в окно браузера. Данная функция будет вызываться из тела HTML-документа [4].

Для получения массива с краткими описаниями предложений вызывается функция getEvents(), которая находится в библиотеке dblib.inc .


function getEvents( $club_id=0, $range=0, $gort=0, $frcountry=0, $tocountry=0 )

{$link;

$query = "SELECT clubs.name, events.*,.gort as gortname,.frcountry as frcountryname,.tocountry as tocountryname ";

$query .= "FROM clubs, events, gorts, frcountrys, tocountrys WHERE ";

$query .= "clubs.id=events.eclubevents.gort=gorts.idevents.frcountry=frcountrys.idevents.tocountry=tocountrys.id ";( ! empty( $club_id ) && $club_id !="ANY" )

$query .= "AND events.eclub='$club_id' ";( ! empty($range) )

$query .= "AND events.edate >= '$range[0]'events.edate <='$range[1]' ";( ! empty($gort) && $gort != "ANY" )

$query .= "AND events.gort='$gort' ";( ! empty($frcountry) && $frcountry != "ANY" )

$query .= "AND events.frcountry='$frcountry' ";( ! empty($tocountry) && $tocountry != "ANY" )

$query .= "AND events.tocountry='$tocountry' ";

$query .= "ORDER BY events.edate";

$result = mysql_query( $query, $link );( ! $result )( "getIDevents fatal error: ".mysql_error() );

$ret = array();( $row = mysql_fetch_array( $result ) )_push( $ret, $row );$ret;

}


Хотя эта функция называется getEvents(), она не только выводит таблицу предложений. Кроме того ей передается четыре аргумента: идентификатор компании, интервал времени в виде массива из двух значений абсолютного времени, страна загрузки и страна разгрузки. Все эти аргументы необязательны и могут быть заменены нулем или логическим значением false, если нет желания передавать их в SQL-запросе. Большая часть функции динамически создает SQL-запросы в соответствии с переданными аргументами. Основной запрос объединяет все таблицы в базе данных, передавая в запросе название компании, страну загрузки и страну разгрузки. Эти значения будут включены в конечный результат.

После этого в запросе передаются дополнительные условия, в зависимости от того, какие аргументы установлены в ноль. Параметры $type и $area будут проигнорированы, если они содержат строку "ANY".

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

Наконец, запрос пересылается и возвращенный результат записывается в многомерный массив.

После получения этого массива как результата вызова функции getEvents(), можно его считывать. Считывается каждое поле edate, форматируя дату с помощью функции date(). После этого создается ссылка на страницу viewevent.php, содержащую расширенную информацию о предложении. Для этого создается строка запроса, в которой пересылается идентификатор предложения и константа SID. В данном цикле также создается HTML-ссылка на страницу viewclub.php, передавая строку запроса, содержащую идентификатор компании и константу SID.

Далее выводится страна загрузки и страна разгрузки.

Ранее использовалась функция под названием html() при выводе пользователями данных о предложениях в сокращенной форме. Вызывается функция html() при считывании предложений в теле цикла функции writeEvent(). Эта функция определяется пользователем и находится в библиотеке clublib.inc. Данной функции передается строка и выводится ее версия, приспособленная для вывода в окно браузера. Специальные символы преобразованы в HTML-эквиваленты, а символы перевода каретки заменены дескрипторами <BR>.


function html( $str )

{( is_array( $str ) ) {( $str as $key=>$val )

$str[$key] = htmlstr( $val );$str;}htmlstr( $str );

}htmlstr( $str ) {

$str = htmlspecialchars( $str );

$str = nl2br( $str ); $str; }


Как вы видите, здесь не одна, а две функции. Функция html() принимает и строку, и массив. Если параметр содержит массив, мы считываем его в цикле, преобразовывая каждый элемент. В противном случае преобразование применяется прямо к переданной переменной. Само преобразование выполняется в функции htmlstr(), которая использует две встроенные функции для преобразования. Функция htmlspecialcharacter() трансформирует все символы, которые могут неправильно отображаться в среде HTML, в их HTML-эквиваленты. Функция nl2br() добавляет дескрипторы <BR> туда, где они нужны.

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

Такую форму легко создать с помощью функций, описанных ранее, которые динамически создают элементы OPTION.


.2.2 Файл viewclubs.php

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

Как видно, эта программа по структуре и логике похожа на предыдущую. Таким образом сохраняются переменные сессии для данной страницы в переменной $session[viewclubs]. Если пользователь переслал форму для этой страницы, обновляются переменные сессии. Если пользователь не переслал данные, однако переменные сессии доступны, в элемент $session[viewclubs] записываются значения их переменной $form. Если переменные сессии недоступны, то в массив $session[viewclubs] записываются значения по умолчанию. Далее создается функция под названием displayClubs(). В ней вызывается новая функция из dblib.inc под названием getClubs(), которой передаются значения страны регистрации компании из таблицы clubs. Данные аргументы необязательны.

getClubs( $frcountry="" )

{$link;

$query = "SELECT clubs.*, frcountrys.frcountry as frcountryname ";

$query .= "FROM clubs, frcountrys WHERE ";

$query .= "clubs.frcountry = frcountrys.id ";( $frcountry != "ANY" && ! empty( $frcountry ) )

$query .= "AND clubs.frcountry = '$frcountry' ";

$query .= "ORDER BY clubs.frcountry, clubs.name";

$result = mysql_query( $query, $link );( ! $result )( "getIDevents fatal error: ".mysql_error() );

$ret = array();( $row = mysql_fetch_array( $result ) )_push( $ret, $row );$ret;

}

Функция getClubs() создает динамический SQL-запрос в соответствии с переданными аргументами. По умолчанию эта функция объединяет таблицы clubs и frcountrys. Если данной функции передается что-либо кроме пустой строки или строки "ANY" в аргументе $ frcountry, данная функция будет указывать условие WHERE в соответствии с этим аргументом. Данная функция тоже возвращает многомерный массив.

После этого считывается массив, который вернула функция getClubs(), выводя поля name и frcountryname в окно браузера. Как и раньше, название компании выводится в виде ссылки, указывающей на viewclub.php.


.2.3 Файл viewclub.php

Страница viewclub.php предоставляет полную информацию о компании. На нее можно попасть через ссылку со страниц viewevents.php или viewclubs.php. На этой странице объединяется логическое построение многих функций из предыдущих примеров. Эта программа приведена в приложении 13.

Этой программе передается параметр $club_id. Данная переменная проверяется, после чего пользователь возвращается на страницу viewclubs.php, если этой переменной не существует. Для получения информации о компании вызывается функция getclubJoined() из библиотеки dblib.inc. Этой функции передается идентификатор компании, в результате чего она возвращает массив:


function getClubJoined( $id ) {$link;

$query = "SELECT clubs.*,.frcountry as frcountryname";

$query .= "FROM clubs, frcountrys WHERE ";

$query .= "clubs.frcountry=frcountrys.id AND clubs.id='$id";

$result = mysql_query( $query, $link );( ! $result )("getClubJoined fatal error:".mysql_error());mysql_fetch_array( $result );

}


Данная функция вызывается вместо getRow() (которая тоже может возвращать информацию о компании), поскольку создаваемые этой функцией SQL-запросы включают имя поля frcountry. Это делается за счет объединения таблиц clubs и frcountrys, в результате чего в возвращаемом массиве создаются дополнительный элемент frcountryname.

Далее записывается массив, который возвращает функция getClubJoined(), в переменную $club. Этот массив выводится в окно браузера в теле документа. Кроме того, определяется функция под названием displayEvents(), которой передается переменная $club_id, в результате чего возвращается список предложений, связанных с данной компанией.


.2.4 Файл viewevent.php

Программа viewevent.php является последней в данном проекте. На указанную страницу можно попасть с любой из общедоступных страниц, где есть список предложений. Страницу viewevent.php есть возможность увидеть в приложении 14.

Эта страница довольно проста. Массив получается из таблицы events с помощью функции getEvents() и из библиотеки dblib.inc. Данной функции передается переменная $event_id, которая содержит идентификатор, переданный нам в строке запроса. После получения массива, он выводится в окно браузера.

Функция getEvents() состоит из относительно простых SQL-запросов, которые объединяют таблицы clubs и events.


function getEvent( $event_id ) {$link;

$query = "SELECT clubs.name as clubname, events.*,gorts.gort as gortname, frcountrys.frcountry as frcountryname,.tocountry as tocountryname ";

$query .= "FROM clubs, events, gorts, frcountrys, tocountrys WHERE ";

$query .= "clubs.id=events.eclubevents.gort=gorts.idevents.frcountry=frcountrys.idevents.tocountry=tocountrys.idevents.id='$event_id'";

$result = mysql_query( $query, $link );( ! $result )( "getEvent fatal error: ".mysql_error() );mysql_fetch_array( $result ); }.


5. Руководство пользователя


На главной странице системы "Фрахт" пользователь имеет возможность выполнить следующие действия:

·просмотреть список зарегистрированных компаний;

·просмотреть грузы и транспорт;

·зарегистрироваться;

·авторизироваться;

·вернуться на главную страницу группы компаний "Еврофрахт".

Перейдя по ссылке "Посмотреть список компаний", пользователь попадает на страницу viewclubs.php, где получает возможность посмотреть список всех зарегистрированных компаний либо список компаний зарегистрированных в определенной стране, отфильтровав их по стране регистрации. Вид страницы viewclubs.php показан на рисунке 5.1.


Рисунок 5.1 - Страница viewclubs.php


Чтобы ознакомится с более детальной информацией о какой-либо компании из списка, пользователю нужно нажать на название компании. После этого пользователь попадет на страницу описания выбранной компании. Неавторизованные пользователи увидят на этой странице ограниченный объем информации, а именно: название компании, страну регистрации, имя контактного лица, телефонные номера контактного лица и адрес электронной почты контактного лица.

Перейдя по ссылке "Посмотреть грузы и транспорт", пользователь попадает на страницу viewevents.php, которая показана на рисунке 5.2.


Рисунок 5.2 - Страница viewevents.php


На данной странице пользователь имеет возможность просмотреть список предложений. Для того, чтобы сделать это, пользователю необходимо выбрать дату, на которую заявлено предложение, тип предложения (груз или транспорт), страну загрузки, страну выгрузки и нажать на кнопку "Выбрать". После этого ниже появится список предложений, отвечающих выбранным критериям. По желанию пользователь может выбрать "Все типы предложений", "Любая страна отправления" либо "Любая страна назначения", результат будет соответствовать его выбору. Для просмотра более подробной информации, пользователю необходимо будет нажать на ссылку "Подробнее" в строке интересующего его предложения. После этого откроется страница с более подробной информацией о предложении. Далее пользователю откроется более детальная информация, а именно: дата предложения, тип предложения, страна загрузки, код города загрузки, страна выгрузки, код города выгрузки и, в зависимости от типа предложения, еще некоторые детали (тип груза, тип заявленного авто). Неавторизованный пользователь не сможет воспользоваться данной информацией, т.к. он не будет иметь возможность увидеть, какая компания заявила данное предложение. Для того чтобы пользоваться всеми возможностями системы, пользователю необходимо пройти авторизацию.

Пройдя по ссылке "Авторизация", пользователь попадает на страницу login.php ее вид приведен на рисунке 5.3.


Рисунок 5.3 - Страница login.php


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

Зарегистрироваться пользователь может, пройдя по ссылке "Регистрация". После этого откроется страница join.php, и пользователю будет предложено ввести желаемое имя и пароль, а также подтвердить пароль повторным вводом. Страница join.php показана на рисунке 5.4.


Рисунок 5.4 - Страница join.php


Затем пользователю необходимо нажать на кнопку "Далее". После этого пользователь попадает на страницу updateclub.php, где ему необходимо ввести информацию о своей компании, а именно: название компании, страну регистрации, имя контактного лица, номер телефона контактного лица и адрес электронной почты. После ввода данных необходимо нажать на кнопку "Добавить". Вид страницы addclub.php показан на рисунке 5.5.


Рисунок 5.5 - Страница addclub.php


В случае успешной регистрации пользователь попадает на страницу membersmenu.php, на которой находится расширенное меню, позволяющего получить доступ ко всем функциям системы, модуль для обмена сообщениями, а также некоторые другие модули (модуль для обмена сообщениями и другие модули выходят за рамки темы данного дипломного проекта). Вид расширенного меню показан на странице viewclub.php на рисунке 5.6.


Рисунок 5.6 - Страница viewclub.php


Данное расширенное меню предоставляет следующие возможности:

·ссылка "Описание компании" позволяет изменять информацию о своей компании;

·ссылка "Ваши грузы и транспорт" - видеть список своих предложений, изменять либо удалить их;

·ссылка "Добавить грузы и транспорт" - добавлять предложения для своей компании;

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


6. Технико-экономическое обоснование


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


6.1 Расчет экономической эффективности создания и внедрения программного продукта


Эффект от разработанного программного продукта (далее ПП) проявляется в следующем:

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

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

Годовой экономический эффект определяется по формуле [5]:


,(6.1)


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



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


,(6.2)


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



Срок возврата инвестиций определяется по формуле:


,(6.3)


где - прирост условной прибыли, получаемой в результате автоматизации, руб.;

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


6.2 Расчет годовых эксплуатационных расходов при ручном методе решения управленческой задачи


Затраты на оплату труда работника определяются по формуле:


,(6.4)


где - трудоемкость разового решения задачи вручную, чел/ч;

- периодичность решения задачи в течение года, раз/год;

- среднечасовая ставка работника, осуществляющего ручной расчет задачи, руб.;

- коэффициент, учитывающий процент премий;

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

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



Нормативная трудоемкость разового решения задачи вручную () определяется по отдельным элементам затрат рабочего времени по формуле:


,(6.5)


где - основное время, ч;

- вспомогательное время, ч;

- подготовительно-заключительное время, ч;

- время на отдых и личные надобности, ч.



Среднечасовая тарифная ставка работника, осуществляющего ручной счет задачи, определяется исходя из Единой тарифной сетки Республики Беларусь и установленного в организации размера тарифной ставки работника за месяц, по следующей формуле [5]:


,(6.6)


где - тарифная ставка работника за месяц, руб.;

- тарифный коэффициент работника i-го разряда;

- эффективный фонд времени работы рабочего в месяц, час.

Коэффициенты, учитывающие процент премий и дополнительную заработную плату, принимаются на уровне, установленном в организации. Коэффициент, учитывающий отчисления на социальные нужды от заработной платы, принимается равным 0,35 (отчисления в фонд социальной защиты населения).


.


Расчет затрат времени осуществляется на основе поэлементных нормативов времени на выполнение отдельных операций ручного решения задачи и оформлен в таблице 6.1 [6].


Таблица 6.1. Расчет нормативной трудоемкости разового решения управленческой задачи

Нормируемое времяУсловия расчетаТрудоемкость, мин.Основное, Суммируется составление сметы6Вспомогательное, Самоконтрольвремя на контроль 1 стр. - 4 мин.; кол-во контролируемых страниц - 1; принятие решения о готовности - 0,1 мин.4,1Итого вспомогательное время, 4,1Итого оперативное время, 10,1Подготовительно-заключительное, Общее осмысливание задачи3Прием-сдача законченной работывремя на проверку одной страницы - 3 мин.; кол-во контролируемых страниц - 13Итого подготовительно-заключительное время, 6На отдых и личные надобности, 5% от 0,805Итого нормативная трудоемкость16,905

.3 Расчет годовых текущих затрат, связанных с эксплуатацией программного продукта


Годовые текущие затраты, связанные с эксплуатацией программного продукта, определяются по формуле:


,(6.7)


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

- затраты на содержание и эксплуатацию ЭВМ при решении задачи, руб.


Затраты на оплату труда пользователя ПП с отчислениями на социальные нужды определяются исходя из времени решения управленческой задачи на ЭВМ по формуле:


,(6.8)


где - время решения задачи на ЭВМ, час;

- среднечасовая ставка работника пользователя ПП, руб.

- периодичность решения задачи в течение года, раз/год;

- коэффициент, учитывающий процент премий;

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

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



Время решения задачи на ЭВМ определяется по формуле:


,(6.9)


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



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


,(6.10)


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

- норматив набора 100 знаков, мин.



Затраты на содержание и эксплуатацию ЭВМ при решении задачи определяются по следующей формуле:


,(6.11)


где - стоимость 1 машино-часа работы ЭВМ, руб.



Стоимость машино-часа работы ЭВМ определяется по формуле:


,(6.12)


где - расходы на электроэнергию за час работы ЭВМ, руб.; - годовая величина амортизационных отчислений от стоимости ЭВМ, руб.; - годовые затраты на ремонт и техническое обслуживание ЭВМ, руб.; - годовая величина налога на недвижимость, руб.; - годовой фонд времени работы ЭВМ, час.



Расходы на электроэнергию за час работы определяются по формуле:


,(6.13)


где - мощность потребления электроэнергии ЭВМ, кВт;

- коэффициент использования энергоустановок по мощности;

- стоимость 1 кВт-часа электроэнергии, руб.



Годовая величина амортизационных отчислений от стоимости ЭВМ определяется по формуле:


,(6.14)


где - норма амортизационных отчислений от стоимости ЭВМ;

- балансовая стоимость ЭВМ, руб.



Норма амортизационных отчислений от стоимости ЭВМ определяется по формуле:


,(6.15)


где - срок службы ЭВМ, лет.



Годовые затраты на ремонт и техническое обслуживание ЭВМ укрупнено определяются по формуле:


,(6.16)


где - коэффициент учитывающий затраты на ремонт и техническое обслуживание ЭВМ; - балансовая стоимость ЭВМ, руб.



Величина налога на недвижимость определяется по формуле:


,(6.17)


где - ставка налога на недвижимость, %.

- балансовая стоимость ЭВМ, руб.;

- балансовая стоимость площадей, руб.



Годовой фонд времени работы ЭВМ определяется, исходя из режима ее работы, и рассчитывается по формуле:


,(6.18)


где - среднесуточная фактическая загрузка ЭВМ, час;

- среднее количество дней работы ЭВМ в год, дней.



.4 Расчет совокупных единовременных затрат на создание программного продукта


Совокупные единовременные затраты (инвестиции) на разработку и внедрение ПП определяются по формуле:


,(6.19)


где - полная себестоимость разработки ПП, руб.



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


,(6.20)


где - затраты на оплату труда разработчика ПП с отчислениями на социальные нужды, руб.;

- затраты на отладку ПП, руб.;

- накладные затраты проектной организации, руб.



. Затраты на оплату труда разработчика ПП с отчислениями на социальные нужды определяются исходя из трудоемкости создания ПП по формуле:


,(6.21)


где - трудоемкость разработки программного продукта, чел/ч;

- среднечасовая ставка работника пользователя ПП, руб.

- коэффициент, учитывающий процент премий;

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

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



Определяющим фактором затрат на оплату труда является трудоемкость создания ПП. Трудоемкость разработки ПП может быть определена:

·на основе Типовых норм времени для программирования задач ЭВМ;

·укрупненным способом.

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


,(6.22)


где ТОА - трудоемкость подготовки описания задачи и исследования алгоритма решения;

ТБС - трудоемкость разработки блок-схемы алгоритма;

ТП - трудоемкость программирования по готовой блок-схеме алгоритма;

ТОТЛ - трудоемкость отладки программы на ЭВМ;

ТДР - трудоемкость подготовки документации по задаче в рукописи;

ТДО - трудоемкость редактирования, печати и оформления документации по задаче.



Составляющие трудоемкости определяются по формулам [7]:


,(6.23)


где Q - условное число операторов;- коэффициент увеличения затрат труда вследствие недостаточного описания задачи;- коэффициент квалификации разработчика алгоритмов и программ (при стаже работы до двух лет K = 0,8, при стаже от двух до трех лет К=1, при стаже от трех до пяти лет К=1,1…1,2, при стаже от пяти до семи лет К=1,3…1,4, при стаже свыше семи лет К=1,5…1,6).


.

,(6.24)

.

,(6.25)

.

,(6.26)

.

,(6.27)

.

,(6.28)

.


Условное число операторов в ПП рассчитывается по формуле [8]:


,(6.29)

где q - число операторов в программе;- коэффициент сложности программы;- коэффициент коррекции программы в ходе ее разработки.


.


. В себестоимость ПП включаются затраты на отладку ПП в процессе его создания. Они рассчитываются исходя из стоимости машино-часа работы ЭВМ, на котором осуществлялась отладка и времени отладки и определяются по формуле [5]:


,(6.30)


где ТОТЛ - трудоемкость отладки программы на ЭВМ, час;

SМЧ - стоимость машино-часа работы ЭВМ, руб.



. Величина накладных затрат проектной организации определяется по формуле [9]:


,(6.31)


где kНЗ - коэффициент накладных расходов проектной организации.

ЗП - затраты на оплату труда разработчика ПП с отчислениями на социальные нужды, руб.


ЗН = 2182430 ? 0,2 = 436486 руб.


Рассчитаем прогнозируемую прибыль по создаваемому ПП как [10]:


,(6.32)


где - уровень рентабельности ПС ().


Тогда получим:



Прогнозируемая цена без налогов () складывается из полной себестоимости программного средства и прогнозируемой прибыли. Рассчитывается по формуле:


,(6.33)


Получаем:


,(6.34)


где - норматив платежей в местный бюджет ().

Тогда:


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


,(6.35)


На реализацию создаваемого программного средства льготы по налогу на добавленную стоимость (НДС) не распространяются. В связи с этим НДС рассчитывается по формуле:


,(6.36)


где - норматив налога на добавленную стоимость ().



Прогнозируемая отпускная цена () определяется по формуле []:


,(6.37)


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


,(6.38)


где - норматив налога на прибыль ().

Подставляя данные, получаем:



Чистая прибыль от реализации ПС остается организации-разработчику и представляет собой экономический эффект от создания нового программного средства.

В табл. 6.2 сведены данные об экономической эффективности внедрения ПП.


Таблица 6.2 - Технико-экономические показатели проекта

Наименование показателяЗначение1. Трудоемкость решения задачи, час0,282. Периодичность решения задачи, раз в год12703. Годовые текущие затраты, связанные с решением задачи, руб.364670,8724. Отпускная цена программы, тыс.руб.5. Степень новизны программыгруппа "В"6. Группа сложности алгоритма27. Прирост условной прибыли, тыс.руб./год.18097678. Годовой экономический эффект пользователя, руб.9. Динамический срок окупаемости1,5 года

Вывод: проект окупается через 1,5 года, имеет высокий уровень рентабельности и резерв безопасности, экономически обоснован.

На рисунке 6.1 изображена диаграмма структуры себестоимости разрабатываемого программного продукта.


Рисунок 6.1 - Диаграмма структуры себестоимости ПП


Для определения конкурентоспособности используется отношение:


(6.39)


где - количество баллов по i-му показателю разработанного ПС;

- количество баллов по i-му показателю ПС-конкурента;

- коэффициент весомости по i-му показателю.

Среди программных продуктов, обеспечивающих похожий принцип работы разработанного средства можно отнести программные модули автоматизированных информационных систем "cargo.by" и "cargo.lt". Сравнительная характеристика по основным показателям данных программных продуктов и разработанного модуля приводится в таблице 6.3.


Таблица 6.3 - Сравнительная характеристика программных продуктов

Оцениваемый параметрКоэффициент весомости, Оценка в баллах, Оценка в баллах с учетом коэффициентаСистема "Фрахт"Cargo.byCargo.ltСистема "Фрахт"Cargo.byCargo.lt1. Назначение0,18570,80,50,72. Надежность0,27671,41,21,43. Эргономичность0,18780,80,70,84. Эстетичность0,058680,40,30,45. Безопасность0,156460,90,60,96. Удобство пользователя (интерфейс)0,28671,61,21,47. Отпускная цена0,29871,81,61,4Итого:17,76,17,0

и


Таким образом, получаем конкурентоспособность 1,26 и 1,1, что больше единицы и, следовательно, разработанный программный продукт конкурентоспособен. По данным таблицы 6.3 построим радар конкурентоспособности. Его можно увидеть на рисунке 6.2.


Рисунок 6.2 - Радар конкурентоспособности программных продуктов

7. Производственная и экологическая безопасность


7.1 Общие требования


Основные положения в сфере производственной и экологической безопасности, которые действуют, в частности, и на ООО "Еврофрахт", могут быть сформулированы следующим образом [11]:

1.Инструкция по охране труда при работе с персональными компьютерами и оргтехникой устанавливает общие требования безопасности для работников, использующих в работе персональные компьютеры (далее - ПК) и средства оргтехники (копировальный аппараты, факсы и т.д.).

2.К работе с ПК допускаются работники, не имеющие медицинских противопоказаний, прошедшие инструктаж по вопросам охраны труда, с группой по электробезопасности не ниже I.

Женщины со времени установления беременности и в период кормления грудью к выполнению всех видов работ, связанных с использованием ПК, не допускаются.

3.При работе с ПК и средствами оргтехники на работников могут оказывать неблагоприятное воздействие следующие опасные и вредные производственные факторы:

·повышенный уровень электромагнитных излучений; повышенный уровень ионизирующих излучений;

·повышенный уровень статического электричества;

·повышенная напряженность электростатического поля;

·повышенная или пониженная ионизация воздуха;

·повышенная яркость света;

·прямая и отраженная блесткость;

·повышенное значение напряжения в электрической цепи, замыкание которой может произойти через тело человека;

·статические перегрузки костно-мышечного аппарата и динамические локальные перегрузки мышц кистей рук;

·перенапряжение зрительного анализатора;

·умственное перенапряжение;

·эмоциональные перегрузки;

·монотонность труда.

В зависимости от условий труда, в которых применяются ПК и средства оргтехники, и характера работы на работников могут воздействовать также другие опасные и вредные производственные факторы.

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

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

Клавиатура располагается на поверхности стола таким образом, чтобы пространство перед клавиатурой было достаточным для опоры рук работника (на расстоянии не менее чем 300 мм от края, обращенного к работнику).

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

Для исключения воздействия повышенных уровней электромагнитных излучений расстояние между экраном монитора и работником должно составлять не менее 500 мм (оптимальное 600-700 мм).

Применяемые подвижные подставки для документов (пюпитры) размещаются водной плоскости и на одной высоте с экраном.

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

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

6.Рабочее место размещается таким образом, чтобы естественный свет падал сбоку (желательно слева).

Для снижения яркости в поле зрения при естественном освещении применяются регулируемые жалюзи, плотные шторы. Светильники общего и местного освещения должны создавать нормальные условия освещенности и соответствующий контраст между экраном и окружающей обстановкой с учетом вида работы и требований видимости со стороны работника. Освещенность на поверхности стола в зоне размещения рабочего документа должна составлять 300-500 люкс. Возможные мешающие отражения и отблески на экране монитора и другом оборудовании устраняются путем соответствующего размещения экрана, оборудования, расположения светильников местного освещения. При рядном размещении рабочих столов расположение экранов видеомониторов навстречу друг другу из-за их взаимного отражения не допускается.

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

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

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

.Работники при работе с ПК с учетом воздействующих на них опасных и вредных производственных факторов обеспечиваются средствами индивидуальной защиты в соответствии с типовыми отраслевыми нормами для соответствующих профессий и должностей.

.При работе с ПК работники обязаны:

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

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

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

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

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

12.Не допускается:

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

·устанавливать системный блок в закрытых объемах мебели, непосредственно на полу;

·использовать для подключения ПК розетки, удлинители, не оснащенные заземляющим контактом (шиной).

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

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


К основным вредным и опасным факторам, которые влияют на людей, занятых на производстве программных средств (далее ПС), могут быть отнесены [12]:

1.Плохая освещенность рабочей зоны (условия освещенности производственных помещений должны удовлетворять нормам, отмеченным в СНиП II-4-79/85);

2.Повышенные уровни электромагнитных излучений (уровни излучений и полей должны отвечать ГОСТ 12.2.006-87);

.Опасность поражения электрическим током;

.Неудовлетворительные параметры микроклимата рабочей зоны в производственных помещениях должны удовлетворять нормам, отмеченным в ГОСТ 12.1.005-88 и ДСН 3.3.6.042-99;

.Содержание в воздухе рабочей зоны вредных веществ разного характера влияния в концентрациях, что превышают предельно допустимые (гранично-допустимая концентрация (ГДК) вредных веществ в воздухе рабочей зоны должны удовлетворять нормам, отмеченным в ГОСТ 12.1.005-88 и ГОСТ 12.1.007-80);

.Повышенный уровень шума на рабочем месте (допустимые уровни звукового давления в октавных полосах частот, уровни звука и эквивалентные уровни звука на рабочих местах) должен соответствовать санитарным нормам допустимых уровней шума на рабочих местах ДСН 3.3.6.037-99;

.Повышенная напряженность электрического поля промышленной частоты на рабочем месте (напряженность электрических полей промышленной частоты на рабочих местах должна удовлетворять нормам, отмеченным в ГОСТ 12.1.002-88);

.Воздействие вредных факторов влияния мониторов ПК (ДСанПиН 3.3.2.007-98).

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

Основные геометрические размеры помещения, котором будут проводится работы по созданию ПС:

·длина;

·ширина;

·высота.

В помещении будут работать два инженера.

Исходя из значений , , , рассчитаем площадь помещение:


- площадь помещения;(7.1)


Общая площадь столов и шкафа, рассчитанная эмпирически ():


.(7.2)

.(7.3)

.(7.4)


Площадь и объем, приходящиеся на одного рабочего, определяются по формулам:


.(7.5)

.(7.6)


На основании приведенных выше данных рассчитаем значение площади и объема помещения, что приходится на одного служащего. Результаты расчетов приведены в таблице 7.1.


Таблица 7.1 - Результаты расчетов

ПараметрНормативРеальные параметрыПлощадь, Sне меньше 6 м2.6,9 м2Объем , Vне меньше 15 м3.17,94 м3

Анализируя условия труда в помещении, заметим, что объем помещения, который приходится на одного человека, больше нормативного значения СН245-82 и ОНТП24-86.

Расчет природного освещения.

Согласно СНиП ИИ-4-79/85 для наименьшего различения объектов (разряд зрительной работы ІІІ (б)) 0,3-0,5 мм значения коэффициента природного освещения (КПО) должно равняться 2%.

Целью расчета условного освещения является проверка его соответствия СНиП ИИ-4-79/85. При боковом одностороннем освещении формируется минимальное значении КПО в точке, размещенной на расстоянии одного метра от стены, наиболее отдаленной от световых проемов на пересечении характерного разреза плоскости помещения и рабочей поверхности. Характерный разрез помещения - поперечный разрез по средине помещения, плоскость которого перпендикулярная плоскости проемов. Условная рабочая поверхность - горизонтальна и расположена на высоте 0,8 м от полу.

Находим номер светового климата. Для Минска номер светового климата - IV. На основе СНиП ИИ-4-79, находим коэффициент природного освещения (КПО = 2), для работы высокой точности (разряд зрительной работы ІІІ (б)).

Для домов города Минска (IV пояс светового климата) нормируемое значение КПО находим по формуле:


,(7.7)


где - КПО для ІІІ светового климата;

- коэффициент светового климата, ;

- коэффициент солнечности климата, , для световых проемов во внешних стенах дома, ориентированных по сторонам горизонта 136°-225°.


.(7.8)


Фактическое значение КПО рассчитывается по формуле:


,(7.9)


где ? - геометрический КПО в расчетной точек при боковом освещении, учитывая прямой свет неба, который находим по формуле;

- коэффициент, который учитывает неравномерность яркости солнечного неба для условной высоты светового проема над рабочей поверхностью 20°;

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

- коэффициент, который учитывает увеличение КПО при боковом освещении благодаря свету, отбитому от поверхности помещения и подсвечивающего слоя, прилегающего к дому, учитывая отношение глубины помещения к высоте верха окна к уровню рабочей поверхности, отношение расстояния рассчитанной точки от внешней стены к глубине помещения В, коэффициенте отражения поверхности помещения ;

- общий коэффициент пропускания света, который рассчитывается за формулой;

- коэффициент запаса, ;

- геометрический КПО в расчетной точке при боковом освещении, учитывает отраженный свет, отбитый от бокового строения, и, рассчитывается по формуле.

Найдем геометрический КПО в расчетной точке при боковом освещении:


,(7.10)


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

- количество лучей проходящих от неба через световые проемы в расчетную точку на плане помещения ().


.


Найдем индексы строения в плане разреза:


,(7.11)

,(7.12)


где - длина противоположного дома, ;

- высота противоположного дома, ;

- расстояние от расчетной точки в помещении к внешней поверхности стены дома, ;

- расстояние между домами, ;

- ширина окна на плане, ;

- высота верхней грани окна над полом, .

Отделочный материал фасада противоположного дома - бетон.


,

,


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

Рассчитаем коэффициент отражения поверхности помещения:


,(7.13)


где , , - коэффициенты отражения потолка, стен, пола.

Соответственно (,,);

, , - площадь потолка, стен, пола (, , ).


.


Находим , учитывая, что:


; ; ; ;

;


Находим общий коэффициент пропускания света:


,(7.14)


где - коэффициент светопропускания материала остекления, для стекла оконного листового двойного, ;

- коэффициент, учитывающий потери света в деревянных перегородках, ;

- коэффициент, учитывающий потери света в несущих конструкция при боковом освещении, ;

- коэффициент, учитывающий потери света в солнцезащитных устройствах. Зависит от типа устройства, вида изделия и материалов для защитных козырьков, ;

- коэффициент, учитывающий потери света в защитной стенке при боковом освещении, .


.


Находим геометрический КПО в расчетной точке при боковом освещении, учитывая свет, отбитый от соседнего здания, по формуле:


,(7.15)

Значение ; .


.


Находим фактический КПО:


.(7.16)


Рассчитанное значение КПО больше нормированного - зрительные работы при естественном освещении отвечают нормативным требованиям.

Расчет искусственного освещения.

Сделаем расчет искусственного освещения. Исходные данные для расчета:

·лампа дневного освещения ЛБ - 65;

·световой поток ФЛ = 465 ЛК;

·тип осветлителя ЛПО - 02 (две лампы по 65 Вт);

·количество светильников ;

·высота подвеса (с учетом высоты столов).

Освещение находится по формуле:


,(7.17)


где - количество ламп в светильнике;

- коэффициент, учитывающий увеличение освещения за счет отражения отдаленных светильников, ;

- количество рядов светильников, ;

- относительная освещенность в расчетной площади, от і-го полуряда светильников (ЛК), рассчитывается по формуле;

- коэффициент перехода от горизонтального освещения к наклонному, так как столы горизонтальные, то для всех ;

- коэффициент запаса, учитывается запыленность, ;

- длина ряда, ;


,(7.18)


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

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

Найдем соответствующие значения :


;

;

;

;

;

.


Находим освещенность по формуле:


.


Норма освещенности для данного вида работ (разряд работы IІІ (б), работа высокой точности) равняется 300 ЛК. Таким образом, общая освещенность удовлетворяет требованиям СНиП II-4-79.


7.3 Техника безопасности


7.3.1 Электробезопасность

В рабочем помещении не жарко, сухо, и соответственно к ОНТП24-86 и ПУЕ-87 оно относится к классу помещений без повышенной опасности поражения персонала электрическим током, поскольку относительная влажность воздуха не превышает 75%, температура не более 35ºС и химически агрессивные среды отсутствуют.

Питание электроприборов внутри помещения осуществляется от трехфазной сети с заземлением, напряжением 220 В и частотой 50 Гц с использованием автоматов токовой защиты. В помещении применена схема заземления.

В анализируемом помещении используются следующие типы электрооборудования:

·ПК Prime Medio 80 - 1 шт.;

·монитор Samsung 730 BF (ВДТ) 220 В - 1 шт.;

·системный блок 220 В - 1 шт.

Предусмотрено защитное отключение напряжения питания сети при аварийном режиме работы оборудования.

В рассмотренном помещении электропроводка спрятана, проведена под штукатуркой на высоте 2 м. Силовые проводники, которые соединяют между собой ПК с системным блоком и принтером имеют двойную изоляцию. Штепсельные розетки установлены на высоте 1-го метра от пола. Выключатели на стенах расположены на высоте 1,75 м от пола со стороны ручки для открытия двери. Корпуса дисплея, клавиатуры и принтера изготовлены из специального материала - ударопрочного пластика, что делает поражение электрическим током человека, при прикосновении к нему практически невозможным. Таким образом, специальных мероприятий для электробезопасности применять не нужно.

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

1.Поражение человека электрическим током может быть в случае:

2.Касания к открытым токоведущим частям;

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


,(7.19)


где - сумма активных сопротивлений фазного и нулевого провода,


;


- расчетное сопротивление трансформатора;

В данном случае , , , .

.


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


,


Получаем .

Заземление сделано посредством гибкого сплетенного медного провода диаметром порядка 1,5 мм2.

Для уменьшения значений напряжений прикосновения и соответствующих им величин токов, при нормальном и аварийном режимах работы оборудования необходимо выполнить повторное защитное заземление нулевого провода. Соответственно ГОСТ-12.2.007.0-75 все оборудование (кроме ЭВМ - II класс) относится к I классу, оно имеет рабочую изоляцию соответственно требованиям ГОСТ 12.1.009-76. Подключение оборудования выполнено соответственно требованиям ПБЕ и ПУЕ. Дополнительные мероприятия по электробезопасности не нужны.


7.3.2 Шум

По своему происхождению шум делится на механический, обусловленный колебаниями деталей машины, аэродинамический (гидравлический), возникающий в упругих конструкциях, в газе или жидкости, и шумы электрических машин. Для рабочих мест ВЦ характерно наличие всех видов шумов.

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

Уровень шума на рабочих местах операторов не превышает 50 дБА согласно СН 9-86 РБ98 [12] (табл. 7.2).


Таблица 7.2 Допустимые уровни шума на рабочих местах операторов

ПомещениеСреднегеометрические частоты октановых полос, ГцУровни звука и эквивалентные уровни звука, дБА631252505001000200040008000Для персонала, осуществляющего эксплуатацию ЭВМ716154494542403880Административное797063585552504960Машинный зал837468636057555465

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

Шум не превышает допустимых пределов, так как в вычислительной техники нет вращающихся узлов и механизмов (за исключением вентилятора), а наиболее шумное оборудование (АЦПУ) находится в специально отведенных помещениях (гермозонах).


7.3.3 Излучение

При работе с дисплеем могут возникнуть следующие опасные факторы:

·электромагнитные поля;

·рентгеновское излучение;

·ультрафиолетовое и инфракрасное излучение.

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

Наиболее эффективным и часто применяемым из названных методов защиты от электромагнитных излучений является установка экранов. Экранируют либо источник излучения, либо рабочее место. Экраны бывают отражающие и поглощающие. Индивидуальные экранирующие комплексы предназначены для защиты от воздействия электрического поля, напряженность которого не превышает 60 кВ/м.

Для обеспечения безопасности работ с источниками электромагнитных волн (в данном случае с ПЭВМ) производится систематический контроль фактических значений нормируемых параметров на рабочих местах. Контроль осуществляется измерением напряжения электрического и магнитного полей, а также измерением плотности потока энергии.

Для экранов применяют материалы с высокой электрической проводимость (сталь, медь, алюминий, латунь) в виде листов толщиной не менее 0,5 мм или сетки с ячейками не более 4 ´ 4 мм. Небольшие отверстия в экране, предусматриваемые для осей штурвалов, кнопок и других приспособлений, экранируют густой металлической сеткой с ячейками не более 4 ´ 4 мм. Каждый экран обязательно заземляют. Защита с помощью экранов выполняется многоступенчатой, включая экранирования генераторного (первичного) контура, рабочих контуров (плавильных, нагревательных и др.) и установки в целом.

Эластичные экраны (из специальной ткани с вплетенной тонкой металлической сеткой) применяют для изготовления экранных штор, чехлов, спецодежды и т.п. Для экранов применяют и оптически прозрачное стекло, покрытое полупроводником - двуокисью олова; оно также обеспечивает ослабление электромагнитного поля.

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

·снижение интенсивности источника;

·защитное экранирование источника и рабочего места;

·использование средств индивидуальной защиты;

·лечебно-профилактические мероприятия.

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

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

Важно понимать, что требования по практичности, предъявляемые к ПС, в той или иной мере всегда могут быть удовлетворены. Здесь вопрос стоит лишь в ресурсах разработчика ПС, в его профессионализме. Если же обратиться к эргономическим требованиям, предъявляемым к эксплуатационной среде, то их удовлетворение сопряжено с определенными трудностями. Эти трудности вызваны как экономическими причинами (например, нехватка средств на надлежащее устройство системы вентилирования, или большая концентрация рабочих мест в помещении), так и просто неосведомленностью о проблемах и путях их профилактики и решения. Именно поэтому необходимо всегда уделять достаточно внимание эргономике.

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

·гиподинамия (малоподвижность);

·повторение однообразных движений в течение дня;

·повышенная нагрузка на зрение;

·электромагнитное излучение;

·шумовые нагрузки;

·пребывание в условиях чаще всего неблагоприятного микроклимата.

Следует рассмотреть каждую из приведенных проблем в отдельности.

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

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

Повышенная нагрузка на зрение - классическая проблема всех пользователей компьютеров. Она возникает как результат так называемого "сухого глаза", спазма аккомодации, утомления сетчатки и коры больших полушарий. "Сухостью глаза" называют недостаточное количество слезы для обеспечения комфортного состояния глаза. Нормативными документами оговаривается уровень освещенности в пределах экрана не более 200 Лк, на рабочей поверхности стола - до 500 Лк. Дисплеи рекомендуется устанавливать слева и справа от оконного проема. Рекомендуемое расстояние оператора от дисплея - не ближе 50 см.

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

Одними из важнейших эргономических требований являются требования к помещениям, в которых работает персонал. Так как работа происходит за компьютером, необходимо тщательно планировать и рассчитывать расположение рабочих мест и техники. Нарушение соответствующих норм ведет к тому, что работники пребывают в замкнутых душных помещениях. Естественно, количество кислорода в таких помещениях недостаточно, что отрицательно сказывается на производительности труда. Дисплеи необходимо устанавливать таким образом, чтобы расстояние от стенки до прохода было не менее 1.2 м, до следующего рабочего места - 2 м.

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


7.4 Пожарная безопасность помещения


Рабочее помещение по взрывоопасной безопасности можно отнести к категории В.

Соответственное с ПУЕ класс рабочей зоны помещения по пожарной безопасности П-II а.

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

Возможными причинами возникновения пожара в данном помещении:

1.Короткое замыкание проводки.

2.Использование электроприборов.

.Несоблюдение условий противопожарной безопасности.

В связи с этим, соответственно ПУЕ, необходимо предусмотреть следующие мероприятия по пожарной безопасности:

·тщательная изоляция всех токоведущих проводников на рабочих местах; периодический осмотр и проверка изоляции;

·строгое соблюдение норм противопожарной безопасности на рабочем месте.

Были соблюдены все требования СНиП 2.01.02-85 и СНиП 2.09.02-85 по огнестойкости домов, времени эвакуации в случае пожара, ширине эвакуационных проходов и выходов из помещений наружу.

Помещение оборудовано двумя пожарными датчиками типа ДТЛ, сигнал от которых поступает на станцию пожарной сигнализации (площадь, которая защищается, 2 ? 15=30м2).

Расстояние между датчиками составляет 4 м соответственно ГОСТ 12.4.009-75 та ДБН.

Такое количество датчиков удовлетворяет нормам размещения согласно ДБН, потому что площадь, которая защищается датчиком ДТЛ составляет 15 м2, два датчика защищают площадь помещения 30 м2, а площадь помещения лаборатории составляет 19,4 м2.

Помещение оборудовано следующими элементами пожаротушения:

·огнетушитель ОУБ-3 - 1 шт.;

·огнетушитель ОП-1 "Момент" - 1 шт.

·огнетушитель ОПС-6 - 1 шт.

Такое количество огнетушителей отвечает требованиям ISO3941-77, которыми предусмотрено обязательное наличие двух огнетушителей на 100 м2 площади. Выбор вещества основывается на том, что пожар, который может возникнуть в помещении лаборатории, относится к категории В, потому что пылающими объектами окажутся электрооборудование, находящиеся под напряжением. Огнетушительный состав на основе галоидных углеводородов (бромный этил 70%, углекислота 30%) применяется в огнетушителях ОУБ-3, в огнетушителях ОП-1 "Момент" используется порошковые составы, в которые входят кальцинированная сода, стеариновая кислота, графит и др.

Наличие первичных средств пожаротушения и огнетушителей, их количество и содержание отвечает требованиям ГОСТ 12.4.009-75 и ISO3941-77.

В помещении выполняются все требования по пожарной безопасности.

В помещении также имеется план эвакуации на случай возникновения пожара. Время эвакуации отвечает требованию СНиП 2.01.02-85, а максимальное удаление рабочих мест от эвакуационных выходов отвечает СНиП 2.09.02-85.

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


Заключение


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

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

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

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

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

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

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


Список использованных источников


1.Дибуа, П. MySQL: Учеб. пособие / Пер. с англ. - М.: Изддательский дом "Вильямс", 2006. - 1168 с.

.Зандстра, М. Освой самостоятельно РНР4: Руководство / Пер. с англ. -М.: Изддательский дом "Вильямс", 2001. - 378 с.

.Чиртик, А. HTML: Самоучитель: Учеб. пособие / Пер. с англ. - М.: Изддательский дом "Вильямс", 2006. - 215 с.

.Веллинг, Л. Разработка веб-приложений с помощю PHP и MySQL: Учеб. пособие / Л. Веллинг, Л. Томсон - Пер. с англ. - М.: Изддательский дом "Вильямс", 2009. - 848 с.

.Мясникова, О.В. Методические указания по выполнению экономической части дипломных проектов для студентов специальности "Информационные системы и технологии" / О.В. Мясникова. - Минск: Изд-во МИУ, 2008. - 46 с.

.Беклешов, В.К. Нормиоование в научно-технических организациях/В.К. Белешков, П.Н. Завлин. - М.: Экономика, 1989.

.Бирман, Г. Экономичеческий анализ инвестиционных проектов / Г. Бирман, С. Шмидт - Пер. с англ.; под. Ред. Л.П. Белых. - М.: Банки и Биржи, ЮНИТИ, 1997. - 631 с.

.Блех, Ю. Инвестиционные расчеты: Модели и методы оценки инвестиционных проектов / Ю. Блех, У. Гетце - Пер. с нем. - Калининград: Янтар. Сказ Б.Г., 1997. - 437 с.

.Волков, И.М. Проектный анализ: Продвинутый курс: Учеб. пособие/И.М. Волков, М.В. Грачева. - М.: ИНФРА-М, 2004. - 495 с.

.Темичев, А.М. Комлексный анализ инвестиционных проектов: Монография / А.М. Темичев. - Мн.: БНТУ, 2006. - 271 с.

.Семич, В.П. Охрана труда при работе на персональных злектронно-вычислительных машинах и другой офисной технике: Практическое пособие / В.П. Семич, А. В. Семич. - Минск: ЦОТЖ, 2003. - 86 с.

.Семич, В.П. Формы и образцы обязательных документов предприятия, ведение которых предписано действующим законодательством о безопасности и гигиене труда: Практическое пособие / В.П. Семич, А. В. Семич. - Минск: ЦОТЖ, 2003. - 134 с.

.Официальный сайт группы компаний "Еврофрахт" [Электрон. ресурс]. - Режим доступа: #"justify">ПРИЛОЖЕНИЕ 1


Файл dblib.inc


<?php

$link;

connectToDB();connectToDB()

{$link;

$link = mysql_connect( "localhost", "root", "" ); ( ! $link )

die ("Не могу подключиться к MySQL");

mysql_select_db( "organizer", $link ) die ("Не могу подключиться к организатору: ".mysql_error() );

}getRow ( $table, $fnm, $fval )

{$lik;

$result = mysql_query( "SELECT * FROM $table WHERE $fnm='$fval'", $link ); ( ! $result )

die (" Фатальная ошибка при выполнении функции getRow : ".mysql_error() );

return mysql_fetch_array( $result );

}newUser ( $login, $pass )

{$link;

$result = mysql_query( "INSERT INTO clubs (login, password) VALUES ('$login', '$pass')", $link);mysql_insert_id( $link );

}writeOptionList( $table, $id )

{$link;

$result = mysql_query( "SELECT * FORM $table", $link );( ! $result )

{"failed to open $table<p>";false;

}( $a_row = mysql_fetch_row( $result ) )

{"option value=$a_row[0]";( $id == $a_row[0] )"SELECTED";">$a_row[1]\n";

}

}updateOrg( $id, $name, $frcountry, $phone, $mail, $contact )

{$link;

$query = "UPDATE clubs set name = '$name', frcountry = '$frcountry', phone = '$phone', mail = '$mail',= 'contact' WHERE id = '$id'";

$result = mysql_query( $query, $link );( ! $result )( "updateOrg: ошибка прм обновлении ".mysql_error() );

}checkPass( $login, $password )

{$link;

$result = mysql_query( "SELECT id, login, password FROM clubslogin='$login' and password='$password'", $link );( ! $result )( "Ошибка checkPass: ".mysql_error() );( mysql_num_rows( $result ) )mysql_fetch_array( $result );false;

}insertEvent( $gort, $frcountry, $frcode, $tocountry, $tocode,

$cargo, $typetrans, $club_id, $timestamp, $event_id )

{$link;( ! $event_id )

{

$query = "INSERT INTO events (gort, frcountry, frcode, tocountry, tocode,, typetrans, eclub, edate )( '$gort', '$frcountry', '$frcode', '$tocountry', '$tocode',

'$cargo', '$typetrans', '$club_id', '$timestamp')";

}

{

$query = "UPDATE events SET gort='$gort', frcountry='$frcountry', frcode='$frcode',='$tocountry', tocode='$tocode', cargo='$cargo', typetrans='$typetrans',='$club_id', edate='$timestamp' WHERE id='$event_id'";

}

$result = mysql_query( $query, $link );( ! $result )( "insertEvent error: ".mysql_error() );

}deleteEvent( $id )

{$link;

$query = "DELETE FROM events WHERE id='$id'";

$result = mysql_query( $query, $link );( ! $result )( "deleteEvent fatal error: ".mysql_error() );( mysql_affected_rows($link) );

}getEvents( $club_id=0, $range=0, $gort=0, $frcountry=0, $tocountry=0 )

{$link;

$query = "SELECT clubs.name, events.*, gorts.gort as gortname,.frcountry as frcountryname,.tocountry as tocountryname ";

$query .= "FROM clubs, events, gorts, frcountrys, tocountrys WHERE ";

$query .= "clubs.id=events.eclubevents.gort=gorts.idevents.frcountry=frcountrys.idevents.tocountry=tocountrys.id ";( ! empty( $club_id ) && $club_id !="ANY" )

$query .= "AND events.eclub='$club_id' ";( ! empty($range) )

$query .= "AND events.edate >= '$range[0]'events.edate <='$range[1]' ";( ! empty($gort) && $gort != "ANY" )

$query .= "AND events.gort='$gort' ";( ! empty($frcountry) && $frcountry != "ANY" )

$query .= "AND events.frcountry='$frcountry' ";( ! empty($tocountry) && $tocountry != "ANY" )

$query .= "AND events.tocountry='$tocountry' ";

$query .= "ORDER BY events.edate";

$result = mysql_query( $query, $link );( ! $result )( "getIDevents fatal error: ".mysql_error() );

$ret = array();( $row = mysql_fetch_array( $result ) )_push( $ret, $row );$ret;

}getClubs( $frcountry="" )

{$link;

$query = "SELECT clubs.*, frcountrys.frcountry as frcountryname ";

$query .= "FROM clubs, frcountrys WHERE ";

$query .= "clubs.frcountry = frcountrys.id ";( $frcountry != "ANY" && ! empty( $frcountry ) )

$query .= "AND clubs.frcountry = '$frcountry' ";

$query .= "ORDER BY clubs.frcountry, clubs.name";

$result = mysql_query( $query, $link );( ! $result )( "getIDevents fatal error: ".mysql_error() );

$ret = array();( $row = mysql_fetch_array( $result ) )_push( $ret, $row );$ret;

}getClubJoined( $id )

{$link;

$query = "SELECT clubs.*, frcountrys.frcountry as frcountryname";

$query .= "FROM clubs, frcountrys WHERE ";

$query .= "clubs.frcountry=frcountrys.id AND clubs.id='$id";

$result = mysql_query( $query, $link );( ! $result )( "getClubJoined fatal error: ".mysql_error() );mysql_fetch_array( $result );

}getEvent( $event_id )

{$link;

$query = "SELECT clubs.name as clubname, events.*,gorts.gort as gortname, frcountrys.frcountry as frcountryname,.tocountry as tocountryname ";

$query .= "FROM clubs, events, gorts, frcountrys, tocountrys WHERE ";

$query .= "clubs.id=events.eclubevents.gort=gorts.idevents.frcountry=frcountrys.idevents.tocountry=tocountrys.idevents.id='$event_id'";

$result = mysql_query( $query, $link );( ! $result )( "getEvent fatal error: ".mysql_error() );mysql_fetch_array( $result );

}

?>


Приложение 2


Файл clublib.inc


<?php_start();_register( "session" );cleanMemberSession( $id, $login, $pass )

{$session;

$session[id] = $id;

$session[login] = $login;

$session[password] = $pass;

$session[logged_in] = true;

}checkUser()

{$session, $logged_in;

$session[logged] = false;

$club_row = getRow("clubs", "id", $session[id] );( !club_row || $club_row[login] != $session[login] || $club_row[password] != $session[password] )

{("Location: login.php");();

}

$session[logged_in] = true;$club_row;

}checkClubData( $clubarray )

{( ! isset( $clubarray[name] ) )

{( "Location: updateclub.php?".SID );;

}

}

html( $str )

{( is_array( $str ) )

{( $str as $key=>$val )

$str[$key] = htmlstr( $val );$str;

}htmlstr( $str );

}htmlstr( $str )

{

$str = htmlspecialchars( $str );

$str = nl2br( $str );$str;

}

?>


Приложение 3


Файл join.php


<?php("dblib.inc");("clublib.inc");

$message="";(isset( $actionflag ) && $actionlag=="join")

{( empty( $form[login] ) ||empty( $form[password1] ) ||( $form[password2] ) )

$message .= "Вы должны заполнить все поля <BR>\n";

if ( $form[password1] != $form[password2] )

$message .= "Ваши пароли не совпадают <BR>\n";

if ( strlen( $form[password1] ) > 8 )

$message .= "Длинна Вашего пароля должна быть менее 8-ми символов <BR>\n";

if ( strlen( $form[login] ) > 8 )

$message .= "Длинна Вашего логина должна быть менее 8-ми символов <BR>\n";

if ( getRow( "clubs", "login", $form[login] ) )

$message .= "Имя $form[login]уже уществует, попробуйте другое имя <BR>\n";

if ( $message =="" ) //не было найдено никаких ошибок

{

$id = newUser( $form[login], $form[password1] );( $id, $form[login], $form[password1] );( "Location: updateclub.php".SID );;

}

}

?>

<html><head><title>Добро пожаловать!</title></head>

<body>

<?php( "publicnav.inc" );

?>

<h1>Присоединяйтесь</h1>

<?php( $message != "" )

{"<b>$message</b><p>";

}

?><p>

<form action="<?php print $PHP_SELF;?>">

<input type="hidden" name="actionflag" value "join">

<input type="hidden" name="<?php print session_name(); ?>" value="<?php print session_id(); ?>">

Логин:<br>

<input type="text" name="form[login]" value="<?php print $form[login] ?>" maxlenghth=8>

</p><p>

Пароль:<br>

<input type="password" name="form[password1]" value="" maxlenghth=8>

</p><p>

Подтвердите пароль:<br>

<input type="password" name="form[password2]" value="" maxlenghth=8>

</p>

<p>

<input type="submit" value="update">

</p></form></body></html>


Приложение 4


Файл publicnav.inc


<p>

<a href=viewclubs.php?<?php print SID ?>>Посмотреть список компаний</a> |

<a href=viewevents.php?<?php print SID ?>>Посмотреть грузы и транспорт</a> |

<a href=join.php?<?php print SID ?>>Регистрация</a> |

<a href=login.php?<?php print SID ?>>Авторизация</a> |

<a href=index.php?<?php print SID ?>>На главную</a> |

</p>

<?php( $session[logged_in] )

{

?>

<p>

<a href=updateclub.php?<?php print SID ?>>Описание компании</a> |

<a href=reviewevents.php?<?php print SID ?>>Ваши грузы и транспорт</a> |

<a href=updateevents.php?<?php print SID ?>>Добавить грузы и транспорт</a> |

<a href=membersmenu.php?<?php print SID ?>>Посмотреть список компаний</a> |

</p>

<?php

}

?>

<br>

Приложение 5


Файл updateclub.php


<?php("dblib.inc");("clublib.inc");

$club_row = chekUser();

$message = "";( isset ( $actionflag) && $actionflag == "update" )

{( empty ( $form[name] )

$message.="У вашей компании должно быть название<br>\n";

if ( ! getRow ("frcountrys", "id", $form[frcountry]) )

$message.="Ошибка: такой код страныне найден<br>\n";

if ( $message == "" )

{($session[id], $form[name], $form[frcountry], $form[phone],

$form[phone], $form[mail], $form[contact] );("Location: membersmenu.php?".SID);;

}

}

{

$form = $club_row;

}

?>

<html><head><title>Обновление информации о Вашей компании</title></head>

<body>

<?php("publicnav.inc");

?>

<h1>Изменить информацию о компании</h1>

<?php( $message != "" ){"<b>$message</b?<p>";}

?>

<form action="<?php print $PHP_SELF; ?>">

<input type="hidden" name="actionflag" value "update">

<input type="hidden" name="<?php print session_name(); ?>"="<?php print session_id(); ?>">

<p>Название компании:<br>

<input type="text" name="form[name]"="<?php print stripslashes($form[name]) ?>">

</p>

<p>Страна:<br>

< select name="form[frcountry]" >

<?php writeOptionList( "frcountrys", $form[frcountry] ) ?>

</select>

</p>

<p>Контактный телефон:<br>

<input type="TEXT" name="form[phone]"="<?php print stripslashes($form[phone]) ?>"

</p>

<p>Адрес электронной почты:<br>

<input type="TEXT" name="form[mail]"="<?php print stripslashes($form[name]) ?>"</p>

<p>Контактное лицо:<br>

<input type="TEXT" name="form[contact]"="<?php print stripslashes($form[contact]) ?>"

</p></body></html>


Приложение 6


Файл membersmenu.php


<?php("dblib.inc");("clublib.inc");( ! isset($club_id) )("Location: viewclubs.php?".SID );

$club = getClubJoined( $club_id );

$club = html( $club );( $club[mail] != "" )

$club[mail] = "<A HREF= mailto:$club[mail]>$club[mail]</A>";displayEvents()

{$club_id;

$events = getEvents( $club_id );( ! $events )

{

print "У этой компании еще нет предложений";

return;

}"<table border=1>\n";"<td><b>Дата</b></td>\n";"<td><b>Подробнее</b></td>\n"; "<td><b>Страна отправления</b></td>\n";

print "<td><b>Страна назначения</b></td>\n";

foreach ( $events as $row )

{"<tr>\n";"<td>" .date("j MYH.i", $row[edate]). "</td>\n";"<td><a href=viewevent.php?event_id=$row[id]&".SID.">".

Подробнее." </a></td>\n";"<td>$row[frcountryname]</td>\n";"<td>$row[tocountryname]</td>\n";"</tr>\n";

}"</table>\n";

}

?>

<html>

<head>

<title>Меню пользователя</title>

</head>

<body>

<?php("publicnav.inc");

?>

</body> </html>


Приложение 7


Файл login.php


<?php("dblib.inc");("clublib.inc");

$message="";( isset( $actionflag ) && $actionflag == "login" )

{( empty( $form[login] ) || empty( $form[password] ) )

$message .= "Вы должны заполнить все поля<br>\n";

if ( ! ( $row_array = checkPass( $form[login], $form[password]) ) )

$message .="Неправильный пароль, попытайтесь снова<br>\n";

if ( $message == "" )// мы не нашли никаких ошибок

{( $row_array[id], $row_array[login], $row_array[password] );( "Location: membersmenu.php?".SID );

}

}

?>

<html>

<head>

<title>Подключиться</title>

</head>

<body>

<?php("publicnav.inc");

?>

<h1>Подключиться</h1>

<?php( $message != "" )

{"<p><b>$message</b></p>";

}

?>

<p>

<form action="<?php print $PHP_SELF; ?>">

<input type="hidden" name="actionflag" value "update">

<input type="hidden" name="<?php print session_name(); ?>"="<?php print session_id(); ?>">

</p>

Имя:<br>

<input type="text" name="form[login]" value="<?php print $form[login] ?>">

</p><p>

Пароль:<br>

<input type="password" name="form[password]" value="">

</p><p>

<input type="submit" value="update">

</form>

</body>

</html>


Приложение 8


Файл updateevent.php


<?php("dblib.inc");("clublib.inc");("date.inc");

$club_row = checkUser();( $club_row );

$date = time();

$message = "";( ! empty( $event_id ) )

$event_row = getRow( "events", "id", $event_id );

$event_id = false;( isset( $actionflag ) && $actionflag=="update_event" )

{( empty( $form[frcode] ) )

$message .="Введите код места загрузки<br>\n";( empty( $form[tocode] ) )

$message .="Введите код места разгрузки<br>\n";( ! getRow( "gorts", "id", $form[gort] ) )

$message .= "PANIC: Please select cargo or transport<br>";( ! getRow( "frcountrys", "id", $form[frcountry] ) )

$message .= "PANIC: That country can't be found<br>";( ! getRow( "tocountrys", "id", $form[tocountry] ) )

$message .= "PANIC: That country can't be found<br>";( array( "months", "years", "days" ) as $date_unit )

{( isset( $form[$date_unit] ) )

{

$message .= "PANIC: Can't make sense of that date";;

}

}

$date = mktime( 0, 0, 0, $form[months], $form[days], $form[years] );( $date < time() )

$message .= "You've chosen a date in the past!";( $message == "" )

{( $form[grot], $form[frcountry], $form[frcode], $form[tocountry], $form[tocode],

$form[cargo], $form[typetrans], $session[id], $date, $event_id );( "Location: reviewevents.php?".SID );

}

}( $event_id )

{

//foreach( $event_row as $key=>$value )

// $form[$key] = $value;

$form = $event_row;

$date = $event_row[edate];

}

{

$form[gort] = $club_row[gort];

$form[frcountry] = $club_row[frcountry];

$form[tocountry] = $club_row[tocountry];

}

?>

<html> <head>

<title>Добавить/изменить Предложение</title>

</head>

<body>

<?php("publicnav.inc");

?>

<h1>Изменить предложение</h1>

<?php

if ( $message != "" )

{"<b>$message</b>";

}

?>

<p>

<form action="<?php print $PHP_SELF;?>">

<input type="hidden" name="actionflag" value="update_event">

<input type="hidden" name="<?php print session_name() ?>"="<?php print session_id() ?>">

<input type="hidden" name="event_id"="<?php print $event_id ?>">

Выберите тип предложения: <br>

<select name="form[gort]">

<?php writeOptionList( "gorts", $form[gort] ) ?>

</select>

Дата: <br>

<select name="form[months]">

<?php writeMonthOptions( $date ) ?>

</select>

<select name="form[days]">

<?php writeDayOptions( $date ) ?>

</select>

<select name="form[years]">

<?php writeYearOptions( $date ) ?>

</select>

</р>

Страна отправления: <br>

<select name="form[frcountry]">

<?php writeOptionList( "frcountrys", $form[frcountry] ) ?>

</select>

Код места загрузки: <br>

<input type="text" name="form[frcode]"="<?php print stripslashes($form[frcode]) ?>">

</p>

Страна назначения: <br>

<select name="form[tocountry]">

<?php writeOptionList( "tocountrys", $form[tocountry] ) ?>

</select>

Код места разгрузки: <br>

<input type="text" name="form[tocode]"="<?php print stripslashes($form[tocode]) ?>">

</p>

Введите тип груза (только для грузов): <br>

<textarea name="form[cargo]" wrap="virtual" rows=5 cols=30>

<?php print stripslashes($form[cargo]) ?>

</textarea>

</p>

<p>

Описание автомобиля: <br>

<input type="text" name="form[typetrans]"="<?php print stripslashes($form[typetrans]) ?>">

</p>

<p>

<input type="submit" value="update">

</p></form></body></html>


Приложение 9


Файл date.inc


<?phpwriteMonthOptions( $d )

{

$d_array = getDate( $d );

$months = array( "Jan", "Feb", "Mar", "Apr", "May", "Jun",

"Jul","Aug","Sep","Oct","Nov","Dec" );( $months as $key=>$value )

{"OPTION VAUJE=". ($key+l). "";( ( $d_array[mon] == ($key+l) )?" SELECTED":"" );">$value\n";

}

}writeDayOptions( $d )

{

$d_array = getDate( $d );( $x = 1; $x<=31; $x++ )

{"<OPTION VALUE=$x";( ( $d_array[inday] == $x )?" SELECTED":"" );">$x\n";

}

}writeYearOptions( $d )

{

$d_array = getDate( $d );

$now_array = getDate(time());( $x = $now_array[year]; $x <= ($now_array[year]+2); $x++)

{"OPTION VALUE=$x";( ( $d_array[year] == $x )?"SELECTED":"" );">$x\n";

}

}getDateRange( $mon, $year )

{

$start = mktime( 0, 0, 0, $mon, 1, $year );

$end = mktime( 0, 0, 0, $mon+1, 1, $year );

$end --;array( $start, $end );

}

?>


Приложение 10


Файл reviewevents.php


<?php("dblib.inc");("clublib.inc");

$club_row = checkUser();( $club_row );writeEvents()

{$club_row;

$events = getEvents( $club_row[id] ); ( ! $events )

{

print "У вашей компании нет предложений<p>";

return;

}"<table border=1>\n";

//print "<td><b>Дата</b></td>\n<td><b>Из</b></td>\n

//<td><b>&nbsp;</b></td>\n";( $events as $row )

{"<tr>\n";"<td>" .date("j MYH.i", $row[edate]). "</td>\n";"<td><a href=updateevent.php?event_id=$row[id]&".SID.">".

Подробнее."</a></td>\n";"<td><a href=$GLOBALS[PHP_SELF]?event_id=$row[id]";"&actionflag=deleteEvent&".SID."";"onClick=return window.confirm('Вы уверены что вы хотите уничтожить

это предложение?')>";

print "Уничтожить</а><br></td>\n";

print "</tr>\n";

}"</table>\n";

}

$message="";( isset( $actionflag ) &&

$actionflag == "deleteEvent" && isset( $event_id ) )

{

deleteEvent( $event_id );

$message .= "Этого предложения больше не существует!<br>";

}

?>

<html>

<head>

<title>Пpoсмотр предложений</title>

</head>

<body>

<?php("publicnav.inc");

?>

<h1>Review event schedule</h1>

<?php( $message != "" ) {"<b>$message</b>";}

?>

<?php();

?>

</body> </html>


Приложение 11


Файл viewevents.php


<?php("dblib.inc");("date.inc");("clublib.inc");( isset($actionflag) && $actionflag == "showEvents" )

$session[viewevents] = $form;( $session[viewevents] )

$forin = $session[viewevents];{

$d_array = getDate( time() );

$session[viewevents][gort] = "ANY";

$session[viewevents][frcountry] = "ANY";

$session[viewevents][tocountry] = "ANY";

$session[viewevents][months] = $d_array[mon];

$session[viewevents][years] = $d_array[year]; }

$range = getDateRange( $session[viewevents][months], $session[viewevents][years] );displayEvents()

{$range, $session;

$events = getEvents( 0, $range, $session[viewevents][gort], $session[viewevents][frcountry], $session[viewevents][tocountry] ); ( ! $events ) {

print "Нет предложений, которые отвечают таким критериям";

return;}"<table border=1>\n";"<td><b>Дата</b><td>\n";"<td><b>Подробнее</b></td>\n"; print "<td><b>Компания</b><td>\n"; "<td><b>Груз или транспорт</b></td>\n";

print "<td><b>Страна отправления</b></td>\n";

print "<td><b>Страна назначения</b><td>\n";

foreach ( $events as $row )"<tr>\n";"<td>".date("j M Y H.i", $row[edate])."</td>\n";"<td><a href=viewevent.php?event_id=$row[id]&".SID.">".

Подробнее."</a></td>\n";"<td><a href=viewevent.php?club_id=$row[eclub]&".SID.">".($row[name])."</a></td>\n" ;"<td>$row[gortname]</td>\n";"<td>$row[frcountryname]</td>\n";"<td>$row[tocountryname]</td>\n"; print "</tr>\n";} ?>

<html> <head><title>Просмотр предложений</title></head><body>

<?php include("publicnav.inc"); ?>

<h1>Просмотр предложений</h1> <p>

<form action="<?php print $PHP_SELF;?>">

<input type="hidden" name="actionflag" value="showEvents">

<input type="hidden" name="<?php print session_name() ?>" value="<?php print session_id() ?>">

<select name=form[months]> <?php writeMonthOptions( $range[0] ); ?> </select>

<select name=form[years]> <?php writeYearOptions( $range[0] ); ?> </select>

<select name=form[gort]><option value="ANY">Груз или транспорт

<?php writeOptionList( "gorts", $form[gort] ) ?></select>

<select name=form[frcountry]><option value="ANY">Любая страна отправления

<?php writeOptionList( "frcountrys", $form[frcountry] ) ?></select>

<select name=form[tocountry]><option value="ANY">Любая страна назначения

<?php writeOptionList( "tocountrys", $form[tocountry] ) ?></select>

<input type = "submit" value="Change">

</form></p>

<?php displayEvents(); ?></body> </html>


Приложение 12


Файл viewclubs.php


<?php("dblib.inc");("date.inc");("clublib.inc");( isset($actionflag) && $actionflag == "showClubs" )

$session[viewclubs] = $form;( $session[viewclubs] )

$form = $session[viewclubs];

{

$session[viewclubs][gort] = "ANY";

$session[viewclubs][frcountry] = "ANY";

$session[viewclubs][tocountry] = "ANY";

}displayClubs()

{$session;

$clubs = getClubs( $session[viewclubs][frcountry] ); ( ! $clubs )

{

print "Нет компаний, которые отвечают таким условиям <p>\n";

return;

}"<table border=1>\n";"<td><b>Компания</b></td>\n"; "<td><b>Страна регистрации</b></td>\n";

foreach ( $clubs as $row )

{"<tr>\n";"<td><a href=viewclub.php?club_id=$row[id]&".SID.">".($row[name])."</a></td>\n";"<td>$row[frcountryname]</td>\n";

}"</table>\n";

}

?>

<html>

<head>

<title>Просмотр компаний</title>

</head>

<body>

<?php("publicnav.inc");

?>

<p>

<form action="<?php print $PHP_SELF;?>">

<input type="hidden" name="actionflag" value="showClubs">

<input type="hidden" name="<?php print session_name() ?>"="<?php print session_id() ?>">

<select name=form[frcountry]><option value="ANY">Любая страна

<?php writeOptionList( "frcountrys", $form[frcountry] ) ?> </select>

<input type = "submit" value="Change">

</form>

</p>

<?php(); ?>

</body>

</html>


Приложение 13


Файл viewclub.php


<?php("dblib.inc");("clublib.inc");( ! isset($club_id) )("Location: viewclubs.php?".SID );

$club = getClubJoined( $club_id );

$club = html( $club );( $club[mail] != "" )

$club[mail] = "<A HREF= mailto:$club[mail]>$club[mail]</A>";displayEvents()

{$club_id;

$events = getEvents( $club_id );( ! $events )

{

print "У этой компании еще нет предложений";

return;

}"<table border=1>\n";"<td><b>Дата</b></td>\n";"<td><b>Подробнее</b></td>\n"; "<td><b>Страна отправления</b></td>\n";

print "<td><b>Страна назначения</b></td>\n";

foreach ( $events as $row )

{"<tr>\n";"<td>" .date("j MYH.i", $row[edate]). "</td>\n";"<td><a href=viewevent.php?event_id=$row[id]&".SID.">".

Подробнее." </a></td>\n";"<td>$row[frcountryname]</td>\n";"<td>$row[tocountryname]</td>\n";"</tr>\n";

}"</table>\n";

}

?>

<html>

<head>

<title>Посмотреть список компаний</title>

</head>

<body>

<?php("publicnav.inc");

?>

<p>

<h1>Просмотреть описание компании</h1>

<h4><?php print $club[name] ?></h4> <br>

Страна регистрации: <b><?php print $club[frcountryname] ?></b> <br>

Телефон: <b><?php print $club[phone] ?></b><br>mail: <b><?php print $club[mail] ?></b><br>

Контактное лицо: <b><?php print $club[contact] ?></b><br></p>

<?php(); ?>

</body> </html>


Приложение 14


Файл viewevent.php


<?php("dblib.inc");("clublib.inc");( ! isset($event_id) )( "Location: viewevents.php?".SID );

$event = getEvents( $event_id );( $event );

?>

<html>

<head>

<title>Просмотр описания предложений</title>

</head>

<body>

<?php("publicnav.inc");

?>

<P>

<h1> Просмотр описания афиши </h1>

<p> Компания: <b>

<?php print "<a href=viewclub.php?club_id=$event[eclub]&".SID.">

$event[clubname]</a>"

?>

</b> <br>

Тип предложения: <b><?php print $event[gortname] ?></b> <br>

Страна отправления: <b><?php print $event[frcountryname] ?></b> <br>

Страна назначения: <b><?php print $event[tocountryname] ?></b> </p><br>

Тип транспорта:<br>

<?php print $event[typetrans] ?>

</body>

</html>


Оглавление Введение . Характеристика предприятия .1 Структура предприятия .2 Вид деятельности .3 Программное обеспечение, используемое на пре

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ