Разработка сайта страховой компании «Согласие»
Содержание:
Введение
В современном мире, в мире высоко развитых технологий человечество все чаще и чаще ставит себе на службу высокотехнологические машины и механизмы. И это касается далеко не для замены человека в работах, где просто необходима не человеческая сила. В современном мире механизмы везде. Приведем примеры:
- Калькуляторы;
- Компьютеры;
- Роботы;
- Холодильники;
- Телевизоры;
- Мультиварки;
- Музыкальные плееры и т.д.
Все эти механизмы выполняют свои функции быстра, четко и закономерно.
Например компьютеры. Помогают работать с данными, вести бизнес, разрабатывать проекты и создавать необходимую документацию.
На основании выше сказанного и в рамках текущей курсовой работы по дисциплине «Разработка серверных приложений для 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]
Рисунок 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.
Учитывая простату данного программного комплекса можно сделать вывод, он будет очень перспективен, прост и удобен в поддержке.
Программное средство, может совершенствоваться в течении всего времени его пользования. Разработанное программное средство просто и удобно в использовании, имеет простой и интуитивно-понятный интерфейс.
Список литературы
- Фримен, A. ASP.NET МVС 3 для профессионалов /А. Фримен, С. Сандерсон. – Москва: Вильямс, 2012. – 680 с.: ил.
- Троелсен, Э. Язык программирования C# 5.0 и платформа.NET 4.5 /Э. Троелсен – Москва: Вильямс, 2013–1312 с.: ил.
- Либерти, Д. Программирование на C# /Д. Либерти. – СПб.: Питер, 2009. – 688 с.:ил.
- Микелсен, К. Язык программирования C# /К. Микелсен. – ДиаСофт, 2002. – 656 с.:ил.
- Информационные системы и технологии. Методические указания по выполнению дипломного проекта для студентов специальностей 1–40 01 02 «Информационные системы и технологии» / сост.: О.И. Наранович. – Барановичи: РИО БарГУ, 2009. – 39 с.
- Петзольд, Ч. Программирование для Microsoft Windows на С# /Ч. Петзольд. – М.: Русская редакция, 2010. – 880 с.:ил.
- Рихтер, Д. Программирование на платформе Microsoft.NET Framework / Д. Рихтер. – СПб.: Русская редакция, 2012. – 836 с.:ил.
- Оформление раздела «Охрана труда» в дипломных проектах: методические указания по выполнению дипломных работ и проектов для студентов специальности 1–27 01 01 Экономика и организация производства; 1–40 01 02 Информационные системы и технологии / сост. Ю.И. Шадид. – Барановичи: РИО БарГУ, 2009. – 12 с.
- Троелсен, Э. Язык программирования 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;
- Управление рисками в проектной среде (Теоретические аспекты управления рисками)
- Лицензирование отдельных видов предпринимательской деятельности (Введение)
- Виды договоров (Виды договоров)
- Юридическая ответственность (Проблемы определения юридической ответственности )
- Рынок ценных бумаг ( Современное состояние рынка ценных бумаг России и перспективы его развития)
- Предмет, метод предпринимательского права и принципы предпринимательского права (Понятие и признаки предпринимательского права)
- Предмет, метод предпринимательского права и принципы предпринимательского права. (Предпринимательское право в российской системе права)
- Построение организационных структур (Теоретические аспекты построения организационной структуры предприятий )
- Построение организационных структур (Теоретические аспекты построения организационной структуры предприятий)
- Финансовое обеспечение в спортивной индустрии (Теоретические аспекты финансового обеспечения в спортивной индустрии)
- ОРГАНИЗАЦИЯ банкетной службы в гостинице (Технологический процесс банкетной службы в гостинице)
- технология работы банкетной службы на ПРИМЕРЕ ГОСТИНИЦЫ МАРРИОТТ РОЙАЛ АВРОРА