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

Особенности алгоритмизации при разработке WEB-приложений (Преимущества и недостатки Интернет - магазинов)

Содержание:

Введение

Интернет — всемирная система объединённых компьютерных сетей для хранения, обработки и передачи информации.

Упоминается как Всемирная сеть и Глобальная сеть, а также просто Сеть. Построена на базе стека протоколов TCP/IP. На основе Интернета работает Всемирная паутина (World Wide Web, WWW) и множество других систем передачи данных. К середине 2015 года число пользователей достигло 3,3 млрд человек. Во многом это было обусловлено широким распространением сотовых сетей с доступом в Интернет стандартов 3G и 4G, развитием социальных сетей и удешевлением стоимости интернет-трафика. [1]

Влияние глобальной компьютерной сети Internet на современный мир не имеет исторических аналогов. Его сегодняшний день — это начало эпохи электронного проникновения во все сферы человеческой жизни, это нечто большее, чем просто маркетинговая кампания, это основа новой философии и новой деловой стратегии. [2]

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

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

Привлекательность Web-технологий как средства доставки информации во многом определяет универсальный интерфейс между человеком и компьютером. Каждому человеку понятны надписи, заголовки, ссылки, картинки. Веб-интерфейс как средство доступа к информации интуитивно понятен. Следствием простоты веб-интерфейса является широкая употребимость Интернета как канала коммуникации. Браузер – программа для просмотра веб-страниц и работы с информацией в веб- интерфейсе. Браузеры – программы, которыми обеспечены все современные компьютеры большое число т.н. «гаджетов». Теоретически все браузеры должны отображать все сайты, сделанные по стандартам, одинаково. Практически имеется множество тонкостей и сложностей. Наиболее популярные браузеры: Internet Explorer, Firefox, Opera, Safari, Chrome. [4]

1 Понятия и классификация web-приложения

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

Под «веб-приложениями» практически всегда понимаются серверные приложения — просто в силу того, что в качестве клиента обычно используется браузер, а собственно код веб-приложения является расширением функциональности веб-сервера. [6]

Развитие современной компьютерной техники и внедрение новейших технологий положили начало нового направления жизни на Земле. За довольно короткий промежуток времени развития микроэлектроники и кибернетики произошло много изменений.

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

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

Интернет — это не только "прохладный бассейн", в котором так комфортно чувствуют себя весьма "перегревшиеся" люди, но и место, где можно "потрогать" практически любую горячую тему, не опасаясь при этом обжечься.

Рисунок 1 – 35 лет интернету

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

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

Устройство веб-приложений

Рисунок 2 – Устройство веб-приложений

Работа клиента не зависит от операционной системы, стоящей на компьютере пользователя, поэтому при разработке веб-приложений нет необходимости писать отдельные версии для Windows, Linux, Mac OS и других операционных систем.

Для создания серверной части веб-приложений используются такие языки программирования, как: PHP, ASP, ASP.NET, Perl, C/C++, Java, Python, Ruby, NodeJS.

Для реализации клиентской части используют HTML, CSS, JavaScript, Ajax. [8]

2 Назначение разработки, её актуальность

В качестве примера web приложения я решил сделать интернет-магазин. Интернет-магазины по сравнению с обычными магазинами:

а) имеют возможность устанавливать более низкие цены на весь ассортимент благодаря меньшим издержкам (в первую очередь за счёт аренды торговых площадей);

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

в) дают клиентам консультации по выбору и применению товаров в удобное время. [9]

Рисунок 3 – Иллюстрация интернет-магазина

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

Реклама тоже не составляет проблемы для интернет-магазина: раз в полгода массовая электронная рассылка помогает многократно увеличить количество потенциальных клиентов. [11]

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

Разработка и внедрение системы позволят:

а) обеспечить доступ покупателя к полному каталогу продаваемой продукции;

б) осуществить покупку продукции непосредственно через сайт;

в) предоставить покупателю дополнительную информацию о товарах;

г) укрепить и расширить клиентскую базу.

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

а) провести анализ предметной области;

б) сформулировать требования к разрабатываемому сайту;

в) составить структурную схему сайта;

г) разработать требования для реализации сайта.

2.1 Понятие электронный магазин и его особенности

Виртуальный магазин — это реализованное в сети Интернет пред­ставительство путем создания Web-сервера для продажи товаров и услуг другим пользователям сети Интернет. Виртуальный магазин называют также Интернет - магазином. К нему полностью подходит определение виртуального предприятия. Иначе говоря, виртуальный магазин — это сообщество террито­риально разобщенных сотрудников магазина (продавцов, кассиров) и покупателей, которые могут общаться и обмениваться информа­цией через электронные средства связи при полном (или минималь­ном) отсутствии личного прямого контакта. [13]

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

Перевод традиционной торговли в сеть Интернет делает ее бо­лее гибкой, так как электронная торговля, оперируя цифровой ин­формацией в компьютерных сетях, облегчает сотрудничество лю­дей.

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

2.2 Преимущества и недостатки Интернет - магазинов

Преимущества виртуального магазина перед реальным очевидны. Уменьшается численность персонала за счет сокращения объема взаимодействия с клиентами, аренда дискового пространства и размещение "электронной витрины" дешевле и проще аренды торговых помещений и размещения товаров на полках, нет нужды в кассовом обслуживании и т.д. Так же виртуальный магазин можно использовать как эффективный способ маркетингового исследования, тем более, что сегодня эта услуга довольно дорога в маркетинговых агентствах. Любой пользователь сети Интернет может быстро заполнить анкету, предлагаемую ему мага­зином через компьютер. Это позволяет без особых затрат изучить потребности и вкусы потенциальных покупателей и учесть резуль­таты маркетингового обследования в своей работе.[14]

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

1) Преимущества Интернет - магазинов для потребителей

a) Экономия времени

Когда человек работает 6 дней в неделю с 10 до 19 , ему бывает некогда сходить в магазин. Интернет-магазин позволяет сделать покупку не выходя из офиса в любое время, а выбор и заказ товара займет у него несколько минут, если он точно знает, что хочет купить. Служба доставки интернет-магазина доставит выбранный товар в удобное время и место. Кроме этого выбор и оценка свойств товара происходит в интернет-магазине намного быстрее и удобнее чем в обычном магазине. Достаточно представить, что покупатель пришёл в обычный магазин бытовой техники и хочет сравнить параметры 20-30 радиотелефонов. Для этого необходимо изучить все ценники: запомнить характеристики, цены и названия моделей. Можно обратиться к продавцу-консультанту, если он не занят, с просьбой рассказать о всех этих товарах. Но обычно ни один продавец не имеет столько свободного времени для работы с одним клиентом, и нет гарантии, что он владеет всей информацией.

б) Неограниченный ассортимент и информативность

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

в) Экономия денег

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

2. Недостатки Интернет - магазинов для покупателя

Иссле­дования, проведенные в начале 2004 г. английской фирмой Armor Group, показали, что 35 % дорогих товаров, продающихся через ма­газины, являются подделками. Другими словами, например, предлагаемый покупателю «Panasonic» может оказаться не самим «Panasonic» этой известной фирмы, а его азиатской подделкой, произведенной где-нибудь в Юго-Восточной Азии, но украшенной громким товарным знаком. Исследования также по­казали большую доверчивость покупателей. Например, покупатели легко готовы поверить во всемирную известность несуществующей торговой марки. Так, о знакомстве с никогда не существовавшей тор­говой маркой «Royal Alliance Insuarance» заявило 80 % опрошенных респондентов. Простота доступа в Интернет, массовость аудитории и потенци­альная анонимность рекламодателей делает Интернет идеальной платформой для недобросовестных предпринимателей.

Интернет опрос выявил ряд недостатков Интернет-магазинов по степени их важности, которые представлены на рисунке 4.

Рисунок 4 – Недостатки Интернет – магазинов

а) Несовершенная система доставки.

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

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

  • не удовлетворяющих сроках доставки товара;

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

  • дорогой доставке товара;

Оперативность службы доставки во многом определяет лицо магазина. Но пока, по признанию сотрудников Интернет-магазинов, доставка товаров является одним из самых больных мест компаний. Если с транспортировкой в пределах крупных городов, таких Москва и Санкт-Петербург, больших проблем не возникает, то доставка в регионы России сопряжена с массой трудностей.

б) Неудобная система оплаты

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

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

Наиболее экономным способом оплаты покупатели отмечают предоплату банковским переводом. 

в) Сложная система заказа

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

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

г) Необходимость регистрации

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

2.3 Классификация электронных магазинов

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

  • чисто онлайновый магазин;
  • совмещение оффлайнового бизнеса с онлайновым (когда интернет-магазин был создан на основе уже действующей реальной торговой структуры).

По отношению с поставщиками:

  • имеют собственный склад (наличие реальных товарных запасов);
  • работают по договорам с поставщиками (отсутствие значительных собственных запасов).

Классификация по товарному ассортименту – книги, аудио, видеокассеты, CD, DVD, компьютерная, бытовая техника, мобильные телефоны.

Среди методов розничной продажи товаров в Сети можно выделить:

– Интернет - магазины (автоматические магазины);

– Web-витрины;

– торговые автоматы.

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

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

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

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

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

3 Проектирование

3.1 Архитектура Интернет-магазина

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

Архитектура сайта ведётся с учётом наиболее важной информации с точки зрения продвижения товаров/услуг на интернет-рынке.

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

Архитектура Интернет – магазинов проста и интуитивно удобна, состоит из Клиентской части, программной части и администрирования как показано на рисунке 5.

Рисунок 5 – Архитектура Интернет – магазина

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

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

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

3.2 Диаграммы Интернет-магазина

Рисунок 6 – Диаграмма взаимодействия

Рисунок 7 – Диаграмма классов

Рисунок 8 – Диаграмма последовательности действий

4 Структурное описание разработки

4.1 Выбор технологии для web приложения

Для выполнения курсовой работы была выбрана технология ASP.NET.

ASP.NET (Active Server Pages для .NET) — платформа разработки веб-приложений, в состав которой входит: веб-сервисы, программная инфраструктура, модель программирования [15], от компании Майкрософт. ASP.NET входит в состав платформы .NET Framework [16] и является развитием более старой технологии Microsoft ASP.

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

Поскольку ASP.NET основывается на Common Language Runtime (CLR), которая является основой всех приложений Microsoft .NET, разработчики могут писать код для ASP.NET, используя языки программирования, входящие в комплект .NET Framework (C#, Visual Basic.NET, J# и JScript .NET).

Программная модель ASP.NET основывается на протоколе HTTP и использует его правила взаимодействия между сервером и браузером. При формировании страницы заложена абстрактная программная модель Web Forms и на ней основана основная часть реализации программного кода. [17]

ASP.NET — бесплатная интернет-платформа для создания замечательных веб-сайтов и веб-приложений с помощью HTML, CSS и JavaScript. Также можно создавать веб-API и использовать технологии реального времени, такие как веб-сокеты.

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

Каждая платформа предназначена для определенного стиля разработки. Ваш выбор зависит от сочетания навыков программирования (знаний, опыта разработки), типа создаваемого приложения и удобного вам подхода к разработке. [18]

4.2 Описание структуры приложения, его модулей

Структура приложения показана на рисунке 9.

Рисунок 9 – Структура приложения

Класс WebForm2.aspx отвечает за поиск товаров в магазине, регистрацию и авторизацию пользователей, авторизацию админов и менеджеров.

Класс WebForm3.aspx отвечает за редактирование и добавления нового товара.

Класс WebForm4.aspx отвечает за обработку заказа.

4.3 Описание классов: спецификации данных, методов

Класс Requests.cs отвечает за взаимодействия приложения с базой данных (бд). Он содержит 2 метода:

1) string GetValue(string request) – на вход его поступает запрос в бд, на выходе получаем строковое значение.

2) string Request(string request, ref DataSet ds) – на вход поступает запрос в бд и набор данных, который будет заполнятся из бд.

5 Функциональное описание разработки

5.1. Описание алгоритмов и методов решения

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

Приложение будет исполняться в трёх вариантах:

  • от имени администратора;
  • от имени менеджера по продажам;
  • от имени пользователя.
  • Администратор имеет возможность добавлять, удалять товары; изменять описания и фотографии к ним, изменять их стоимость; редактировать данные о пользователях (менеджерах по продажам) (смена логина или пароля), удалять существующего пользователя (менеджера по продажам), добавлять нового пользователя (менеджера по продажам).

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

Менеджер имеет возможность обрабатывать заказ пользователей.

  • Для реализации базы данных представленного функционала следует определить следующие таблицы, которым будут соответствовать нижеперечисленные поля:
  1. таблица пользователей:
  2. код – первичный ключ;
  3. логин;
  4. пароль;
  5. роль (админ, юзер или менеджер)
  6. таблица заказов:
  7. код – первичный ключ;
  8. код товара – внешний ключ;
  9. код пользователя – внешний ключ;
  10. статус заказа;
  11. таблица характеристик ноутбука:
  12. код – первичный ключ;
  13. название;
  14. модель;
  15. кол-во в наличии;
  16. ос;
  17. диагональ экрана;
  18. процессор;
  19. тип графического адаптера;
  20. объём памяти графического адаптера;
  21. объём жесткого (ссд) диска;
  22. объём оперативной памяти;
  23. частота процессора;
  24. графический адаптер;
  25. цена;
  26. макс разрешение экрана;
  27. тurbo-частота процессора;
  28. количество ядер процессора;
  29. изображение.

Реализация базы данных в виде схемы представлена на рисунке 10.

Рисунок 10 – Схема базы данных

5.2 Описание пользовательского интерфейса

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


Рисунок 11 – Страница входа в систему

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

Для регистрации пользователю необходимо нажать на ссылку Регистрация. Далее ему нужно ввести в текстовой поле E-mail свой e-mail и в поле Пароль ввести пароль для своей учётной записи. Затем необходимо нажать на кнопку Подтвердить.

После аутентификации администратор попадает на страницу, изображённую на рисунке 12.

D:\1.png

Рисунок 12 – Главная страница администратора

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

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

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

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

После аутентификации пользователь попадает на страницу, изображённую на рисунке 13.

Рисунок 13 – Главная страница пользователя

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

После аутентификации менеджер по продажам попадает на страницу, изображённую на рисунке 14.

Рисунок 14 – Главная страница менеджера по продажам

На этой странице менеджера по продажам имеет возможность изменять статус заказа пользователя. Для этого ему необходимо в текстовом поле Статус заказа написать обработано или не обработано. Далее менеджер должен указать код заказа пользователя. После этого ему необходимо нажать на кнопку Подтвердить.

6 Руководство пользователя

Для регистрации пользователю необходимо нажать на ссылку Регистрация. Далее ему нужно ввести в текстовой поле E-mail свой e-mail и в поле Пароль ввести пароль для своей учётной записи. Затем необходимо нажать на кнопку Подтвердить. После прохождения аутентификации он может добавлять товары себе в корзину.

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

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

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

7 Руководство программиста

Для запуска приложения на клиентской машине должен быть установлен .NET Fraimwork 4.5, SQL Server Data Tools 14.

Заключение

Цель курсовой работы – разобрать особенности алгоритмизации при разработке WEB-приложений достигнута путём разработки рекламно-информационного портала для on-line продаж.

В курсовой работе были решены следующие задачи:

а) обеспечен доступ покупателя к полному каталогу продаваемой продукции;

б) покупателю предоставлена дополнительная информацию о товарах.

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

Список использованной литературы

1 URL: https://ru.wikipedia.org/wiki/Интернет.

2 URL: https://ru.wikibooks.org/wiki/Средство_разработки_веб-приложений_Visual_Studio_на_основе_ASP.NET/Понятие_«Веб-технология».

3 URL: https://www.tstu.ru/book/elib3/mm/2016/rak-platenkin/vvedenie.html.

4 URL: https://www.webmasterwiki.ru/Web-texnologii-ChtoJetoTakoe.

5 URL: https://ru.wikipedia.org/wiki/Веб-приложение.

6 URL: http://galleo.ru/articles/w168.

7 URL: https://studbooks.net/2006801/informatika/teoreticheskie_osnovy_razrabotki_prilozheniy.

8 URL: https://infoshell.ru/blog/razrabotka-veb-prilozhenij/

9 URL: http://www.alppp.ru/law/hozjajstvennaja-dejatelnost/torgovlja/50/statja--sluzhba-dostavki-v-apteke---blazh-ili-neobhodimost.html.

10 URL: http://www.reu.by/images/docs/science/sbornik_nauchnyh_statej_-_reu_-_2015.05.pdf.

11 URL: https://forum.klerk.ru/showthread.php?t=155931

12 URL: https://www.lawmix.ru/bux/67377

13 https://cyberleninka.ru/article/n/organizatsiya-raboty-internet-magazina.

14 URL: http://e-comerce.narod.ru/e_market.html

15 Дино Эспозито. Microsoft ASP.NET 2.0. Базовый курс. — СПб: И. Д. Питер, 2007. — 688 с. — ISBN 978-5-91180-423-7. — ISBN 978-5-7502-0304-8.

16 Платт Д. С. Знакомство с Microsoft .NET. — М.: И. Д. Русская редакция, 2001. — 240 с. — ISBN 5-7502-0186-4.

17 URL: https://ru.wikipedia.org/wiki/ASP.NET.

18 URL: https://docs.microsoft.com/ru-ru/aspnet/overview.

Приложение

using System;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Data;

using System.Drawing;

namespace WebApplication1

{

public partial class WebForm2 : Page

{

DataSet ds;

string message;

protected void Page_Load(object sender, EventArgs e)

{

Label3.Text = (string)Page.Session["логин"];

ImageButton1.ImageUrl = "Корзина.jpg";

if (ViewState["ControlAdded"] != null)

{

string request = Page.Session["запрос"].ToString();

DisplayResultOfSearchNotebooks(ref request);

}

}

private void FindNote(CheckBoxList ChBL, string columnName, ref string partRequest)

{

byte count = 0;

byte temp = 0;

for (byte i = 0; i < ChBL.Items.Count; i++)

{

if (ChBL.Items[i].Selected == true)

{

count++;

}

}

if (count != 0)

{

if (partRequest != "")

{

partRequest += " AND (";

}

for (byte i = 0; i < ChBL.Items.Count; i++)

{

if (ChBL.Items[i].Selected == true)

{

if (temp != count - 1)

{

temp++;

partRequest += columnName + " = '" + ChBL.Items[i].Value + "' OR ";

}

else

{

partRequest += columnName + " = '" + ChBL.Items[i].Value + "')";

}

}

}

}

}

private void FindNote(DropDownList DrDwL, DropDownList DrDwL2, string columnName, ref string partRequest)

{

string str1 = DrDwL.SelectedValue;

string str2 = DrDwL2.SelectedValue;

if (partRequest != "")

{

partRequest += " AND (";

}

partRequest += columnName + " BETWEEN '" + str1 + "' AND '" + str2 + "')";

}

private void FindNote(string price1, string price2, string columnName, ref string partRequest)

{

int minPrice, maxPrice;

if (price1 == "")

{

minPrice = 0;

}

else

{

minPrice = Convert.ToInt32(price1);

}

if (price2 == "")

{

maxPrice = 0;

}

else

{

maxPrice = Convert.ToInt32(price2);

}

if (partRequest != "" && minPrice != 0 && maxPrice != 0)

{

partRequest += " AND (";

}

if (minPrice < maxPrice)

{

partRequest += columnName + " BETWEEN " + minPrice + " AND " + maxPrice + ")";

}

}

private void DisplayResultOfSearchNotebooks(ref string request)

{

message = Requests.Request(request, ref ds);

if (message == "")

{

for (byte j = 0; j < 3; j++)

{

Panel1.Controls.Add(new LiteralControl("<br/>"));

}

numberNotebooksInRequest = ds.Tables[0].Rows.Count;

for (int i = 0; i < numberNotebooksInRequest; i++)

{

Label lb1 = new Label();

lb1.ID = string.Format("newLabel{0}", i);

lb1.Text = ds.Tables[0].Rows[i][1] + " " + ds.Tables[0].Rows[i][2];

System.Web.UI.WebControls.Image img = new System.Web.UI.WebControls.Image();

img.ImageUrl = "/Images/" + ds.Tables[0].Rows[i][17].ToString();

img.Width = 100;

img.Height = 60;

Panel1.Controls.Add(img);

Panel1.Controls.Add(new LiteralControl("&nbsp;&nbsp;")); //добавляет пробелы

Panel1.Controls.Add(lb1);

Panel1.Controls.Add(new LiteralControl("<br/>"));

Label lb = new Label();

for (byte k = 4; k < 17; k++)

{

lb.Text += ds.Tables[0].Columns[k].ColumnName + ": " + ds.Tables[0].Rows[i][k] + "; ";

}

Panel1.Controls.Add(lb);

Panel1.Controls.Add(new LiteralControl("<br/>"));

if (Page.Session["логин"] != null)

{

Button bt = new Button();

bt.ID = Convert.ToString(Convert.ToInt32(ds.Tables[0].Rows[i][0]) - 1);

bt.Height = 50;

bt.Width = 80;

bt.BackColor = Color.Green;

bt.Text = "В корзину";

Panel1.Controls.Add(new LiteralControl("<br/>"));

Panel1.Controls.Add(bt);

bt.Click += btn_Click;

ViewState["ControlAdded"] = "true";

}

for (byte j = 0; j < 3; j++)

{

Panel1.Controls.Add(new LiteralControl("<br/>"));

}

}

}

else

{

Response.Write(message);

}

}

int numberNotebooksInRequest = 1000;

string partRequest = "";

protected void Button1_Click(object sender, EventArgs e)

{

FindNote(CheckBoxList2, "[Название]", ref partRequest);

FindNote(CheckBoxList3, "[ОС]", ref partRequest);

FindNote(CheckBoxList6, "[Процессор]", ref partRequest);

FindNote(CheckBoxList7, "[Кол-во ядер процессора]", ref partRequest);

FindNote(CheckBoxList11, "[Тип графического адаптера]", ref partRequest);

FindNote(CheckBoxList12, "[Графический адаптер]", ref partRequest);

FindNote(DropDownList1, DropDownList2, "[Диагональ экрана; дюймов]", ref partRequest);

FindNote(DropDownList3, DropDownList4, "[Макс. разрешение_экрана; точек]", ref partRequest);

FindNote(DropDownList5, DropDownList6, "[Частота процессора; ГГц]", ref partRequest);

FindNote(DropDownList7, DropDownList8, "[Turbo частота процессора; ГГц]", ref partRequest);

FindNote(DropDownList9, DropDownList10, "[Объём оперативной памяти; МБ]", ref partRequest);

FindNote(DropDownList11, DropDownList12, "[Объём памяти графического адаптера; МБ]", ref partRequest);

FindNote(DropDownList13, DropDownList14, "[Объём жёсткого диска; ГБ]", ref partRequest);

FindNote(TextBox1.Text, TextBox2.Text, "[Цена]", ref partRequest);

if (partRequest != "")

{

partRequest = "SELECT * FROM Laptops WHERE (" + partRequest;

Page.Session["запрос"] = partRequest;

DisplayResultOfSearchNotebooks(ref partRequest);

}

}

public void btn_Click(object sender, EventArgs e)

{

Button btn = (Button)sender;

int index = Convert.ToInt32(Page.Session["кол-во товаров в корзине"]);

message = Requests.Request("SELECT * FROM Laptops", ref ds);

if (message == "")

{

int orderAmount = Convert.ToInt32(Page.Session["сумма заказа"]);

int ID = Convert.ToInt32(btn.ID);

int idOrder = Convert.ToInt32(Requests.GetValue("SELECT Max(Код) FROM Orders")) + 1;

int idUser = Convert.ToInt32(Requests.GetValue("SELECT Код FROM Users WHERE Логин = N'" + Page.Session["логин"].ToString() + "'"));

message = Requests.Request("INSERT INTO Orders ([Код], [Код товара], [Код пользователя], [Статус заказа]) VALUES (" + idOrder + ", " + ds.Tables[0].Rows[ID][0] + ", " + idUser + ", N'не обработан')", ref ds);

if (message == "")

{

orderAmount += Convert.ToInt32(Requests.GetValue("SELECT [Цена] FROM Orders WHERE [Код] = '" + idOrder + "'"));

Page.Session["сумма заказа"] = orderAmount;

Label7.Text = "Сумма заказа = " + orderAmount.ToString();

if (Page.Session["код первого выбранного товара"] == null)

{

message = Requests.Request("SELECT Max(Код) From Orders", ref ds);

if (message == "")

{

Page.Session["код первого выбранного товара"] = (int)ds.Tables[0].Rows[0][0];

}

else

{

Response.Write(message);

}

}

}

else

{

Response.Write(message);

}

}

else

{

Response.Write(message);

}

index++;

Page.Session["кол-во товаров в корзине"] = index;

Label6.Text = "Кол-во товаров в корзине: " + index;

}

protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)

{

int index = Convert.ToInt32(Page.Session["кол-во товаров в корзине"]);

index--;

Page.Session["кол-во товаров в корзине"] = index;

Label6.Text = "Кол-во товаров в корзине: " + index.ToString();

int orderAmount = Convert.ToInt32(Page.Session["сумма заказа"]);

int deleteSumma = Convert.ToInt32(GridView1.Rows[e.RowIndex].Cells[4].Text);

orderAmount -= deleteSumma;

Page.Session["сумма заказа"] = orderAmount;

Label7.Text = "Сумма заказа = " + orderAmount.ToString();

}

protected void Button3_Click(object sender, EventArgs e)

{

SqlDataSource14.SelectCommand = "SELECT * FROM [Orders] WHERE [Код] >= " + Page.Session["код первого выбранного товара"];

GridView1.DataSourceID = "SqlDataSource14";

if (Page.Session["логин"] == null)

{

Response.Write("Пожалуйста авторизируйтесь!");

}

if (GridView1.Rows.Count == 0)

{

Response.Write("Ваша корзина пуста!");

}

if (Page.Session["логин"] != null && GridView1.Rows.Count != 0)

{

GridView1.DataSourceID = "SqlDataSource14";

message = Requests.Request("SELECT [Модель], [Кол-во в наличии] FROM Laptops", ref ds);

if (message == "")

{

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

{

for (int j = 0; j < ds.Tables[0].Rows.Count; j++)

{

if (Convert.ToString(GridView1.Rows[i].Cells[3].Text) == Convert.ToString(ds.Tables[0].Rows[j][0]))

{

int countGoods = Convert.ToInt32(ds.Tables[0].Rows[j][1]);

if (countGoods > 1)

{

countGoods--;

SqlDataSource14.UpdateCommand = "UPDATE Laptops SET [Кол-во в наличии] = '" + Convert.ToString(countGoods) + "' WHERE [Модель] = '" + ds.Tables[0].Rows[j][0] + "'";

SqlDataSource14.Update();

}

}

}

}

}

else

{

Response.Write(message);

}

}

}

protected void ImageButton1_Click(object sender, ImageClickEventArgs e)

{

if (Page.Session["код первого выбранного товара"] != null)

{

SqlDataSource14.SelectCommand = "SELECT * FROM [Orders] WHERE Код >= '" + Page.Session["код первого выбранного товара"] + "'";

GridView1.DataSourceID = "SqlDataSource14";

GridView1.Visible = true;

}

}

protected void Button4_Click(object sender, EventArgs e)

{

string request = "SELECT * FROM [Laptops] WHERE [Название] = N'" + TextBox4.Text + "'";

Page.Session["запрос"] = request;

DisplayResultOfSearchNotebooks(ref request);

}

private void VisibleRegistrationElements(bool flag)

{

Button2.Visible = flag;

TextBox5.Visible = TextBox8.Visible = flag;

Label11.Visible = Label12.Visible = flag;

}

protected void LinkButton1_Click(object sender, EventArgs e)

{

VisibleRegistrationElements(true);

}

protected void Button2_Click(object sender, EventArgs e)

{

bool flagUser = false;

message = Requests.Request("SELECT * FROM Users", ref ds);

if (message == "")

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (TextBox8.Text == Convert.ToString(ds.Tables[0].Rows[i][1]))

{

flagUser = true;

break;

}

}

if (flagUser == true)

{

Response.Write("Вы уже зарегистрированы!");

}

else

{

int idUser = Convert.ToInt32(Requests.GetValue("SELECT Max(Код) FROM Users")) + 1;

message = Requests.Request("INSERT INTO Users (Код, Логин, Пароль, Роль) VALUES ('" + idUser + "' , N'" + TextBox8.Text + "', N'" + TextBox5.Text + "', N'юзер')", ref ds);

if (message == "")

{

Page.Session["логин"] = TextBox8.Text;

Response.Write("Вы успешно зарегистрированы!");

}

else

{

Response.Write(message);

}

}

TextBox8.Text = TextBox5.Text = "";

VisibleRegistrationElements(false);

}

else

{

Response.Write(message);

}

}

protected void Button5_Click(object sender, EventArgs e)

{

Page.Session["логин"] = "";

Page.Session["флаг админа"] = false;

Page.Session["флаг пользователя"] = false;

Page.Session["флаг менеджера"] = false;

message = Requests.Request("SELECT * FROM Users WHERE Роль = N'админ'", ref ds);

if (message == "")

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (TextBox6.Text == Convert.ToString(ds.Tables[0].Rows[i][1]) && TextBox7.Text == Convert.ToString(ds.Tables[0].Rows[i][2]))

{

Page.Session["флаг админа"] = true;

Page.Session["логин"] = TextBox6.Text;

break;

}

}

}

else

{

Response.Write(message);

}

if (Convert.ToBoolean(Page.Session["флаг админа"]) == false)

{

message = Requests.Request("SELECT * FROM Users WHERE Роль = N'юзер'", ref ds);

if (message == "")

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (TextBox6.Text == Convert.ToString(ds.Tables[0].Rows[i][1]) && TextBox7.Text == Convert.ToString(ds.Tables[0].Rows[i][2]))

{

Page.Session["флаг пользователя"] = true;

Page.Session["логин"] = TextBox6.Text;

break;

}

}

}

else

{

Response.Write(message);

}

}

if (Convert.ToBoolean(Page.Session["флаг админа"]) == false && Convert.ToBoolean(Page.Session["флаг пользователя"]) == false)

{

message = Requests.Request("SELECT * FROM Users WHERE Роль = N'менеджер'", ref ds);

if (message == "")

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (TextBox6.Text == Convert.ToString(ds.Tables[0].Rows[i][1]) && TextBox7.Text == Convert.ToString(ds.Tables[0].Rows[i][2]))

{

Page.Session["флаг менеджера"] = true;

Page.Session["логин"] = TextBox6.Text;

break;

}

}

}

}

else

{

Response.Write(message);

}

if (Convert.ToBoolean(Page.Session["флаг пользователя"]) == false && Convert.ToBoolean(Page.Session["флаг админа"]) == false && Convert.ToBoolean(Page.Session["флаг менеджера"]) == false)

{

Response.Write("Не правильный e-mail или пароль!");

}

else

{

Label3.Text = Page.Session["логин"].ToString();

}

TextBox6.Text = TextBox7.Text = "";

}

}

}

using System;

using System.Web.UI;

using System.Data;

namespace WebApplication1

{

public partial class WebForm3 : Page

{

DataSet ds;

string message;

protected void Page_Load(object sender, EventArgs e)

{

if (Convert.ToBoolean(Page.Session["флаг админа"]) == true)

{

Label1.Text = "Администратор: " + Page.Session["логин"].ToString();

}

else

{

Response.Write("<div><font color=red><h1>Доступ только для администраторов!</h1></font></div>");

Response.End();

}

}

protected void FileUpload1_Load(object sender, EventArgs e)

{

if (FileUpload1.HasFile == true)

{

string savePath = Server.MapPath(@"/Images/") + FileUpload1.FileName;

FileUpload1.SaveAs(savePath);

}

}

protected void Button3_Click(object sender, EventArgs e)

{

string image = FileUpload1.FileName;

message = Requests.Request("INSERT INTO [Laptops] ([Код], [Название], [Модель], [Кол-во в наличии], [ОС], [Диагональ экрана; дюймов], [Процессор], [Тип графического адаптера], [Объём памяти графического адаптера; МБ], [Объём жёсткого диска; ГБ], [Объём оперативной памяти; МБ], [Макс. разрешение экрана; точек], [Графический адаптер], [Цена], [Частота процессора; ГГц], [Turbo-частота процессора; ГГц], [Кол-во ядер процессора], [Изображение]) VALUES ('" + TextBox17.Text + "', '" + TextBox1.Text + "', '" + TextBox2.Text + "', '" + TextBox3.Text + "', '" + TextBox4.Text + "', '" + TextBox5.Text + "', '" + TextBox6.Text + "', '" + TextBox7.Text + "', '" + TextBox8.Text + "', '" + TextBox9.Text + "', '" + TextBox10.Text + "', '" + TextBox11.Text + "', '" + TextBox12.Text + "', '" + TextBox13.Text + "', '" + TextBox14.Text + "', '" + TextBox15.Text + "', '" + TextBox16.Text + "', '" + image + "')", ref ds);

if (message != "")

{

Response.Write(message);

}

GridView1.DataSourceID = "SqlDataSource1";

}

protected void Button7_Click(object sender, EventArgs e)

{

bool flag = false;

message = Requests.Request("SELECT * FROM Users", ref ds);

if (message == "")

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (TextBox19.Text == Convert.ToString(ds.Tables[0].Rows[i][1]))

{

flag = true;

break;

}

}

if (flag == true)

{

Response.Write("Вы уже зарегистрированы!");

}

else

{

message = Requests.Request("INSERT INTO [Users] ([Код], [Логин], [Пароль], [Роль]) VALUES ('" + TextBox18.Text + "', '" + TextBox19.Text + "', '" + TextBox20.Text + "', '" + TextBox21.Text + "')", ref ds);

GridView2.DataSourceID = "SqlDataSource2";

TextBox18.Text = TextBox19.Text = TextBox20.Text = TextBox21.Text = "";

}

}

else

{

Response.Write(message);

}

}

}

}

using System;

using System.Web.UI;

using System.Data;

namespace WebApplication1

{

public partial class WebForm4 : Page

{

DataSet ds;

string message;

protected void Page_Load(object sender, EventArgs e)

{

if (Convert.ToBoolean(Page.Session["флаг менеджера"]) == true)

{

bool flag = false;

message = Requests.Request("SELECT * FROM Users", ref ds);

if (message == "")

{

while (flag == false)

{

for (int i = 0; i < ds.Tables[0].Rows.Count; i++)

{

if (Page.Session["логин"].ToString() == Convert.ToString(ds.Tables[0].Rows[i][1]))

{

flag = true;

}

}

}

Label1.Text = "Менеджер: " + Page.Session["логин"].ToString();

GridView1.Enabled = true;

}

else

{

Response.Write(message);

}

}

else

{

Response.Write("<div><font color=red><h1>Доступ только для менеджеров!</h1></font></div>");

Response.End();

}

}

}

}

using System.Data;

using System.Data.SqlClient;

namespace WebApplication1

{

public class Requests

{

public static string Request(string request, ref DataSet ds)

{

string errorMessage = "";

ds = new DataSet();

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BD.mdf;Integrated Security=True;");

con.Open();

SqlDataAdapter adapter = new SqlDataAdapter(request, con);

try

{

adapter.Fill(ds);

}

catch (SqlException e)

{

errorMessage = e.Message;

}

finally

{

con.Close();

}

return errorMessage;

}

public static string GetValue(string request)

{

string value = "-1";

SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\BD.mdf;Integrated Security=True");

try

{

con.Open();

SqlCommand com = new SqlCommand(request, con);

value = com.ExecuteScalar().ToString();

}

catch

{

value = "-1";

}

finally

{

con.Close();

}

if (value == "")

{

value = "-1";

}

return value;

}

}

}