Тематические "онлайн-магазины"
Оглавление
ВВЕДЕНИЕ
. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
.1Анализ существующих аналогов
.1.1 интернет-портал «onliner.by»
.1.2 интернет-магазин «ebay.com»
.1.3 интернет-магазин «eda.by»
. РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА И БАЗЫ ДАННЫХ
.1 Спецификация требований
.1.1 Варианты использования ПС и БД
.2 Архитектурное решение проекта
.3 Обоснование выбора информационных технологий
. ИНФОЛОГИЧЕСКАЯ МОДЕЛЬ БАЗЫ ДАННЫХ
.1 Разработка модели базы данных
.2 Схема базы данных на языке SQL
. РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ А
ПРИЛОЖЕНИЕ Б
ПРИЛОЖЕНИЕ В
ВВЕДЕНИЕ
В наше время тематические «онлайн-магазины» привлекают внимание все большего числа пользователей со всего мира. Дело в том, что именно в Интернете вы можете в любое время суток найти нужную и, самое главное, актуальную информацию. Кроме того, только в сети без особых проблем можно читать не только новости, но и посещать различные развлекательные порталы, узнавать прогноз погоды, общаться с друзьями. Также последнее время стали пользоваться популярностью так называемые интернет-магазины. Вы можете без проблем найти необходимую вам вещь, узнать подробные характеристики, сравнить с аналогами, узнать точную цену не выходя из дома.
В настоящее время во всех больших коммерческих приложениях используются базы данных. Именно повсеместность их использования и вынуждает разработчиков изучать эту область в информационных технологиях.
Некоторое время назад существовала проблема, заключавшаяся в том, как и где хранить данные: разбивать все по подкаталогам или хранить в одном файле, а может и то и другое. Помимо этого, подход, заключавшийся в том, чтобы сам программист контролировал, где лежит тот или иной файл, увеличивал не только сложность разработки ПО, но и количество ошибок, а также время и стоимость разработки. Сейчас все большее значение придается сетевому взаимодействию или доступу к данным, используя интернет. Т.е. возникает еще ряд вопросов, связанных с безопасностью.
Эти проблемы в большей части исчезли после введения прослойки между представлением данных на диске и данными в программе. Решением стали базы данных и системы управления базами данных. В зависимости от разработчика или конкретных настроек СУБД определяет, как и где ей хранить данные. Помимо этого, все СУБД предоставляют механизм для получения этих данных в удобной для дальнейшего использования форме - «запросы». С их помощью можно указать критерии выбора данных, отсортировать данные в нужном порядке, сгруппировать, как того требует задание, и т.п. Помимо этого, большинство СУБД поддерживает механизм разграничения прав доступа, т.е. достаточно указать, какие данные какому пользователю можно или нельзя получать, а все остальное возьмет на себя СУБД.
Существуют различные модели организации данных. Вот некоторые из них:
-иерархическая;
-сетевая;
-реляционная;
-объектная и объектно-ориентированная <#"justify">Наиболее широко используются реляционные, так как они универсальны. В реляционных базах данных данные собраны в таблицы, которые в свою очередь состоят из столбцов и строк, на пересечении которых расположены ячейки. Запросы к таким базам данных возвращает таблицу, которая повторно может участвовать в следующем запросе. Данные в одних таблицах, как правило, связаны с данными других таблиц, откуда и произошло название "реляционные".
Базы данных используют практически все - банки, оффлайн и онлайн магазины, веб-сайты, склады. Банки хранят в базах данных информацию о счетах своих клиентах. Магазины розничной торговли - сведения о ценах, клиентах, имеющихся в наличии товарах и т.д. Веб-сайты используют базы данных для хранения логинов пользователей, введенной юзерами информации и прочего контента. На складах в базах данных отмечают, где и какой товар лежит и сколько его осталось. В общем, базы данных нужны, когда необходимо как-то хранить довольно много информации так, чтобы её в любой момент легко было извлечь.
1. АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
1.1Анализ существующих аналогов
В настоящее время интернет начинает играть всю более важную роль в нашей жизни. Именно в интернете мы можем найти самые свежие последние новости, необходимую нам информацию, музыку, кино, игры и т.д.
Поскольку у человека возникают повседневные потребности в приобретении продуктов, предметов быта, различной цифровой техники и т.д. С этой целью создавались интернет-магазины.
Встречаются различные типы интернет-магазинов:
-Интернет-магазины бытовой техники;
-Сервисы доставки еды на дом;
-Сервисы доставки продуктов на дом;
-Интернет-магазины электронной техники;
-Интернет-магазины одежды и обуви.
1.1.1 интернет-портал «onliner.by»
Один из самых популярных белорусских порталов. Данный портал обладает следующими достоинствами:
-Большой выбор электронной техники;
-Обзор различных новинок в технологической сфере;
-возможность сравнения цен от различных продавцов;
-Форум, на котором зарегестрированные пользователи могут общаться на различные тематики.
К недостаткам можно отнести большое количество изображений на сайте, из-за чего могу возникнуть проблемы со скоростью при загрузке поиске необходимой информации.
1.1.2 интернет-магазин «ebay.com»
Отличный интернет-магазин,содержащий огромное разнообразие товаров из разных стран. Данный интернет-магазин обладает следующими достоинствами:
-Огромный выбор из предоставляемых товаров;
-возможность заказа почтовой посылкой;
-подробное описание товаров;
-различные виды оплаты;
-поддержка скидок;
-наличие онлайн-аукциона;
интернет магазин тематический база
1.1.3 интернет-магазин«eda.by»
Интернет-магазин с возможностью доставки продуктов на дом на территории Минска.Интернет-магазин обладает следующими достоинствами:
-большой выбор продуктов и готовых блюд;
-круглосуточная доставка.
К недостаткам данного сайта относятся:
-невозможность заказов для остальной территории.
1.2 Постановка задачи
Как показал анализ существующих аналогов, им присущи следующие недостатки:
-сложность навигации по каталогам и результатам поиска;
-отсутствие возможностей оставлять комментарии.
Исходя из перечисленных недостатков, а также достоинств существующих аналогов необходимо реализовать программное средство, обладающее следующими свойствами:
-удобный пользовательский дизайн;
-возможность ограничения функциональности пользователя в зависимости от роли;
-легкость в освоении сайта;
-простота регистрации;
-простота навигации по сайту;
-простота управления сайтом для администратора.
2. РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА И БАЗЫ ДАННЫХ
2.1 Спецификация требований
.1.1 Варианты использования ПС и БД
В разрабатываемом программном средстве должно быть реализовано следующее:
2.2 Архитектурное решение проекта
Архитектурное решение проекта представлено в приложении Б.
Класс CarRepository - основной класс для администрирования салона. Содержит метод AddCar для добавления автомобиля в каталог с панели администратора.Класс содержит методы GetCarByIdиGetAllCars. Метод GetCarByIdвозвращает конкретнуюмодель поидентификатору автомобиля. Метод GetAllCarsвозвращает список всех доступных автомобилей для вывода их в удобном для пользователя виде. Метод CarsToTableпривязывает полученные данные из метода CarsToTableк GridView для вывода необходимых полей записей в табличном представлении
Класс ManRepository - выполняет основные операции для сущности Man. Метод GetAllMen возвращает полный список людей(клиентов, сотрудников, покупателей. Метод GetManInfoвозвращает информацию о заданном человеке в формате «Фамилия-имя-тип-контактная информация»,.Метод GetContactInfo -возвращает номер телефона и адресс человека по его идентификатору.
Класс ClientRepository - выполняет основные операции для сущности Client. Метод GetClientInfo - возвращает полную информацию о клиенте и о заказанном автомобиле. Метод GetAllClientsвозвращает список всех клиентов автосалона.
Класс BuyerRepository - выполняет основные операции над сущностью Buyer. Метод GetBuyerInfo - возвращает информацию о покупателе по его идентификатору. Полученные данные содержат краткую информацию о покупателе, способ оплаты, идентификатор на купленный автомобиль.
Класс OfficialRepository - выполняет основные операции над сущностью Official. Метод GetAllOfficials - возвращает список всех сотрудников. МетодGetOfficialInfo - возвращает информацию о заданном сотруднике: фамилию, имя, должность, заработную плату, контактную информацию.
Класс DistrRepository - выполняет основные операции над сущностью «Distr»Метод GetDistrByCarIdвозвращает информацию о поставщике по идентификатору автомобиля.
Класс CheckOut- выполняет операции поиска автомобиля среди записей. Метод CheckByIdвозвращает информацию об автомобиле с указанным идентификатором. Метод CheckByCriteriesвозвращает список автомобилей с таким же описанием.
2.3 Обоснование выбора информационных технологий
Данный программный продукт написан на языке C# в среде VisualStudio 2012. Данный язык был выбран по следующим причинам:
-В состав C# входит "сборщик мусора", который освобождает ресурсы. Таким образом, приложения защищены от утечки памяти и от необходимости освобождать ресурсы. Это делает программирование более легким и более безопасным;
-Приложения .NET используют метаданные, что позволяет им не пользоваться системным реестром Windows;
Приложение написано на платформеASP.NETMVC.MVC представляет собой стандартный шаблон разработки, знакомый многим специалистам. Некоторые типы веб-приложений имеют преимущества при создании на платформе asp.NET. В состав платформы входят следующие компоненты:
-Модели. Объекты моделей являются частями приложения, реализующими логику для домена данных приложения. Объекты моделей часто получают и сохраняют состояние модели в базе данных.
-В небольших приложениях эта модель подразумевает концептуальное, а не физическое разделение. Например, если приложение только считывает набор данных и отправляет его в представление, то физический слой модели и связанных классов отсутствует. В этом случае набор данных принимает роль объекта модели;
-Представления. Представления служат для отображения пользовательского интерфейса приложения. Пользовательский интерфейс обычно создается на основе данных модели;
-Контроллеры. Контроллеры осуществляют взаимодействие с пользователем, работу с моделью, а также выбор представления, отображающего пользовательский интерфейс. В приложении asp.NET представления только отображают данные, а контроллер обрабатывает вводимые данные и отвечает на действия пользователя.
Шаблон asp.NET позволяет создавать приложения, различные аспекты которых (логика ввода, бизнес-логика и логика интерфейса) разделены, но достаточно тесно взаимодействуют друг с другом. Пользовательский интерфейс располагается в представлении. Логика ввода располагается в контроллере. Бизнес-логика находится в модели. Это разделение позволяет работать со сложными структурами при создании приложения, так как обеспечивает одновременную реализацию только одного аспекта. Например, разработчик может сконцентрироваться на создании представления отдельно от бизнес-логики. Связь между основными компонентами приложения MVC также облегчает параллельную разработку. Например, один разработчик может создавать представление, другой - логику контроллера, а третий - бизнес-логику модели.
Дополнительно на клиенте используется технология Ajax. Ajax - подход к построению интерактивных пользовательских интерфейсов веб-приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером. В результате, при обновлении данных веб-страница не перезагружается полностью, и веб-приложения становятся более быстрыми и удобными. Преимущества данной технологии:
-Экономия трафика. Использование Ajax позволяет значительно сократить трафик при работе с веб-приложением благодаря тому, что часто вместо загрузки всей страницы достаточно загрузить только изменившуюся часть, как правило, довольно небольшую;
-Уменьшение нагрузки на сервер. Ajax позволяет несколько снизить нагрузку на сервер. К примеру, на странице работы с почтой, когда вы отмечаете прочитанные письма, серверу достаточно внести изменения в базу данных и отправить клиентскому скрипту сообщение об успешном выполнении операции без необходимости повторно создавать страницу и передавать её клиенту;
-Ускорение реакции интерфейса. Поскольку нужно загрузить только изменившуюся часть, пользователь видит результат своих действий быстрее.
Дополнительно используется технология внедрение зависимости - процесс предоставления внешней зависимости программному компоненту. Является специфичной формой обращения контроля, где изменение порядка связи является путём получения необходимой зависимости. Условно, если объекту нужно получить доступ к определенному сервису, объект берет на себя ответственность за доступ к этому сервису: он или получает прямую ссылку на местонахождение сервиса, или обращается к известному «сервис-локатору» и запрашивает ссылку на реализацию определенного типа сервиса.
Используя же внедрение зависимости, объект просто предоставляет свойство, которое в состоянии хранить ссылку на нужный тип сервиса; и когда объект создается, ссылка на реализацию нужного типа сервиса автоматически вставляется в это свойство (поле), используя средства среды. Внедрение зависимости более гибко, потому что становится легче создавать альтернативные реализации данного типа сервиса, а потом указывать, какая именно реализация должна быть использована в, например, конфигурационном файле, без изменений в объектах, которые этот сервис используют. Это особенно полезно в юнит-тестировании, потому что вставить реализацию «заглушки» сервиса в тестируемый объект очень просто.
Рисунок 2.3 - Схема обработки запроса поиска автомобиля в каталоге
Модель содержит в себе информацию об автомобиле. Из модели можно получить название модели автомобиля,цвет,год выпуска, стоимость.Результат выполнения запроса- вывод списка автомобилей, описание которых совпадает с введенными критериями
3. ИНФОЛОГИЧЕСКАЯ МОДЕЛЬ БАЗЫ ДАННЫХ
3.1 Разработка модели базы данных
Для данного приложения была разработана база данных, модель которой находится в приложении В.
Ниже приведено описание основных таблиц:
.таблица «table_car» используется для хранения информации об автомобилях:
-ID(bigint) -первичный ключ таблицы, идентификатор автомобиля;
-Model(varchar(100)) - полное название модели;
-Color(varchar(100)) -цвет кузова;
-Price (varchar(50)) - стоимость автомобиля;
-Sale Date(datetime) -датаоформления заказа;
-Stat (varchar(100)) - состояние(в салоне/оформлен заказ);
-Buyerid (bigint) -идентификатор покупателя.
-Release Date(int) - годвыпуска.
2.таблица «table_mod» используется для хранения дополнительной информации о выбранном автомобиле:
-ID(bigint) -первичный ключ таблицы, идентификатор модели автомобиля;
-CarID (bigint) - идентификатор автомобиля;
-Seatsnumber(int) -количество пассажирских мест;
-fuel(varchar(10)) - тип используемого топлива;
-Fuelrate (int) - расход топлива в литрах на 100 км.
.таблица «table_stat» используется для хранения информации о состоянии автомобиля(находится в салоне/ продано):
-ID(bigint) -первичный ключ таблицы, идентификатор состояния;
-Stat(varchar(100)) - состояние автомобиля;
.таблица «table_distr» используется для хранения информации о поставщике:
-ID(bigint) -первичный ключ таблицы, идентификатор поставщика;
-CarID(bigint) - идентификатор автомобиля
-Contact Information (varchar(100)) - контактнаяинформация.
-DistrName (varchar(100)) - название поставщика.
.таблица «table_man» используется для хранения информации о человеке, тк он может являться работником или покупателем:
-ID(bigint) -первичный ключ таблицы, идентификатор человека;
-Surname(varchar(50)) - фамилия;
-Name(varchar(50)) -имя;
.таблица «table_contact» используется для хранения информации о контактной инофрмации работника/покупателя:!!!!!!!!!!!!!!!!!!!!!!!!(прод)
-ID(bigint) -первичный ключ таблицы, идентификатор контактной информации;
-ManID (bigint) - идентификатор;
-Phone(nvarchar(100)) -номер телефона;
-Adress(varchar(100)) -адрес;
.таблица «table_client» используется для хранения информации о клиентах:
-ID(bigint) -первичный ключ таблицы, идентификатор клиента;
-ManID (bigint) - Идентификатор человека;
-CarID(bigint) -идентификатор автомобиля;
.таблица «table_buyer» используется для хранения информации о покупателях:
-ID(bigint) -первичный ключ таблицы, идентификатор покупателя;
-ManID(bigint) - идентификатор человека;
-CarID(bigint) - идентификатор автомобиля;
-OfficialID (bigint) - идентификатор сотрудника;
-Payment (bigint) - идентификатор способа оплаты.
9.таблица «table_payment» используется для хранения информации о способах оплаты:
-ID (bigint) - первичный ключ таблицы, идентификатор способа оплаты;
-Payment(varchar(50)) - способ оплаты;
10.таблица «table_official» используется для хранения информации о сотрудниках:
-ID (bigint) - первичный ключ таблицы, идентификатор сотрудника;
-ManID (bigint) - идентификатор человека;
-Post (varchar(50))- занимаемая должность;
-Reward (int) - заработная плата;
.таблица «table_post» используется для хранения информации о занимаемых должностях:
-ID (bigint) - первичный ключ таблицы, идентификатор должности;
-Post(varchar(50) - занимаемая должность;
Каждый автомобиль связан со своеймодификацией через таблицу car_mod. В данной таблице используется составной первичный ключ (состоит из идентификатора автомобиля и идентификатора модификации).
У каждого автомобиля может быть несколько модификаций. Например, в салоне может находиться два одинаковых автомобиля, отличающихся каким-либо параметром модификации(цвет, год выпуска и т.д.).
Структура клиентов-сотрудников заключена в таблицы table_man, table_buyerи table_official. Длясвязитаблицпотипуtable_man - table_officialиtable_man - table_buyerвтаблицеtable_manиспользуется первичный ключ man_id, который используется для связи в двух других таблицах.
Каждый покупатель связан с автомобилем, который он хочет приобрести. В качестве внешних ключей здесь используются идентификатор автомобиля и идентификатор покупателя.
В таблице table_distr имеется информация о поставщике автомобиля, которая связана с таблицей table_carчерезидентификатор автомобиля и идентификатор поставщика. Для каждого автомобиля ставится в соответствие поставщик и его краткая информация.
В таблице table_statсодержится внешний ключ: идентификатор состояния автомобиляуказывает на то, находится ли автомобиль в автосалоне или на него уже оформлен заказ.Заказ может быть оформлен клиентом или покупателем, разница в том, что покупатель навсегда покупает автомобиль, клиент же берет его напрокат.
3.2 Схема базы данных на языке SQL
CREATE TABLE [dbo].[Club]([Id] [bigint] IDENTITY(1,1) NOT NULL,[Name] [varchar](100) NOT NULL,
[CreationDate] [datetime] NOT NULL,[Owner] [varchar](50) NOT NULL,[PK_Club] PRIMARY KEY CLUSTERED ([Id] ASC)(PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]) ON [PRIMARY]ANSI_PADDING OFFANSI_NULLS ONQUOTED_IDENTIFIER ONSET ANSI_PADDING ONTABLE [dbo].[aspnet_WebEvent_Events](
[EventId] [char](32) NOT NULL,
[EventTimeUtc] [datetime] NOT NULL,
[EventTime] [datetime] NOT NULL,
[EventType] [nvarchar](256) NOT NULL,
[EventSequence] [decimal](19, 0) NOT NULL,
[EventOccurrence] [decimal](19, 0) NOT NULL,
[EventCode] [int] NOT NULL,
[EventDetailCode] [int] NOT NULL,
[Message] [nvarchar](1024) NULL,
[ApplicationPath] [nvarchar](256) NULL,
[ApplicationVirtualPath] [nvarchar](256) NULL,
[MachineName] [nvarchar](256) NOT NULL,
[RequestUrl] [nvarchar](1024) NULL,
[ExceptionType] [nvarchar](256) NULL,
[Details] [ntext] NULL,KEY CLUSTERED
(
[EventId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]ANSI_PADDING OFFANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Footballer](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](100) NOT NULL,
[Surname] [varchar](100) NOT NULL,
[Position] [varchar](50) NOT NULL,
[DateOfBirth] [datetime] NOT NULL,
[Nationality] [varchar](100) NOT NULL,
[Sex] [varchar](10) NOT NULL,[PK_Footballer] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]ANSI_PADDING OFFANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Trophy](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,[PK_Trophy] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] GOANSI_PADDING OFF
/****** Object: Table [dbo].[Stadium] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Stadium](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) NOT NULL,
[Location] [varchar](50) NOT NULL,
[Capacity] [bigint] NOT NULL,[PK_Stadium] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]ANSI_PADDING OFF
/****** Object: Table [dbo].[Referee] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Referee](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](100) NOT NULL,
[Surname] [varchar](100) NOT NULL,
[DateOfBirth] [datetime] NOT NULL,
[Nationality] [varchar](100) NOT NULL,
[Sex] [varchar](10) NOT NULL,
[StartCareerDate] [datetime] NOT NULL,[PK_Referee] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]ANSI_PADDING OFF
/****** Object: Table [dbo].[News] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[News](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Body] [nvarchar](max) NOT NULL,
[Header] [nvarchar](max) NOT NULL,
[Picture] [varchar](500) NULL,
[Time] [datetime] NULL,[PK_News] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]ANSI_PADDING OFF
/****** Object: Table [dbo].[aspnet_SchemaVersions] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_SchemaVersions](
[Feature] [nvarchar](128) NOT NULL,
[CompatibleSchemaVersion] [nvarchar](128) NOT NULL,
[IsCurrentVersion] [bit] NOT NULL,KEY CLUSTERED
(
[Feature] ASC,
[CompatibleSchemaVersion] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Applications] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Applications](
[ApplicationName] [nvarchar](256) NOT NULL,
[LoweredApplicationName] [nvarchar](256) NOT NULL,
[ApplicationId] [uniqueidentifier] NOT NULL,
[Description] [nvarchar](256) NULL,KEY NONCLUSTERED
(
[ApplicationId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],NONCLUSTERED
(
[LoweredApplicationName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY],NONCLUSTERED
(
[ApplicationName] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Coach] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONANSI_PADDING ONTABLE [dbo].[Coach](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Name] [varchar](100) NOT NULL,
[Surname] [varchar](100) NOT NULL,
[DateOfBirth] [datetime] NOT NULL,
[Nationality] [varchar](100) NOT NULL,
[Sex] [varchar](10) NOT NULL,
[StartCareerDate] [datetime] NOT NULL,[PK_Coach] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]ANSI_PADDING OFF
/****** Object: Table [dbo].[Footballer_Club] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Footballer_Club](
[FootballerId] [bigint] NOT NULL,
[ClubId] [bigint] NOT NULL,[PK_Footballer_Club] PRIMARY KEY CLUSTERED
(
[FootballerId] ASC,
[ClubId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Coach_Club] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Coach_Club](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[ClubId] [bigint] NOT NULL,
[CoachId] [bigint] NOT NULL,
[StartCooperation] [datetime] NOT NULL,
[EndCooperation] [datetime] NULL,[PK_Coach_Club] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Club_Tropy] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Club_Tropy](
[ClubId] [bigint] NOT NULL,
[TrophyId] [bigint] NOT NULL,
[DateVictory] [datetime] NOT NULL,[PK_Club_Tropy] PRIMARY KEY CLUSTERED
(
[ClubId] ASC,
[TrophyId] ASC,
[DateVictory] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Paths] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Paths](
[ApplicationId] [uniqueidentifier] NOT NULL,
[PathId] [uniqueidentifier] NOT NULL,
[Path] [nvarchar](256) NOT NULL,
[LoweredPath] [nvarchar](256) NOT NULL,KEY NONCLUSTERED
(
[PathId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Users] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Users](
[ApplicationId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[UserName] [nvarchar](256) NOT NULL,
[LoweredUserName] [nvarchar](256) NOT NULL,
[MobileAlias] [nvarchar](16) NULL,
[IsAnonymous] [bit] NOT NULL,
[LastActivityDate] [datetime] NOT NULL,KEY NONCLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Roles] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Roles](
[ApplicationId] [uniqueidentifier] NOT NULL,
[RoleId] [uniqueidentifier] NOT NULL,
[RoleName] [nvarchar](256) NOT NULL,
[LoweredRoleName] [nvarchar](256) NOT NULL,
[Description] [nvarchar](256) NULL,KEY NONCLUSTERED
(
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Match] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Match](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[DateOfMatch] [datetime] NULL,
[StadiumId] [bigint] NOT NULL,
[RefereeId] [bigint] NOT NULL,
[ClubId_1] [bigint] NOT NULL,
[ClubId_2] [bigint] NOT NULL,
[Goals_1] [bigint] NOT NULL,
[Goals_2] [bigint] NOT NULL,[PK_Match] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Goal] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Goal](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[MatchId] [bigint] NOT NULL,
[FootballerId] [bigint] NOT NULL,
[NumberOfGoals] [bigint] NOT NULL,
[GoalTime] [bigint] NOT NULL,[PK_Goal] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[Comment] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[Comment](
[Id] [bigint] IDENTITY(1,1) NOT NULL,
[Time] [datetime] NULL,
[Body] [nvarchar](max) NOT NULL,
[NewsId] [bigint] NOT NULL,
[LoginId] [uniqueidentifier] NOT NULL,[PK_Comment] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_UsersInRoles] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_UsersInRoles](
[UserId] [uniqueidentifier] NOT NULL,
[RoleId] [uniqueidentifier] NOT NULL,KEY CLUSTERED
(
[UserId] ASC,
[RoleId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Profile] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Profile](
[UserId] [uniqueidentifier] NOT NULL,
[PropertyNames] [ntext] NOT NULL,
[PropertyValuesString] [ntext] NOT NULL,
[PropertyValuesBinary] [image] NOT NULL,
[LastUpdatedDate] [datetime] NOT NULL,KEY CLUSTERED
(
[UserId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_PersonalizationPerUser] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_PersonalizationPerUser](
[Id] [uniqueidentifier] NOT NULL,
[PathId] [uniqueidentifier] NULL,
[UserId] [uniqueidentifier] NULL,
[PageSettings] [image] NOT NULL,
[LastUpdatedDate] [datetime] NOT NULL,KEY NONCLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_PersonalizationAllUsers] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_PersonalizationAllUsers](
[PathId] [uniqueidentifier] NOT NULL,
[PageSettings] [image] NOT NULL,
[LastUpdatedDate] [datetime] NOT NULL,KEY CLUSTERED
(
[PathId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
/****** Object: Table [dbo].[aspnet_Membership] Script Date: 12/08/2012 21:17:54 ******/ANSI_NULLS ONQUOTED_IDENTIFIER ONTABLE [dbo].[aspnet_Membership](
[ApplicationId] [uniqueidentifier] NOT NULL,
[UserId] [uniqueidentifier] NOT NULL,
[Password] [nvarchar](128) NOT NULL,
[PasswordFormat] [int] NOT NULL,
[PasswordSalt] [nvarchar](128) NOT NULL,
[MobilePIN] [nvarchar](16) NULL,
[Email] [nvarchar](256) NULL,
[LoweredEmail] [nvarchar](256) NULL,
[PasswordQuestion] [nvarchar](256) NULL,
[PasswordAnswer] [nvarchar](128) NULL,
[IsApproved] [bit] NOT NULL,
[IsLockedOut] [bit] NOT NULL,
[CreateDate] [datetime] NOT NULL,
[LastLoginDate] [datetime] NOT NULL,
[LastPasswordChangedDate] [datetime] NOT NULL,
[LastLockoutDate] [datetime] NOT NULL,
[FailedPasswordAttemptCount] [int] NOT NULL,
[FailedPasswordAttemptWindowStart] [datetime] NOT NULL,
[FailedPasswordAnswerAttemptCount] [int] NOT NULL,
[FailedPasswordAnswerAttemptWindowStart] [datetime] NOT NULL,
[Comment] [ntext] NULL,KEY NONCLUSTERED
(
4. РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ
Для администратора имеются возможности добавления новых автомобилей, просмотра информации о покупателях, работниках, поставщиках.
Стартовая страница портала выглядит следующим образом:
Рисунок 4.1 -Стартовая страница автосалона
На стартовой странице в верхней части находятся основные пункты меню для навигации по сайту автосалона. В правом верхнем углу находится текущее состояние пользователя (в данном случае пользователь не зарегистрирован и доступен переход по ссылке LogIn (входа)).
Перейдём на страницу входа в учётную запись пользователя:
Рисунок 4.2-Страница входа в учётную запись
На странице входа отображается форма для ввода информации об уже зарегистрированном пользователе. Если пользователь ещё не зарегистрирован, то необходимо перейти, щёлкнув по ссылке Register. В этом случае появится окно для регистрации пользователя (необходимо будет ввести логин, пароль, адрес электронной почты).
Рисунок 4.3-Окно регистрации нового пользователя
Если пользователь не заполнит какое-либо из полей, либо введенные данные в полях «EnterPassword»и «ConfirmPassword» будет выведена информация о неправильном заполнении формы регистрации.
Рисунок 4.4-Предупреждения о неправильности заполнения формы регистрации
После входа в свою учетную пользователь попадает на главную страницу и теперь может оформить заказ или осуществить поиск по сайту. Перейдя в пункт меню «Autos»пользователь сможет увидеть список всех доступных автомобилей в салоне.
Рисунок 4.5-раздел «Autos»
Выбрав пункт меню «ClientBase» на экране появится таблица, содержащая информацию обо всех клиентах автосалона.
Перейдем к пункту меню «CkeckOut». Здесь пользователь может оформить свой заказ, ему будет предоставлена таблица доступных автомобилей, кликнув по нужному пункту, он перейдет к оформлению заказа
Рисунок 4.6-поиск автомобиля по критериям
Как видно из рисунка, пользователь может заполнить лишь необходимые ему поля. При нажатии на кнопку Checkсистема выдаст все возможные результаты поиска. В данном случае соответствует 1 найденная запись.
Внизу расположены две кнопки «Yes» и «No». В зависимости от выбора пользователя будет оформлен заказ или возврат на предыдущую страницу.
ЗАКЛЮЧЕНИЕ
В результате выполнения курсовой работы была разработана работоспособная модель базы данных, которая позволяет обеспечить функционирование автосалона и хранить информацию о доступных автомобилях, клиентах, сотрудниках, поставщиках. Например, автомобилю соответствует следующая информация: модель, цвет, дата выпуска, количество мест для сидения, тип топлива, расход топлива и стоимость.
В разработанном программном средстве присутствует разделение существующих пользователей по ролям. В зависимости от роли пользователь получает доступ и к новым возможностям портала. Пользователи с ролью администратора могут добавлять автомобили в список доступных и просматривать всю необходимую информацию о клиентах, поставщиках, сотрудниках и т.д.
Пользователи имеют возможность просматривать список доступных автомобилей, выбирать поиск автомобиля по заданным критериям, оформлять заказ.
ПРИЛОЖЕНИЕ А
(рекомендуемое)
Программный модуль административных операций
usingSystem;.Collections.Generic;.Linq;.Web;.Web.Mvc;.Web.Security;.Data.Entities.EntityFramework;.Data.Repositories.Interfaces;.Web.Constants;.Web.Helpers;.Web.Helpers.Enums;.Web.Models.Account;.Web.Models.Admin;.Web.Controllers
{
[Authorize(Roles = "Admin")]class AdminController : Controller
{_adminRepository;(IAdminRepositoryadminRepository)
{
_adminRepository = adminRepository;
}
[HttpGet]Index()
{View();
}
#region User actions
[HttpGet]Users()
{model = new EditModel {Users = _adminRepository.Users(), RegisterModel = new RegisterModel()};View(model);
}
[HttpPost](string login)
{
{= Membership.DeleteUser(login);(!isSuccess)
{new JsonResult
{Data = new {status = UserOperationStatus.Failure, message = "Can't delete user!"}};
}
}(Exception ex)
{new JsonResult {Data = new {status = UserOperationStatus.Failure, message = ex.Message}};
}new JsonResult {Data = new {status = UserOperationStatus.Success, message = ""}};
}
[HttpPost](string login)
{user = _adminRepository.GetUser(login);= Roles.GetRolesForUser(login)[0];new JsonResult {Data = new {login = user.UserName, email = user.Email, role = userRole}};
}
[HttpGet]()
{("_AdminRegisterTemplate");
}
[HttpPost]
[ValidateInput(false)](RegisterModel user, string role)
{
_adminRepository.CreateUser(user.Login, user.Password, user.Email, role);("Users", "Admin");
}
[HttpPost](string login)
{= (login != HttpUtility.HtmlEncode(login));(isLoginContainsHtml)
{new JsonResult {Data = new {status = UserOperationStatus.Failure, message = "Login must be without html tags!"}};
}user = _adminRepository.GetUser(login);user == null
? newJsonResult { Data = new { status = UserOperationStatus.Success, message = "" } }
: newJsonResult { Data = new { status = UserOperationStatus.Failure, message = "Current login already exists!" } };
}
[HttpPost](string login, string oldRole, string newRole)
{
{.RemoveUserFromRole(login, oldRole);.AddUserToRole(login, newRole);
}(Exception ex)
{new JsonResult {Data = new {status = UserOperationStatus.Failure, message = ex.Message}};
}new JsonResult {Data = new {status = UserOperationStatus.Success, message = ""}};
}
#endregion
#region News actions
[HttpGet]News()
{= _adminRepository.News();models = new List<NewsCommentsModel>(allNews.Count());(var news in allNews)
{= _adminRepository.GetCommentsCount(news.Id);.Add(new NewsCommentsModel {News = news, CommentsCount = commentsCount});
}View(models);
}
#endregion
ПРИЛОЖЕНИЕ Б
Диаграмма классов проекта
ПРИЛОЖЕНИЕВ
Схема базы данных
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Курсовая работа (т)
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ