Тематические 'онлайн-магазины'
Оглавление
ВВЕДЕНИЕ
.
АНАЛИЗ ПРЕДМЕТНОЙ ОБЛАСТИ
.1 Анализ
существующих аналогов
.1.1
интернет-портал «onliner.by»
.1.2
интернет-магазин «ebay.com»
.1.3
интернет-магазин «eda.by»
.
РАЗРАБОТКА ПРОГРАММНОГО СРЕДСТВА И БАЗЫ ДАННЫХ
.1
Спецификация требований
.1.1
Варианты использования ПС и БД
.2
Архитектурное решение проекта
.3
Обоснование выбора информационных технологий
.
ИНФОЛОГИЧЕСКАЯ МОДЕЛЬ БАЗЫ ДАННЫХ
.1
Разработка модели базы данных
.2
Схема базы данных на языке SQL
.
РУКОВОДСТВО ПО ЭКСПЛУАТАЦИИ
ЗАКЛЮЧЕНИЕ
СПИСОК
ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ПРИЛОЖЕНИЕ
А
ПРИЛОЖЕНИЕ
Б
ПРИЛОЖЕНИЕ
В
ВВЕДЕНИЕ
В наше время тематические «онлайн-магазины» привлекают внимание все
большего числа пользователей со всего мира. Дело в том, что именно в Интернете
вы можете в любое время суток найти нужную и, самое главное, актуальную
информацию. Кроме того, только в сети без особых проблем можно читать не только
новости, но и посещать различные развлекательные порталы, узнавать прогноз
погоды, общаться с друзьями. Также последнее время стали пользоваться
популярностью так называемые интернет-магазины. Вы можете без проблем найти
необходимую вам вещь, узнать подробные характеристики, сравнить с аналогами,
узнать точную цену не выходя из дома.
В настоящее время во всех больших коммерческих приложениях используются
базы данных. Именно повсеместность их использования и вынуждает разработчиков
изучать эту область в информационных технологиях.
Некоторое время назад существовала проблема, заключавшаяся в том, как и
где хранить данные: разбивать все по подкаталогам или хранить в одном файле, а
может и то и другое. Помимо этого, подход, заключавшийся в том, чтобы сам
программист контролировал, где лежит тот или иной файл, увеличивал не только
сложность разработки ПО, но и количество ошибок, а также время и стоимость
разработки. Сейчас все большее значение придается сетевому взаимодействию или
доступу к данным, используя интернет. Т.е. возникает еще ряд вопросов,
связанных с безопасностью.
Эти проблемы в большей части исчезли после введения прослойки между
представлением данных на диске и данными в программе. Решением стали базы
данных и системы управления базами данных. В зависимости от разработчика или
конкретных настроек СУБД определяет, как и где ей хранить данные. Помимо этого,
все СУБД предоставляют механизм для получения этих данных в удобной для
дальнейшего использования форме - «запросы». С их помощью можно указать
критерии выбора данных, отсортировать данные в нужном порядке, сгруппировать,
как того требует задание, и т.п. Помимо этого, большинство СУБД поддерживает
механизм разграничения прав доступа, т.е. достаточно указать, какие данные
какому пользователю можно или нельзя получать, а все остальное возьмет на себя
СУБД.
Существуют различные модели организации данных. Вот некоторые из них:
- иерархическая;
- сетевая;
- реляционная;
- объектная и
объектно-ориентированная
<#"657027.files/image001.jpg">
Рисунок 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]
/****** 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
(
)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,
(
[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
ПРИЛОЖЕНИЕ Б
Диаграмма классов проекта
ПРИЛОЖЕНИЕВ
Схема базы данных