Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Разработка сайта страховой компании «Согласие»

Содержание:

Введение

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

  • Калькуляторы;
  • Компьютеры;
  • Роботы;
  • Холодильники;
  • Телевизоры;
  • Мультиварки;
  • Музыкальные плееры и т.д.

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

Например компьютеры. Помогают работать с данными, вести бизнес, разрабатывать проекты и создавать необходимую документацию.

На основании выше сказанного и в рамках текущей курсовой работы по дисциплине «Разработка серверных приложений для WEB», представим собой разработку Web-сайта с управляемым содержимым.

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

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

знать:

  • основные технологии сети Интернет;
  • правила построения Интернет приложений;
  • принципы работы приложений в сети Интернет;
  • технологию интеграции приложений;
  • основные понятия и термины web – программирования.

уметь разрабатывать приложения:

  • использующие в своей работе сеть Интернет;
  • отображающие HTTP данных;
  • формирующие сценарии Web приложений.

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

Курсавая работа выполняется в два этапа.

На первом этапе установим и сконфигурируем программное обеспечение Web-сервера.

На втором этапе проектируем Web-приложение и осуществляем написание его программного кода в среде программного обеспечения, установленного на сервере.

Отчет включает в себя следующие элементы:

  • Титульный лист;
  • Задание на курсовой проект;
  • Содержание;
  • Введение;
  • Основная часть:
  • Требования к приложению;
  • Анализ исходных данных;
  • Разработка приложения;
  • Заключение;
  • Список литературы;
  • Приложение.

1. Основная часть

1.1 Требования к приложению

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

Появление в 90-х гг. XX века электронной коммерции стало возможным благодаря в первую очередь развитию на планете сети Internet. Это, в свою очередь, было причиной возникновения и развития целых отраслей, связанных с обработкой информации. К примеру, деньги в наше время стали в представлении многих людей ассоциироваться не только, да уже и не столько, как бумажки с портретами и памятниками архитектуры, а с виртуальными счетами в интернет- и обычных банках, с всевозможными платежными системами, кредитными картами, картами оплаты, балансами и т. д. Именно благодаря развитию информационного пространства, вовлечению в него миллионов пользователей, организаций и структур стало возможным появление в начале в США и Европе, а затем и в России и остальном мире, интернет-магазинов, в том числе их разновидность, сайты страховых компаний. Особенно оказались они востребованы у так называемого среднего класса: людей, имеющих стабильную хорошо оплачиваемую работу и ценящих при этом своё время, удобство и комфорт. Все меньше в наши дни остается людей готовых тратить время на хождение по реальным магазинам, стояние в очередях и прочие неудобства. И все больше число тех, кто просто хочет кликнуть мышкой и потом лишь открыть входную дверь, чтобы получить то, что ему необходимо.

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

Постановка задачи. Написать программный продукт «Сайт страховой компании» при этом учесть позиции двух сторон: покупателя и продавца.

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

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

Сайт, также, должен содержать информационные странички, а именна:

  • О компании;
  • Новости;
  • История компании;
  • Контактная информация.

При этом нужно обеспечить понятный интерфейс приложения, доступный любому человеку.

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

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

Диаграмму UML представим на рисунке 1:

Рисунок 1 - Диаграмма UML проекта

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

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

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

Настоящая работа посвящена разработке через тестирование «Сайта страховой компании» на технологии ASP.NET MVC 3 с использованием движка визуализации Razor появившегося в ASP.NET MVC 3.

1.2 Анализ исходных данных

На момент своего появления в 2002 году ASP.NET стала огромным шагом вперед. Стек технологий Microsoft, как он выглядел на то время, показан на рисунке 2 [1, c. 22]

Описание: Описание: image3

Рисунок 2 Стек технологий ASP.NET Web Forms

В Web Forms разработчики Microsoft попытались сокрыть как протокол HTTP (с его неизбежным отсутствием состояния), так и язык HTML (который на тот момент был незнаком многим разработчикам), моделируя интерфейс пользователя в виде иерархии серверных объектов, представляющих элементы управления. Каждый такой элемент управления отслеживает собственное состояние между запросами (с помощью средства View State по мере необходимости визуализируя себя в виде HTML – разметки, и автоматически подключая события клиентской стороны (например, щелчки на кнопках) с соответствующим кодом их обработки на стороне сервера). Фактически Web Forms – это гигантский уровень абстракции, разработанный для воссоздания классического, управляемого событиями графического пользовательского интерфейса в веб-среде.

Идея состояла в том, что бы веб – разработка выглядела подобно разработке Windows Forms. Отныне разработчикам не нужно иметь дело с сериями независимых запросов и ответов HTTP; теперь можно мыслить терминами сохраняющего свое состояние интерфейса пользователя. Можно забыть о веб-среде и её не поддерживающей состояние природе, а вместо этого строить пользовательские интерфейсы с помощью визуального конструктора, использующего технологию перетаскивания, и полагать – или, по меньшей мере, делать вид – что все происходит на сервере [2, c. 693]

ASP.NET MVC – это платформа для разработки веб-приложений от Microsoft, которая сочетает в себе эффективность и аккуратность архитектуры «модель-представление-контроллер», новейшие идеи и приемы гибкой разработки, а также все лучшее из существующей платформы ASP.NET. Она представляет собой полномасштабную альтернативу традиционной технологии ASP.NET Web Forms, предоставляя существенные преимущества для всех проектов веб-разработки, кроме наиболее тривиальных. Новая платформа ASP.NET MVC обеспечила радикальный сдвиг в разработке веб – приложений на платформе Microsoft. В ней делается упор на ясную архитектуру, шаблоны проектирования и тестируемость, и не предпринимается попыток сокрытия того, как работает веб-среда.

Термин модель – представление – контроллер (model – view – controller) используется с конца 70-х гг. прошлого столетия. Эта модель явилась результатом проекта Smalltalk в компании Xerox, где она была задумана как способ организации некоторых из ранних приложений графического пользовательского интерфейса. Некоторые из нюансов первоначальной модели MVC были связаны с концепциями, специфичными для Smalltalk, такими как экраны и инструменты, но более глобальные понятия все еще применимы к приложениям, и особенно хорошо они подходят для веб-приложений [1, с. 63].

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

Рисунок 3 Структурные части архитектурного шаблона MVC

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

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

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

В MVC контроллеры являются классами, обычно производными от класса System. Web. Mvc. Controller. Каждый метод public в классе, унаследованном от класса Controller, называется методом действия и посредством системы маршрутизации ASP.NET связан с конфигурируемым URL. Когда запрос отправляется URL, связанному с методом действия, операторы в классе контроллера выполняются, чтобы провести некоторую операцию по отношению к модели предметной области и затем выбрать представление для отображения клиенту. Взаимодействия между контроллером, моделью и представлением показаны на рисунке 4.

Рисунок 4 – Взаимодействия между контроллером, моделью и представлением

Платформа ASP.NET MVC предоставляет поддержку для выбора механизмов визуализации. В более ранних версиях MVC использовался стандартный механизм визуализации ASP.NET, который обрабатывал ASPX-страницы с применением оптимизированной версии синтаксиса разметки Web Forms. В платформе MVC 3 был введен механизм визуализации Razor, который использует совершенно другой синтаксис. Visual Studio обеспечивает поддержку средства IntelliSense для обоих механизмов визуализации, максимально упрощая внедрение и ответ на данные представления, предоставленные контроллером [1, c. 65].

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

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

В это же время превалирующей архитектурой взаимодействия приложений посредством HTTP становится REST (Representational State Transfer – передача состояния представления), полностью затмевая собой SOAP (технологию, лежащую в основе первоначального подхода к веб-службам, использованного в ASP.NET). Стандарт REST описывает приложение терминами ресурсов, представляющих реальные объекты, и стандартных операций (методов HTTP), представляющих доступные операции с этими ресурсами.

Современные веб-приложения обслуживают не только HTML-разметку; часто они должны также предоставлять данные JSON или XML различным клиентским технологиям, включая AJAX, Silverlight и собственные приложения смартфонов. При использовании REST это происходит естественным образом, устраняя историческое различие между веб-службами и веб-приложениями, но требует определенного подхода к обработке HTTP и URL, который было непросто поддерживать с помощью ASP.NET Web Forms [2, c 25].

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

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

Очевидными примерами являются разработка через тестирование (test-driven development – TDD) и ее новейшее воплощение – разработка через тестирование поведения (behavior-driven development – BDD). Идея состоит в проектировании программного обеспечения, сначала описывая примеры желаемого поведения (которые известны, как тесты или спецификации), чтобы в любой момент можно было проверить стабильность приложения и его корректность, выполнив набор спецификаций применительно к текущей реализации. Недостатка в инструментах.NET поддерживающих TDD/BDD, нет, но они не слишком хорошо работают с Web Forms [3, c. 27].

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

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

Сообщество независимых поставщиков программного обеспечения (independent software vendor – ISV) вместе с сообществом открытого кода разработали множество высококачественных платформ для модульного тестирования (NUnit и MBUnit), имитации (Rhino Mocks и Moq), контейнеров инверсии управления (Ninject), серверов непрерывной интеграции (Cruise Control и TfeamCity), средств объектно-реляционного отображения (NHibemate и Subsonic). Сторонники этих инструментов и методов нашли общий язык, публикуя материалы и организуя конференции под общей маркой ASP.NET. Вследствие своего монолитного проектного решения традиционная технология ASP.NET Web Forms не слишком подходит для таких инструментов и приемов, поэтому удостаивается не слишком большого почтения со стороны этой шумной группы экспертов и интеллектуальных лидеров отрасли [4, c. 28].

Ещё 2004 году платформа Ruby on Ralls была тихим, незаметным продуктом с открытым исходным кодом от неизвестного игрока. Но неожиданно она добилась популярности, изменив правила веб-разработки. Это было связано не с тем, что Ruby on Rails представила революционную технологию, а с тем, что она собрала существующие ингредиенты и смешала их таким чудесным, волшебным, великолепным способом, что смогла пристыдить существующие платформы.

Ruby on Rails (или просто Rails, как ее обычно называют) заключала в себя архитектуру МVС. Применение архитектуры MVC и работа в гармонии с протоколом HTTP, а не в противовес ему, внедрение соглашений вместо обязательного конфигурирования и интеграция инструмента объектно-реляционного отображения (object-relational mapping – ORM) в ядро позволило приложениям Rails без особых усилий завоевать относительно высокую популярность. Это было похоже на открытие того, какой должна быть веб-разработка: все осознали, что все эти годы, по сути, сражались со своими инструментами, и вот, наконец, война окончена.

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

Благодаря Rails, вскоре появилось множество веб-разработчиков, использующих Ruby в качестве своего основного языка программирования. Но в столь новаторском сообществе появление альтернатив Rails было лишь вопросом времени. Наиболее известная из них, Sinatra, была представлена в 2007 году Sinatra отбрасывает почти всю стандартную инфраструктуру в стиле Rails (маршрутизацию, контроллеры, представления) и просто отображает шаблоны URL на блоки кода Ruby. Посетитель запрашивает URL, что ведет к выполнению блока кода Ruby, и данные отправляются обратно браузеру – и это все. Такой вид веб-разработки невероятно прост, однако он нашел применение в двух основных областях. Во-первых, для тех, кто строит веб-службы, поддерживающие REST, он позволяет решить задачу быстро. Во-вторых, поскольку платформа Sinatra может быть соединена с широким множеством шаблонов HTML с открытым исходным кодом и технологий ORM, она часто используется в качестве основания для сборки нестандартных веб-платформ, способных удовлетворить архитектурные потребности любого проекта.

Тем не менее, платформе Sinatra еще только предстоит отвоевать значительную часть рынка у полноценных MVC-платформ, подобных Rails (или ASP.NET MVC).

Еще одна важная тенденция – переход к использованию JavaScript в качестве основного языка программирования. AJAX первым продемонстрировал важность JavaScript, jQuery показал, что этот язык может быть мощным и изящным; а JavaScript-механизм с открытым исходным кодом V8 от Google показал, что он может быть невероятно быстрым. В настоящее время JavaScript становится серьезным языком программирования серверной стороны. Он служит языком хранения и запросов данных для нескольких не реляционных баз данных, включая Couch DB и Mongo, и используется в качестве универсального языка в серверных платформах, таких как Node.js.

Платформа Node.js существует с 2009 года, и она очень быстро завоевала широкое признание. С точки зрения архитектуры она подобна Sinatra тем, что не применяет подход MVC. Скорее она представляет собой способ связывания HTTP-запросов с кодом. В ней применены следующие основные новшества.

Использование JavaScript. Разработчикам нужно иметь дело только с единственным языком – в клиентском коде, внутри логики серверной стороны, в логике запроса данных через Couch DB [1, c. 55].

API – интерфейс Node.js не предоставляет никакого способа блокировки потока во время ожидания ввода – вывода или любой другой операции. Весь ввод-вывод реализуется за счет старта операции, а затем позднее приема обратного вызова после завершения ввода-вывода. Это означает, что Node.js чрезвычайно эффективно использует системные ресурсы и может обрабатывать десятки тысяч одновременных запросов на один ЦП (как правило, возможности альтернативных платформ ограничиваются приблизительно 100 одновременными запросами на один ЦП).

Как и Sinatra, Node.js – технология для определенного круга пользователей. Большинство компаний, создающих реальные приложения в ограниченные временные сроки, остро нуждается во всей инфраструктуре полномасштабных платформ, таких как Ruby on Rails и ASP.NET MVC. Node.js упоминается здесь только для того, чтобы часть проектного решения ASP.NET MVC можно было рассмотреть в контексте отраслевых тенденций. Например, ASP.NET MVC включает в себя асинхронные контроллеры. Это служит способом обработки запросов HTTP с применением неблокирующего ввода-вывода и масштабирования для обработки большего количества запросов на один ЦП [3, c. 824].

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

Для разработки программного продукта была выбрана технология ASP.NET MVC 3 и язык C#, являющийся самым популярным языком для написания бизнес логики на платформе.NET, основные преимущества технологии ASP.NET MVC 3:

– Использование встроенного архитектурного шаблона MVC.

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

– Жесткий контроль над HTML и HTTP. В платформе ASP.NET MVC учтена важность генерации ясного и соответствующего стандартам кода разметки. Ее встроенные вспомогательные методы HTML создают соответствующий стандартам вывод, но в ней реализовано и гораздо более значимое философское изменение по сравнению с Web Forms. Вместо громадного объема трудно поддающегося управлению HTML-кода, платформа MVC стимулирует создание простых и элегантных, стилизованных с помощью CSS компонентов.

– Тестируемость. Естественное разнесение различных задач приложения по разным, независимым друг от друга частям программного обеспечения, поддерживаемое архитектурой MVC. позволяет изначально строить легко сопровождаемые и тестируемые приложения. Однако проектировщики ASP.NET MVC на этом не остановились. Для каждого фрагмента компонентно-ориентированного дизайна платформы они обеспечили структурированность, необходимую для выполнения требований модульного тестирования и средств макетирования.

В качестве IDE была выбрана Visual Studio 2010 – это интегрированная среда разработки Microsoft (IDE), являющейся самой функциональной IDE для разработки на платформе.NET.

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

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

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

Для хранения данных был выбрана СУБД SQL Server 2008 и ORM Entitty Framework от Microsoft. Так как оба продукта от Microsoft у них есть наиболее тесная интеграция с другими продуктами.

1.3 Разработка приложения

На рисунке 5 представим общую укрупненную блок-схему всего Web-приложения.

Рисунок 5 - Блок-схема всего Web-приложения

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

Рисунок 6 - Блок-схема авторизации пользователя

Рисунок 7 - Блок-схема алгоритма вывода услуг и их описания

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

Схема базы данных.

Для реализации базы данных проекта «Сайта страховой компании» необходимы следующие таблицы базы данных. Таблицы представим в таблице 1.

Таблица 1 - Сущности БД и их назначение

Название сущности

Назначение

Users

Хранение всех пользователей

Razdels

Хранение разделов магазина

Tovars

Хранение информации о товаров

Pokypkas

Хранение информации об заказе

Texts

Хранение описания товаров

Физическую модель БД представим на рисунке 8.

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

Пройдемся по сущностям.

Сущность "Pokypkas" предназначена для хранения результатов оформления заявак.

Состоит из:

Id - Уникальный номер таблицы.

Kol - общая цена текущего заказа .

Сущность "Razdels" предназначена для хранения названий разделов. Состоит из:

Id - Уникальный номер таблицы.

RazdelName - Название раздела.

Сущность "Texts" предназначена для хранения описания услуг. Состоит из:

Id - Уникальный номер таблицы.

Id_tovar - Вторичный ключ для связи с таблицей "Tovars" .

TextOp - Описание определенной услуги.

Сущность "Tovars" предназначена для хранения услуг.

Состоит из:

Id - Уникальный номер таблицы.

N - Номер раздела.

TName - Название услуги.

Zena - Цена услуги.

Id_Razdel - Вторичный ключ для связи с таблицей "Razdels" .

Сущность "Users" предназначена для хранения информации о пользователях.

Состоит из:

Id - Уникальный номер таблицы.

UserName - Логин пользователя.

Password - Пароль пользователя.

Email - Электронный адрес.

CreateDate - Дата регистрации.

FirstName - Имя пользователя.

LastName - Фамилия пользователя.

MiddleName - Отчество пользователя.

Status - Статус пользователя(покупатель, менеджер, директор).

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

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

2 Тестирование

На этом этапе представим доказательства того, что спроектированное ПС работает в соответствии с требованиями. Тест кейсы представим в таблице 2.

Таблица 2 - Таблица тестов программы

ID

Summary

Steps

Expected Result

Да/

Fail

1

Загрузка категорий

1. Запуск программы

Категории сайта

Да

2

Проверка наличия услуг

1. Запуск программы

2. Выбор категории

Наблюдение

услуг

Да

3

Регистрация

1. Запуск программы

2. Главная

3. Выход

4 Зарегистрироваться

5 Ввод данных

Успешное сообщение

Да

4

Проверка корректности ввода

данных при регистрации(на пустоту)

1. Запуск программы

2. Главная

3. Выход

4 Зарегистрироваться

5 Ввод данных

6 Не заполнить поля

Сообщение ошибке

Да

5

Проверка корректности ввода

данных при регистрации(дублирование пароля и Email)

1. Запуск программы

2. Главная

3. Выход

4 Зарегистрироваться

5 Ввод данных

6 Заполнить поля пароль и Email неверно.

Сообщение ошибке

Да

6

Вход нового пользователя

1. Запуск программы

2. Главная

3. Выход

4. Ввод логина и пароля

5. Вход

Вход

Да

7

Просмотр результатов

1. Запуск программы

2. Директор

3. Результаты работы

Просмотр результатов работы

Да

8

Создание менеджера

1. Запуск программы

2. Директор

3. Создать менеджера

4. Заполнения данных

Созданный менеджер

Да

9

Удаление менеджера

1. Запуск программы

2. Директор

3. Удаление менеджера

Удаление

менеджера

Да

10

Создание категории

1. Запуск программы

2. Менеджер

3. Создание категории

4. Заполнения данных

5. Создать

Новая категория

Да

11

Удалить

категорию

1. Запуск программы

2. Менеджер

3. Удаление

Удаление категории

Да

12

Добавление

услуги

1. Запуск программы

2. Менеджер

3. Добавить

4. Добавить услугу

5. Заполнить данные

6. Создать

Новая услуга

Да

13

Оформление услуги

1. Запуск программы

2. Покупатель

3. Выбор категории

4. Выбор услуги

5. Купить

Покупка услуги

Да

3. Инструкция по эксплуатации

Запускаем. Главная страница представим на рисунке 9.

Рисунок 9 - Главная страничка

Описание услуг во вкладке "Описания". Смотрите рисунок 10.

Рисунок 10 - Описание услуг

Проведение авторизации. Путь "Главная - выход". Смотрите рисунок 11.

Рисунок 11 - Авторизация

Далее возможно регистрация. Смотрите рисунок 12.

Рисунок 12 - Регистрация

Если перейти по пути "Пользователь - выбор раздела " можно заказать услуги. Смотрите рисунок 13.

Рисунок 13 - Заказ услуг

Далее рассмотрим страничку "Менеджер". Смотрите рисунок 14.

Рисунок 14 - Страничка менеджера

Далее есть возможность создать раздел услуг, добавить услугу или удалить и то и другое. Смотрите рисунки 15 и 16.

Рисунок 15 - Создание раздела

Рисунок 16 - Добавление услуги

Далее рассмотрим страничку "Директора". Смотрите рисунок 17.

Рисунок 17 - Страничка директора

На этой страничке директор может создать менеджера, удалите менеджера или просмотреть результат своего магазина. Смотрите рисунок 18.

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

Также меню позволяет посетить странички "Новости", "О компании" и Контактная информация. Смотрите рисунки 19, 20 и 21.

Рисунок 19 - Новости

Рисунок 20 - О компании

Рисунок 19 - Контактная информация

Заключение

В процессе выполнения курсовой работы были выполнены все основные задачи курса «Разработка серверных приложений для WEB». В качестве доказательства, будет представлен проект «Сайт страховой компании». Настоящая работа посвящена разработке через тестирование «Сайта страховой компании» на технологии ASP.NET MVC 3 с использованием движка визуализации Razor появившегося в ASP.NET MVC 3.

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

В ходе выполнения работы была изучена технология ASP.NET MVC 3, усовершенствованы навыки Web – разработки, работы с ORM Entity Framework, а так же были приобретены навыки разработки программного обеспечения через тестирование, для управления разработкой использовалась централизованная система контроля версий SVN и клиент для неё Tortoise SVN.

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

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

Список литературы

  1. Фримен, A. ASP.NET МVС 3 для профессионалов /А. Фримен, С. Сандерсон. – Москва: Вильямс, 2012. – 680 с.: ил.
  2. Троелсен, Э. Язык программирования C# 5.0 и платформа.NET 4.5 /Э. Троелсен – Москва: Вильямс, 2013–1312 с.: ил.
  3. Либерти, Д. Программирование на C# /Д. Либерти. – СПб.: Питер, 2009. – 688 с.:ил.
  4. Микелсен, К. Язык программирования C# /К. Микелсен. – ДиаСофт, 2002. – 656 с.:ил.
  5. Информационные системы и технологии. Методические указания по выполнению дипломного проекта для студентов специальностей 1–40 01 02 «Информационные системы и технологии» / сост.: О.И. Наранович. – Барановичи: РИО БарГУ, 2009. – 39 с.
  6. Петзольд, Ч. Программирование для Microsoft Windows на С# /Ч. Петзольд. – М.: Русская редакция, 2010. – 880 с.:ил.
  7. Рихтер, Д. Программирование на платформе Microsoft.NET Framework / Д. Рихтер. – СПб.: Русская редакция, 2012. – 836 с.:ил.
  8. Оформление раздела «Охрана труда» в дипломных проектах: методические указания по выполнению дипломных работ и проектов для студентов специальности 1–27 01 01 Экономика и организация производства; 1–40 01 02 Информационные системы и технологии / сост. Ю.И. Шадид. – Барановичи: РИО БарГУ, 2009. – 12 с.
  9. Троелсен, Э. Язык программирования C# 4.0 и платформа.NET 4.0 /Э. Троелсен – Москва: Вильямс, 2011–1214 с.: ил.

Приложение

using System.Data.Entity; //Прямое подключение к БД

namespace PK.Models

{

public class EFDbcontext : DbContext

{

public EFDbcontext(string connectionString)

{

Database.Connection.ConnectionString = connectionString;

}

public DbSet<User> Users { get; set; }

public DbSet<Razdel> Razdels { get; set; }

public DbSet<Tovar> Tovars { get; set; }

public DbSet<Pokypka> Pokypkas { get; set; }

}

}

using System; //Модуль работы с БД

using System.Collections.Generic;

using System.Configuration;

using System.Linq;

using System.Web.Security;

using System.Data;

namespace PK.Models

{

public class EFUsersRepository

{

private EFDbcontext context;

public EFUsersRepository()

{

context = new EFDbcontext(ConfigurationManager.ConnectionStrings[0].ConnectionString);

}

public IEnumerable<User> GetUsers()//Все данные С БД

{

return context.Users;

}

public User GetUserById(int id) //Выборка данных по ID

{

return context.Users.FirstOrDefault(x => x.Id == id);

}

public User GetUserByStatus(int status) //Выборка данных по роли

{

return context.Users.FirstOrDefault(x => x.Status == status);

}

public User GetUserByName(string userName) //Выборка данных по имени

{

return context.Users.FirstOrDefault(x => x.UserName == userName);

}

public User UserDelete(int id) //Удаление данных по ID

{

User user = context.Users.FirstOrDefault(x => x.Id==id);

context.Entry(user).State = EntityState.Deleted;

context.SaveChanges();

return null;

}

public MembershipUser GetMembershipUserByName(string userName)//Проверка пользователя

{

User user = context.Users.FirstOrDefault(x => x.UserName == userName);

if (user != null)

{

return new MembershipUser(

"CustomMembershipProvider",

user.UserName,

user.Id,

user.Email,

"",

null,

true,

false,

user.CreateDate,

DateTime.Now,

DateTime.Now,

DateTime.Now,

DateTime.Now

);

}

return null;

}

public string GetUserNameByEmail(string email) //Выборка данных по имени и адресу

{

User user = context.Users.FirstOrDefault(x => x.Email == email);

return user != null ? user.UserName : "";

}

public void CreateUser(string userName, string password, string email, string firstName, string lastName, string middleName,int status) //Создать данные

{

var user = new User

{

UserName = userName,

Email = email,

Password = password,

CreateDate = DateTime.Now,

FirstName = firstName,

LastName = lastName,

MiddleName = middleName,

Status=status

};

SaveUser(user);

}

public bool ValidateUser(string userName, string password)//Существование данных

{

User user = context.Users.FirstOrDefault(x => x.UserName == userName);

if (user != null && user.Password == password)

return true;

return false;

}

public void SaveUser(User user) //Сохранить данные

{

if (user.Id == 0)

context.Users.Add(user);

else

context.Entry(user).State = EntityState.Modified;

context.SaveChanges();

}

}

}

Исходный текст модуля моделей данных.

using System;

using System.ComponentModel.DataAnnotations;

using System.Web.Mvc;

using System.Collections.Generic;

namespace PK.Models

{

public class User //модель пользователя

{

public int Id { get; set; }

public string UserName { get; set; }

public string Password { get; set; }

public string Email { get; set; }

public DateTime CreateDate { get; set; }

public string FirstName { get; set; }

public string LastName { get; set; }

public string MiddleName { get; set; }

public int Status { get; set; }

}

public class LoginViewModel//модель авторизации пользователя

{

[Required(ErrorMessage="*")]

public string UserName { get; set;}

[Required(ErrorMessage = "*")]

[DataType(DataType.Password)]

public string Password { get; set; }

}

public class RegisterViewModel//модель регистрации пользователя

{

[Required(ErrorMessage = "*")]

public string UserName { get; set; }

[Required(ErrorMessage = "*")]

[DataType(DataType.Password)]

public string Password { get; set; }

[Required(ErrorMessage = "*")]

[DataType(DataType.Password)]

[Compare("Password", ErrorMessage = "Пароль подтвержден неверно")]

public string ConfirmPassword { get; set; }

[Required(ErrorMessage = "*")]

[RegularExpression(@"^[a-zA-Z0-9.-]{1,20}@[a-zA-Z0-9]{1,20}\.[A-Za-z]{2,4}",

ErrorMessage = "Неверный формат Email")]

public string Email { get; set; }

[Required(ErrorMessage = "*")]

[RegularExpression(@"^[a-zA-Z0-9.-]{1,20}@[a-zA-Z0-9]{1,20}\.[A-Za-z]{2,4}",

ErrorMessage = "Неверный формат Email")]

[Compare("Email", ErrorMessage = "Email подтвержден неверно")]

public string ConfirmEmail { get; set; }

[Required(ErrorMessage = "*")]

public string FirstName { get; set; }

[Required(ErrorMessage = "*")]

public string LastName { get; set; }

[Required(ErrorMessage = "*")]

public string MiddleName { get; set; }

}

public class menViewModel//модель создания менеджера пользователя

{

[Required(ErrorMessage = "*")]

public string UserName { get; set; }

[Required(ErrorMessage = "*")]

[DataType(DataType.Password)]

public string Password { get; set; }

[Required(ErrorMessage = "*")]

[RegularExpression(@"^[a-zA-Z0-9.-]{1,20}@[a-zA-Z0-9]{1,20}\.[A-Za-z]{2,4}",

ErrorMessage = "Неверный формат Email")]

public string Email { get; set; }

[Required(ErrorMessage = "*")]

public string FirstName { get; set; }

[Required(ErrorMessage = "*")]

public string LastName { get; set; }

[Required(ErrorMessage = "*")]

public string MiddleName { get; set; }

[Required(ErrorMessage = "*")]

public int Status { get; set; }

}

public class Razdel//модель раздела техники

{

public int Id { get; set; }

public string RazdelName { get; set; }

}

public class ViewRazdel//модель создания нового раздела

{

[Required(ErrorMessage = "*")]

public string RazdelName { get; set; }

}

public class Tovar//модель товара техники

{

public int Id { get; set; }

public int IdRazd { get; set; }

public int N { get; set; }

public string TName { get; set; }

public int Zena { get; set; }

}

public class ViewTovar//модель создания нового товара

{

[Required(ErrorMessage = "*")]

public int IdRazd { get; set; }

[Required(ErrorMessage = "*")]

public int N { get; set; }

[Required(ErrorMessage = "*")]

public string TName { get; set; }

[Required(ErrorMessage = "*")]

public int Zena { get; set; }

}

public class ViewPakypka

{

}

public class Pokypka

{

public int Id { get; set; }

public int Kol { get; set; }

}

}

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

using System.Linq;

using System.Web.Mvc;

using System.Web.Security;

using PK.Models;

namespace PK.Controllers

{

public class HomeController : Controller

{

private DataManager data;

public ActionResult Index()

{

ViewBag.Title = "Мой первый магазин!!!";

EFRazdelRepository razd = new EFRazdelRepository();

ViewBag.dan = razd.GetRazdel();

return View();

}

[HttpGet]

public ActionResult next(int id)

{

EFTovarRepository tovar = new EFTovarRepository();

ViewBag.dann = tovar.GetTovar().Where(x => x.IdRazd == id);

return View();

}

[Authorize(Users = "tank")]

public ActionResult direct_admin()

{

ViewBag.Title = "Страничка Директора!!!";

EFUsersRepository data=new EFUsersRepository();

ViewBag.dan = data.GetUsers().Where(x => x.Status == 2);

return View();

}

[Authorize(Users = "tank")]

[HttpGet]

public ActionResult Create()

{

return View();

}

[Authorize(Users = "tank")]

[HttpGet]

public ActionResult Delete(int id)

{

DataManager dat=new DataManager();

dat.Users.UserDelete(id);

ViewBag.Tank=id.ToString();

return View();

// return RedirectToAction("direct_admin");

}

[Authorize(Users = "tank")]

[HttpPost]

public ActionResult Create(menViewModel model)

{

if (ModelState.IsValid)

{

data = new DataManager();

MembershipCreateStatus status = data.MembershipProvider.CreateUser(model.UserName, model.Password,

model.Email, model.FirstName,

model.LastName,

model.MiddleName, 2);

if (status == MembershipCreateStatus.Success)

return View("message");

ModelState.AddModelError("", GetMembershipCreateStatusResultText(status));

}

return View(model);

}

//Создаем текст ошибки для MembershipCreateStatus

[Authorize(Users = "tank")]

public string GetMembershipCreateStatusResultText(MembershipCreateStatus status)

{

if (status == MembershipCreateStatus.DuplicateEmail)

return "Менеджер с таким email адресом уже существует";

if (status == MembershipCreateStatus.DuplicateUserName)

return "Менеджер с таким именем адресом уже существует";

return "Неизвестная ошибка";

}

[Authorize(Users = "tank")]

[HttpGet]

public ActionResult Rezult()

{

EFPokypkaRepository pk=new EFPokypkaRepository();

ViewBag.dan = pk.GetPokypka();

return View();

} }}

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

@model PK.Models.RegisterViewModel

@{

ViewBag.Title = "Регистрация на сайте";

}

<h2>Регистрация на сайте</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>

<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm()) {

@Html.ValidationSummary(true)

<fieldset>

<legend>Форма регистрации!!!</legend>

<br/>

<div class="editor-field">

Логин: @Html.EditorFor(model => model.UserName)

@Html.ValidationMessageFor(model => model.UserName)

</div>

<br/>

<div class="editor-field">

Пароль: @Html.EditorFor(model => model.Password)

@Html.ValidationMessageFor(model => model.Password)

</div>

<br/>

<div class="editor-field">

Пароль еще раз: @Html.EditorFor(model => model.ConfirmPassword)

@Html.ValidationMessageFor(model => model.ConfirmPassword)

</div>

<br/>

<div class="editor-field">

Email: @Html.EditorFor(model => model.Email)

@Html.ValidationMessageFor(model => model.Email)

</div>

<br/>

<div class="editor-field">

Email еще раз: @Html.EditorFor(model => model.ConfirmEmail)

@Html.ValidationMessageFor(model => model.ConfirmEmail)

</div>

<br/>

<div class="editor-field">

Фамилия: @Html.EditorFor(model => model.FirstName)

@Html.ValidationMessageFor(model => model.FirstName)

</div>

<br/>

<div class="editor-field">

Имя: @Html.EditorFor(model => model.LastName)

@Html.ValidationMessageFor(model => model.LastName)

</div>

<br/>

<div class="editor-field">

Отчество: @Html.EditorFor(model => model.MiddleName)

@Html.ValidationMessageFor(model => model.MiddleName)

</div>

<br/>

<p>

<input type="submit" value="Зарегестрироваться" />

</p>

</fieldset>

}

Текст файла с sql оператарами.

CREATE TABLE Texts (

Id INTEGER NOT NULL,

TextOp VARCHAR ( 50 ) NOT NULL,

Tovars_Id INTEGER NOT NULL,

Razdels_Id INTEGER NOT NULL,

CONSTRAINT PK_Texts3 PRIMARY KEY (Razdels_Id, Tovars_Id, Id)

);

CREATE TABLE Users (

Id INTEGER NOT NULL,

UserName VARCHAR ( 50 ) NOT NULL,

Password VARCHAR ( 50 ) NOT NULL,

Email VARCHAR ( 50 ) NOT NULL,

CreateDate DATE NOT NULL,

FirstName VARCHAR ( 50 ) NOT NULL,

LastName VARCHAR ( 50 ) NOT NULL,

MiddleName VARCHAR ( 50 ) NOT NULL,

CONSTRAINT PK_Users1 PRIMARY KEY (Id)

);

CREATE TABLE Tovars (

Id INTEGER NOT NULL,

N INTEGER NOT NULL,

TName VARCHAR ( 50 ) NOT NULL,

Zena INTEGER NOT NULL,

Razdels_Id INTEGER NOT NULL,

CONSTRAINT PK_Tovars4 PRIMARY KEY (Razdels_Id, Id)

);

CREATE TABLE Pokypkas (

Id INTEGER NOT NULL,

Kol INTEGER NOT NULL,

CONSTRAINT PK_Pokypkas0 PRIMARY KEY (Id)

);

CREATE TABLE Razdels (

Id INTEGER NOT NULL,

RazdelName VARCHAR ( 50 ) NOT NULL,

CONSTRAINT PK_Razdels2 PRIMARY KEY (Id)

);

ALTER TABLE Texts ADD CONSTRAINT FK_Texts0 FOREIGN KEY (Razdels_Id, Tovars_Id) REFERENCES Tovars (Razdels_Id, Id) ON DELETE NO ACTION ON UPDATE NO ACTION;

ALTER TABLE Tovars ADD CONSTRAINT FK_Tovars1 FOREIGN KEY (Razdels_Id) REFERENCES Razdels (Id) ON DELETE NO ACTION ON UPDATE NO ACTION;