65826

Разработка он-лайн системы продаж и технической поддержки цифровой компьютерной техники

Дипломная

Информатика, кибернетика и программирование

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

Русский

2015-01-11

4.02 MB

18 чел.

СОДЕРЖАНИЕ

Введение 7

1 Обзор предметной области, связанной с системами Интернет-продаж 10

1.1 Понятие и сущность системы он-лайн продаж и технической поддержки 10

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

1.3 Обзор литературных источников 15

2 Постановка задачи дипломного проектирования 20

2.1 Основная цель и задачи дипломного проектирования 20

2.2 Анализ предметной области 21

3 Проектирование базы данных и системы он-лайн продаж 25

3.1 Выбор методологий моделирования и инструментария 25

3.2 Построение концептуальной модели данных 27

3.3 Построение логической модели данных 29

3.4 Разработка модели функций для системы он-лайн продаж 30

3.4.1 Разработка диаграмм вариантов использования 30

3.4.2 Построение диаграмм состояний 30

3.4.3 Разработка макетов экранных форм 33

3.5 Физическое моделирование базы данных 34

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

3.5.2 Построение физической модели данных 37

3.5.3 Построение диаграмм компонентов 37

4 Реализация и тестирование программного обеспечения 39

4.1 Назначение и описание компонентов программного обеспечения, и их исходные тексты 39

4.2 Тестирование программного обеспечения 43

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

6 Определение экономической эффективности разработки программного обеспечения 52

7 ОХРАНА ТРУДА 65

7.1 Правовые, нормативные, социально-экономические и организационные вопросы охраны труда 65

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

7.2.1 Требования к помещениям вычислительного центра 65

7.2.2 Микроклимат в помещениях вычислительного центра 66

7.2.3 Шум и вибрация в помещениях вычислительного центра 67

7.2.4 Электромагнитные излучения 67

7.2.5 Производственное освещение 68

7.2.6 Организация рабочего места программиста 71

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

7.4 Пожарная безопасность 73

Заключение 77

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

Приложение А Концептуальная, логическая и физическая модели данных 80

Приложение Б Диаграмма вариантов использования 83

Приложение В Листинг программы 84

Приложение Г Примеры пользовательского интерфейса 102

Приложение Д Перечень листов графической части дипломного проекта 107


Введение

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

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

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

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

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

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

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

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

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

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

Задачи дипломного проекта:

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

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

Первый раздел – «Обзор предметной области, связанной с системами Интернет-продаж» – отражает уровень современных разработок по теме  проекта. Анализируются различные подходы к решению проблемы, изложенные в отечественных и зарубежных литературных источниках. Обосновывается целесообразность применения подходов, которые приняты к разработке и реализации.

В разделе «Постановка задачи дипломного проектирования» приводится постановка основной задачи и перечень решаемых в работе подзадач.

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

Четвертый раздел – «Реализация и тестирование программного обеспечения» –описывает все методы испытаний данной программы, принцип, по которому проводились испытания каждого пункта меню, каждой операции и общей надежности программы.

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

В «Экономическом разделе» рассчитываются затраты на разработку программного продукта и его экономическая эффективность.

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

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

К пояснительной записке прилагается список литературы, который отобразит информационные источники, используемые при написании программы.

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

Графическая часть содержит модель данных, функциональную модель, схему работы системы.

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

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


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

1.1 Понятие и сущность системы он-лайн продаж и технической поддержки

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

Существует несколько типов Интернет-магазинов:

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

Для всех электронных магазинов свойственен определенный обязательный набор элементов, таких как:

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

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

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

Интернет-магазин имеет следующие преимущества:

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

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

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

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

Правильно организованная техподдержка (Service Desk) всегда начинается с регистрации всех обращений конечных пользователей, служит единой точкой для общения пользователя с ИТ-службой. Наиболее популярные решения по практической организации техподдержки часто строятся на базе Call-center (иногда даже пользователи их отождествляют). Он является начальной точкой контактов конечных пользователей со службой техподдержки и служит источником информации об их фактической удовлетворенности уровнем сервиса, что дополняет информацию о технических параметрах качества обслуживания компании-клиента (внешнего или внутреннего).

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

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

Оператор (1-я линия поддержки, Call-center) — регистрирует обращение, при возможности помогает пользователю самостоятельно, либо эскалирует (передаёт и контролирует выполнение) заявку на вторую линию поддержки.

Вторая линия поддержки — получает заявки от первой линии, работает по ним, при необходимости привлекая к решению проблемы специалистов из смежных отделов (системные администраторы, поддержка POS-терминалов, поддержка специального ПО, поддержка специального оборудования и т. д.) [24].

К сожалению, в Беларуси еще не привыкли покупать то, что нельзя потрогать руками, понюхать или попробовать на вкус. Заказывая что-либо в Интернет-магазине, покупатель боится заплатить деньги за «видимость товара», а не за сам товар. Слабое развитие системы электронных платежей также мало способствует развитию электронной коммерции. Однако, эти препятствия преодолимы, так как товары можно доставлять наложенным платежом или курьером (человек платит за покупку, только тогда, когда она у него уже в руках). С другой стороны, электронные деньги так удобны, что количество пользующихся ими растет изо дня в день. Увеличение спроса и конкуренция на рынке Интернет-продаж заставляет разработчиков создавать более мощные системы безопасности электронных платежей, что позволяет без особого риска платить по счетам или совершать покупки, не вставая из-за компьютера.

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

Несмотря на кажущиеся технические сложности, создать Интернет-магазин с услугой технической поддержки проще и дешевле. К тому же такая «он-лайн» система будет хорошим дополнением и рекламой «офф-лайновой» деятельности. А главное – покупателями станут те, у кого по каким-то причинам нет возможности или времени выйти в обычный магазин, да и те счастливцы, кто познал прелесть покупки, не вставая с места. Таких людей становится все больше и больше.

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

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

  1.  Интернет-магазины компьютерной техники. Их ассортимент может быть от сверхширокого до узкоспециализированного, когда магазин продает исключительно офисную цифровую технику и предоставляет услуги по ее обслуживанию. Это наиболее многочисленная группа сайтов в белорусском интернете. Возможен вариант, когда продажа компьютерной техники - это только один из разделов ассортимента Интернет-магазина.
  2.  Сайты-визитки компьютерных магазинов. Это, как правило, ресурсы с доменом третьего уровня и на бесплатном хостинге с незатейливым дизайном. Чаще всего такие ресурсы создаются как визитки на каком-либо информационно-справочном портале. Не лишне упомянуть и о национальных белорусских каталогах TUT.BY и ALL.BY. Попадание в эти каталоги абсолютно бесплатное и единственное условие – сайт должен быть ориентирован на белорусскую аудиторию. Такая позиция позволяет предоставить пользователям наиболее качественный каталог.

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

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

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

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

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

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

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

Таким образом, при разработке программного обеспечения для он-лайн системы предназначенной для продаж и технической поддержки цифровой компьютерной техники необходимо учесть, указанный выше обязательный набор элементов для разработки Интернет-магазинов, используя программирование на стороне сервера, реализуемое с помощью интегрированной среды разработки Eclipse, языка Java и СУБД MySQL.

1.3 Обзор литературных источников

Для реализации цели дипломного проекта будет использована литература по следующим взаимосвязанным направлениям (непосредственно применяемых при создании программного комплекса):

  •  проектирование базы данных;
  •  создание баз данных, с помощью MySQL;
  •  программирование в среде Eclipse, используя язык Java.

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

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

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

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

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

Среди профессиональной литературы для разработчика баз данных (БД) можно отметить издание книги К. Дейта «Введение в системы баз данных». Эта книга рассчитана в основном на специалистов в области обработки данных, системных аналитиков, разработчиков баз данных и прикладных программистов, а также на преподавателей и студентов соответствующих специальностей. В книге подробнейшим образом обсуждаются практически все вопросы, касающиеся теории баз данных и концептуальной модели в частности. Автором затронуты и такие важные темы, которые обычно отодвигают на задний план многие руководства по системам управления базами данных как защита данных, оптимизация и безопасность, а также объектно-ориентированные системы за которыми, безусловно, будущее систем управления базами данных (СУБД) по управлению сложными данными типа медиа [16].

Немалого внимания заслуживает книга А.Горева, Р.Ахаяна и С.Макашарипова «Эффективная работа с СУБД». Это руководство по созданию информационных систем написано сотрудниками сертифицированного учебного центра Microsoft и предназначено для самого широкого круга читателей. В книге рассмотрены все этапы подготовки необходимого для управления информацией программного обеспечения, включая проектирование базы данных, разработку пользовательского интерфейса, создание и отладку приложений. Многочисленные примеры помогают читателю приобрести опыт, необходимый для успешной работы с такими программными продуктами Microsoft, как Visual Basic, Visual FoxPro, Access, SQL Server. Особое внимание уделено объектно-ориентированным методам программирования и использованию технологии «клиент-сервер».

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

Для иллюстрации тех возможностей, которые может предоставить архитектура клиент-сервер, в книге используется организация взаимодействия указанных пакетов с одним из наиболее мощных серверов баз данных – Microsoft SQL Server [5] .

Книга «MySQL: использование и администрирование» Викрама Васвани представляет собой практическое руководство по MySQL - наиболее приспособленной для применения в среде Веб системы управления базами данных.

Подробно разобранные примеры, практические инструкции признанного эксперта, детализированные примеры кода, сопровождающие каждую главу, позволят освоить приемы использования СУБД с самых основ. Дано описание по установке и запуску MySQL, созданию собственной базы данных, работе с данными при помощи команд SQL, администрированию баз данных и оптимизации ее работы. Предоставляется возможность изучить особенности и принципы действия СУБД и ее техническую архитектуру [2].

Другое важное направления в работе с базами данных это эффективное использование SQL-запросов. По данной тематике также существует небольшое количество переведенных изданий, и практически полностью отсутствуют работы российских авторов. Однако в последнее время и в нашей стране в связи с беспрецедентным господством во всем мире систем на платформе «клиент/сервер» для промышленных СУБД, наблюдается повышение интереса к литературе по SQL и управлению реляционными базами данных. Одним из лучших изданий на сегодня здесь является книга Д.С. Боумана «Практическое руководство по SQL». Автор этой книги считает, что она поможет даже в тех случаях, когда бесполезно самое лучшее руководство пользователя. Здесь раскрываются темы, которые часто пропускаются или очень кратко описаны в стандартных руководствах пользователя - структуры базы данных, индексация, подзапросы, виртуальные таблицы, производительность и целостность данных [1].

Еще одним изданием по данной тематике является книга «SQL» Мартина Грабера. Она подойдет для всех, кто программирует на SQL. Эта книга предлагает практический подход к освоению языка запросов и программирования. Изучение SQL происходит в процессе его использования - создавая приложения баз данных, администрируя базы данных и работая с данными в интерактивном режиме. Четкое и ясное изложение автором основ технологии реляционных баз данных позволит овладеть подходом к максимально эффективному решению задач, связанных с применением SQL. В книге дано подробное описание языка, поэтому от читателя не требуется никакой предварительной подготовки. Сопровождаемая практическими учебными материалами, книга представляет собой полное справочное руководство по SQL [15].

Рассмотрим источники, посвященные среде разработки Eclipse и языку Java.

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

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

«Eclipse. Платформа Web-инструментов» книга коллектива авторов Артура Раймана, Лоренса Мандела, Нейси Дейа описывает платформу Web-инструментов (Web Tools Platform, WTP) Eclipse, которая объединяет в себе все инструменты, необходимые для современных Web-разработок на Java. Платформа WTP - беспрецедентное средство разработки, как проектов с открытым исходным кодом, так и современных коммерческих продуктов.

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

  •  подробно описан процесс разработки уровней долговременного хранения объектов, логики бизнес-процессов и представления с помощью WTP и Java;
    •  представлены передовые методы разработки различных типов Web-приложений на Java;
    •  демонстрируются способы доступа и конфигурирования баз данных с помощью JDBC;
    •  показано, как конфигурировать серверы приложений для использования совместно с WTP;
    •  описаны методы автоматического тестирования с применением JUnit и Cactus, а также методы автоматического построения исполняемых модулей с использованием Ant, Maven и CruiseControl;
    •  даются основы тестирования и профилированя Web-приложений с помощью проекта Eclipse Test and Performance Tools Platform (TPTP);
    •  описаны способы расширения WTP благодаря добавлению новых серверов, типов файлов и расширений WSDL.

Эта книга предназначена для любого разработчика Eclipse и корпоративных Web-приложений на Java - как для тех, кто применяет технологии Eclipse в собственных продуктах, так и для тех, кто использует Eclipse при построении других Web-приложений [21].

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

Билл Скотт и Тереза Нейл авторы книги «Проектирование веб-интерфейсов» - специалисты по проектированию пользовательских интерфейсов - предлагают более 75 шаблонов проектирования взаимодействия для создания собственных удобных и привлекательных веб-приложений. Приводимые шаблоны иллюстрируют шесть ключевых принципов проектирования, позволяющих в полной мере использовать возможности современных веб-технологий и обеспечить эффективность процесса взаимодействия с пользователем. Обсуждается и ряд антишаблонов, которых следует избегать при проектировании интерфейсов [25].


2 Постановка задачи дипломного проектирования

2.1 Основная цель и задачи дипломного проектирования

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

Исходя из выше указанной цели, можно выделить следующие задачи.

  •  Проведение анализа предметной области, связанной с продажами в сети Интернет. Осуществление пожеланий пользователей. Вся работа должна быть ориентирована на конечного потребителя. Сайт должен включать в себя не только авторские задумки, но и пожелания пользователей. Учесть, что сделки могут совершать как физические, так и юридические лица.
  •  Проектирование модели данных и системы он-лайн продаж.
  •  Выбор программного обеспечения. Необходимо выбрать программное обеспечение, которое позволит в полной мере реализовать Интернет-систему продаж.
  •  Определение состава исходных данных. База данных должна иметь логическую структуру, содержать информацию, необходимую для администрирования сайта.
  •  Создание каталога компьютерной техники. Структура каталога должна быть четко спроектирована, так как он является основой системы он-лайн заказов и управляет выбором покупателя. Таким образом, на этапе проектирования следует определить: какие товары предложить первыми, какие во вторую очередь, какие нужны фильтры, что мотивирует покупателя прийти на страницу товара, как осуществляется выбор товаров в данной товарной категории.
  •  Реализация механизма поддержки пользователей. Определить права доступа каждой из групп пользователей, например: для гостя просмотр каталога товаров, для клиента, совершившего покупку - доступ к услуге технической поддержки, для модератора и администратора - редактирование информации в системе.
  •  Разработка интерфейсной части проекта. Необходимо обеспечить удобную форму просмотра информации. Грамотно определить оптимальную систему авторизации пользователей. Правильно сформировать структуру страниц Интернет-магазина с целью уместить как можно больше позиций на странице. Обеспечить возможность поиска, добавления, удаления, просмотра, корректировки информации.
  •  Оформление дизайна сайта. Должен чувствоваться стиль, который будет соответствовать выбранной тематике. Все страницы сайта должны быть выдержаны в одном стиле. Формирование результатов поиска должно осуществляться динамически.

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

Следовательно, можно выделить основные функции программы:

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

Таким образом, становятся очевидны основные этапы решения задачи.

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

2.2 Анализ предметной области

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

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

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

Каждый товар определяется следующими параметрами:

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

К параметрам категории относятся их наименования и описания.

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

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

  •  уникальный идентификатор клиента;
  •  дата регистрации;
  •  имя;
  •  фамилия;
  •  логин;
  •  e-mail;
  •  пароль;
  •  роль (администратор, модератор, пользователь).

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

  •  номер товара;
  •  наименование товара;
  •  дата размещения;
  •  стоимость заказа;
  •  количество товаров в корзине;
  •  статус.

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

Для получения технической поддержки, имеются следующие данные:

  •  дата создания;
    •  текст сообщения;
    •  статус.

Следует учесть также и следующие ограничения.

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

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

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

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

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

  •  незарегистрированные пользователи – гости;
  •  зарегистрированные пользователи - клиенты;
  •  модератор сайта;
  •  администратор информационной системы.

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

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

Администратор сайта может выполнять следующие функции:

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

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

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

Гости смогут просмотреть каталог товаров, прочесть новости и отзывы.

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


3 Проектирование базы данных и системы он-лайн продаж

3.1 Выбор методологий моделирования и инструментария

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

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

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

В настоящее время существует более 20 технологий моделирования бизнес-систем и бизнес-процессов и несколько сотен инструментов, предназначенных для автоматизации этого процесса. Следовательно, актуальной является проблема их сравнения для обеспечения правильного выбора технологии и инструментария при решении конкретных задач пользователей [19].

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

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

Sybase PowerDesignerCASE-средство (Computer-Aided Software/System Engineering), поддерживающее разработку информационных систем и позволяющее аналитикам, проектировщикам и разработчикам действовать в совместно используемой среде, создавать согласованные и надежные приложения.

В PowerDesigner одновременно можно решать несколько различных задач моделирования, не ограничивая проектировщиков жесткими рамками. Например, разрабатывать проект базы данных и/или объектно-ориентированную модель бизнес-логики. Таким образом, PowerDesigner представляет собой единую среду разработки, объединяющую как проектировщиков баз данных, так и разработчиков приложений [22].

IBM Rational Rose - одно из самых популярных средств объектно-ориентированного UML-моделирования приложений. Данный продукт позволяет решать практически любые задачи в проектировании информационных систем – от анализа бизнес-процессов и моделирования данных до генерации кода на различных языках программирования, а также обладает средствами интеграции с другими инструментами Rational, в частности с Requisite Pro.

Rational XDE Professional (IBM) - инструмент UML-моделирования, встраиваемый в среды разработки Microsoft Visual Studio .NET и IBM WebSphere Studio Application Developer. Этот продукт дает возможность осуществлять визуальное проектирование на основе диаграмм UML и по окончании процесса проектирования генерировать код на выбранном языке программирования, а также проводить двустороннюю синхронизацию кода и модели [27].   

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

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

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

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

3.2 Построение концептуальной модели данных

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

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

Проанализировав предметную область, были определены основные объекты концептуальной модели для проектируемой БД:

1. Сущности:

  •  родительские: клиенты, тип товаров;
  •  дочерние сильные: товары;
  •  дочерние слабые: новости, категория, рейтинг, поддержка, изображение, особенности, отзыв;
  •  дочерние ассоциативные: корзина.

2. Связи:

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

3. Ограничения:

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

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

3.3 Построение логической модели данных

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

При проектировании логической структуры базы данных определяется оптимальный состав таблиц для хранения исходной информации. Для каждой таблицы указывается ее название, перечень полей и первичный ключ. Идентифицируются связи между таблицами. В рамках логического проектирования БД могут формулироваться ограничения целостности, приниматься решения о создании индексов, транзакций, представлений и авторизации доступа. Также после процедуры преобразования объектов к отношениям реляционной модели необходимо проверить корректность полученной структуры путем нормализации отношений. Это позволит получить адекватный проект и в дальнейшем наращивать логическую модель [22].

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

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

3.4 Разработка модели функций для системы он-лайн продаж

3.4.1 Разработка диаграмм вариантов использования

Для того чтобы сформулировать общие требования к функциональному поведению проектируемой системы, используем описание функциональности системы через варианты использования (Use Case). Разрабатываемая система представляется в виде множества сущностей или актеров, взаимодействующих с ней с помощью вариантов использования. При этом актером (actor) или действующим лицом называется любая сущность, взаимодействующая с системой извне. Вариант использования служит для описания сервисов, которые система предоставляет актеру. В данном программном обеспечении можно выделить гостя, клиента, администратора, как действующих лиц. Реализуем диаграмму вариантов использования с помощью Power Designer.

Все задачи выполняемые гостем (незарегистрированным пользователем), клиентом, модератором и администратором изображены на рисунке Б.1.

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

3.4.2 Построение диаграмм состояний

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

Диаграммы состояния, отображенные на рисунках 3.1, 3.2, 3.3, и 3.4, описывают работу гостя, клиента, модератора и администратора, соответственно.

Рисунок 3.1 – Диаграмма состояния для гостя

Рисунок 3.2 – Диаграмма состояния для клиента

Рисунок 3.3 – Диаграмма состояния для модератора

Рисунок 3.4 – Диаграмма состояния для администратора

3.4.3 Разработка макетов экранных форм

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

Таким образом, меню приложения и интерфейс, должны быть оптимальными (в плане удобства пользования). Макет экранной формы, проектируемого Интернет-магазина, представлен на рисунке 3.5.

Рисунок 3.5 – Макет экранной формы Интернет-магазина компьютерной техники

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

Следует привести также структуру сайта для разработанного Интернет-магазина компьютерной техники (рисунок 3.6).

Рисунок 3.6 – Структура сайта Интернет-магазина компьютерной техники

3.5 Физическое моделирование базы данных

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

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

  •  среда Eclipse, с использованием языка Java;
  •  СУБД MySQL 5.5.21;
  •  Web Server Tomcat 6.0.

Eclipse — это расширяемая IDE (интегрированная среда разработки). IDE — удобно организованный набор инструментов, необходимых для работы над программным проектом.

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

Наиболее важными особенностями Eclipse являются:

Кроссплатформенность. Eclipse выполняется на всех распространенных платформах: Windows, Linux и MacOS X. Еще важнее то, что его функции одинаковы на каждой из этих платформ.

Универсальность и расширяемость. В Eclipse реализована возможность использования различных инструментов, разработанных сторонними программистами.

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

Eclipse написана на Java, потому является платформо-независимым продуктом, за исключением библиотеки SWT, которая разрабатывается для всех распространённых платформ. Библиотека SWT используется вместо стандартной для Java библиотеки Swing. Она полностью опирается на нижележащую платформу (операционную систему), что обеспечивает быстроту и натуральный внешний вид пользовательского интерфейса, но иногда вызывает на разных платформах проблемы совместимости и устойчивости приложений [28].    

Аплеты Java встраиваются в документы HTML, хранящиеся на сервере Web. С помощью аплетов вы можете сделать страницы сервера Web динамичными и интерактивными. Аплеты позволяют выполнять сложную локальную обработку данных, полученных от сервера Web или введенных пользователем с клавиатуры. Из соображений безопасности аплеты (в отличие от обычных приложений Java) не имеют никакого доступа к файловой системе локального компьютера. Все данные для обработки они могут получить только от сервера Web. Более сложную обработку данных можно выполнять, организовав взаимодействие между аплетами и расширениями сервера Web - приложениями CGI и ISAPI.

Для повышения производительности приложений Java в современных браузерах используется компиляция «на лету»- Just-In-Time compilation (JIT). При первой загрузке аплета его код транслируется в обычную исполнимую программу, которая сохраняется на диске и запускается. В результате общая скорость выполнения аплета Java увеличивается в несколько раз.

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

СУБД MySQL разработал Михаэль Видениус. MySQL является относительно небольшой и быстрой реляционной СУБД основанной на традициях Hughes Technologies Mini SQL (mSQL).

Система MySQL распространяется бесплатно и обладает достаточной мощностью для решения реальных задач. SQL – это аббревиатура от слов Structured Query Language, что означает структурированный язык запросов. Этот язык является стандартным средством для доступа к различным базам данных.

Основные преимущества MySQL:

  •  многопоточность, поддержка нескольких одновременных запросов;
  •  оптимизация связей с присоединением многих данных за один проход;
  •  записи фиксированной и переменной длины;
  •  ODBC драйвер в комплекте с исходником;
  •  гибкая система привилегий и паролей;
  •  гибкая поддержка форматов чисел, строк переменной длины и меток времени;
  •  интерфейс с языками C и perl;
  •  быстрая работа, масштабируемость;
  •  совместимость с ANSI SQL;
  •  бесплатна в большинстве случаев;
  •  хорошая поддержка со стороны провайдеров услуг хостинга;
  •  быстрая поддержка транзакций через механизм InnoDB [15].

Для работы с MySQL был выбран менеджер и администратор IDE dbForge Studio, - бесплатный и профессиональный инструмент для разработчиков БД. Он предлагает полный набор средств администрирования MySQL, создания баз данных, инструментов SQL скриптов, хранимых процедур и функций, составления и выполнения запросов, редактирования данных, осуществления их экспорта и импорта, управления пользователями и многое другое.

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

Apache Tomcat (Jakarta Tomcat или просто Tomcat) это общедоступный сервлет контейнер, разработанный Apache Software Foundation (ASF). Tomcat реализует Java Servlets и Java Server Pages(JSP) спецификации от Oracle Corporation, а также обеспечивает «чистую Java» HTTP среду для запуска Java кода.

Tomcat 6.0 - самый популярный сервер среди разработчиков, благодаря его простоте и стабильности. Оптимальный выбор для большинства веб-приложений, обеспечивающий работу проектов на языке Java.

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

Для оптимизации доступа перед Tomcat-ом часто ставят передний проксирующий сервер. Cам Tomcat написан на Java, ресурсоемок и желательно снять с него нагрузку по работе с медленными конечными клиентами, что и является его основным недостатком. [24].

3.5.2 Построение физической модели данных

Заключительным этапом проектирования базы данных является физическое моделирование, которое представляет собой процесс определения структуры хранения данных и методов доступа к данным в базе и осуществляется на основе логической модели. Результатом этого процесса является физическая модель, содержащая полную информацию, необходимую для создания всех объектов базы данных. Физическая модель данных для разрабатываемой системы представлена рисунке А.3 [22].

3.5.3 Построение диаграмм компонентов

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

На рисунке 3.7 показана диаграмма компонентов Интернет-магазина, на которой модуль Presentation реализует интерфейс веб-сайта и логику, обеспечивающую взаимодействие сайта с пользователем, модуль Business - бизнес-логику сервера, а модули Data и DataDB отвечают за взаимодействие с базой данных заказов и синхронизацию с системой обработки заказов.

Рисунок 3.7 – Диаграмма компонентов Интернет-магазина компьютерной техники

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

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

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


4 Реализация и тестирование программного обеспечения

4.1 Назначение и описание компонентов программного обеспечения, и их исходные тексты

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

Трехуровневая архитектура подразумевает разделение кода на три уровня:

  1.  уровень представления (presentation layer);
  2.  уровень логики приложения (бизнес-уровень, или business layer);
  3.  уровень данных (data layer).

Взаимодействие уровней в приложении «Андеграунд» показано на рисунке 4.1.

Рисунок 4.1 – Взаимодействие уровней в приложении «Андеграунд» с трехуровневой архитектурой

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

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

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

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

Уровень представления для административной части представлен главной страницей, которая содержится в файле admin_menu.jsp (листинг 4.1).

Листинг 4.1 – Страница администратора

<%@ page language="java" contentType="text/html; charset=UTF-8"

   pageEncoding="UTF-8"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<table cellpadding="0" cellspacing="0" style="width:100%; padding-left: 30px; padding-right: 30px" >

<tr>  

<c:choose>   

  <c:when test="${(role == 'ADMIN') || (role == 'MODERATOR')}">

   <td class="main_url">

   <a href="${basePath }user/list.htm">Пользователи</a></td>

   <td class="main_url">

  <a href="${basePath }product-type/list.htm">Типы товаров</a></td>

   <td class="main_url">

   <a href="${basePath }features/list.htm">Особенности</a></td>

   <td class="main_url">

  <a href="${basePath }menu-component/list.htm">Составляющие</a></td>

   <td class="main_url">

   <a href="${basePath }rating/list.htm">Рейтинги</a></td>

   <td class="main_url">

  <a href="${basePath }ticket/list.htm?type=admin">Поддержка</a></td>

  </c:when>

 </c:choose>

</tr>

</table>

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

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

Листинг 4.2 – Доступ к хранимой процедуре

       Connection conn = null;

CallableStatement cstmt = null;

ResultSet rs = null;

try {

   conn = DbConnect.getConnect();

   cstmt = conn.prepareCall("begin ?:=Pk54_Monitor_Grx.ora_func(); end;");

   cstmt.registerOutParameter(1, Types.INTEGER);

   cstmt.registerOutParameter(2, Types.VARCHAR);

   cstmt.setInt(3, this.getId());

   cstmt.setString(4, p_date_scale);

   cstmt.execute();

   rs = (ResultSet) cstmt.getObject(3);

   //TODO

} catch (SQLException e) {    e.printStackTrace();

} catch (ParseException e) {    e.printStackTrace();

} catch (Exception e) {    e.printStackTrace();

} finally

{    try {if (rs!=null){rs.close();} }catch (SQLException e) {e.printStackTrace();}

   try {if (cstmt!=null){cstmt.close();} }

catch (SQLException e) {e.printStackTrace();}

   try {if (conn!=null){conn.close();} }

catch (SQLException e) {e.printStackTrace();}}

Также к уровню представления принадлежат следующие классы:

  •  DatabaseHandler хранит общую функциональность, отвечающую за доступ к базе данных. Вызывается из файла database_handler.jsp;
  •  ErrorHandler обрабатывает ошибки, используя статический определенный пользователем метод Handler(), который вызывается при возникновении ошибок в работе программы и определяется с помощью функции set_error_handler().

Метод обработки ошибок Handler(), работает следующим образом:

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

Вызывается из файла error_handler.jsp.

  •  Product содержит функциональность, специфичную для каталога товаров (например, метод GetDepartments(), который  извлекает из базы данных список категорий);
  •  User, отвечает за функциональность при работе с учетными записями пользователей, вызывается из файла login.jsp;
  •  Ticket, отвечает за корзину покупателя;
  •  Purchase содержит информацию о сообщениях по технической поддержке пользователей;
  •  Rating – используется для обработки информации по рейтингу товаров;
  •  Product_comment применяется для хранения и добавления отзывов;
  •  AdminMenu отвечает за функциональность главного меню администратора, вызывается из файла admin_menu. jsp;
  •  AdminProducts, AdminCategories обеспечивают функциональность администрирования каталога товаров, вызываются из файлов admin_products. jsp, admin_categories. jsp, соответственно;

Листинги всех описанных в данном разделе файлов представлены в приложении Б.

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

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

Так же применение хранимых процедур дает и другие преимущества:

  •  упрощение кода для доступа к данным, который хранится централизованно, и упрощение реализации трехуровневой архитектуры (уровень данных как раз и образуется хранимыми процедурами, хранящимися в базе данных);
  •  упрощение обеспечения безопасности. MySQL позволяет задавать настройки безопасности отдельно для каждой процедуры;
  •  SQL-запросы, генерируемые в Java-коде, более уязвимы к инъекционным атакам. Это серьезный источник угроз;
  •  отделение SQL от Java делает Java-код более аккуратным и простым для понимания: вызывать хранимые процедуры проще, чем генерировать SQL-операторы в Java-сценариях.

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

4.2 Тестирование программного обеспечения

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

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

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

Полное тестирование разработанного приложения будет проводиться в два этапа:

  1.  функциональное тестирование;
  2.  тестирование интерфейса.

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

Критическое тестирование – это процесс поиска ошибок в программе при стандартной ее работе, т.е. при правильной последовательности действий, при верном заполнении полей.

Углубленное тестирование – это процесс поиска ошибок в программе в нестандартных, непредвиденных ситуациях, таких как некорректный ввод данных [20].

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

Тестирование решает несколько основных задач:

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

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

Таблица 4.1 – Тестовые случаи

Название модуля/ экрана

Описание тестового случая

Ожидаемые результаты

Тестовый случай пройден? Да/Нет

Коммен-

тарии

1

2

3

4

5

6

1

Регистрация

Нажатие ссылки «Регистрация» и последующее заполнение регистрационной формы:

1. Заполнить все поля;

2. Заполнить не все поля.

1. Сообщение об удачной регистрации;

2. Сообщение о неудачной регистрации.

Да

2

Авторизация

В поле «E-mail» и «Пароль» ввести данные и нажать «Авторизация»

Вход в систему под определенными правами, в зависимости от введенных данных

Да

3

Навигационное меню

Нажимаем на любой пункт меню

Отображение всех товаров, выбранной категории

Да

4

Подробная информация о товаре

Выбор активной ссылки товара, имя товара

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

Да

5

Добавление в корзину

Нажатие кнопки «Купить»

Отображение названия товара в корзине

Да

Окончание таблицы 4.1

Название модуля/ экрана

Описание тестового случая

Ожидаемые результаты

Тестовый случай пройден? Да/Нет

Коммен-

тарии

1

2

3

4

5

6

6

Просмотр корзины

Нажатие на кнопку «Подробнее»

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

Отображается таблица с информацией о количестве товаров находящихся в корзине

Да

7

Поиск товара

1 Нажатие на кнопку «Поиск»

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

Да

8

Авторизация администратора

в поле «E-mail» и «Пароль» ввести данные и нажать «Вход»

Отображение главной формы администратора содержащей панель управления

Да

9

Добавление товара

1. Нажатие на кнопку «Добавить товар» на странице администратора

2. Заполнить необходимые поля и нажать кнопку «Добавить»

1. Отображается форма для занесения нового товара в базу

2. Добавляется товар в базу

Нет

Не происходит добавление товара

10

Администрирование заявок по технической поддержке

Нажатие на ссылку «Поддержка»

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

Да

11

Администрирование заказов

Нажатие на ссылку «Заказы»

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

Да

12

Профиль

Нажатие на ссылку с логином

Форма изменения личных настроек пользователя

Да

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

Таблица 4.2 – Перечень граничных и эквивалентных значений

Название

поля

Формат

данных

Перечень граничных значений

Перечень эквивалентных значений

Nickname

varchar(100)

Текстовое поле с ограничением длины не более 100 символов

kirila

Password

varchar(50)

Текстовое поле с ограничением длины не более 50 символов

123456

Firstname

varchar(100)

Текстовое поле с ограничением длины не более 100 символов

Кирилл

Name

varchar(100)

Текстовое поле с ограничением длины не более 100 символов

Samsung S5830 Galaxy Ace

Lastname

varchar(100)

Текстовое поле с ограничением длины не более 100 символов

Иванов

Email

varchar(100)

Текстовое поле с ограничением длины не более 100 символов

kir@example.com

role_id

smallint(6)

Короткое целое число с ограничением длины не более 6 символов

2

About

longtext

Текстовое поле с ограничением длины не более (2^32 - 1) символов

Основные: Дата выхода на рынок   2011 г.  

Стандарт   GSM 850, GSM 900, GSM 1800, GSM 1900, UMTS (WCDMA)   SAR   0.84 Вт/кг   Процессор   Qualcomm MSM7227   Тактовая частота   800 МГц Количество ядер 1 Фирменный интерфейс   TouchWiz 3.0  Размеры и вес Длина   112.4 мм   Ширина   59.9 мм  

Толщина   11.5 мм  

Вес  113 г.   

Description

varchar(1000)

Текстовое поле с ограничением длины не более 1000 символов

112.4x59.9x11.5 мм,

113 г, TFT 16 млн. цветов, 3.5'' (320x480), камера 5 Мп, видео 640x480 30fps, GPRS, EDGE, Wi-Fi, Bluetooth (A2DP), GPS,

image_preview_url

varchar(150)

Текстовое поле с ограничением длины не более 150 символов

Samsung_S5830.jpg

image_title

varchar(150)

Текстовое поле с ограничением длины не более 150 символов

Samsung_S5830_2.jpg

image_url

varchar(150)

Текстовое поле с ограничением длины не более 150 символов

Samsung_S5830_u.jpg

Cost

decimal(10,2)

Дробное число с двумя знаками после запятой

250

Аппаратные средства, которые использованы при тестировании программного обеспечения, приведены в таблице 4.3.

Таблица 4.3 –Перечень аппаратных средств

Роль

Аппаратная конфигурация

Программная конфигурация

1

2

3

4

1

Сервер

Intel Core i7-980X Extreme Edition,  Kingston HyperX T1 KHX1600C9D3T1K2/8G, 2000*2 Gb HDD, GeForce 8600GT 512Mb

Windows XP SP3, tomcat 6.0, mysql 5.5.21, Eclipse 3.6

2

Клиент

Athlon 5200+, 2Gb RAM, 500 Gb HDD, GeForce 7600 Gt 512 Mb

Windows XP SP3, Google Chrome

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

Таблица 4.4 – Анализ ошибок

Номер ошибки

Описание ошибки

Гипотеза местонахождения

Гипотеза прошла? Да/Нет

1

2

3

4

1

Не происходит добавление товара

Неправильная обработка событий

Да

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

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

Для тестирования, приложение вызывалось из разных современных браузеров (Mozilla, Firefox, Opera, Internet Explorer, Google Chrome) и, как результат, интерфейс выглядел во всех одинаково.

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

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

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

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


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

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

Главная страница дает возможность произвести регистрацию или авторизацию пользователя, если он зарегистрирован в Интерне-магазине. Если пользователь не авторизирован, он имеет возможность просмотреть каталог товаров, представленный в системе. Для просмотра каталога, необходимо нажать на любую интересующую категорию товаров. Нажав, например, на «Ноутбуки», пользователь перейдет на страницу, изображенную на рисунке Г.2. Также есть возможность просмотра подробной информации о товаре, нажав на любой товар либо его изображение, пользователь попадает на страницу, изображенную на рисунке Г.3.

Для регистрации необходимо нажать на кнопку «Регистрация» и перейти к странице, изображенной на рисунке Г.4, на которой пользователь сможет ввести все данные о себе и тем самым зарегистрироваться.

После авторизации перед пользователем появляется ряд возможностей:

  •  изменение своего профиля, осуществляется с помощью нажатия на ссылку с логином и перехода на страницу «Личный кабинет», изображенную на рисунке Г.5;
  •  заказ любого товара, нажав на ссылку «Купить». Для детального просмотра количества товаров, которые находятся в корзине необходимо нажать ссылку «Мои покупки», и откроется страница, отображенная на рисунке Г.6.

Кроме того, приложение «Андеграунд» снабжено системой поиска. Для того чтобы найти товар необходимо ввести искомое слово в поле поиска и нажать на кнопку «Поиск» (рисунoк Г.7).

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

Нажатие на ссылку «Поддержка», перед администратором отображается страница, изображенная на рисунке Г.9, которая показывает сообщения о поддержке, которые отправили пользователи. Администратор может изменить статус сообщения, если проблема пользователя решена.

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

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


6 Определение экономической эффективности разработки программного обеспечения

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

Годовые эксплуатационные расходы при ручной обработке информации определяются по формуле:

,                                     (6.1)

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

к - периодичность решения задачи в течение года (к = 255);

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

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

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

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

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

Согласно Постановлению Совета Министров Республики Беларусь от 20.12.2010 года №1844 «Об установлении размера минимальной заработной платы» среднечасовая ставка работника равна:

руб.                                                          (6.2)

Нормативное количество рабочих часов в мае 2011 – 159.

тыс. руб.                                                     (6.3)

тыс. руб.

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

,                             (6.4)

где  - затраты на заработную плату пользователя программы;

- затраты на оплату аренды ЭВМ при решении задачи.

Затраты на заработную плату пользователя программы определяются по формуле:

,                                         (6.5)

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

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

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

,                                           (6.6)

где  - время ввода в ЭВМ исходных данных, необходимых для решения задачи, мин.(= 0.6);

- время вычислений, мин.( = 0.1);

- время вывода результатов решения задачи (включая время распечатки на принтере и графопостроителе), мин. ( = 1.3);

- коэффициент,  учитывающий  подготовительно-заключительное время (dпз =0.2).

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

,                                                      (6.7)

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

-  норматив набора 100 знаков, мин. (Hz=3).

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

2.71 тыс. руб.

мин.

час.

тыс. руб.

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

,                                                  (6.8)

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

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

,                  (6.9)

где Сэ - расходы на электроэнергию за час работы ЭВМ, тыс. руб.;

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

- годовые затраты на ремонт и техническое обслуживание ЭВМ тыс. руб.;

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

- годовые затраты на ремонт и содержание производственных площадей, тыс. руб.;

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

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

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

,                                                   (6.10)

где  - установленная мощность электродвигателя ЭВМ, кВт ( = 0.4),

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

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

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

тыс.руб.

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

,              (6.11)

где  - цена ЭВМ на момент ее выпуска, тыс. руб. (= 1600 тыс.руб.);

- коэффициент удорожания ЭВМ (зависит от года выпуска). В том случае, когда в качестве цены используется цена 2011г., коэффициент удорожания = 1;

- коэффициент, учитывающий затраты на монтаж и транспортировку ЭВМ (=1.05);

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

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

=  тыс. руб.

тыс. руб.

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

,                                            (6.12)

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

тыс. руб.

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

,                     (6.13)

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

- норма амортизационных отчислений на производственные площади, % ( = 1.2);

— площадь, занимаемая ЭВМ, кв. м. (=2.3);

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

— цена 1 квадратного метра площади, тыс. руб. (= 520).

= ;

= тыс.руб.

Годовые затраты на ремонт и содержание производственных площадей укрупнено могут быть определены по формуле:

,                                                     (6.14)

где  - коэффициент, учитывающий затраты на ремонт и эксплуатацию производственных площадей (= 0,05).

= тыс.руб.

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

,                                           (6.15)

где  — ставка налога на недвижимость ( = 0.01).

тыс. руб.

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

,                                                    (6.16)

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

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

час.

тыс.руб.

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

,                                           (6.17)

где - ставка налога на прибыль (= 0.24).

тыс.руб.

тыс.руб.

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

,                                                  (6.18)

где  - капитальные и приравненные к ним затраты, руб.;

- отпускная цена программы, руб.

Капитальные и приравненные к ним затраты определяются:

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

,                                         (6.19)

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

б) в случае, если ЭВМ,  на которой предполагается решать рассматриваемую задачу, отслужила к моменту расчета X лет (X = 3), по формуле:

;                      (6.20)

тыс.руб.

Отпускная цена программы определяется по формуле:

,                                      (6.21)

где  - оптовая цена программы, руб.;

- затраты на заработную плату разработчиков программы, руб.;

- размер плановой прибыли на программу, руб.;

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

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

,                                   (6.22)

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

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

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

,                                         (6.23)

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

- трудоемкость постановки задачи на i-м этапе разработки программы, дней;

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

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

,                               (6.24)

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

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

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

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

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

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

Составляющие приведенной формулы определяются, в свою очередь, через условное число операторов Q в разрабатываемом ПП по формуле:

,                                                    (6.25)

где  - число операторов в программе;

- коэффициент сложности программы;

- коэффициент коррекции программы в ходе ее разработки.

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

Коэффициент коррекции программ p характеризует увеличение объема работ за счет внесения изменений в алгоритм и программу, изменения состава и структуры информации, а также уточнений, вносимых разработчиком программы для улучшения ее качества без изменения постановки задачи. Значение p может быть принято равным 0.15...0.5.

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

;                                              (6.26)

;                                                 (6.27)

;                                                   (6.28)

;                                                     (6.29)

;                                                     (6.30)

,                                                           (6.31)

где  - коэффициент увеличения затрат труда вследствие недостаточного или некачественного описания задачи ( - 1.2... 1.5);

- коэффициент квалификации разработчика алгоритмов и программ (при стаже работы о трех до пяти лет =1.1…1.2). Получаем:

;

;

;

;

=1.3;

=1.2

;

;

;

;

;

;

;

тыс. руб.;

тыс. руб.

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

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

Предусмотрено четыре степени новизны разрабатываемых задач:

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

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

  1.  алгоритмы оптимизации и моделирования систем и объектов;
  2.  алгоритмы учета, отчетности, статистики и поиска;
  3.  алгоритмы, реализующие стандартные методы решения, а также не предусматривающие применения сложных численных и логических методов.

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

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

,                                                    (6.32)

где  - себестоимость программы, тыс руб.;

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

Себестоимость программы определяется по формуле:

                                             (6.33)

где  - коэффициент накладных расходов проектной организации без учета эксплуатации ЭВМ (при отсутствии данных принять  = 1,16);

- затраты на отладку программы.

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

                                                       (6.34)

где - трудоемкость отладки программы, час.( )

тыс. руб.;

тыс. руб.;

Оптовая цена программы определяется по формуле:

;                                                      (6.35)

тыс.руб. ;

тыс. руб.;

тыс. руб.

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

,                              (6.36)

где  - коэффициент эффективности, равный ставке за кредиты на рынке долгосрочных кредитов (= 0.25).

тыс. руб.

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

;                                                    (6.37)

.

Результаты расчета сводятся в таблице 6.1.

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

Наименование показателя

Базовый вариант

Проектный вариант

1. Трудоемкость решения задачи, час.

4

0.04

2. Периодичность решения задачи, раз/год

255

255

3. Годовые текущие затраты, связанные с решение задачи, тыс. руб.

5963.49

59.630

4. Отпускная цена программы, тыс. руб.

-

1415.69

5. Степень новизны программы

-

В

6. Группа сложности алгоритма

-

3

7. Прирост условной прибыли, тыс. руб.

-

4483.89

8. Ожидаемый годовой экономический эффект, тыс. руб.

-

4128.65

9. Срок возврата инвестиций, лет

-

0.317

Приложение, реализованное в ходе дипломного проекта на тему «Разработка системы он-лайн продаж строительных материалов на примере ОАО «Гродненский комбинат строительных материалов» обеспечивает получение годового экономического эффекта в сумме 4128.65 тыс. руб. при отпускной цене программы 1415.69 тыс. руб. Проект обеспечивает возврат инвестиций за 0.317 года.


7 ОХРАНА ТРУДА

7.1 Правовые, нормативные, социально-экономические и организационные вопросы охраны труда

Охрана труда – система обеспечения безопасности жизни и здоровья работников в процессе трудовой деятельности, включающая правовые, социально-экономические, организационные, технические, психофизиологические, санитарно-гигиенические, лечебно-профилактические, реабилитационные и иные мероприятия и средства, согласно ГОСТ 12.0.002 [6].

Правовой основой организации работы по охране труда в республике является Конституция Республики Беларусь (ст. 41, 45), которой гарантируются права граждан на здоровые и безопасные условия труда, охрану их здоровья.

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

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

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

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

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

7.2.1 Требования к помещениям вычислительного центра

Разработка дипломного проекта велась в помещении, размеры которого – 2,4х3,8 м, высота помещения – 2,7 м. На высоте 0,7 м расположен оконный проем размером 1,6х2,4 м с деревянными двойными рамами, застекленными оконным листовым стеклом.

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

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

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

Для обеспечения нормальных условий труда санитарные нормы устанавливают на одного работающего объем производственного помещения не менее 20 м3 , а площадь помещения не менее 6 м2   на человека с учетом максимального числа одновременно работающих в смену, согласно СанПиН 9-131 РБ [23].

Так как площадь рассматриваемого помещения составляет 9,12 м2, объем помещения - 24,62 м3, а максимальное число одновременно работающих (тестируемых работников) – 1 человека, таким образом, эти значения соответствуют требуемым параметрам.

7.2.2 Микроклимат в помещениях вычислительного центра

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

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

Концентрация пыли в воздухе составляет не более 0,5 мг/м3.

Условия труда на рабочем месте регламентирует ГОСТ 12.1.005 [10], который определяет оптимальные и допустимые параметры для рабочей зоны производственных помещений.

Выполняемые на рабочем месте работы относятся к категории легких физических с затратой энергии до 120 Ккал/ч (категория I), а рассматриваемое помещение – к помещениям с незначительными избытками явной теплоты (до 23 Вт/м2 ).

Оптимальные параметры микроклимата приведены в таблице 7.1.

Таблица 7.1 – Оптимальные нормы температуры, влажности и скорости движения воздуха в рабочей зоне производственных помещений

Период года

Категория работ

Температура, °С

Влажность, %

Скорость воздуха, м/с не более

Холодный

I

21-24

60-40

0,1

Теплый

I

22-25

60-40

0,1; 0,2

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

7.2.3 Шум и вибрация в помещениях вычислительного центра

Шум – любой нежелательный для человека звук. Сильный шум в условиях производства снижает производительность труда до 40 - 60% и может явиться причиной несчастного случая.

В помещении установлено 1 компьютер  и 1 лазерный принтер. Уровень шума, издаваемый компьютером, составляет около 10 дБА, издаваемый принтером - около 15 дБА. Принтер является источником «механического» шума, вызванного бумагоподающим механизмом.

Компьютер генерирует в основном аэродинамический шум, вызванный движением воздуха в системе охлаждения машины. Суммарный уровень шума, получаемый в результате наложения звуковых волн друг на друга, в рассматриваемом помещении составит 30 дБА, что ниже минимального уровня 50 дБА (согласно СанПиН 9-131 РБ [23]).

7.2.4 Электромагнитные излучения

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

На сегодня считается, что кратковременное и длительное воздействие всех видов излучений мониторов, особенно при наличии защитных экранов, не представляют опасности для здоровья оператора. Рекомендуется применение мониторов, удовлетворяющих стандарту безопасности TCO’03.

Максимальная напряженность на кожухе монитора Samsung SyncMaster 765MB, который соответствует стандарту TCO’03, составляет по паспортным данным 2,5 В/м, что соответствует фоновому уровню.

Интенсивность электромагнитного излучения в 5 см от экрана составляет 64 В/м, но на расстоянии 30 см, не превышает 2,4 В/м, что ниже, чем допустимый уровень. Это же можно сказать и об интенсивности ультрафиолетового и инфракрасного излучения.

Таким образом, при работе на настоянии 40 - 50 см от экрана дисплея вредное воздействие исключено.

7.2.5 Производственное освещение

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

В рассматриваемом помещении используется одностороннее естественное фронтальное освещение, осуществляемое через окно общей площадью 3,84 м2. Считается, что при работе с дисплеями площадь световых проемов в помещении должна составлять 25% площади пола. Площадь помещения 9,12 м2, значит, площадь световых проемов должна составлять 2,28 м2. Отсюда следует, что естественное освещение соответствует условиям труда. При недостатке естественного освещения используется искусственное освещение, которое осуществляется с помощью осветительных приборов общего назначения.

Произведем расчет искусственного освещения для рассматриваемого помещения с использованием метода коэффициента использования светового потока по формуле 7.1:

,                                                                       (7.1)

где - световой поток;

- освещенность, лк (=200 лк);

- площадь освещаемого помещения (S=9,12 м2);

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

– коэффициент использования осветительной установки;

– потребное число светильников.

Определяем высоту расположения светильников над освещаемой поверхностью по формуле 7.2:

Hc = Hhchp,                                                                    (7.2)

где H - общая высота помещения (Н = 2,7 м);

hc – высота от потолка до нижней части светильника (hc= 0,4);

hp – высота от пола до освещаемой поверхности (hp = 0,7 м).

Hc = 2,7 – 0,4 – 0,7 = 1,6 м.

Определяем отношение расстояния между светильниками L к высоте их подвеса Нс. В соответствии с рекомендациями, принимаем данное соотношение равным 1,4. Откуда находим L по формуле 7.3:

L = 1,4 * Hc;                                                                    (7.3)

L = 1,4 * 1.6 = 2,24 м.

Найдем потребное число светильников по формуле 7.4:

;                                                                          (7.4)

n = 9,12/2,242= 1,81 2 шт.

Определяем показатель помещения по формуле 7.5:

,                                                               (7.5)

где, a – длина помещения ( a = 3,8 м);

b – ширина помещения ( b = 2,4 м).

.

В соответствии с СНБ 2.04.05 [9] определим значение коэффициента отражения потолка (известь белого цвета) ρпот = 0,7, стен (обои светлых тонов) ρст = 0,5, рабочей поверхности ρр = 0,3.

По найденному показателю i и значениям коэффициента отражения потолка, стен и рабочей поверхности, по соответствующим таблицам СНБ 2.04.05 определим значение коэффициента использования светового потока η=0,47.

Согласно классификации СНБ 2.04.05 [27], помещения вычислительного центра относятся к помещениям общественных и жилых зданий с нормальными условиями среды. В соответствии с этим, значение коэффициента запаса К=1,4.

Величина коэффициента неравномерности z определяется по формуле из отношения:

,                                                                      (7.6)

где Eср – средняя освещенность (Eср = 300 лк);

Emin – наименьшая освещенность (Emin = 200 лк, при освещении помещения вычислительного центра  и экрана дисплея [27].

Подставив полученные значения в формулу (7.1) и, учтя, что в каждом светильнике по две лампы получим:

Исходя из результатов расчета, оптимальными будут варианты люминесцентных  ламп со стандартными значениями светового потока – 2340 лм и мощностью 40 Вт. Выбираем марку лампы соответствующую рассчитанному значению F, для данного помещения лампа ЛД 40-4.

7.2.6 Организация рабочего места программиста

Рабочее место по ГОСТ 12.1.005 ССБТ – место постоянного или временного пребывания работающих, в процессе трудовой деятельности. При организации рабочих мест необходимо руководствоваться требованиями СанПиН 9-131 РБ-2000 РБ, где особое внимание уделяется гигиеническим требованиям по обеспечению здоровых и безопасных условий при эксплуатации компьютерной техники.

Персональный компьютер спроектирован с учетом необходимых для работы эргономических требований:

  •  имеется возможность поворота дисплея в горизонтальной и вертикальной плоскостях;
  •  нет жесткой связи клавиатуры с дисплеем;
  •  существует возможность регулировки яркости и контрастности на дисплее;
  •  обеспечивается удобное расположение кнопок на панели компьютера;
  •  клавиатура обеспечивает удобный угол наклона к поверхности стола – 150 мм;
  •  мягкость нажатий клавиш на клавиатуре.

Принтер также удовлетворяет ряду эргономических требований:

  •  красивое оформление и окраска мягкого цвета;
  •  удобное расположение кнопок управления;
  •  простота и удобство смены картриджа;
  •  небольшие мускульные усилия при работе.

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

Рабочий стол программиста имеет габариты: длина 2,25 м, ширина 1 м, высота 0,8 м, что соответствует требованиям. Высота поверхности не регулируется, что также допускается нормами.

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

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

Для поддержания нормальной работоспособности работников рекомендуется продолжительность работы с монитором не более 50% рабочего времени, при этом время непрерывной работы не более 1,5-2 часов; время перерыва -15 мин.; и также время перерыв на обед - 40 мин. Все вышеперечисленные мероприятия по режиму работы и отдыха соблюдаются.

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

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

Техника безопасности - это система организационных мероприятии, защитных мер и методов, предотвращающих воздействие на работающих недопустимого риска [6].

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

Согласно ГОСТ 12.1.009 [11] система организационных и технических мероприятий и средств, обеспечивающих защиту людей от вредного и опасного воздействия электрического тока, электрической дуги, электромагнитного поля и статического электричества.

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

Возникновению вышеперечисленных факторов препятствуют:

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

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

Устранить опасность поражения током при замыкании на корпус можно с помощью установки в помещении нулевого защитного проводника .

Согласно ГОСТ 12.1.038 [8] занулением называется преднамеренное электрическое соединение с нулевым защитным проводником металлических нетоковедущих частей оборудования, которые могут оказаться под напряжением.

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

Кроме того, на рабочем месте оператора ЭВМ необходимо обеспечить защиту от статического электричества.

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

Для снижения величины возникающих разрядов статического электричества в ВЦ, покрытие технологических полов следует выполнять из однослойного антистатического линолеума марки АСН. К общим мерам защиты от статического электричества в ВЦ можно отнести увлажнение воздуха (до 75%), ионизацию воздуха. Данные защитные меры регламентирует ГОСТ 12.4.124 [12].

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

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

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

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

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

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

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

Все помещения по пожарной и взрывоопасности делятся на пять категорий:

  •  А, Б - взрывопожароопасные;
  •  В, Г, Д - пожароопасные.

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

Согласно ГОСТ 12.1.004 [9] пожарная безопасность объекта должна обеспечиваться системами предотвращения пожара и противопожарной защиты, в том числе организационно-техническими мероприятиями.

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

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

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

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

Организационно-технические мероприятия должны включать:

  •  организацию пожарной охраны, организацию ведомственных служб пожарной безопасности;
  •  паспортизацию веществ, материалов, изделий, технологических процессов, зданий и сооружений объектов в части обеспечения пожарной безопасности;
  •  организацию обучения работающих правилам пожарной безопасности на производстве, а населения - в порядке, установленном правилами пожарной безопасности соответствующих объектов пребывания людей;
  •  разработку и реализацию норм и правил пожарной безопасности, инструкций о порядке обращения с пожароопасными веществами и материалами, о соблюдении противопожарного режима и действиях людей при возникновении пожара;
  •  изготовление и применение средств наглядной агитации по обеспечению пожарной безопасности;
  •  порядок хранения веществ и материалов, тушение которых недопустимо одними и теми же средствами, в зависимости от их физико-химических и пожароопасных свойств;
  •  нормирование численности людей на объекте по условиям безопасности их при пожаре;
  •  разработку мероприятий по действиям администрации, рабочих, служащих и населения на случай возникновения пожара и организацию эвакуации людей;
  •  противопожарная профилактика для  рассматриваемого помещения:
  •  наличие двух ручных порошковых огнетушителей, марки ОП-2М, предназначенных для тушения загорания с расстояния 2 м, при температуре 40-50 °С. Огнетушители хранятся в защищенном от солнечных лучей и нагревательных приборов месте, хорошо доступном при возникновении возгорания;
  •  для отопления помещений используется центральное водяное отопление;
  •  установлена система электрической пожарной сигнализации, два тепловых пожарных излучателя реагируют на повышение температуры окружающей среды до значения 80°С и выше в радиусе 3 м.

Для помещений вычислительных центров рекомендуется использовать тепловые пожарные излучатели типа ДТЛ, АТП-ЗМ и др.

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


Заключение

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

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

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

Для реализации поставленной цели наиболее эффективно было использовать смешанный подход программирования.

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

В соответствии с поставленными задачами разработка была разделена на этапы. Для реализации которых использовались следующие программные средства: язык программирования Java и СУБД MySQL.

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

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

При необходимости возможна модернизация и усовершенствование системы путем расширения базы данных и разработки соответствующих Java -скриптов.

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

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


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

  1.  Боуман, Дж. С. Практическое руководство по SQL / Дж. С. Боуман, С. Л. Эмерсон, М. Дарновски. – М.: Вильямс, 2005. – 311 с.
  2.  Васвани, В. MySQL: использование и администрирование. –  СПб.: Питер, 2011. – 368 с.
  3.  Вин, Дж. Искусство веб-дизайна. Самоучитель. – СПб.: Питер, 2002. – 224 с.
  4.  Ворошилова, А.В. Введение в информационный бизнес: учеб. пособие для вузов / В.П. Тихомирова, А.В. Ворошилова. – М.: Финансы и статистика, 2006.
  5.  Горев, А. Эффективная работа с СУБД / А. Горев, Р. Ахаян, С. Макашарипов. – СПб.: Питер, 2007.
  6.  ГОСТ 12.0.002 Система стандартов безопасности труда. Термины и определения.
  7.  ГОСТ 12.1.003 ССБТ Шум и вибрация.
  8.  ГОСТ 12.1.038 Электробезопасность. Предельно допустимые значения напряжений прикосновения и токов.
  9.  ГОСТ 12.1.004 Пожарная безопасность.
  10.  ГОСТ 12.1.005 Общие санитарно-гигиенические требования к воздуху рабочей зоны.
  11.  ГОСТ 12.1.009 Электробезопасность. Термины и определения.
  12.  ГОСТ 12.4.124 Средства защиты от статического электричества. Общие технические требования.
  13.  ГОСТ 2.104–2006 Единая система конструкторской документации. Основные надписи.
  14.  ГОСТ 2.105–95 Единая система конструкторской документации. Общие требования к текстовым документам.
  15.  Грабер, М. SQL. – М.: Лори, 2009. – 643 с.
  16.  Дейт, К. Введение в системы баз данных. – СПб.: Питер, 2001. – 302 с.
  17.  Карлсон, Д. Eclipse. - М.: Лори, 2010. – 354 с.
  18.  Маклаков, С.В. Моделирование бизнес-процессов с BPwin 4.0. – М.: ДИАЛОГ-МИФИ, 2002. – 224 с.
  19.  Маторин, С.И., Корзун С.С. Сравнительный анализ технологий моделирования бизнес-систем // Проблеми програмування. – 2006. – № 1. – С.24.
  20.  Методические указания к выполнению дипломного проекта для студентов специальностей 1 40 01 01 «Программное обеспечение информационных технологий», 1 40 01 02 «Информационные системы и технологии», 1 53 01 02 «Автоматизированные системы обработки информации» / Сост. В.И.Лакин, И.А.Бухвалова, Ю.Б.Попова. – Минск.: БНТУ, 2011. – 30 с.
  21.  Райман, А. Eclipse. Платформа Web-инструментов / А. Райман, Л. Мандел, Н. Дей. – М.: Кудиц-образ, 2010. – 688 с.
  22.  Рудикова, Л.В. Проектирование баз данных. – Гродно: ГрГУ,.2007. – 345 с.
  23.  СанПиН 9-131 РБ Гигиенические требования к видеодисплейным терминалам, электронно-вычислительным машинам и организации работы.
  24.  Свободная энциклопедия Википедия [Электронный ресурс] – 2011. – Режим доступа: http://ru.wikipedia.org, свободный. – Загл. с экрана. – Яз. рус., англ.
  25.  Скотт, Б. Проектирование веб-интерфейсов. Самоучитель / Б. Скотт, Т. Нейл. – СПб.: Символ, 2010. – 352 с.
  26.  СНБ 2.04.05 Естественное и искусственное освещение.
  27.  Учебный центр «Интерфейс» [Электронный ресурс] – 2009. – Режим доступа: http://www.interface.ru, свободный. – Загл. с экрана. – Яз. рус., англ.
  28.  Электронное учебное пособие для проведения практических занятий по курсу «Информационные технологии» [Электронный ресурс] – 2010. – Режим доступа: http://mexmat.sgu.ru/sites/chairs/prinf/materials/java/lesson1.htm, свободный. – Загл. с экрана. – Яз. рус., англ.


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

Рисунок А.1 – Концептуальная модель данных

Рисунок А.2 – Логическая модель данных


Рисунок А.3 – Физическая модель данных


Приложение Б
Диаграмма вариантов использования

Рисунок Б.1 – Диаграмма вариантов использования для гостя, клиента, модератора и администратора


Приложение В
Листинг программы       

package by.univer.common.application;

import java.util.ResourceBundle;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import by.univer.common.dao.impl.GenericDAO;

import by.univer.common.exception.SecurityInitException;

import by.univer.common.security.ISecurity;

import by.univer.common.service.CommonService;

public class BaseApplication {

/** The ANALYTICS_ENABLE. */

private static final String ANALYTICS_ENABLE = "analytics.enable";

/** The SHOW_AD. */

private static final String SHOW_AD = "show.ad";

/** The VERSION2. */

private static final String APP_VERSION = "version";

/** The SECURITY_CLASS. */

private static final String SECURITY_CLASS = "security.class";

private static final String MANAGER_PACKAGE = "manager.package";

private static final String BO_PACKAGE = "bo.package";

/** The BASE_PATH. */

private static final String BASE_PATH = "base.path";

/** The DAO. */

private static final String DAO = "DAO";

/** The SERVICE. */

private static final String SERVICE = "Service";

/** The APPLICATION_CONFIG_PATH. */

private static final String APPLICATION_CONFIG_PATH = "application.config.path";

public static final String CONFIG = "application_config";

private String basePath;

private String managerPackage;

private String boPackage;

private String applicationConfigPath;

private String securityClassName;

private static BaseApplication application;

private ApplicationContext applicationContext;

private ISecurity permissionChecker;

private String version;

private Boolean showAd;

private Boolean analyticsEnable;

private BaseApplication() {

 parseConfig();

 applicationContext = initApplicationContext(); }

private void parseConfig() {

 ResourceBundle applicationConfig = ResourceBundle.getBundle(CONFIG);

 basePath = applicationConfig.getString(BASE_PATH);

 managerPackage = applicationConfig.getString(MANAGER_PACKAGE);

 boPackage = applicationConfig.getString(BO_PACKAGE);

 applicationConfigPath = applicationConfig.getString(APPLICATION_CONFIG_PATH);

 version = applicationConfig.getString(APP_VERSION);

 showAd = Boolean.valueOf(applicationConfig.getString(SHOW_AD));

 analyticsEnable = Boolean.valueOf(applicationConfig.getString(ANALYTICS_ENABLE));

 if (applicationConfig.containsKey(SECURITY_CLASS)) {

  securityClassName = applicationConfig.getString(SECURITY_CLASS);

  try{

   Class<?> c = Class.forName(securityClassName);

   permissionChecker = (ISecurity) c.newInstance();

  } catch (Exception e) {

   throw new SecurityInitException(e); }}}

public static BaseApplication getInstanse() {

 if (application == null)

  application = new BaseApplication();

 return application; }

public CommonService getService(String entityName) {

 return (CommonService) applicationContext.getBean(entityName + SERVICE);

public GenericDAO getDao(String entityName) {

 return (GenericDAO) applicationContext.getBean(entityName + DAO);}

public ApplicationContext initApplicationContext() {

 return new ClassPathXmlApplicationContext(applicationConfigPath); }

public String getBasePath() {

 return basePath; }

public String getManagerPackage() {

 return managerPackage; }

public String getBoPackage() {

 return boPackage; }

public ISecurity getSecurity() {

 return permissionChecker;  }

public String getVersion() {

 return version; }

 public Boolean getShowAd() {

 return showAd; }

public Boolean getAnalyticsEnable() {

 return analyticsEnable; }}

package by.univer.common.bo;

public abstract class AbstractEntity {

public abstract Long getId();

public abstract void setId(Long id);}

package by.univer.common.dao.impl;

import java.lang.reflect.ParameterizedType;

import java.util.HashMap;

import java.util.List;

import org.hibernate.Criteria;

import org.hibernate.Query;

import org.hibernate.Session;

import org.hibernate.criterion.Projections;

import org.springframework.orm.hibernate3.HibernateTemplate;

import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import by.univer.common.dao.interfaces.IGenCriteria;

import by.univer.common.dao.interfaces.IGenParam;

import by.univer.common.dao.interfaces.IGenericDAO;

import by.univer.common.dao.interfaces.IInitCriteria;

import by.univer.common.struts.form.CommonListForm;

public class GenericDAO<T> extends HibernateDaoSupport implements IGenericDAO<T>{

public static final int PORTION = 10;

private Class<T> persistentClass;

protected Class<T> getPersistentClass() {

 if (persistentClass == null)

  persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];

 return persistentClass; }

@Override

public T add(T entity) {

 getHibernateTemplate().persist(entity);

 return entity; }

@Override

public T get(Long id) {

 return (T) getHibernateTemplate().get(getPersistentClass(), id); }

@Override

public Long getCount() {

 return getCount(null, null); }

@Override

public Long getCount(IInitCriteria initCriteria) {

 return getCount(null, initCriteria); }

@Override

public Long getCount(CommonListForm listForm,  IInitCriteria initCriteria) {

 Session session = getSession();

 Criteria criteria = session.createCriteria(getPersistentClass());

 criteria.setCacheable(true);

 criteria.setProjection(Projections.rowCount());

 if (initCriteria != null) {

  initCriteria.initCriteria(listForm, criteria);  }

 List list = criteria.list();

 if (list != null && list.isEmpty()) {

  return 0L;  }

 Long count = (Long) list.get(0);

 return (Long) count; }

@Override

public Session getHibernateSession() {

 return getSession(); }

@Override

public List<T> getList() {

 HibernateTemplate hibernateTemplate = getHibernateTemplate();

 hibernateTemplate.setCacheQueries(true);

 return hibernateTemplate.loadAll(getPersistentClass()); }

@Override

public List<T> getList(Integer pageNumber) {

 return getList(pageNumber, null, null); }

@Override

public List<T> getList(Integer pageNumber, IInitCriteria initCriteria) {

 return getList(pageNumber, null, initCriteria); }

@Override

public List<T> getList(Integer pageNumber, CommonListForm listForm,  IInitCriteria initCriteria) {

 Session session = getSession();

 Criteria criteria = session.createCriteria(getPersistentClass());

 criteria.setCacheable(true);

 if (pageNumber == null) {

  pageNumber = 0;  }

 criteria.setFirstResult(PORTION * pageNumber);

 criteria.setMaxResults(PORTION);

 if (initCriteria != null) {

  initCriteria.initCriteria(listForm, criteria);  }

 final List list = criteria.list();

 if (list.isEmpty())

  return null;

 return list; }

@Override

public List<T> getList(IGenCriteria genCriteria) {

 Session session = getSession();

 Criteria criteria = session.createCriteria(getPersistentClass());

 criteria.setCacheable(true);

 if (genCriteria != null) {

  genCriteria.generateCriteria(criteria);  }

 final List list = criteria.list();

 if (list.isEmpty())

  return null;

 return list; }  

@Override

public List<HashMap> getList(String namedQuery, IGenParam genParam) {

 Session session = getSession();

 Query query = session.getNamedQuery(namedQuery);  

 if (genParam != null) {

  genParam.generateParam(query);  }

 query.setReadOnly(true);

 query.setResultTransformer(Criteria.ALIAS_TO_ENTITY_MAP);

 return query.list(); }

@Override

public void remove(T entity) {

 getHibernateTemplate().delete(entity); }

@Override

public void saveOrUpdate(T entity) {

 getHibernateTemplate().saveOrUpdate(entity); }

@Override

public void update(T entity) {

 getHibernateTemplate().update(entity); }

@Override

public void removeById(Long id) {

 final Session session = getSession();

 String hqlQuery = "delete from " + getPersistentClass().getSimpleName() + " where id = :id";

 Query query = session.createQuery(hqlQuery);

 query.setLong("id", id);

 Integer row = query.executeUpdate(); }

@Override

public void removeByCondition(String condition, IGenParam genParam) {

 final Session session = getSession();

 String hqlQuery = "delete from " + getPersistentClass().getSimpleName() + " where " + condition;

 Query query = session.createQuery(hqlQuery);

 genParam.generateParam(query);

 Integer row = query.executeUpdate(); }

package by.univer.common.dao.interfaces;

import org.hibernate.Criteria;

public interface IGenCriteria {

void generateCriteria(Criteria criteria);}

package by.univer.common.dao.interfaces;

import java.util.HashMap;

import java.util.List;

import org.hibernate.Session;

import by.univer.common.struts.form.CommonListForm;

public interface IGenericDAO<T> {

List<T> getList();

List<T> getList(Integer pageNumber);

void update(T entity);

T add(T entity);

void remove(T entity);

T get(Long id);

Long getCount();

void saveOrUpdate(T entity);

Session getHibernateSession();

List<HashMap> getList(String namedQuery, IGenParam genParam);

void removeById(Long id);

List<T> getList(Integer pageNumber, CommonListForm listForm, IInitCriteria initCriteria);

Long getCount(CommonListForm listForm, IInitCriteria initCriteria);

List<T> getList(Integer pageNumber, IInitCriteria initCriteria);

void removeByCondition(String condition, IGenParam genParam);

List<T> getList(IGenCriteria genCriteria);

Long getCount(IInitCriteria initCriteria);}

package by.univer.common.dao.interfaces;

import org.hibernate.Query;

publicinterface IGenParam {

 void generateParam(Query q);}

package by.univer.common.dao.interfaces;

import org.hibernate.Criteria;

import by.univer.common.struts.form.CommonListForm;

public interface IInitCriteria {

void initCriteria(CommonListForm listForm, Criteria criteria);}

package by.univer.common.exception.handler;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.action.ExceptionHandler;

import org.apache.struts.config.ExceptionConfig;

import by.univer.common.exception.ValidationException;

public class ValidateExceptionHandler extends ExceptionHandler{

@Override

public ActionForward execute(Exception ex, ExceptionConfig ae,

  ActionMapping mapping, ActionForm formInstance,

  HttpServletRequest request, HttpServletResponse response)

  throws ServletException {

 ValidationException validationException = (ValidationException) ex;

 request.setAttribute("key", validationException.getMessage());

 ActionForward af;

 if (request.getParameter("ajax") != null) {

  af = mapping.findForward("validateException");

 } else {

  request.setAttribute("forwardPath", "exception/validate");

  af = mapping.findForward("index");  }

 return af; }}

package by.univer.common.exception;

public class ManagerNotFoundException extends Exception {}

package by.univer.common.exception;

public class PermissionException extends Exception {}

package by.univer.common.exception;

public class SecurityInitException extends RuntimeException {

public SecurityInitException() {

 super(); }

public SecurityInitException(String message, Throwable cause) {

 super(message, cause); }

public SecurityInitException(String message) {

 super(message); }

public SecurityInitException(Throwable cause) {

 super(cause); }}

package by.univer.common.exception;

public class ValidationException extends RuntimeException {

private String field;

 public ValidationException() {

 super(); }

public ValidationException(String message, Throwable cause) {

 super(message, cause); }

public ValidationException(String message) {

 super(message); }

public ValidationException(Throwable cause) {

 super(cause); }

 public String getField() {

 return field; }

 public void setField(String field) {

 this.field = field;

} }

package by.univer.common.manager;

import javax.servlet.http.HttpServletRequest;

import by.univer.common.dao.impl.GenericDAO;

import by.univer.common.manager.interfaces.IInitManager;

import by.univer.common.struts.form.CommonDetailForm;

import by.univer.common.struts.form.CommonForm;

public class CommonInitAddManager extends BaseManager implements IInitManager {

private Boolean custom = false;

@Override

public void manage(HttpServletRequest request, CommonForm form,

  String entityName, String[] urlParams) {

 super.manage(request, form, entityName, urlParams);

 if (custom) {

  service.initAdd(this, (CommonDetailForm) form);  } }

public void init(GenericDAO genericDAO, CommonDetailForm form){ }

public Boolean getCustom() {

 return custom; }

public void setCustom(Boolean custom) {

 this.custom = custom; }}

package by.univer.common.security;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

public class CommonPermissionChecker implements ISecurity {

private HashMap<String, List<String>> ruleStorage;

public CommonPermissionChecker() {

 super();

 this.ruleStorage = new HashMap<String, List<String>>(); }

public void addRule(String action, String... roles) {

 List<String> list = ruleStorage.get(action);

 if (list == null) {

  list = new ArrayList<String>();

  ruleStorage.put(action, list);  }

 for (String role : roles) {

  list.add(role);  } }

public void addEditRule(String entity, String... roles) {

 addRule(entity+"/add", roles);

 addRule(entity+"/edit", roles);

 addRule(entity+"/initAdd", roles);

 addRule(entity+"/initEdit", roles);

 addRule(entity+"/remove", roles); }

@Override

public Boolean check(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) {

 String path = mapping.getPath();

 if (path != null){

  String[] values = path.split("/");

  String action = "";

  if (values.length > 2) {

   action = values[1] + "/" + values[2];

  } else {

   action = values[1];   }

  request.setAttribute("action", action);

  List<String> listRole = ruleStorage.get(action);

  if (listRole != null) {

   String role = (String) request.getSession().getAttribute("role");

   return listRole.contains(role);   }  }

 return true; }}

package by.univer.common.security;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionMapping;

public interface ISecurity {

Boolean check(ActionMapping mapping, ActionForm form,

        HttpServletRequest request, HttpServletResponse response);}

package by.univer.common.service;

import java.util.List;

import org.hibernate.Session;

import by.univer.common.dao.impl.GenericDAO;

import by.univer.common.dao.interfaces.IInitCriteria;

import by.univer.common.manager.CommonAddManager;

import by.univer.common.manager.CommonDetailManager;

import by.univer.common.manager.CommonEditManager;

import by.univer.common.manager.CommonInitAddManager;

import by.univer.common.manager.CommonInitEditManager;

import by.univer.common.struts.form.CommonAddForm;

import by.univer.common.struts.form.CommonDetailForm;

import by.univer.common.struts.form.CommonEditForm;

import by.univer.common.struts.form.CommonListForm;

public class CommonService <T> {

protected GenericDAO<T> genericDAO;

public GenericDAO<T> getGenericDAO() {

 return genericDAO; }

protected Session getSession(){

 return this.genericDAO.getHibernateSession(); }

public void setGenericDAO(GenericDAO<T> genericDAO) {

 this.genericDAO = genericDAO; }

public List<T> getList() {

 return genericDAO.getList(); }

public List<T> getList(Integer pageNumber) {

 return genericDAO.getList(pageNumber); }

public List<T> getList(Integer pageNumber, IInitCriteria initCriteria) {

 return genericDAO.getList(pageNumber, initCriteria); }

public void getList(CommonListForm listForm, IInitCriteria initCriteria) {

 List<T> list = genericDAO.getList(listForm.getPageNumber(), listForm, initCriteria);

 listForm.setList(list);

 listForm.setCount(genericDAO.getCount(listForm, initCriteria)); }

public void update(T entity) {

 genericDAO.update(entity); }

public T add(T entity) {

 return genericDAO.add(entity); }

public void add(CommonAddForm addForm,  CommonAddManager addManager) {

 addManager.beforeAdd(addForm);

 T model = genericDAO.add((T)addForm.getModel());

 addForm.setModel(model);

 addManager.afterAdd(addForm); }

public void update(CommonEditForm editForm, CommonEditManager editManager) {

 editManager.beforeEdit(editForm);

 genericDAO.update((T)editForm.getModel());

 editManager.afterEdit(editForm); }

public void saveOrUpdate(T entity) {

 genericDAO.saveOrUpdate(entity); }

public void remove(T entity) {

 genericDAO.remove(entity); }

public void removeById(Long id) {

 genericDAO.removeById(id); }

public void remove(Long[] ids) {

 if (ids != null)

  for (Long id : ids) {

   final T entity = genericDAO.get(id);

   if (entity != null)

    genericDAO.remove(entity);   } }

public T get(Long id) {

 return genericDAO.get(id); }

public void initDetail(Long id, CommonDetailManager manager, CommonDetailForm form) {

 manager.beforeInit(form);

 form.setId(id);

 form.setModel(genericDAO.get(id));

 manager.afterInit(form); }

public void initEdit(Long id, CommonInitEditManager manager, CommonDetailForm form) {

 form.setModel(genericDAO.get(id));

 manager.init(genericDAO, form); }

public Long getCount() {

 return genericDAO.getCount(); }

public void initAdd(CommonInitAddManager manager, CommonDetailForm form) {

 manager.init(genericDAO, form); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class AddAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.apache.struts.actions.DispatchAction;

import org.springframework.dao.DataIntegrityViolationException;

import by.univer.common.application.BaseApplication;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.exception.PermissionException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

import by.univer.common.util.Validator;

public class BaseDispatchAction extends DispatchAction {

private static final String BASE_PATH = "basePath";

/** The STRING. */

private static final String EMPTY = "";

/** The UTF_8. */

private static final String UTF_8 = "UTF-8";

/** The SUCCESS_FORWARD. */

public static final String SUCCESS = "success";

/** The INDEX_FORWARD. */

public static final String INDEX = "index";

public ActionForward execute(ActionMapping mapping, ActionForm form,

        HttpServletRequest request, HttpServletResponse response)

        throws Exception {

 if (form instanceof CommonForm) {

  CommonForm commonForm = (CommonForm)form;

  commonForm.initRequest(request);

  commonForm.initResponse(response);  }

 if (!BaseApplication.getInstanse().getSecurity().check(mapping, form, request, response)){

  throw new PermissionException(); };

 request.setAttribute(BASE_PATH, BaseApplication.getInstanse().getBasePath());

       ActionForward af = null;        try {

af = super.execute(mapping, form, request, response);

 } catch (DataIntegrityViolationException e) {

  Validator.checkException(e);

  throw e;  }

       response.setCharacterEncoding(UTF_8);

       if (request.getParameter("ajax") == null) {

return mapping.findForward(INDEX);        }

       return af; }

protected String getMethodName(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response,

  String parameter) throws Exception {

 request.setCharacterEncoding(UTF_8);

 final String methodName = request.getParameter(parameter);

 return !EMPTY.equals(methodName) ? methodName : null; }

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class DetailAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); } }

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class EditAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class InitAddAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class InitEditAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class ListAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.manager.ManagerFactory;

import by.univer.common.struts.form.CommonForm;

public class RemoveAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 ManagerFactory.getInstance().callManager(mapping, request, (CommonForm)form);

 return mapping.findForward(SUCCESS); }}

package by.univer.common.struts.form;

public class CommonAddForm extends CommonDetailForm {}

package by.univer.common.struts.form;

public class CommonDetailForm extends CommonForm {

private Long id;

public Long getId() {

 return id; }

public void setId(Long id) {

 this.id = id; }

private Object model;

public Object getModel() {

 return model; }

 public void setModel(Object model) {

 this.model = model; }}

package by.univer.common.struts.form;

public class CommonEditForm extends CommonDetailForm {}

package by.univer.common.struts.form;

import javax.servlet.http.Cookie;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

import org.apache.struts.action.ActionForm;

public class CommonForm extends ActionForm {

private HttpServletRequest request;

private HttpServletResponse response;

public void initRequest(HttpServletRequest request){

 this.request = request; }

public void initResponse(HttpServletResponse response){

 this.response = response; }

public void putAttribute(String value, Object object) {

 request.setAttribute(value, object); }

public void putSessionAttribute(String value, Object object) {

 request.getSession().setAttribute(value, object); }

public Object getAttribute(String value) {

 return request.getAttribute(value); }

public Object getSessionAttribute(String value) {

 HttpSession session = request.getSession();

 return session.getAttribute(value); }

public String getParameter(String key) {

 return request.getParameter(key); }

public String[] getParameterValues(String key) {

 return request.getParameterValues(key); }

public String getCookie(String key){

 Cookie[] cookies = request.getCookies();

 if (cookies != null) {

  for (Cookie cookie : cookies) {

   if (cookie.getName().equals(key)){

    return cookie.getValue(); } } } return null; }

public void addCookie(String key, String value) {

 Cookie cookie = new Cookie(key, value);

 cookie.setMaxAge(999999999);

 response.addCookie(cookie); }}

package by.univer.common.struts.form;

public class CommonInitAddForm extends CommonDetailForm {}

package by.univer.common.struts.form;

publicclassCommonInitEditFormextends CommonDetailForm {}

package by.univer.common.struts.form;

import java.util.List;

public class CommonListForm extends CommonForm {

private List list;

private Integer pageNumber = 0;

private Long count;

 public Integer getPageNumber() {

 return pageNumber; }

 public void setPageNumber(Integer pageNumber) {

 this.pageNumber = pageNumber; }

public List getList() {

 return list; }

public void setList(List list) {

 this.list = list; }

 public Long getCount() {

 return count; }

public void setCount(Long count) {

 this.count = count; }}

package by.univer.common.struts.form;

public class CommonRemoveForm extends CommonForm {

private Long id;

public Long getId() {

 return id; }

public void setId(Long id) {

 this.id = id; }}

package by.univer.common.util;

public class ActionTime {

private String name;

private long start;

private long createTime;

public ActionTime(String name) {

 this.name = name;

 this.createTime = System.currentTimeMillis(); }

public void start() {

 this.start = System.currentTimeMillis(); }

public void printResult() {

 System.out.println(name + ": " + (System.currentTimeMillis() - this.start)); }

public void printSummary() {

 System.out.println(name + "[summary]: " + (System.currentTimeMillis() - this.createTime));}}

package by.univer.common.util;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts.util.RequestUtils;

public class ReflectUtil {

public static Object initModel(String boPackage, HttpServletRequest request, String entityName, Boolean disableRequestUtil) {

 Object model = null;

 try {

  Class<?> c = Class.forName(boPackage + "." + StringUtil.upperCaseFirstCharacter(entityName));

  model = c.newInstance();

 } catch (ClassNotFoundException e) {

  e.printStackTrace();

 } catch (InstantiationException e) {

  e.printStackTrace();

 } catch (IllegalAccessException e) {

  e.printStackTrace();  }

 if (!disableRequestUtil) {

  try {

   RequestUtils.populate(model, request);

  } catch (ServletException e) {

   e.printStackTrace();   }  }

 return model; }

public static Object initModel(String boPackage, HttpServletRequest request, String entityName) {

 return initModel(boPackage, request, entityName, false); }}

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<queryname="getCommentsCount">

<query-paramname="products"type="java.util.List"/>

 SELECT

  pc.product.id as id,

  count(pc.id) as count

 FROM

  ProductComment as pc

 WHERE

  pc.product IN (:products)

 GROUP BY

  pc.product

</query>

</hibernate-mapping>

<?xmlversion="1.0"?>

<!DOCTYPEhibernate-mappingPUBLIC

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

<queryname="getAvgRating">

<query-paramname="products"type="java.util.List"/>

 SELECT

  pr.product.id as id,

  avg(value) as rating,

  sum(value) as balls

 FROM

  ProductRating as pr

 WHERE

  pr.product IN (:products)

 GROUP BY

  pr.product

</query>

<queryname="getDetailRating">

<query-paramname="productId"type="java.lang.Long"/>

 SELECT

  sum(pr.value) as sumValue,

  pr.rating.id as id,

  pr.rating.name as name,

  avg(pr.value) as avgValue

 FROM

  ProductRating as pr

 WHERE

  pr.product.id = :productId

 GROUP BY

  pr.rating

</query>

<queryname="getHashCount">

<query-paramname="productId"type="java.lang.Long"/>

 SELECT

  pr.id as id

 FROM

  ProductRating as pr

 WHERE

  pr.product.id = :productId

  and pr.hash is not null

 GROUP BY

  pr.hash

</query>

<queryname="getUserCount">

<query-paramname="productId"type="java.lang.Long"/>

 SELECT

  pr.id as id

 FROM

  ProductRating as pr

 WHERE

  pr.product.id = :productId

  and pr.user.id is not null

 GROUP BY

  pr.user

</query>

</hibernate-mapping>

package by.univer.pccard.security;

publicenum Role {

 USER, ADMIN, MODERATOR }

package by.univer.pccard.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import org.hibernate.Criteria;

import org.hibernate.criterion.Order;

import by.univer.common.application.BaseApplication;

import by.univer.common.dao.interfaces.IInitCriteria;

import by.univer.common.exception.ManagerNotFoundException;

import by.univer.common.struts.action.BaseDispatchAction;

import by.univer.common.struts.form.CommonListForm;

import by.univer.pccard.service.IndexService;

public class IndexAction extends BaseDispatchAction {

private IndexService service;

private IInitCriteria newsCriteria = new IInitCriteria() {

 @Override

 public void initCriteria(CommonListForm listForm, Criteria criteria) {

  criteria.addOrder(Order.desc("createDate"));  } };

public IndexAction() {

 super();

 this.service = (IndexService) BaseApplication.getInstanse().getService("index"); }

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 service.init(request);

 return mapping.findForward(INDEX); }

public ActionForward type(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws InstantiationException, IllegalAccessException, ManagerNotFoundException {

 service.initListByType(request);

 return mapping.findForward(INDEX); }}

package by.univer.pccard.struts.action;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;

import org.apache.struts.action.ActionForward;

import org.apache.struts.action.ActionMapping;

import by.univer.common.application.BaseApplication;

import by.univer.common.struts.action.BaseDispatchAction;

import by.univer.common.util.Validator;

import by.univer.pccard.bo.User;

import by.univer.pccard.exception.AuthorizationException;

import by.univer.pccard.service.UserService;

import by.univer.pccard.struts.form.LoginForm;

public class LoginAction extends BaseDispatchAction {

public ActionForward unspecified(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) {

 request.setAttribute("forwardPath", "user/login");

 return mapping.findForward(INDEX); }

public ActionForward submit(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws AuthorizationException {

 Validator.email(request, "email");

 Validator.empty(request, "password");

 Validator.lengthGe(request, "password", 5);  

 request.setAttribute("forwardPath", "user/loginSubmit");

 LoginForm loginForm = (LoginForm)form;

 UserService service = (UserService) BaseApplication.getInstanse().getService("user");

 User user = service.login(loginForm.getEmail(), loginForm.getPassword());

 if (user != null) {

  request.getSession().setAttribute("user", user);

  request.getSession().setAttribute("role", user.getRole().name());

 } else {

  throw new AuthorizationException();  }

 return mapping.findForward("loginSubmit"); }

public ActionForward exit(ActionMapping mapping, ActionForm form,

  HttpServletRequest request, HttpServletResponse response) throws AuthorizationException {

 request.setAttribute("forwardPath", "user/exit");

 request.getSession().invalidate();

 return mapping.findForward(INDEX); }}

package by.univer.pccard.struts.form;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {

private String email;

private String password;

 public String getEmail() {

 return email; }

public void setEmail(String email) {

 this.email = email; }

public String getPassword() {

 return password; }

 public void setPassword(String password) {

 this.password = password; } }

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"xmlns:util="http://www.springframework.org/schema/util"xmlns:j2ee="http://www.springframework.org/schema/jee"

xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

      http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-2.5.xsd

      http://www.springframework.org/schema/jee   http://www.springframework.org/schema/jee/spring-jee-2.5.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<beanid="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">

 <propertyname="locations">

  <list>

   <value>classpath:application_config.properties</value>

  </list>

 </property>

</bean>

<beanid="pccardDataSource"class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">

 <propertyname="driverClassName"value="org.gjt.mm.mysql.Driver"/>

<propertyname="url"value="jdbc:mysql://localhost/${jdbc.scheme}?autoReconnect=true&amp;allowMultiQueries=true&amp;characterEncoding=UTF-8&amp;characterSetResults=UTF-8"/>

 <propertyname="username"value="${jdbc.user}"/>

 <propertyname="password"value="${jdbc.password}"/>

 <propertyname="defaultAutoCommit"value="false"/>

</bean>

<importresource="spring-hibernate-pccard.xml"/>

</beans>

<?xmlversion="1.0"encoding="UTF-8"?>

<beansxmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:tx="http://www.springframework.org/schema/tx"

xmlns:aop="http://www.springframework.org/schema/aop"xmlns:util="http://www.springframework.org/schema/util"xmlns:j2ee="http://www.springframework.org/schema/jee"

xmlns:p="http://www.springframework.org/schema/p"xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd

      http://www.springframework.org/schema/util  http://www.springframework.org/schema/util/spring-util-2.5.xsd

      http://www.springframework.org/schema/jee   http://www.springframework.org/schema/jee/spring-jee-2.5.xsd

      http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd

      http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<beanid="pccardSessionFactory"class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

 <propertyname="dataSource"ref="pccardDataSource"/>

 <propertyname="hibernateProperties">

  <props>

<propkey="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</prop>

   <propkey="hibernate.connection.charSet">utf-8</prop>

   <propkey="hibernate.show_sql">true</prop>

<propkey="hibernate.current_session_context_class">thread</prop>

<propkey="hibernate.transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</prop>

<propkey="hibernate.transaction.flush_before_completion">true</prop>

   <propkey="hibernate.connection.release_mode">auto</prop>

   <propkey="hibernate.max_fetch_depth">0</prop>

 <propkey="hibernate.order_updates">true</prop>

 <propkey="hibernate.order_inserts">true</prop>

 <propkey="hibernate.default_batch_fetch_size">8</prop>

 <propkey="hibernate.jdbc.fetch_size">50</prop>

 <propkey="hibernate.jdbc.batch_size">50</prop>

 <propkey="hibernate.connection.pool_size">1</prop>

 <propkey="hibernate.bytecode.use_reflection_optimizer">true</prop>

 <propkey="hibernate.hbm2ddl.auto">update</prop>

<propkey="hibernate.cache.provider_class">org.hibernate.cache.SingletonEhCacheProvider</prop>

<propkey="hibernate.cache.provider_configuration">classpath:ehcache.xml</prop>

<propkey="hibernate.cache.use_second_level_cache">true</prop>

   <propkey="hibernate.cache.use_query_cache">true</prop>

 <!--   <prop key="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>

   <prop key="hibernate.cache.use_second_level_cache">true</prop>

 <prop key="hibernate.c3p0.min_size">1</prop>

   <prop key="hibernate.c3p0.max_size">1</prop>

   <prop key="hibernate.c3p0.timeout">300</prop>

   <prop key="hibernate.c3p0.max_statements">50</prop>

   <prop key="hibernate.c3p0.acquire_increment">2</prop>

   <prop key="hibernate.c3p0.idle_test_period">20</prop>

   <prop key="hibernate.c3p0.validate">false</prop>

<prop key="hibernate.c3p0.preferredTestQuery">select current_timestamp;</prop> -->

</props>  </property>

<propertyname="mappingLocations"value="classpath:/by/univer/pccard/queries/*.hbm.xml"/>

 <propertyname="annotatedClasses">

  <list>

   <value>by.univer.pccard.bo.Features</value>

   <value>by.univer.pccard.bo.MenuComponent</value>

   <value>by.univer.pccard.bo.News</value>

   <value>by.univer.pccard.bo.Product</value>   

   <value>by.univer.pccard.bo.ProductFeatures</value>  

   <value>by.univer.pccard.bo.ProductMenuComponent</value>

   <value>by.univer.pccard.bo.ProductType</value>

   <value>by.univer.pccard.bo.ProductImage</value>

   <value>by.univer.pccard.bo.ProductComment</value>

   <value>by.univer.pccard.bo.Rating</value>

   <value>by.univer.pccard.bo.ProductRating</value>

   <value>by.univer.pccard.bo.User</value>       <value>by.univer.pccard.bo.Purchase</value>       <value>by.univer.pccard.bo.Ticket</value>      </list>

 </property>

</bean>

<beanid="featuresDAO"class="by.univer.pccard.dao.FeaturesDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="featuresService"class="by.univer.pccard.service.FeaturesService">

 <propertyname="genericDAO"ref="featuresDAO"/>

</bean>

<beanid="purchaseDAO"class="by.univer.pccard.dao.PurchaseDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="purchaseService"class="by.univer.pccard.service.PurchaseService">

 <propertyname="genericDAO"ref="purchaseDAO"/>

</bean>

<beanid="ticketDAO"class="by.univer.pccard.dao.TicketDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="ticketService"class="by.univer.pccard.service.TicketService">

 <propertyname="genericDAO"ref="ticketDAO"/>

</bean>

<beanid="menuComponentDAO"class="by.univer.pccard.dao.MenuComponentDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="menuComponentService"class="by.univer.pccard.service.MenuComponentService">

 <propertyname="genericDAO"ref="menuComponentDAO"/>

</bean>

<beanid="newsDAO"class="by.univer.pccard.dao.NewsDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="newsService"class="by.univer.pccard.service.NewsService">

 <propertyname="genericDAO"ref="newsDAO"/>

</bean>

<beanid="productDAO"class="by.univer.pccard.dao.ProductDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productService"class="by.univer.pccard.service.ProductService">

 <propertyname="genericDAO"ref="productDAO"/>

</bean>

<beanid="productFeaturesDAO"class="by.univer.pccard.dao.ProductFeaturesDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productFeaturesService"class="by.univer.pccard.service.ProductFeaturesService">

 <propertyname="genericDAO"ref="productFeaturesDAO"/>

</bean>

<beanid="productMenuComponentDAO"class="by.univer.pccard.dao.ProductMenuComponentDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productMenuComponentService"class="by.univer.pccard.service.ProductMenuComponentService">

 <propertyname="genericDAO"ref="productMenuComponentDAO"/>

</bean>

<beanid="productTypeDAO"class="by.univer.pccard.dao.ProductTypeDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productTypeService"class="by.univer.pccard.service.ProductTypeService">

 <propertyname="genericDAO"ref="productTypeDAO"/>

</bean>

<beanid="userDAO"class="by.univer.pccard.dao.UserDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="userService"class="by.univer.pccard.service.UserService">

 <propertyname="genericDAO"ref="userDAO"/>

</bean>

<beanid="productImageDAO"class="by.univer.pccard.dao.ProductImageDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productImageService"class="by.univer.pccard.service.ProductImageService">

 <propertyname="genericDAO"ref="productImageDAO"/>

</bean>

<beanid="productCommentDAO"class="by.univer.pccard.dao.ProductCommentDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productCommentService"class="by.univer.pccard.service.ProductCommentService">

 <propertyname="genericDAO"ref="productCommentDAO"/>

</bean>

<beanid="ratingDAO"class="by.univer.pccard.dao.RatingDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="ratingService"class="by.univer.pccard.service.RatingService">

 <propertyname="genericDAO"ref="ratingDAO"/>

</bean>

<beanid="productRatingDAO"class="by.univer.pccard.dao.ProductRatingDAO">

 <propertyname="sessionFactory"ref="pccardSessionFactory"/>

</bean>

<beanid="productRatingService"class="by.univer.pccard.service.ProductRatingService">

 <propertyname="genericDAO"ref="productRatingDAO"/>

</bean>

<beanid="indexService"class="by.univer.pccard.service.IndexService">

 <propertyname="genericDAO"ref="productRatingDAO"/>

 <propertyname="productTypeDAO"ref="productTypeDAO"/>

</bean>

<beanid="pccardTransactionManager"class="org.springframework.orm.hibernate3.HibernateTransactionManager">

 <propertyname="sessionFactory">

  <reflocal="pccardSessionFactory"/>

 </property> </bean> <aop:config>

 <aop:pointcutid="pccardServiceMethods"expression="execution(* by.univer.*.service.*.*(..))"/>

 <aop:advisoradvice-ref="pccardTxAdvice"pointcut-ref="pccardServiceMethods"/>

</aop:config>

<tx:adviceid="pccardTxAdvice"transaction-manager="pccardTransactionManager">

 <tx:attributes>

 <tx:methodname="update*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="refresh*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="merge*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

<tx:methodname="remove*"propagation="REQUIRES_NEW"rollback-for="java.lang.Throwable"/>

<tx:methodname="refreshList*"propagation="REQUIRES_NEW"rollback-for="java.lang.Throwable"/>

<tx:methodname="commit*"propagation="REQUIRES_NEW"rollback-for="java.lang.Throwable"/>

 <tx:methodname="add*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="create*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="init*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="save*"propagation="REQUIRED"rollback-for="java.lang.Throwable"/>

 <tx:methodname="*"propagation="SUPPORTS"read-only="true"/>

 </tx:attributes> </tx:advice></beans>


Приложение Г
Примеры пользовательского интерфейса    

Рисунок Г.1 – Главная страница

Рисунок Г.2 – Страница категории «Ноутбуки»

Рисунок Г.3 – Подробное описание товара

Рисунок Г.4 – Страница регистрации

Рисунок Г.5 – Страница изменения профиля

Рисунок Г.6 – Страница просмотра корзины

Рисунок Г.7 – Страница поиска

Рисунок Г.8 – Страница администрирования

Рисунок Г.9 – Страница просмотра сообщений о поддержке


Приложение Д
Перечень листов графической части дипломного проекта

Лист 1 – Цель и функции проекта.

Лист 2 – Задачи дипломного проекта.

Лист 3 – Технологии и средства разработки.

Лист 4 – Концептуальная модель данных.

Лист 5 – Логическая модель данных.

Лист 6 – Диаграмма вариантов использования для гостя, клиента, модератора и администратора.

Лист 7 – Диаграмма состояний для гостя, клиента, модератора и администратора

Лист 8 – Физическая модель данных.

Лист 9 – Диаграмма компонентов Интернет-магазина компьютерной техники.

Лист 10 – Главная страница.

Лист 11 – Страница регистрации.

Лист 12 – Страница просмотра информации о товаре.

Лист 13 – Страница просмотра корзины.

Лист 14 – Страница администратора.

Лист 15 – Выводы по проекту.


ЛОГОТИП

ПОЛЕ

ПОИСКА

МЕНЮ

КАТЕГО-       РИИ

АТАЛОГ

ТОВАРОВ

ВХОД

СОДЕРЖИМОЕ СТРАНИЦ


 

А также другие работы, которые могут Вас заинтересовать

45668. ДИАГНОСТИКА НАРУШЕНИЙ ПСИХИЧЕСКОГО РАЗВИТИЯ В МЛАДЕНЧЕСКОМ И РАННЕМ ДЕТСКОМ ВОЗРАСТЕ 565 KB
  Социальная ситуация развития новорожденного характеризуется совершенно беспомощным состоянием ребенка, постепенно у него начинает появляться собственная активность: слуховое и зрительное сосредоточение, способность выделять из окружающей среды ухаживающую за ним мать, устанавливать с ней эмоциональные связи.
45670. Виды рекламы и их характеристика 36 KB
  Реклама – любая форма неличного представления товаров оплаченная точно установленным заказчиком. Ассоциация маркетологов США 1948 По Закону о Рекламе: Реклама – это распространяемая в любой форме с помощью любых средств информация о физическом или юридическом лице товарах услугах идеях или начинаниях рекламная информация которая предназначена для неопределенного круга лиц и призвана информировать или поддерживать интерес к этим физическим или юридическим лицам товарам идеям или начинаниям и способствовать реализации товаров идей и...
45672. Креатив. Формы творческих идей 36 KB
  Формы творческих идей В основе многих креативных идей лежат яркие запоминающиеся фразы – слоганы. Формирование творческих идей Под формированием творческой идеи подразумевается процесс получения оригинальной идеи. 1 мозговой штурм для определения общего стратегического направления рекламной кампании; 2 релаксация; 3 результаты мозгового штурма перерабатываются посредством индивидуального построения ассоциаций; 4 обсуждение готовых идей коллективом творческой группы. Основные свойства метода: разделение процессов генерации и критики во...
45674. Политическая и социальная реклама 36 KB
  Политическая и социальная реклама. Политическая реклама используется как инструмент пропаганды определенных политических идей партий деятелей и т. Как и коммерческая реклама реклама политическая благодаря своей многотиражности многообразию возможности повторения лаконизму и эмоциональности обладает значительными возможностями воздействия на массовое сознание. Политическая реклама не только оправдана – она крайне необходима в нашем обществе.
45675. Рекламный бюджет организации 33.5 KB
  Интуитивный метод Первый метод интуитивный. Метод остаточных средств Еще один метод близкий к интуитивному метод остаточных средств или все что нам по карману. Остаточный метод не учитывает того что на разных этапах развития перед компанией могут стоять разные цели и задачи на достижение которых может просто не хватить средств. Процент от продаж Третьим в рейтинге популярности рекламодателей идет метод определения рекламного бюджета как процента от объема продаж иногда как процента от выручки или товарооборота.