Интернет–сервис для автотранспортных и экспедиционных компаний для оптимизации всех этапов работы: от ведения заявок/перевозок/договоров до бухгалтерии, финансового контроля и анализа

Создание автоматизированной системы мониторинга серверного окружения. Обоснование выбора среды разработки. Включение и исполнение JavaScript. Программный комплекс CargoCRM 2.7. Система "Учет-Логистик". Целесообразность написания своего сервиса.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 29.06.2012
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Постановка задачи

2. Исследование предметной области

2.1 Программный комплекс CargoCRM 2.7

2.2 ПО Транс-Менеджер

3. Обоснование целесообразности написания своего сервиса

4. Обоснование выбора среды разработки

4.1 PHP: Процессор гипертекста

4.2 СУБД MYSQL

4.3 YII Framework

4.3.1YII в сравнении с другими фреймворками

4.3.2 Модель-представление-контроллер (MVC)

5. Основы JavaScript

5.1 Включение и исполнение JavaScript

6. Система «Учет-Логистик»

6.1 Раздел авторизации

6.2 Раздел «Фирмы»

6.3 Раздел «Операторы»

6.4 Раздел «Водители»

6.5 Раздел «Клиенты»

6.6 Раздел «Расходы»

6.7 Раздел «Инвестиции»

6.8 Раздел «Настройки»

6.9 Раздел «Отчеты»

6.10 Раздел «Заявки»

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

7.1 Характеристика производственной и экологической опасности проектируемого объекта

7.2 Обеспечение электробезопасности и защита от статического электричества

7.3 Производственная санитария и гигиена труда

7.4 Пожарная профилактика, методы и средства пожаротушения

7.5 Технологическая безопасность

7.6 Молниезащита

7.7 Защита окружающей среды

8. Экономическое обоснование проекта

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

8.2 Экономические затраты на технические средства

Заключение

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

Введение

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

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

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

1. Высокая скорость доставки: Средняя скорость доставки груза автомобильным транспортом почти в 2 раза выше, чем такой же показатель ж\д транспорта и практически в 3 раза превосходит скорость доставки морским и речным транспортом. Безусловно, автоперевозки уступают по скорости авиаперевозкам, но у авиаперевозок есть два неоспоримых минуса: консолидация партий грузов перед отправлением и непосредственная стоимость услуги компании-перевозчика.

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

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

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

1. Постановка задачи

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

1. Ведение журнала поступающих заявок

2. Система ведения отчетов

3. Модуль ведения документации

4. Расчет операционных расходов.

5. Ведение базы водителей.

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

Данный сервис разрабатывался по заказу фирмы ООО «Транс Логистик», исходя из выставленных требований и в соответствии с предоставленным Техническим Заданием.

2. Исследование предметной области

Наряду с утвержденным техническим заданием при разработке данного веб-сервера возникла необходимость рассмотреть существующие аналогичные сервисы. При анализе существующих решений фирм-конкурентов рассматривались такие критерии как: стоимость предоставляемых услуг, возможность расширения требуемого функционала, работа в сети Интернет, надежность хранения информации, интеграция с сайтом, предоставляющим информацию о текущих заявках на грузоперевозку. Сравнительный анализ в конечном итоге проводился, рассматривая программный комплекс CargoCRM 2.7 и программный продукт сайта ati.su - ПО Транс-Менеджер.

2.1 Программный комплекс CargoCRM 2.7

Рисунок 2.1

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

· регистрация и контроль входящих, исходящих заявок или рейсов на перевозку груза

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

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

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

Ценовая политика и тарифы на пользование программным комплексом CargoCRM:

Рисунок 2.2

Программный комплекс CargoCRM 2.7 - является оффлайн системой. С надежно организованной системой хранения данных. Но при использовании данного продукта возникли следующие трудности:

1. наличие лишнего функционала, предоставляемого сервисом

2. одновременно с этим, требуемые функции добавляются только за отдельную плату.

3. невозможность интеграции данной информационной системы с сайтом mycago.su

4. крайне перегруженный интерфейс, неподходящий заказчику.

2.2 ПО Транс-менеджер

Рисунок 2.2.1

Программный комплекс «ТРАНС-МЕНЕДЖЕР» предназначен для автотранспортных и экспедиционных компаний для оптимизации всех этапов работы: от ведения заявок/перевозок/договоров до бухгалтерии, финансового контроля и анализа. Основной отличительной чертой программы является ее архитектура. В программе «ТРАНС-МЕНЕДЖЕР» основой единицей информации является "заявка", т.е. перевозка - транспортировка груза со всеми сопутствующими работами, суммами, платежами и условиями выполнения. На всем протяжении выполнения перевозки заявка изменяет свое состояние, которое, соответственно контролируется менеджером. Т.е. заявка становится объектом полностью описывающим перевозку и отражающим ее состояние на каждый момент времени, и уже включает в себя все документы и контролируемые события.

ПО «ТРАНС-МЕНЕДЖЕР» предоставляет пользователям следующие функциональные возможности:

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

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

· автозаполняемые "умные" справочники

· контроль дублирования контрагентов

· интеграция с 1С:Предприятие 7.7

· финансовый анализ

· финансовое планирование

· развернутые отчеты

· экспорт/импорт данных

· встроенный механизм обновления ПО и БД

· многоуровневое разграничение доступа

· экспорт документов в MS Excel

· экспорт документов в MS Word

· возможность вывода на печать всех отображаемых данных

· Интеграция программного комплекса «ТРАНС-МЕНЕДЖЕР» с 1С:Предприятие позволяет реализовывать следующие функции:

1. выписка счетов на основе данных БД «ТРАНС-МЕНЕДЖЕР»

2. выписка счетов-фактур на основе данных БД «ТРАНС-МЕНЕДЖЕР»

3. выписка актов на основе данных БД «ТРАНС-МЕНЕДЖЕР»

4. работа с журналом заявок:

5. установка диапазона дат для отображения заявок;

6. поиск/фильтрация заявок по введенной произвольной подстроке;

7. поиск/фильтрация заявок по состоянию заявки (перевозки);

ПО Транс-менеджер обладает рядом принципиальных плюсов: интеграция с 1С:Предприятие 7.7, возможность произвольной конфигурации документов. Но наряду с преимуществами данного решения есть и ряд недостатков, а именно: данный программный продукт не рассчитан на работу в оффлайне. Следовательно, вся база данных будет храниться локально. Что ведет к ненадежности хранения информации. Следующий недочет относится к тому, что продукт может работать только в операционных системах семейства Microsoft Windows. Что ведет к увеличению расходов фирмы на покупку лицензий на право пользования данной ОС.

Ниже приведены тарифы и цены на пользование ПО Транс-Менеджер

Рисунок 3.2.2

3. Обоснование целесообразности написания своего сервиса

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

4. Обоснование выбора среды разработки

Сервис «Учёт-Логистик» был разработан с помощью языка РНР и используя СУБД MySQL, а также YII фреймворк.

4.1 PHP: Процессор гипертекста

PHP - это язык программирования, созданный для генерации HTML страниц на веб-сервере и работы с базами данных. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров. Входит в LAMP - «стандартный» набор для создания веб-сайтов (Linux, Apache, MySQL, PHP (Python или Perl)).

Название PHP - рекурсивная аббревиатура, означающая «PHP: Hypertext Preprocessor» (ранее акроним расшифровывался как «Personal Home Page Tools»). Изначально PHP создавался в качестве надстройки над Perl для облегчения разработки веб-страниц.

В области программирования для Сети, PHP - один из популярнейших скриптовых языков (наряду с JSP, Perl и языками, используемыми в ASP.NET) благодаря своей простоте, скорости выполнения, богатой функциональности и распространению исходных кодов на основе лицензии PHP. PHP отличается наличием ядра и подключаемых модулей, «расширений»: для работы с базами данных, сокетами, динамической графикой, криптографическими библиотеками, документами формата PDF и т.п. Любой желающий может разработать своё собственное расширение и подключить его. Существуют сотни расширений, однако в стандартную поставку входит лишь несколько десятков хорошо зарекомендовавших себя. Интерпретатор PHP подключается к веб-серверу либо через модуль, созданный специально для этого сервера (например, для Apache или IIS), либо в качестве CGI приложения.

Кроме этого, он может использоваться для решения административных задач в операционных системах UNIX, GNU/Linux, Microsoft Windows, Mac OS X и AmigaOS. Однако в таком качестве он не получил распространение, отдавая пальму первенства Perl, Python и VBScript.

В настоящее время PHP используется сотнями тысяч разработчиков. Порядка 20 миллионов сайтов сообщают о работе с PHP, что составляет более пятой доли доменов Интернета.[1]

В 1994 году датский программист (ныне живущий в Канаде) Расмус Лердорф (Rasmus Lerdorf) написал набор скриптов на Perl/CGI для вывода и учёта посетителей его онлайн-резюме, обрабатывающий шаблоны HTML документов. Лердорф назвал набор Personal Home Page (Личная Домашняя Страница). Вскоре функциональности и быстроты Perl - интерпретатора скриптов - перестало хватать, и Лердорф написал на языке C новый интерпретатор шаблонов PHP/FI (англ. Personal Home Page / Forms Interpreter - «Личная Домашняя Страница / Интерпретатор форм». PHP/FI включал базовую функциональность сегодняшнего PHP: оформление переменных в стиле Perl ($имя_переменной для вывода значения), автоматическую обработку форм и встраиваемость в HTML текст и многое другое. Новорожденный язык отличался от своего прародителя более простым и ограниченным синтаксисом.

В 1997 году после длительного бета-тестирования вышла вторая версия обработчика, написанного на C - PHP/FI 2.0. Её использовали около 1% (приблизительно 50 тысяч) всех интернет-доменов мира.
PHP 3.0 была первой версией, напоминающей PHP, каким мы знаем его сегодня. В 1997 году два израильских программиста Энди Гутманс (Andi Gutmans) и Зив Сураски (Zeev Suraski), разработчики из израильского института технологий (Technion), переписали код с нуля: разработчики сочли PHP/FI 2.0 непригодным для разработки приложения электронной коммерции, над которым они работали для проекта Университета расположенного в Хайфе, Израиль. Для совместной работы над PHP 3.0 с помощью базы разработчиков PHP/FI 2.0 Энди, Расмус и Зив решили объединиться и объявить PHP 3.0 официальным преемником PHP/FI, разработка же PHP/FI была практически полностью прекращена.
Одной из сильнейших сторон PHP 3.0 была возможность расширения ядра. Впоследствии интерфейс написания расширений привлёк к PHP множество сторонних разработчиков, работающих над своими модулями, что дало PHP возможность работать с огромным количеством баз данных, протоколов, поддерживать большое число API. Фактически, это и был главный ключ к успеху, но стоит добавить, что немаловажным шагом оказалась разработка нового, намного более мощного и полного синтаксиса с поддержкой ООП.
Абсолютно новый язык программирования получил новое имя. Разработчики отказались от дополнения о персональном использовании, которое имелось в аббревиатуре PHP/FI. Язык был назван просто PHP - аббревиатура, содержащая рекурсивный акроним (англ. PHP: Hypertext Preprocessor - «PHP: Препроцессор Гипертекста»).[1]

К концу 1998 года PHP использовался десятками тысяч пользователей. Сотни тысяч веб-сайтов сообщали о том, что они работают с использованием этого языка. В то время PHP 3.0 был установлен приблизительно на 10% веб-серверов Интернета.

PHP 3.0 был официально выпущен в июне 1998 года после 9 месяцев публичноготестирования.

К зиме 1998 года, практически сразу после официального выхода PHP 3.0, Энди Гутманс и Зив Сураски начали переработку ядра PHP. В задачи входило увеличение производительности сложных приложений и улучшение модульности базиса кода PHP. Расширения дали PHP 3.0 возможность успешно работать с набором баз данных и поддерживать большое количество различных API и протоколов, но PHP 3.0 не имел качественной поддержки модулей и приложения работалинеэффективно.

Новый движок, названный Zend Engine (от имён создателей, Зива и Энди, также основателей Zend Technologies), успешно справлялся с поставленными задачами и впервые был представлен в середине 1999 года. PHP 4.0, основанный на этом движке и принёсший с собой набор дополнительных функций, официально вышел в мае 2000 года, почти через два года после выхода своего предшественника PHP 3.0. В дополнение к улучшению производительности, PHP 4.0 имел ещё несколько ключевых нововведений, таких как поддержка сессий, буферизация вывода, более безопасные способы обработки вводимой пользователем информации и несколько новых языковых конструкций.

Обновления PHP 4 выпускались только до конца 2007 года. До этого же времени осуществлялась официальная поддержка четвертой версии. Далее до 8 августа 2008 года по мере необходимости будут появляться только критические обновления безопасности. С 9 августа четвертая версия PHP уйдет в историю.

Пятая версия PHP была выпущена разработчиками 13 июля 2004 года. Изменения включают обновление ядра Zend (Zend Engine 2), что существенно увеличило эффективность интерпретатора. Введена поддержка языка разметки XML. Полностью переработаны функции ООП, которые стали во многом схожи с моделью, используемой в Java. В частности, введён деструктор, открытые, закрытые и защищённые члены и методы, окончательные члены и методы, интерфейсы и клонирование объектов.

Нововведения, однако, были сделаны с расчётом сохранить наибольшую совместимость с кодом на предыдущих версиях языка. На данный момент самыми стабильными и часто используемыми являются именно версии 5.xx, даже несмотря на то, что уже имеется dev версия PHP 6.

Шестая версия PHP находится в стадии разработки с октября 2006 года.

В ней уже сделано множество нововведений, как, например, исключение из ядра регулярных выражений POSIX и «длинных» суперглобальных массивов, удаление директив safe_mode, php_magic_quotes и register_globals из конфигурационного файла php.ini. Также много внимания уделено поддержке Юникода. Загрузить текущую версию разрабатываемого кода для GNU/Linux/BSD и скомпилированные версии для Microsoft Windows можно на сайте PHP Snapshots.

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

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

PHP поддерживает широкие объектно-ориентированные возможности, полная поддержка которых была введена в пятой версии языка.

Класс в PHP объявляется с помощью ключевого слова class. Методы и поля класса могут быть общедоступными (public, по умолчанию), защищёнными (protected) и скрытыми (private). PHP поддерживает наследование (родительский класс указывается с помощью ключевого слова extends после имени класса) и интерфейсы (ставятся в соответствие с помощью implements). Разрешается объявление финальных, абстрактных методов и классов. Множественное наследование классов не поддерживается, однако класс может реализовывать несколько интерфейсов.

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

4.2 СУБД MYSQL

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

MySQL имеет двойное лицензирование. Это означает, что пользователи могут выбирать, использовать ли ПО MySQL бесплатно по общедоступной лицензии GNU General Public License (GPL) или приобрести одну из стандартных коммерческих лицензий MySQL .

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

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

26 февраля 2008 года Sun Microsystems приобрела MySQL AB за $1 млрд.

MySQL возникла как попытка применить mSQL к собственным разработкам компании: таблицам, для которых использовались ISAM - подпрограммы низкого уровня. В результате был выработан новый SQL интерфейс, но API интерфейс остался в наследство от mSQL. Откуда происходит название «MySQL» - доподлинно не известно. Разработчики дают два варианта: либо потому, что практически все наработки компании начинались с префикса My, либо в честь девочки по имени My, дочери Майкла Монти Видениуса, одного из разработчиков системы.[2]

MySQL портирована на большое количество платформ: AIX, BSDi, FreeBSD, HP-UX, GNU/Linux, Mac OS X, NetBSD, OpenBSD, OS/2 Warp, SGI IRIX, Solaris, SunOS, SCO OpenServer, SCO UnixWare, Tru64, Windows 95, Windows 98, Windows NT, Windows 2000, Windows XP, Windows Server 2003 и Windows Vista. Существует также порт MySQL к OpenVMS. Важно отметить, что компания MySQL AB предоставляет для свободной загрузки не только исходные коды СУБД, но и откомпилированные и оптимизированные под конкретные операционные системы готовые исполняемые модули, которые можно загрузить с зеркал, представленных на официальном сайте.

MySQL имеет API для языков C, C++, Java, Perl, PHP, Python, Ruby, Smalltalk и Tcl, библиотеки для языков платформы.NET, а также обеспечивает поддержку для ODBC посредством ODBC драйвера MyODBC.

В MySQL 5.0 значительно расширена функциональность, которая ставит MySQL в один ряд с коммерческими СУБД. Если раньше СУБД MySQL обвиняли в недостаточной поддержке стандарта SQL, то с появлением пятой версии этой популярной базы данных, появилась практически полная поддержка стандарта SQL. MySQL 5.0 содержит следующие нововведения: хранимые процедуры и функции; обработчики ошибок; курсоры; триггеры; представления; информационная схема (так называемый системный словарь, содержащий метаданные).

Версия MySQL 6.0 пока находится в стадии альфа-тестирования. Одно из главнейших нововведений версии 6.0 - новый механизм хранения данных Falcon, разработанный компанией MySQL AB, в качестве потенциальной замены для InnoDB компании InnoBase, приобретённой компанией Oracle.

4.3 YII framework

Yii - это высокоэффективный основанный на компонентной структуре PHP-фреймворк для разработки масштабных веб-приложений. Он позволяет максимально применить концепцию повторного использования кода и может существенно ускорить процесс веб-разработки. Название Yii (произносится как Yee или [ji:]) означает простой (easy), эффективный (efficient) и расширяемый (extensible).

Yii легко изучать и использовать, но для этого вам необходимы неплохие знания PHP и объектно-ориентированного программирования (ООП), т.к. Yii - это строго объектно-ориентированный фреймворк. Для использования Yii вам понадобится веб-сервер с поддержкой PHP 5.1.0+.

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

Особенности

· Cхема разработки - MVC (Модель-Представление-Контроллер)

· Database Access Objects (DAO) и Active Record

· Интегрированный jQuery (очень приятно)

· Формы ввода и проверки

· Web 2.0 виджеты

· Система проверки подлинности и авторизации

· Тематизация

· Веб-сервисы

· Кэширование

· Обработчик ошибок

· Безопасность

· Соблюдение стандартов XHTML

· Автоматическая генерация кода

· ООП концепция

· Отлично совмещается со сторонними библиотеками, например Zend

· Подробная документация

· Расширяемость

·

4.3.1 Yii в сравнении с другими фреймворками

Подобно большинству других PHP-фреймворков, Yii - это MVC-фреймворк.

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

4.3.2 Модель-Представление-Контроллер (MVC)

Yii использует шаблон проектирования Модель-Представление-Контроллер (MVC, Model-View-Controller), который широко применяется в веб-программировании.

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

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

Следующая диаграмма отображает структуру приложения Yii:

Статическая структура приложения Yii

Рисунок 3.3.2

Типичная последовательность работы приложения Yii

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

Типичная последовательность работы приложения Yii

Рисунок 3.3.3

Пользователь осуществляет запрос посредством URL http://www.example.com/index.php?r=post/show&id=1, и веб-сервер обрабатывает его, запуская скрипт инициализации index.php.

Скрипт инициализации создает экземпляр приложения и запускает его на выполнение.

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

Приложение определяет запрошенные контроллер и действие при помощи компонента urlManager. В данном примере контроллером будет post, относящийся к классу PostController, а действием --show, суть которого определяется контроллером.

Приложение создаёт экземпляр запрашиваемого контроллера для дальнейшей обработки запроса пользователя. Контроллер определяет соответствие действия show методу actionShow в классе контроллера. Далее создаются и применяются фильтры (например, access control, benchmarking), связанные с данным действием, и, если фильтры позволяют, действие выполняется.

Действие считывает из базы данных модель Post с ID равным 1.

Действие подключает представление show, передавая в него модель Post.

Представление получает и отображает атрибуты модели Post.

Представление подключает некоторые виджеты.

Сформированное представление вставляется в макет страницы.

Действие завершает формирование представления и выводит результат пользователю.

5. Основы JAVASCRIPT

JavaScript -- это язык программирования сценариев. Является диалектом ECMAScript. Изначально разрабатывался как язык, включающий мощь языка Java, и одновременно простоту, которая позволила бы легко программировать непрограммистам.

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

5.1 Включение и исполнение JAVASCRIPT

Javascript подключается напрямую в HTML-файл. Самый простой способ -- это написать javascript-команды внутрь тега <script> где-нибудь в теле страницы.

5.1.1 Подключение в любом месте

Когда браузер читает HTML-страничку, и видит <script> - он первым делом читает и выполняет код, а только потом продолжает читать страницу дальше.

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

<html>

<body>

<h1>Считаем кроликов</h1>

<script type="text/javascript">

for(var i=1; i<=3; i++) {

alert("Из шляпы достали "+i+" кролика!")

}

</script>

<h1>...Посчитали</h1>

</body>

</html>

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

<script type="text/javascript"> ... </script>

Тег <script> сообщает браузеру о том, что внутри находится исполняемый скрипт. Атрибут type говорит о том, что это javascript. Вообще говоря, атрибут может отсутствовать -- разницы нет, но с точки зрения стандарта его следует указать.

Конструкция for

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

Объявление var i

Объявление переменной внутри цикла: i -- локальная переменная.

Функция alert

Выводит сообщение на экран и ждет, пока посетитель не нажмет ОК.

5.1.2 Вынос скриптов в заголовок HEAD

Обычно javascript стараются отделить от собственно документа.

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

В следующем примере javascript-код только описывает функцию count_rabbits, а ее вызов осуществляется по нажатию на кнопку input.

<html>

<head><script type="text/javascript">

function count_rabbits() {

for(var i=1; i<=3; i++) {

// оператор + соединяет строки

alert("Из шляпы достали "+i+" кролика!")

}

}

</script></head>

<body>

<input type="button" onclick="count_rabbits()" value="Считать кролей!"/>

</body>

</html>

Для указания запускаемой по клику функции в input был использован атрибут onclick. Это лишь вершина мощного айсберга javascript-событий.

5.1.3 Внешние скрипты

Обычно javascript-код вообще не пишут в HTML, а подключают отдельный файл со скриптом, вот так:

<script src="/my/script.js"></script>

При этом файл /my/script.js содержит javascript-код, который иначе мог бы находиться внутри тега <script>.

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

Чтобы подключить несколько скриптов - используйте несколько таких тегов:

<script src="/js/script1.js"></script>

<script src="/js/script2.js"></script>

...

При указании атрибута src содержимое тега игнорируется.

То есть одновременно подключить внешний файл и написать что-то внутри тега нельзя. Придется делать два разных тега <script>: первый с src, второй -- с командами, которые будут выполнены после выполнения внешнего файла.

5.1.4 Структура JAVASCRIPT

Стандарт (формальное описание синтаксиса и работы языка) javascript называется ECMAScript. На нем, кстати, основан не только javascript, но и несколько других языков, например ActionScript (Flash).

По ECMAScript есть спецификация, которая подробно описывает синтаксис, управляющие конструкции и базовые объекты языка.

Например, вот скрипт, который работает, используя только ECMAScript. Кстати, поэтому он будет работать и в других языках, основанных на ECMAScript, включая ActionScript:

var max = 5

try {

for(var i=0; i<Number.POSITIVE_INFINITY; i++) {

if (i>max) throw new Error("failed to reach the stars")

}

} catch(e) { }

ECMAScript - и правда очень особенный язык. Особенно для тех, кто пришел из PHP, C, Java. В нем особым образом устроены объекты и функции.

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

5.1.5 Конструкции

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

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

Эти две строки полностью эквивалентны:

a = 5

a = 5;

В javascript перевод строки почти всегда подразумевает точку с запятой.

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

Вот так не будет работать:

var a = "длинная

строка "

Так как перевод строки подразумевает точку с запятой. В нашем случае JavaScript сообщит о незавершенной строке (unterminated literal) в первой строчке этого примера.

Чтобы многострочные операторы работали как надо - перенос строки можно указывать обратным слэшем "\", вот так:

var a = "длинная \

строка "

return \

result;

Блоки задаются фигурными скобками. Локальные переменные объявляются при помощи var. Причем, в отличие от C/Java, сам по себе блок не задает отдельную область видимости.

var i = 0

{

var i=5

alert(i) // 5

}

alert(i) // тоже 5

Комментарии возможны в двух вариантах // и /*...*/:

// однострочные комментарии

/*

многострочные

комментарии

*/

Переменные в javascript слабо типизированы. Это означает, что при объявлении не нужно указывать тип. Можно присвоить любой переменной любое значение.

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

Переменную не обязательно объявлять. Достаточно ее просто присвоить:

x = 5

Функции задаются объявлением function со списком параметров:

function sayHello(name) {

alert("Hello "+name)

}

Язык javascript предоставляет очень мощные возможности по работе с функциями.

5.1.6 Область видимости

Директива var при объявлении переменной делает ее локальной, то есть видимой только внутри текущей функции. Все остальные переменные являются глобальными.

Локальная переменная объявляется так:

var i

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

// то же самое что 3 отдельных объявления c var

var a=5, b=6, str = "Строка"

В следующем примере переменная a в функции go объявлена как локальная. Поэтому глобальное значение a=1 не изменяется в процессе выполнения go.

a = 1

function go() {

var a = 6

}

go()

alert(a) // => 1

А здесь - ключевое слово var опущено, поэтому значение меняется:

a = 1

function go() {

a = 6

}

go()

alert(a) // => 6

Кстати, глобальных переменных в javascript на самом деле нет. То, что называют "глобальными" - на самом деле свойства специального объекта window. Например, в последнем примере alert(window.a) тоже выдало бы 6.

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

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

Как правило - всё, что относится к компоненту, объявляется в виде свойств единого глобального объекта: ExtJS, dojo и т.п. Вы можете увидеть это в любом известном JS-фреймворке.

Обратите внимание, в javascript все директивы var срабатывают при входе в функцию, неважно где они находятся.

Например, посмотрим на функцию:

function cmp(a,b) {

if (a>b) {

res = 1

} else if (a<b) {

res = -1

} else {

var res = 0

}

return res

}

При входе в функцию интерпретатор javascript находит все объявления var и создает соответствующие локальные переменные.

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

5.1.7 Основные типы

Для объявления строк используются кавычки - простые ' или двойные ". Между ними нет никакой разницы.

a = 'моя'

b = "строка"

Для конкатенации строк используется оператор +.

a = "моя"

b = "строка"

alert(a + ' ' + b)

Javascript - объектный язык. В нем все является объектами. Строки, числа, функции и массивы - все это объекты со своими методами и свойствами. Это надо знать и иметь в виду с самого начала.

Методы объектов вызываются через точку. Например, у строки String есть метод toUpperCase, возвращающий строку в верхнем регистре:

name = "Vasya"

alert( name.toUpperCase() )

Или даже так:

alert( "Vasya".toUpperCase() )

Практически всё в javascript делается при помощи вызова методов различных объектов.

Объекты создаются функциями-конструкторами при помощи директивы new.

В javascript есть два основных способа объявить массив.

Для массива с числовыми индексами обычно используется объект типа Array.

arr = new Array("my", "array")

alert(arr.length) // 2

Свойство length содержит длину массива, которая всегда равна последнему индексу (в примере выше - это 1) плюс один.

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

arr = [ "my", "array" ]

alert(arr[0]) // "my" <- нумерация от нуля

Новые элементы можно добавить в конец методом push.

Для перебора значений используется цикл for.

arr = ["первый", "второй"]

arr.push("третий")

for(var i=0; i<arr.length; i++) {

alert(arr[i])

}

Для массивов, ключи которых являются строками, используется Object. Следующая запись задает ассоциативный массив с ключами n и str:

obj = {

n: 1,

str: "Вася"

}

Для получения свойства объекта используется оператор-аксессор: точка либо квадратные скобки.

obj = { n: 1, str: "Вася" }

alert(obj.n) // точка

alert(obj["n"])

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

var key = "str"

alert(obj[key])

Точка используется, если имя свойства точно известно. Вызов obj.key вернет свойство по имени "key", а квадратные скобки - по значению, которое содержится в переменной key.

При обращении к отсутствующему свойству возвращается специальное значение undefined.

5.1.8 Иерархия основных объектов JAVASCRIPT

автоматизированный мониторинг сервис программный

Конечно, в javascript есть еще много объектов и свойств, например, устаревших типа images или forms, которые обычно включают в иерархию. На рисунке их нет, так как они почти не используются.

6. Система «Учет-Логистик»

Система управления сайтом построена на основе фреймворка YII, написана на языке PHP. Yii (произносится как «Yee» или [ji:]) -- это бесплатный высокопроизводительный веб-фреймворк, написанный на PHP, и реализующий парадигму MVC.

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

6.1 Раздел авторизации

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

· Водители

· Клиенты

· Расходы

· Инвестиции

Кроме того администратор может вносить изменения в настройки, и просматривать отчеты.

Пользователю с учетной записью типа «Оператор» доступны лишь 2 функции:

· Формирование заявок

· Формирование базы водителей

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

Страница авторизации выглядит следующим образом:

Рисунок 6.1 Страница авторизации

6.2 Раздел «Фирмы»

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

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

Рисунок 6.2 Отображение информации о фирме

6.3 Раздел «Операторы»

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

· Логин - логин для авторизации на сайте

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

· Имя - фамилия, имя, отчество оператора

· Номер телефона - контактный номер телефона

· Доп. Информация - поле для дополнительной информации (адрес, примечания)

· Отправить реквизиты для входа на email-при указании адреса электронной почты будет отправлено сообщение с данными для авторизации.

· Скан паспорта - вносит отсканированный паспорт оператора.

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

Рисунок 6.3 Отображение информации об операторе

Также, в разделе «Фирмы» становится возможным закрепить оператора за той или иной фирмой.

6.4 Раздел «Водители»

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

Создание водителя в базе, также как и оператора происходит в два этапа. Сперва это общая информация:

· Ф.И.О.

· Номер телефона

· Дополнительные данные (например предпочитаемый водителе маршрут)

· Адрес

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

Рисунок 6.4 Отображение информации о водителе

6.5 Раздел «Клиенты»

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

Рисунок 6.5 Информация о клиенте

6.6 Раздел «Расходы»

Сервис «Учет-Логистик» позволяет вести учет расходов, связанных с деятельностью фирмы. Причем, статьи расходов администратор ресурса может указывать сам. Также указывается «Фирма» со счета которой будет «списана» сумма, описание (цель списания денежных средств) и, непосредственно, сама сумма. При корректном ведении этого раздела - администратор ресурса, в конце отчетного периода, сможет увидеть на какие цели тратятся доходы. Для удобства отображения таблицы расходов данные можно сортировать по фирмам, и по типам расходов. Если же сортировка не указана явно - будет отображена таблица целиком.

Рисунок 6.6 отображение расходов

6.7 Раздел «Инвестиции»

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

Рисунок 6.7 Отображение инвестиций

6.8 Раздел «Настройки»

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

Рисунок 6.8 Добавление статуса заявки

Также наряду со статусами заявок, те же самые операции можно производить над статьями расходов.

Рисунок 6.8.2 Изменение типов расходов

6.9 Раздел «Отчеты»

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

Формируются следующие поля:

· Месяцы - отчетным периодом считается 1 календарный месяц.

· Всего заявок - общее количество заявок, выполненных за отчетный период.

· Заказы - общая стоимость всех заявок. Измеряется в рублях

· Оплата машин - общая сумма денег, выплаченных водителям. Измеряется в рублях

· Доход - разница между заказами и оплатой водителям.

· Расходы - общие расходы за отчетный период.

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

· Прибыль - чистая прибыль фирмы. Оставшаяся после уменьшения дохода на величину расходов.

· Инвестиции - общая сумма инвестированных денег. На прибыль не влияет.

Рисунок 6.9 Общий отчет по 3 фирмам

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

Рисунок 6.9.1 отчет по фирме ООО ТК «Транс-Лайф»

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

6.10 Раздел «Заявки»

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

6.10.1 Раздел «Создание заявки»

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

· Фирма - фирма, через которую проходит заявка.

· Имя - имя клиента

· Город - город, откуда клиент

· Контактное лицо - человек, представляющий компанию-клиента

· Дополнительная информация (например код на сайте mycargo.su)

· Водитель - водитель, которые везет груз. Если водителя нет в базе - оператор заводит его в соответствующем разделе

· Ставка - сумма, которую готов заплатить грузоотправитель

· Город отправления - город, с которого необходимо забрать груз

· Город назначения - город, в который необходимо доставить груз

· ТТН - Торгово-Транспортная Накладная. Основной документ, по которому водитель перевозит груз, а компания перевозчик получает деньги

· Трекинговый номер - номер для отслеживания на сайте грузоотправителя

· Оплата водителю - сумма, которую готова заплатить фирма - перевозчик

· Примечание - какие либо дополнительные сведения

· Дата создания - дата создания заявки

· Статус - статус заявки.

· Приложения - прикладываются отсканированные документы на заявку

Рисунок 6.10.1 Создание заявки

Заявки разделяются по статусу ТТН и по статусу самой заявки. ТТН(Торго-Транспортная Накладная) может быть на руках у водителя (в случае если груз в пути), или отправлена по почте заказным письмо - грузоотправителю (в случае если грузополучатель получил груз). Сама заявка может находиться в 3 различных состояниях - выполнен (проплачен). Если деньги поступили на счет перевозчика. Выполнен (не проплачен). Если деньги еще не поступили. И груз\машина в пути. Если заявка еще выполняется.

Рисунок 6.10.2 Отображение статусов заявки

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

7.1 Характеристика производственной и экологической опасности проектируемого объекта (установки)

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

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

Размеры помещения: длина 3 м, ширина 2 м, высота 3 м.

Размеры здания: длина 25 м, ширина 12 м, высота 7 м.

В помещении находятся стол компьютерный (1 шт.), стулья (2 шт.), 1 компьютер (монитор жидкокристаллический).

7.1.2 Характеристика токсичных свойств веществ

В данном помещении отсутствуют токсичные вещества.

7.1.3 Характеристика пожароопасных свойств веществ

В данном помещении отсутствуют пожароопасные вещества.

7.1.4 Опасные и вредные факторы

Проанализируем опасные и вредные факторы, свойственные проектируемому объекту. Из физических факторов следует отметить:

_ опасность возникновения разрядов статического электричества, т.к. в помещении лаборатории используются ПЭВМ - при отсутствии или неисправности заземления

психофизиологические факторы:

напряжение зрения;

напряжение внимания;

интеллектуальные нагрузки;

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

длительные статические нагрузки;

монотонность труда;

большой объем информации обрабатываемой в единицу времени;

К такому фактору как опасность травматизма относятся:

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

7.1.5 Категорирование помещения лаборатории по пожарной опасности

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

Стол компьютерный стильный эргономичный (каркас металлический, хромированный; стекло черное закаленное 8 мм). В помещениях данной категории обращаются негорючие вещества и материалы в холодном состоянии.

Согласно ПУЭ-85 помещение лаборатории относится к невзрывопожароопасной зоне. [3,4]

7.1.6 Санитарная классификация помещения


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.