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

Разработка сайта компании ООО «Весна». (Продажа бытового инструмента)

Содержание:

Введение

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

На сегодняшний день иметь свой сайт во всемирной сети стало не столько делом престижа, сколько необходимостью. В прежние времена, престиж фирмы, имеющей сайт в Интернете, автоматически поднимался в глазах клиентов, теперь же иметь свой сайт - дело абсолютно нормальное и его отсутствие у организации вызывает недовольство у потенциальных клиентов, а иногда и негативное отношение. В современном мире основным средством получения информации люди все чаще называют Интернет, а число пользователей сети по данным, изложенных в докладе ООН Global Broadband Progress от 18.09.2020, составило 3,58 миллиарда человек и по прогнозам будет постоянно расти. Сайт, как инструмент маркетинга, в нее заложены огромные возможности.

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

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

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

Все выше сказанное не позволяет усомниться в актуальности курсовой работы.

Объектом исследования является веб-сайт ООО «Весна».

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

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

  1. обосновать выбор средств реализации.
  2. Описать модули серверной части программы и их взаимодействие.
  3. Описать структуры базы данных и ее функций.
  4. Описать структуры клиентской части.

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

1. Техническое задание и выбор средств реализации.

Наименование разработки

Web–сайт для ООО «Весна».

1.2 Назначение документа

Настоящее Техническое задание определяет требования и порядок разработки web–сайт компании ООО «Весна».

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

Задание выполняется на предприятии ООО «Весна» - магазина по продаже бытового инструмента.

1.4 Краткие сведения о компании

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

2 Назначение и цели создания сайта

2.1 Назначение сайта Сайт должен представлять компанию «Весна» в Интернете, поддерживать её положительный и современный имидж, знакомить посетителей с продукцией компании.

2.2 Цели создания сайта

Цель сайта – познакомить посетителей с компанией, направлениями её деятельности и продукцией, предоставить информацию о способах приобретения продукции.

2.3 Целевая аудитория

В целевой аудитории web–приложения можно выделить следующие группы:

1. Покупатели;

2. Партнеры.

3 Требования к системе

3.1 Требования к системе в целом

Сайт должен быть разработан на технологии ASP.NET. В качестве сервера базы данных использовать Microsoft SQL Server. Необходимо создать клиентскую и администраторскую части сайта. Клиентская часть сайта должна быть доступна широкому кругу пользователей. Администраторская часть – только администраторам сайта, имеющие права (логин и пароль) на доступ. Необходимо обеспечить возможность Заказчику самостоятельно вносить изменения (редактировать) содержимое страниц сайта в администраторской части сайта.

3.2 Требования к разграничению доступа

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

1. Посетители (незарегистрированные)

2. Посетители (зарегистрированные)

3. Администраторы сайта.

3.3 Требования к дизайну

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

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

3.3.2 Эскиз страницы (пропорции элементов дизайна, размеры шрифтов и заголовков и расстояния между элементами в эскизах являются условными).

Picture 1

Рисунок 1. Типовая страница

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

Веб-браузер: Internet Explorer 10 и выше, или Mozilla 6.0 и выше, или Opera 11 и выше, или Chrome 7 и выше.

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

Веб-сервер: IIS 8.0

Microsoft Windows 7

3.5 Требования к аппаратному обеспечению

Аппаратное обеспечение серверной части должно удовлетворять следующим требованиям:

2 GHz CPU Intel Core i3, 4 GB RAM, 20 GB HDD.

2. Описание модулей серверной части программы и их взаимодействие.

Для создания интернет–магазина была выбрана платформа ASP.NET. Для ответа обоснования выбора отметим отличительные особенности выбранной платформы. Технология ASP.NET является развитием Active Server Page (ASP).

Данная технология представляет собой универсальную платформу для разработки веб-приложений корпоративного уровня. ASP.NET предлагает новую модель программирования и инфраструктуру, которые позволяют разрабатывать защищенные и масштабируемые решения[4, с. 90].

Решение реализовано с помощью паттерна MVC 5[5, с. 18]. Концепция паттерна (шаблона) MVC (model - view - controller) предполагает разделение приложения на три компонента: Контроллер (controller) представляет класс, обеспечивающий связь между пользователем и системой, представлением и хранилищем данных. Он получает вводимые пользователем данные и обрабатывает их. И в зависимости от результатов обработки отправляет пользователю определенный вывод, например, в виде представления.

Представление (view) – это собственно визуальная часть или пользовательский интерфейс приложения. Как правило, html-страница, которую пользователь видит, зайдя на сайт.

Модель (model) представляет класс, описывающий логику используемых данных.

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

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

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

Свою реализацию паттерна представляет платформа ASP.NET MVC. 2013 год ознаменовался выходом новой версии ASP.NET MVC – MVC 5[6, с. 99], а также релизом Visual Studio 2013, которая предоставляет инструментарий для работы с MVC5.

ASP.NET имеет следующие функциональные возможности:

1. Простота развертывания. Развертывание ASP.NET приложений выполняется путем копирования файлов приложения в специальную папку на web-сервере. Перезапуск web-сервера не требуется.

2. Средства безопасности. Разработчик ASP.NET может использовать в своем приложении любую из предлагаемых типовых схем авторизации и аутентификации пользователей.

3. Поддержка национальных языков. ASP.NET использует Unicode и разработчики имеют возможность применять в своих проектах национальные алфавиты.

4. Высокая производительность. ASP.NET имеет дело со скомпилированным кодом. Благодаря этому ASP.NET получает возможность эффективно использовать различные механизмы оптимизации кода.

5. Поддержка мобильных устройств. ASP.NET поддерживается любым браузером, запущенным на любом устройстве (заявление Microsoft).

6. Возможности отладки. ASP.NET обеспечивает возможность трассировки и отладки кода приложений.

7. Интеграция с .NET Framework. ASP.NET является частью платформы .NET Framework. Разработчики могут использовать возможности, предоставляемые этой платформой при создании приложений [9, с. 113].

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

В качестве языка реализации был выбран C# в виду следующих его преимуществ:

1. C# является объектно-ориентированным языком;

2. Язык C# разрабатывался параллельно с каркасом Framework .Net и в полной мере учитывает все его возможности;

3. C# является наследником языков C/C++. Эти языки имеют общий синтаксис, что облегчает переход от С++ к C#;

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

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

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

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

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

Picture 7

Рисунок 2. Структура интернет – магазина

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

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

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

В администрировании будут содержаться основные настройки интернет- магазина, такие как:

  1. Формы регистрации клиента в Интернет-ресурсе;
  2. Упаковки и доставки товара;
  3. Редактирование каталога товаров;
  4. Управление зарегистрированными клиентами
  5. Управление оформленными заказами;
  6. Незавершенные заказы;
  7. Резервное копирование БД.

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

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

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

3. Описание структуры базы данных и ее функций.

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

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

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

База данных разрабатываемого интернет-магазина состоит из 9 таблиц рисунок 3.

Picture 8

Рисунок 3. Диаграмма базы данных

Таблица dbo.User (таблица 1) содержит уникальный номер пользователя и его данные, предоставляемые при регистрации.

Таблица 1

Структура dbo.User

Поле

Тип

Описание

Id

bigint

Идентификатор записи в таблице

RegDate

datetime

Дата регистрации

Email

varchar(50)

Адрес электронной почты

FirstName

nvarchar(50)

Имя

LastName

nvarchar(50)

Фамилия

Phone

char(15)

Телефон

Password

nchar(36)

Пароль

RoleId

bigint

Роль пользователя

Cookies

nchar(36)

Куки пользователя

Таблица dbo.Basket (таблица 2) необходима для хранения данных о товарах, которые пользователь собирается купить. Когда пользователь добавляет новую вещь себе в «корзину», то автоматически происходит запись в данную таблицу.

Таблица 2

Структура dbo.Basket

Поле

Тип

Описание

Id

bigint

Идентификатор записи в таблице

UserId

bigint

Идентификатор пользователя

ProductId

bigint

Идентификатор товара

Count

Int

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

Таблица dbo.Product (таблица 3) содержит данные о продуктах, выставленных на продажу.

Таблица 3

Структура dbo.Product

Поле

Тип

Описание

Id

bigint

Идентификатор записи в таблице

RegDate

datetime

Дата регистрации

Title

varchar(200)

Отображаемое наименование

Description

text

Описание

CategoryId

bigint

Идентификатор категории товара

Price

float

Цена

IsActive

int

Статус товара

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

Таблица 4

Структура dbo.Order

Поле

Тип

Описание

Id

bigint

Идентификатор записи в таблице

UserId

bigint

Идентификатор пользователя

AddDate

datetime

Дата заказа

Coments

text

Комментарий к заказу

Adress

text

Адрес доставки

StateId

bigint

Идентификатор состояния заказа

PaymentDate

datetime

Дата проведения оплаты

PaymentSumm

float

Сумма оплаты

Таблица dbo.OrderItem (таблица 5) представляет собой таблицу позиций заказов. В данной таблице отображаются записи о товарах, которые пользователи заказали.

Таблица 5

Структура dbo.OrderItem

Поле

Тип

Описание

Id

bigint

Идентификатор записи в таблице

OrderId

bigint

Идентификатор пользователя

ProductId

bigint

Идентификатор выбранного товара

Count

int

Количество оставшихся дней до удаления заказа.

Cost

float

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

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

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

4. Описание структуры клиентской части.

4.1. Описание интерфейса «Обычный пользователь».

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

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

Используемые регулярные выражения:

рим.png

Для каждого пользователя приложения создается своя собственная сессия со своими собственными значениями. Для идентификации пользователей ASP.NET использует 120-битный ключ, именуемый SessionID и состоящий только из ASCII-символов, которые допустимы для использования в URL. При поступлении запроса от пользователя, который не имеет SessionID в URL запроса, инициируется создание новой сессии. При этом происходит генерация нового уникального SessionID. После чего возникает событие Session_Start веб-приложения.

Сессия существует до тех пор, пока пользователь работает с веб-приложением и еще немного после. Для этого в настройках аппликации выставляется таймаут сессии, который по умолчанию составляет 20 минут. Т.е. если пользователь в течение 20 минут не совершил ни одного запроса к приложению, то сессия этого пользователя уничтожается. При этом возникает событие Session_End приложения. В текущем проекте время сессии было укорочено до 5 минут из соображений безопасности. В реализованной подсистеме сессия используется для хранения объекта класса User, в котором хранятся данные о текущем пользователе системы.

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

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

рис 10.png

Рисунок 4. Страница «Регистрации»

Если регистрация прошла успешно, то пользователя возвращают на окно «Вход в систему» рисунок 6. Аутентификация выполняется с помощью форм.

Если пользователь успешно прошел проверку, необходимо просто сообщить инфраструктуре ASP.NET об успехе операции (вызвав метод класса FormsAuthentication), и исполняющая система автоматически устанавливает аутентифицирующий cookie-набор (который в действительности содержит мандат) и переадресует пользователя на запрошенную им страницу. С этим запросом исполняющая система определяет, что аутентифицирующий cookie-набор с мандатом доступен и открывает доступ к странице. Этот процесс показан на рисунке 5.

Picture 10

Рисунок 5. Процесс аутентификации форм

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

1 Полный контроль над кодом аутентификации.

2 Полный контроль над внешним видом формы регистрации.

3 Работает с любым браузером.

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

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

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

Страница «Вход в систему», изображена на рисунке 6, выполнена так же с использованием стандартных элементов управления ASP.NET, таких как textbox, label, validator. Для входа в систему пользователю необходимо ввести свой логин и пароль, при ошибке ввода или несоответствии введенных данных пользователь увидит сообщение «Такого пользователя нет в системе». Так же пользователю предоставляется быстрый переход к странице «Регистрации».

рис 12.png

Рисунок 6. Страница «Вход в систему»

Детальный просмотр товара реализован в виде отображения внешнего вида и его детального описания с указанием цены. Для добавления товара в корзину необходимо нажать соответствующую кнопку на экране. Средства ASP.Net позволяет создавать насыщенные, визуально привлекательные веб-страницы, работающие в различных обозревателях, устройствах и настольных операционных системах (например, Apple Macintosh). Пример работы данного компонента изображен на рисунке 7.

рис 13.png

Рисунок 7. Детальный просмотр товара

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

каталог.png

Рисунок 8. Каталог товаров

Внешний вид каталога товаров приведен на рисунке 8. Отличительной функциональной особенностью является реакция на нажатие кнопки «Купить». При нажатии на эту кнопку выбранный товар добавляется в корзину и при этом не происходит перезагрузка страницы. Достигается это использованием технологий AJAX, что позволяет не перезагружать всю страницу посредством каких–либо манипуляций, а обновлять только её часть. Инструкции для работы с элементами таблицы (товарами) записаны в JavaScript–файлах, которые загружаются на сторону клиента при входе на сайт.

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

рис 15.png

Рисунок 9. Корзина пользователя

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

Так же работа корзины сопровождается с использованием cookie. Cookie — применяются для сохранения данных на стороне пользователя, на практике обычно используется для:

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

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

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

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

Как упоминалось ранее, для поиска товара необходим полнотекстовый поиск(full text search). Полнотекстовые запросы выполняют лингвистический поиск в текстовых данных в полнотекстовых индексах путем обработки слов и фраз в соответствии с правилами данного языка, например английского или японского.

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

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

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

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

На рисунке 10 приведена блок–схема регистрации пользователя, а на рисунке 11 блок–схема алгоритма оформления.

hbc 17.png

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

hbc 18.png

Рисунок 11. Блок–схема алгоритма оформления заказа

4.2. Описание интерфейса «Администратор»

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

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

На рисунке 12 отображена страница редактирования товаров представленных в интернет–магазине.

рис 28.png

Рисунок 12. Страница добавления товара

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

Для этого можно использовать либо встроенный в SQL Server планировщик заданий – «SQL Server Agent» либо стандартный «Планировщик Windows» в сочетании с утилитой SQLCMD.EXE, которая позволяет выполнять запросы к SQL Server из командной строки[1, с. 212].

Настройка обслуживания.

Полное ежедневное обслуживание (в 00:00 местного времени, каждый день):

- проверка целостности баз данных экземпляра MS SQL Server (все базы данных);

- полное обновление статистики базы данных (только БД магазина);

- очистка журнала экземпляра MS SQL Server;

- полное резервное копирование баз данных экземпляра MS SQL Server (все базы данных);

- в случае успешного завершения резервного копирования баз данных экземпляра - удаление устаревших резервных копий баз данных (период хранения – 1 неделя);

- в случае успешного завершения резервного копирования баз данных экземпляра – удаление устаревших файлов журналов резервного копирования (период хранения – 2 недели);

- в случае успешного завершения резервного копирования баз данных экземпляра – реорганизация индексов таблиц базы данных (только БД магазина);

- в случае успешного завершения резервного копирования баз данных экземпляра и успешного завершения реорганизации индексов БД – сжатие лога транзакций БД магазина;

- создание файла-журнала резервного копирования;

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

- копирование файлов резервных копий на дублирующее хранилище вне сервера (период хранения – 1 неделя).

Создание инкрементальных копий (с 6:00 по 23:30 местного времени, каждые 15 мин.):

- формирование инкрементальных (нарастающим итогом) резервных копий журнала транзакций БД магазина;

- в случае успешного завершения резервного копирования журнала транзакций БД магазина – удаление устаревших резервных копий журнала транзакций (период хранения – 24 часа);

- создание файла-журнала резервного копирования;

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

Тестовое восстановление БД магазина (один раз в промежутке времени не менее 2-3 недель):

- восстановление БД магазина из резервных копий на тестовом экземпляре MS SQL Server.

Для проверки работоспособности резервных копий.

4.3. Инструкция пользователя

При посещении сайта, пользователь попадает на главную страницу сайта (default page). На которой представлен практически весь инструментарий доступный пользователю.

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

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

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

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

Заказ Товара может осуществляться:

- в Розничном магазине;

- в Интернет-магазине — через Сайт или по телефонам, указанным на Сайте.

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

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

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

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

Оплата Товара за наличный расчет осуществляется:

- в Розничном магазине в момент осуществления Заказа или в момент передачи Товара Покупателю;

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

Оплата Товара по безналичному расчету осуществляется:

- путем оплаты платежной картой в момент оформления Заказа или в момент получения Товара Покупателем;

- путем перечисления безналичных денежных средств на расчетный счет Продавца (при условии указания в платежном поручении номера Интернет-Заказа, по которому производится оплата);

- путем использования электронных средств платежа.

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

 Доставка Товара, заказанного в Интернет-магазине, осуществляется несколькими способами:

- самовывоз из Розничного магазина — бесплатно;

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

- транспортной компанией в регионы (в соответствии с тарифами, установленными данной компанией).

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

Расходы по Доставке товара, если они предусмотрены, оплачиваются Покупателем. Исключение составляют акции Интернет-магазина, которые предполагают бесплатную доставку.

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

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

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

Заключение

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

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

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

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

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

  1. 47 готовых решений для создания Web-сайта (+ DVD-ROM) / А.Г. Богданов и др. - М.: Триумф, 2015. - 272 c.
  2. Web-дизайн с нуля! (+ CD-ROM) / П.П. Константинов и др. - М.: Лучшие книги, 2015. - 304 c.
  3. Вандюк, Джон К. CMS Drupal. Руководство по разработке системы управления сайтом / Вандюк, Джон К., Мэтт Вестгейт,. - М.: Вильямс, 2016. - 400 c.
  4. Гаевский, А.Ю. 100% самоучитель. Создание Web-страниц и Web-сайтов. HTML и JavaScript / А.Ю. Гаевский, В.А. Романовский. - М.: Триумф, 2015. - 464 c.
  5. Гончаров, А. Web-дизайн / А. Гончаров. - Москва: ИЛ, 2016. - 320 c.
  6. Дронов, Владимир JavaScript и AJAX в Web-дизайне / Владимир Дронов. - Москва: Высшая школа, 2016. - 736 c.
  7. Китинг Flash MX. Искусство создания web-сайтов / Китинг, Джоди. - М.: ТИД ДС, 2014. - 848 c.
  8. Митчелл 5 проектов Web-сайтов от фотоальбома до магазина / Митчелл, Скотт. - М.: НТ Пресс, 2014. - 224 c.
  9. Консорциум W3C или современные стандарты всемирной паутины. URL: http://www.designonstop.com/webdesign/article/konsorcium-w3c-ili-sovremennye-standarty-vsemirnoj-pautiny.htm/

Приложение

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

namespace Магазин_компьютерной_техники

{

public partial class Form2 : Form

{

public int current, current33, current4;

public Form2()

{

InitializeComponent();

dataGridView2.Visible = panel4.Visible = panel1.Visible = panel2.Visible = panel3.Visible

= panel5.Visible = panel6.Visible = false;

dataGridView3.RowHeadersVisible = dataGridView6.Visible = false;

comboBox1.SelectedIndex = 4;

comboBox2.SelectedIndex = 10;

comboBox1.DropDownWidth = comboBox3.DropDownWidth = 210;

comboBox2.DropDownWidth = comboBox4.DropDownWidth = 210;

}

private void Form2_Load(object sender, EventArgs e)

{

// TODO: данная строка кода позволяет загрузить данные в таблицу "computerShopDataSet.Tovar". При необходимости она может быть перемещена или удалена.

this.tovarTableAdapter.Fill(this.computerShopDataSet.Tovar);

// TODO: данная строка кода позволяет загрузить данные в таблицу "computerShopDataSet.goodProd". При необходимости она может быть перемещена или удалена.

this.goodProdTableAdapter.Fill(this.computerShopDataSet.goodProd);

// TODO: данная строка кода позволяет загрузить данные в таблицу "computerShopDataSet.Prodagi". При необходимости она может быть перемещена или удалена.

this.prodagiTableAdapter.Fill(this.computerShopDataSet.Prodagi);

// TODO: данная строка кода позволяет загрузить данные в таблицу "computerShopDataSet.goodTovar". При необходимости она может быть перемещена или удалена.

this.goodTovarTableAdapter.Fill(this.computerShopDataSet.goodTovar);

}

private void pictureBox1_MouseMove(object sender, MouseEventArgs e)

{

Bitmap image1 = new Bitmap("img/update1.png");

pictureBox1.Image = image1;

}

private void pictureBox1_MouseLeave(object sender, EventArgs e)

{

Bitmap image1 = new Bitmap("img/update2.png");

pictureBox1.Image = image1;

}

// загрузка таблицы Товары

private void загрузитьТоравToolStripMenuItem_Click(object sender, EventArgs e)

{

panel3.Visible = true;

tabControl1.SelectedTab = tabPage1;// автоматическое открытие вкладки с таблицей Товары

}

//загрузка таблицы Продажи

private void загрузитьПродажиToolStripMenuItem_Click(object sender, EventArgs e)

{

panel4.Visible = true;

tabControl1.SelectedTab = tabPage2;// автоматическое открытие вкладки с таблицей Продажи

}

// добваление товара двойным щелчком

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

{

int sumProd = 0, idTovar = 0, kolSklad = 0, totalKol = 0;

current = dataGridView1.CurrentRow.Index;

textBox1.Text = Convert.ToString(dataGridView1.Rows[current].Cells[1].Value);

idTovar = Convert.ToInt32(dataGridView1.Rows[current].Cells[0].Value);

for (int i = 0; i < dataGridView2.RowCount; i++)

{

if (Convert.ToInt32(dataGridView2.Rows[i].Cells[6].Value) == idTovar)

{

sumProd += Convert.ToInt32(dataGridView2.Rows[i].Cells[2].Value);

}

else sumProd += 0;

}

kolSklad = Convert.ToInt32(dataGridView6.Rows[current].Cells[3].Value);

totalKol = kolSklad - sumProd;

textBox6.Text = totalKol.ToString();

textBox2.Text = "1";

panel2.Visible = true;

}

// добавление выбранного товара в корзину

private void button1_Click(object sender, EventArgs e)

{

current = dataGridView1.CurrentRow.Index;

dataGridView1.Rows[current].Selected = true;

panel1.Visible = true;

// вставка данных в корзину

int totalPrice = 0;

if( Convert.ToInt32(textBox2.Text) < Convert.ToInt32(textBox6.Text))

{

totalPrice = Convert.ToInt32(textBox2.Text) * Convert.ToInt32(dataGridView1.Rows[current].Cells[2].Value);

dataGridView3.Rows.Add(dataGridView1.Rows[current].Cells[0].Value, textBox1.Text,dataGridView1.Rows[current].Cells[2].Value, textBox2.Text, totalPrice);

// подсчет общей стоимости в корзине

int allTotalPrice = 0;

for (int i = 0; i < dataGridView3.RowCount-1; i++)

{

allTotalPrice += Convert.ToInt32(dataGridView3.Rows[i].Cells[4].Value);

textBox3.Text = allTotalPrice.ToString();

}

}

else

MessageBox.Show("Выбранное количество товара больше,\n чем имеется на складе.\n Введите меньшее число","Внимание");

//dataGridView3.Rows.Add(dataGridView2.RowCount, "1", textBox2.Text, totalPrice, DateTime.Today, "1", dataGridView1.Rows[current].Cells[0].Value);

}

// выделение всей строки в таблице Товары

private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)

{

current = dataGridView1.CurrentRow.Index;

dataGridView1.Rows[current].Selected = true;

}

// оформление всей продажи и занесение в таблицу Продажи

private void button2_Click(object sender, EventArgs e)

{

// получение текущего индекса продажи

int kodSell = 0, lastInd = 0, indTable = 0, kodTovar = 0, kolProd = 0, sumTovar = 0;

if (dataGridView2.RowCount != 1)

{

lastInd = dataGridView2.RowCount - 2;

kodSell = Convert.ToInt32(dataGridView2.Rows[lastInd].Cells[0].Value) + 1;

}

else kodSell = 1;

// вставить значения в таблицу продажи

for (int i = 0; i < dataGridView3.RowCount - 1; i++)

{

if (dataGridView2.RowCount != 1)

{

indTable = dataGridView2.RowCount+1;

}

else indTable = 1;

kodTovar = Convert.ToInt32(dataGridView3.Rows[i].Cells[0].Value);

kolProd = Convert.ToInt32(dataGridView3.Rows[i].Cells[3].Value);

sumTovar = Convert.ToInt32(dataGridView3.Rows[i].Cells[4].Value);

prodagiTableAdapter.Insert(indTable, kodSell, kolProd, sumTovar, DateTime.Now, 1, kodTovar);

prodagiTableAdapter.Update(computerShopDataSet);

prodagiTableAdapter.Fill(computerShopDataSet.Prodagi);

}

panel4.Visible = true;

tabControl1.SelectedTab = tabPage2;

goodProdTableAdapter.Fill(computerShopDataSet.goodProd);

dataGridView3.Rows.Clear();

textBox1.Text = textBox6.Text = textBox3.Text = "";

}

// очистка корзины

private void button3_Click(object sender, EventArgs e)

{

dataGridView3.Rows.Clear();

textBox3.Text = "";

}

// пересчитываем сумму оплаты при изменении количества товара

private void dataGridView3_CellValueChanged(object sender, DataGridViewCellEventArgs e)

{

int current3, newPrice = 0;

try

{

current3 = dataGridView3.CurrentRow.Index;

newPrice = Convert.ToInt32(dataGridView3.Rows[current3].Cells[2].Value) * Convert.ToInt32(dataGridView3.Rows[current3].Cells[3].Value);

dataGridView3.Rows[current3].Cells[4].Value = newPrice;

// пересчет общей стоимости всей продажи

int allTotalPrice = 0;

for (int i = 0; i < dataGridView3.RowCount - 1; i++)

{

allTotalPrice += Convert.ToInt32(dataGridView3.Rows[i].Cells[4].Value);

textBox3.Text = allTotalPrice.ToString();

}

}

catch

{

label5.Text = "";

}

}

// выделение строки в таблице Продажи

private void dataGridView4_CellClick(object sender, DataGridViewCellEventArgs e)

{

current4 = dataGridView4.CurrentRow.Index;

dataGridView4.Rows[current4].Selected = true;

}

// сортировака данных по полю Код товара

private void textBox11_TextChanged(object sender, EventArgs e)

{

int cr;

if (textBox11.Text != "")

{

cr = Convert.ToInt32(textBox11.Text);

goodTovarBindingSource.Filter = "ID_Tovar = " + cr;

}

else

{

cr = 0;

goodTovarBindingSource.Filter = "ID_Tovar <> " + cr;

}

}

// сортировка данных по полю Наименование

private void textBox12_TextChanged(object sender, EventArgs e)

{

string cr = "";

cr = textBox12.Text;

goodTovarBindingSource.Filter = "naimenovanie LIKE '%" + cr + "%'";

}

// выделение строки в таблице Продажи

private void dataGridView4_CellClick_1(object sender, DataGridViewCellEventArgs e)

{

current4 = dataGridView4.CurrentRow.Index;

dataGridView4.Rows[current4].Selected = true;

}

// сортировка данных по полю Цена за штуку

private void textBox14_TextChanged(object sender, EventArgs e)

{

int from, to;

if (textBox13.Text == "")

{

from = 0;

}

else from = Convert.ToInt32(textBox13.Text);

if (textBox14.Text != "")

{

to = Convert.ToInt32(textBox14.Text);

goodTovarBindingSource.Filter = "cena_shtyka >" + from + " AND cena_shtyka <" + to;

}

else

{

textBox13.Text = "";

goodTovarBindingSource.Filter = "cena_shtyka <> 0";

}

}

// сортировка данных по полю Категория

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)

{

switch (comboBox1.SelectedIndex)

{

}

// сортировка данных по полю Подкатегория

private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)

{

switch (comboBox2.SelectedIndex)

{

// подсчет общей стоимости цены всей покупки

private void dataGridView4_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

{

int currentID, totalPrice = 0;

panel5.Visible = true;

current4 = dataGridView4.CurrentRow.Index;

currentID = Convert.ToInt32(dataGridView4.Rows[current4].Cells[1].Value);

for (int i = 0; i < dataGridView4.RowCount; i++)

{

if (Convert.ToInt32(dataGridView4.Rows[i].Cells[1].Value) == currentID)

{

totalPrice += Convert.ToInt32(dataGridView4.Rows[i].Cells[4].Value);

}

else totalPrice += 0;

}

textBox4.Text = currentID.ToString();

textBox5.Text = totalPrice.ToString();

}

// открытие вкладки Редактирование товаров

private void редактироватьТоварыToolStripMenuItem_Click(object sender, EventArgs e)

{

tabControl1.SelectedTab = tabPage3;

panel6.Visible = true;

int lastId = 0, needId = 0;

lastId = dataGridView5.RowCount-2;

needId = Convert.ToInt32(dataGridView5.Rows[lastId].Cells[0].Value);

textBox7.Text = Convert.ToString(needId+1);

}

// кнопки становятся активными после редактирования какого - либо значения

private void dataGridView5_CellEndEdit(object sender, DataGridViewCellEventArgs e)

{

button4.Enabled = button5.Enabled = true;

}

// диалоговое окно, которое справшивает подтверждение на изменение данных

private void button4_Click(object sender, EventArgs e)

{

if(MessageBox.Show("Вы действительно хотите сохранить изменения?", "Сохранение",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

tovarTableAdapter.Update(computerShopDataSet);

button4.Enabled = button5.Enabled = false;

}

//else tovarTableAdapter.Fill(computerShopDataSet.Tovar);

}

// удаление из корзины 1 выбраного товара

private void dataGridView3_CellDoubleClick(object sender, DataGridViewCellEventArgs e)

{

current33 = dataGridView3.CurrentRow.Index;

dataGridView3.Rows.RemoveAt(current33);

if (dataGridView3.RowCount == 1)

{

textBox3.Text = "0";

}

int current3, newPrice = 0;

try

{

current3 = dataGridView3.CurrentRow.Index;

newPrice = Convert.ToInt32(dataGridView3.Rows[current3].Cells[2].Value) * Convert.ToInt32(dataGridView3.Rows[current3].Cells[3].Value);

dataGridView3.Rows[current3].Cells[4].Value = newPrice;

// пересчет общей стоимости всей продажи

int allTotalPrice = 0;

for (int i = 0; i < dataGridView3.RowCount - 1; i++)

{

allTotalPrice += Convert.ToInt32(dataGridView3.Rows[i].Cells[4].Value);

textBox3.Text = allTotalPrice.ToString();

}

}

catch

{

label5.Text = "";

}

}

// отмена изменений

private void button5_Click(object sender, EventArgs e)

{

tovarTableAdapter.Fill(computerShopDataSet.Tovar);

button4.Enabled = button5.Enabled = false;

}

// выход из пользователя Продавец

private void изПользователяToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

Form1 f1 = new Form1();

f1.Show();

}

// выход из программы

private void изПрограммыToolStripMenuItem_Click(object sender, EventArgs e)

{

this.Close();

Form1 f1 = new Form1();

f1.Close();

}

// добавление нового товара

private void button6_Click(object sender, EventArgs e)

{

int needInd = 0, needCost = 0, needKol = 0, needKat = 0, needPod = 0;

string needName;

if (textBox9.Text != "" && textBox10.Text != "" && textBox8.Text != "" &&

comboBox3.SelectedIndex > -1 && comboBox4.SelectedIndex > -1)

{

needInd = Convert.ToInt32(textBox7.Text);

needName = textBox8.Text;

needCost = Convert.ToInt32(textBox9.Text);

needKol = Convert.ToInt32(textBox10.Text);

switch (comboBox3.SelectedIndex)

{

case 0: needKat = 1; break;

case 1: needKat = 2; break;

case 2: needKat = 3; break;

case 3: needKat = 4; break;

}

switch (comboBox4.SelectedIndex)

{

case 0: needPod = 1; break;

case 1: needPod = 2; break;

case 2: needPod = 3; break;

case 3: needPod = 4; break;

case 4: needPod = 5; break;

case 5: needPod = 6; break;

case 6: needPod = 7; break;

case 7: needPod = 8; break;

case 8: needPod = 9; break;

case 9: needPod = 10; break;

}

tovarTableAdapter.Insert(needInd, needName, needCost, needKol, needKat, needPod);

//tovarTableAdapter.Update(computerShopDataSet);

tovarTableAdapter.Fill(computerShopDataSet.Tovar);

}

else

MessageBox.Show("Заполнены не все поля. \nПроверьте данные","Внимание!");

int lastId = 0, needId = 0;

lastId = dataGridView5.RowCount - 2;

needId = Convert.ToInt32(dataGridView5.Rows[lastId].Cells[0].Value);

textBox7.Text = Convert.ToString(needId + 1);

/*tovarTableAdapter.Update(computerShopDataSet);

tovarTableAdapter.Fill(computerShopDataSet.Tovar);*/

}

// удаление строки в таблице товар

private void dataGridView5_UserDeletingRow(object sender, DataGridViewRowCancelEventArgs e)

{

try

{

if (MessageBox.Show("Вы действительно хотите удалить строку?", "Сохранение",

MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)

{

int current, currentInd, currentCost, currentKol, currentKat, currentPod;

string currentName = "";

current = dataGridView5.CurrentRow.Index;

// формирование переменных

currentInd = Convert.ToInt32(dataGridView5.Rows[current].Cells[0].Value);

currentName = Convert.ToString(dataGridView5.Rows[current].Cells[1].Value);

currentCost = Convert.ToInt32(dataGridView5.Rows[current].Cells[2].Value);

currentKol = Convert.ToInt32(dataGridView5.Rows[current].Cells[3].Value);

currentKat = Convert.ToInt32(dataGridView5.Rows[current].Cells[4].Value);

currentPod = Convert.ToInt32(dataGridView5.Rows[current].Cells[5].Value);

// удаление нужной строки

tovarTableAdapter.Delete(currentInd, currentName, currentCost, currentKol, currentKat, currentPod);

}

}

catch

{

MessageBox.Show("Невозможно удалить товар, т.к. он имеется в продажах!", "Внимание!");

}

}

// обновление таблицы редактирования товаров

private void pictureBox1_Click(object sender, EventArgs e)

{

tovarTableAdapter.Fill(computerShopDataSet.Tovar);

int lastId = 0, needId = 0;

lastId = dataGridView5.RowCount - 2;

needId = Convert.ToInt32(dataGridView5.Rows[lastId].Cells[0].Value);

textBox7.Text = Convert.ToString(needId + 1);

}

private void pictureBox2_MouseMove(object sender, MouseEventArgs e)

{

Bitmap image1 = new Bitmap("img/update1.png");

pictureBox2.Image = image1;

}

private void pictureBox2_MouseLeave(object sender, EventArgs e)

{

Bitmap image1 = new Bitmap("img/update2.png");

pictureBox2.Image = image1;

}

private void pictureBox2_Click(object sender, EventArgs e)

{

goodTovarTableAdapter.Fill(computerShopDataSet.goodTovar);

}

private void вEXELToolStripMenuItem_Click(object sender, EventArgs e)

{

}

private void продажиToolStripMenuItem_Click(object sender, EventArgs e)

{

Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();

Microsoft.Office.Interop.Excel.Workbook ExcelWorkBook;

Microsoft.Office.Interop.Excel.Worksheet ExcelWorkSheet;

//Книга.

ExcelWorkBook = ExcelApp.Workbooks.Add(System.Reflection.Missing.Value);

//Таблица.

ExcelWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);

ExcelApp.Cells[1, 1] = "ID таблицы";

ExcelApp.Cells[1, 2] = "Код продажи";

ExcelApp.Cells[1, 3] = "Наименование товара";

ExcelApp.Cells[1, 4] = "Количество";

ExcelApp.Cells[1, 5] = "Общая цена";

ExcelApp.Cells[1, 6] = "Дата продажи";

ExcelApp.Cells[1, 7] = "Продавец";

int n = 0;

for (int i = 0; i < dataGridView4.Rows.Count; i++)

{

n++;

for (int j = 0; j < dataGridView4.ColumnCount; j++)

{

ExcelApp.Cells[n + 1, j + 1] = dataGridView4.Rows[i].Cells[j].Value;

}

}

//Вызываем нашу созданную эксельку.

ExcelApp.Visible = true;

ExcelApp.UserControl = true;

}

}

}