Создание веб-приложения "Интернет-магазин" с использованием языка программирования C# и интерфейса доступа к базам данным Entity Framework Code First

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

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 18.03.2015
Размер файла 988,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ

ЮЖНЫЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ ЮЖНОГО ФЕДЕРАЛЬНОГО УНИВЕРСИТЕТА в г. Таганроге

Факультет автоматики и вычислительной техники

Кафедра «Математического обеспечения и применения ЭВМ»

КУРСОВАЯ РАБОТА

По дисциплине «Программирование в БД»

На тему: «Создание веб-приложения «Интернет-магазин» с использованием языка программирования C# и интерфейса доступа к базам данным Entity Framework Code First»

Выполнил: студент группы А-101

Наранов А. A.

Проверил: преподаватель кафедры МОП ЭВМ

Лутай В. Н.

Таганрог 2014

Аннотация

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

Оглавление

  • Аннотация
  • Введение
  • 1. Описание структуры БД
  • 1.1 Отношения
  • 1.2 Диаграмма БД
  • 2. Разработка программного продукта
  • 2.1 Язык и среда программирования
  • 2.2 Основные функции веб-приложения. Вывод названия категорий на всех страницах
  • 2.3 Просмотр отдельной категории товаров
  • 2.4 Детальный просмотр товара
  • 2.5 Добавление товара в корзину
  • 2.6 Просмотр содержимого корзины
  • 2.7 Функция добавления нового товара
  • 2.8 Валидация при авторизации
  • 2.9 Валидация при добавлении нового товара
  • 2.10 Аутентификация в приложении
  • 3. Описание разработанного веб-сайта
  • 3.1 Внешний вид
  • 3.2 Инструкция пользователю
  • Заключение
  • Библиографический список

Введение

Целью данной курсовой работы, является разработка веб-сайта, а так же его реализация с помощью средств .NET Framework и метода создания моделей баз данных ADO.NET Entity Framework.

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

Существует несколько технологий для доступа к данным в .Net Framework: LINQ, ADO.NET Enitity Framework и ADO.NET Data Services

Ниже приведены наиболее полные преимущества использования компонента Entity Framework Code Fist:

1. Фреймворк автоматически создает БД по коду.

2. Проверка синтаксических ошибок и безопасности типов во время компиляции.

3. Полная поддержка атрибутов из пространства имен System.ComponentModel.DataAnnotations.

Опираясь на выше сказанное, для курсового проекта была выбрана именно эта технология.

Постановка задачи

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

Требования по реализации

Приложение реализовано на языке C# с иcпользованием WEB Forms в среде MS Visual Studio 2013.

1. Описание структуры БД

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

1.1 Отношения

База данных включает в себя три таблицы: таблица товаров и таблица категорий товаров и таблица корзины. Таблица товаров (Product) нужна для хранения информации о продуктах имеющихся на складе. Таблица категорий (Category) хранит в себе все виды товаров и описание. Таблица корзины(CartItem) сожержит инфомацию, которая будет определять каждый продукт пользователя добавившего товар.

Таблица 1. Таблица “ Категорий ” (Category)

Имя столбца

Тип поля

Разрешить Null?

Описание поля

CategoryID

Int

NO

Уникальный идентификатор

CategoryName

String

NO

Название категории

Description

String

NO

Описание категории

Таблица 2. Таблица “Продуктов” (Product)

Имя столбца

Тип поля

Разрешить Null?

Описание поля

ProductID

Int

NO

Уникальный идентификатор

ProductName

String

NO

Название продукта

Description

String

NO

Описание продукта

ImagePath

String

NO

Путь к изображению

UnitPrice

Double

NO

Цена продукта

Таблица 3. Таблица “Корзина” (CartItem)

Имя столбца

Тип поля

Разрешить Null?

Описание поля

ItemID

Int

NO

Уникальный идентификатор

CartID

Int

NO

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

Quantity

Int

NO

Количество продуктов

DataCreated

DateTime

NO

Время создания

ProductID

Int

NO

ID продукта

1.2 Диаграмма БД

Диаграмма базы данных изображена на рисунке 1.

Рисунок 1 - диаграмма базы данных

2. Разработка программного продукта

2.1 Язык и среда программирования

Данный программный продукт был реализован при помощи языка программирования С#. Данный язык был выбран потому, что программы, написанные на нем, являются кроссплатформенными из-за наличия установленного компонента .Net Framework. В качестве среды разработки была выбрана Microsoft Visual Studio 2013.

2.2 Основные функции веб-приложения. Вывод названия категорий на всех страницах

Вывод всех категорий товар осуществляется с помощью страницы Site.Master. Site.Master позволяет определить внешний вид и стандартное поведение, которое вы хотите для всех страниц. Вывод осуществляется с помощью метода GetGategories().

Рисунок 2 - категории товаров

2.3 Просмотр отдельной категории товаров

Для того чтобы просмотреть отдельную категорию необходимо перейти по ссылке названия категории, представленной на всех страницах. Вывод информации по категории осуществляет метод GetProducts(int? categoryId, string categoryName)

Рисунок 3 - просмотр отдельной категории

2.4 Детальный просмотр товара

Данный модуль предназначен для вывода всей информации о товаре. Для детального просмотра необходимо перейти по ссылке названия товара, расположенным по аватаром товара на странице просмотра отдельной категории. Осуществление детального просмотра реализуется с помощью метода GetProduct(int? productId, string productName). Внешний вид на рисунке 4.

Рисунок 4 - детальный просмотр

2.5 Добавление товара в корзину

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

Рисунок 5 - добавления в корзину

2.6 Просмотр содержимого корзины

Для просмотра содержимого корзины необходимо перейти по ссылке указанной в навигации сайта. Внешний вид рисунок 6. На данной странице можно увидеть товары добавленные в корзину, а также общую сумму покупки. Функционал страницы позволяет обновлять содержимое корзины с помощью кнопки «Обновить». Для обновления корзины используется метод protected void UpdateBtn_Click(object sender, EventArgs e). Подсчет общей суммы с использованием метода GetTotal() класса ShopingCartAction.cs

Рисунок 6 - переход для просмотра корзины

Рисунок 7 -просмотр корзины

2.7 Функция добавления нового товара

Необходима для добавления нового товара. Внешний вид на рисунке 8.

Рисунок 8 -добавления нового товара

Изначально форма невидна и появляется как только администратор авторизуется.

После заполнения всех полей необходимо нажать на кнопку «Добавить продукт», далее сработает метод:

protected void AddProductButton_Click(object sender, EventArgs e)

2.8 Валидация при авторизации

Если при входе в веб-приложение были допущены ошибки, или введены неккоректные данные, приложение выдаст сообщение: Логин или парольне верны. Внешний вид на рисунке 9.

Рисунок 9 - ошибка при авторизации

язык программирование продукт приложение

2.9 Валидация при добавлении нового товара

Так же проверяется корректность введенных данных при добавлении нового товара. Внешний вид на рисунке 10.

Рисунок 10 - некорректно введенные данные

2.10 Аутентификация в приложении

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

Рисунок 11 - скрытые функции администратора

3. Описание разработанного веб-сайта

3.1 Внешний вид

Курсовая работа была реализована в среде Microsoft Visual Studio 2013. Операционная система, установленная на ПК - Windows 8.1. Использовался .NET Framework 4.5.

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

Рисунок 12 - интерфейс веб-сайта

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

Установка необходимого ПО

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

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

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

- Просмотр товаров

- Добавление в корзину.

Для администраторов доступно еще одна функция - добавление товаров. Рисунок 13.

Рисунок 13 - добавление товара

Заключение

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

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

В данной работе использовалось довольно много средств современной веб-разработки. Присутствуют следующие технологии интернет программирования: C#, WebForms, html, css.

Что касается разработанного продукта, более подробно, результатом стали следующие пункты:

1. В полном объеме реализована поставленная задача.

2. Был разработан дружественный интерфейс.

3. Добавление товаров в корзину.

4. Реализовано разделение прав пользователей.

5. Реализован доступ к базе данных посредством технологии доступа к базе данных Entity Framework code first.

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

Библиографический список

1. Приступая к работе ASP.NET 4.5 Web Forms и Visual Studio 2014. URL: http://www.asp.net/web-froms/tutorial/aspnet-45.

2. Онлайн-книга «Изучаем C#» URL: http://metanit.com/sharp/index.php (Дата обращения: 12.03.2014).

Приложение

1. Код модуля реализующего главную страницы веб-сайта, содержащегося в файле «Default.aspx»

<%@ Page Title="Добро пожаловать" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WingtipToys._Default" %>

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">

<h1><%: Title %>.</h1>

<h2>Наш магазин поможет Вам найти лучшей подарок.</h2>

<p class="lead">В нашем магазине содержаться все транспортные игрушки. Вы можете закать уже сегодня. Каждая игрушка содержит информацию, которая поможет Вам правильно выбрать подарок.</p>

</asp:Content>

2. Код модуля реализующего функции веб-сайта, содержащихся в файле “Default.aspx.cs”

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

namespace WingtipToys

{

public partial class _Default : Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

private void Page_Error(object sender, EventArgs e)

{

Exception exc = Server.GetLastError();

if (exc is InvalidOperationException)

{

Server.Transfer("ErrorPage.aspx?handler=Page_Error%20-%20Default.aspx",

true);

}

}

}

}

3. Код модуля реализующего просмотр всех товаров страницы веб-сайта, содержащегося в файле «ProductList.aspx»

<%@ Page Title="Товары" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"

CodeBehind="ProductList.aspx.cs" Inherits="WingtipToys.ProductList" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<section>

<div>

<hgroup>

<h2><%: Page.Title %></h2>

</hgroup>

<asp:ListView ID="productList" runat="server"

DataKeyNames="ProductID" GroupItemCount="4"

ItemType="WingtipToys.Models.Product" SelectMethod="GetProducts">

<EmptyDataTemplate>

<table >

<tr>

<td>Данные не были возвращены.</td>

</tr>

</table>

</EmptyDataTemplate>

<EmptyItemTemplate>

<td/>

</EmptyItemTemplate>

<GroupTemplate>

<tr id="itemPlaceholderContainer" runat="server">

<td id="itemPlaceholder" runat="server"></td>

</tr>

</GroupTemplate>

<ItemTemplate>

<td runat="server">

<table>

<tr>

<td>

<a href="<%#: GetRouteUrl("ProductByNameRoute", new {productName = Item.ProductName}) %>">

<image src='/Catalog/Images/Thumbs/<%#:Item.ImagePath%>'

width="100" height="75" border="1" />

</a>

</td>

</tr>

<tr>

<td>

<a href="<%#: GetRouteUrl("ProductByNameRoute", new {productName = Item.ProductName}) %>">

<%#:Item.ProductName%>

</a>

<br />

<span>

<b>Price: </b><%#:String.Format("{0:c}", Item.UnitPrice)%>

</span>

<br />

<a href="/AddToCart.aspx?productID=<%#:Item.ProductID %>">

<span class="ProductListItem">

<b>Добавить в корзину<b>

</span>

</a>

</td>

</tr>

<tr>

<td>&nbsp;</td>

</tr>

</table>

</p>

</td>

</ItemTemplate>

<LayoutTemplate>

<table style="width:100%;">

<tbody>

<tr>

<td>

<table id="groupPlaceholderContainer" runat="server" style="width:100%">

<tr id="groupPlaceholder"></tr>

</table>

</td>

</tr>

<tr>

<td></td>

</tr>

<tr></tr>

</tbody>

</table>

</LayoutTemplate>

</asp:ListView>

</div>

</section>

</asp:Content>

4. Код модуля реализующего функции веб-сайта, содержащихся в файле «ProductList.aspx.cs»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using WingtipToys.Models;

using System.Web.ModelBinding;

using System.Web.Routing;

namespace WingtipToys

{

public partial class ProductList : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

public IQueryable<Product> GetProducts(

[QueryString("id")] int? categoryId,

[RouteData] string categoryName)

{

var _db = new WingtipToys.Models.ProductContext();

IQueryable<Product> query = _db.Products;

if (categoryId > 0)

{

query = query.Where(p => p.CategoryID == categoryId);

}

if (!String.IsNullOrEmpty(categoryName))

{

query = query.Where(p =>

String.Compare(p.Category.CategoryName,

categoryName) == 0);

}

return query;

}

}

}

5. Код модуля реализующего детального просмотра товара страницы веб-сайта, содержащегося в файле «ProductDetails.aspx»

<%@ Page Title="Product Details" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true"

CodeBehind="ProductDetails.aspx.cs" Inherits="WingtipToys.ProductDetails" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<asp:FormView ID="productDetail" runat="server" ItemType="WingtipToys.Models.Product" SelectMethod ="GetProduct" RenderOuterTable="false">

<ItemTemplate>

<div>

<h1><%#:Item.ProductName %></h1>

</div>

<br />

<table>

<tr>

<td>

<img src="/Catalog/Images/<%#:Item.ImagePath %>" style="border:solid; height:300px" alt="<%#:Item.ProductName %>"/>

</td>

<td>&nbsp;</td>

<td style="vertical-align: top; text-align:left;">

<b>Описание:</b><br /><%#:Item.Description %>

<br />

<span><b>Цена:</b>&nbsp;<%#: String.Format("{0:c}", Item.UnitPrice) %></span>

<br />

<span><b>Номер продукта(ID):</b>&nbsp;<%#:Item.ProductID %></span>

<br />

</td>

</tr>

</table>

</ItemTemplate>

</asp:FormView>

</asp:Content>

6. Код модуля реализующего функции веб-сайта, содержащихся в файле «ProductDetails.aspx.cs»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using WingtipToys.Models;

using System.Web.ModelBinding;

namespace WingtipToys

{

public partial class ProductDetails : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

public IQueryable<Product> GetProduct(

[QueryString("ProductID")] int? productId,

[RouteData] string productName)

{

var _db = new WingtipToys.Models.ProductContext();

IQueryable<Product> query = _db.Products;

if ( productId > 0)

{

query = query.Where(p => p.ProductID == productId);

}

else if (!String.IsNullOrEmpty(productName))

{

query = query.Where(p =>

String.Compare(p.ProductName, productName) == 0);

}

else

{

query = null;

}

return query;

}

}

}

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

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ShoppingCart.aspx.cs" Inherits="WingtipToys.ShoppingCart" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<div id="ShoppingCartTitle" runat="server" class="ContentHead"><h1>Корзина</h1></div>

<asp:GridView ID="CartList" runat="server" AutoGenerateColumns="False" ShowFooter="True" GridLines="Vertical" CellPadding="4"

ItemType="WingtipToys.Models.CartItem" SelectMethod="GetShoppingCartItems"

CssClass="table table-striped table-bordered" >

<Columns>

<asp:BoundField DataField="ProductID" HeaderText="ID" SortExpression="ProductID" />

<asp:BoundField DataField="Product.ProductName" HeaderText="Низвание" />

<asp:BoundField DataField="Product.UnitPrice" HeaderText="Цена" DataFormatString="{0:c}"/>

<asp:TemplateField HeaderText="Количество">

<ItemTemplate>

<asp:TextBox ID="PurchaseQuantity" Width="40" runat="server" Text="<%#: Item.Quantity %>"></asp:TextBox>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Общая цена">

<ItemTemplate>

<%#: String.Format("{0:c}", ((Convert.ToDouble(Item.Quantity)) * Convert.ToDouble(Item.Product.UnitPrice)))%>

</ItemTemplate>

</asp:TemplateField>

<asp:TemplateField HeaderText="Удалить товар">

<ItemTemplate>

<asp:CheckBox id="Remove" runat="server"></asp:CheckBox>

</ItemTemplate>

</asp:TemplateField>

</Columns>

</asp:GridView>

<div>

<p></p>

<strong>

<asp:Label ID="LabelTotalText" runat="server" Text="Общая стоймость: "></asp:Label>

<asp:Label ID="lblTotal" runat="server" EnableViewState="false"></asp:Label>

</strong>

</div>

<br />

<table>

<tr>

<td>

<asp:Button ID="UpdateBtn" runat="server" Text="Обновить" OnClick="UpdateBtn_Click" />

</td>

<td>

<%--<asp:ImageButton ID="CheckoutImageBtn" runat="server"

ImageUrl="https://www.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"

Width="145" AlternateText="Check out with PayPal"

OnClick="CheckoutBtn_Click"

BackColor="Transparent" BorderWidth="0" />--%>

</td>

</tr>

</table>

</asp:Content>

8. Код модуля реализующего функции веб-сайта, содержащихся в файле «ShoppingCart.aspx»

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using WingtipToys.Models;

using WingtipToys.Logic;

using System.Collections.Specialized;

using System.Collections;

using System.Web.ModelBinding;

namespace WingtipToys

{

public partial class ShoppingCart : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())

{

decimal cartTotal = 0;

cartTotal = usersShoppingCart.GetTotal();

if (cartTotal > 0)

{

// Display Total.

lblTotal.Text = String.Format("{0:c}", cartTotal);

}

else

{

LabelTotalText.Text = "";

lblTotal.Text = "";

ShoppingCartTitle.InnerText = "Корзина пуста";

UpdateBtn.Visible = false;

//CheckoutImageBtn.Visible = false;

}

}

}

public List<CartItem> GetShoppingCartItems()

{

ShoppingCartActions actions = new ShoppingCartActions();

return actions.GetCartItems();

}

public List<CartItem> UpdateCartItems()

{

using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())

{

String cartId = usersShoppingCart.GetCartId();

ShoppingCartActions.ShoppingCartUpdates[] cartUpdates = new ShoppingCartActions.ShoppingCartUpdates[CartList.Rows.Count];

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

{

IOrderedDictionary rowValues = new OrderedDictionary();

rowValues = GetValues(CartList.Rows[i]);

cartUpdates[i].ProductId = Convert.ToInt32(rowValues["ProductID"]);

CheckBox cbRemove = new CheckBox();

cbRemove = (CheckBox)CartList.Rows[i].FindControl("Remove");

cartUpdates[i].RemoveItem = cbRemove.Checked;

TextBox quantityTextBox = new TextBox();

quantityTextBox = (TextBox)CartList.Rows[i].FindControl("PurchaseQuantity");

cartUpdates[i].PurchaseQuantity = Convert.ToInt16(quantityTextBox.Text.ToString());

}

usersShoppingCart.UpdateShoppingCartDatabase(cartId, cartUpdates);

CartList.DataBind();

lblTotal.Text = String.Format("{0:c}", usersShoppingCart.GetTotal());

return usersShoppingCart.GetCartItems();

}

}

public static IOrderedDictionary GetValues(GridViewRow row)

{

IOrderedDictionary values = new OrderedDictionary();

foreach (DataControlFieldCell cell in row.Cells)

{

if (cell.Visible)

{

// Extract values from the cell.

cell.ContainingField.ExtractValuesFromCell(values, cell, row.RowState, true);

}

}

return values;

}

protected void UpdateBtn_Click(object sender, EventArgs e)

{

UpdateCartItems();

}

protected void CheckoutBtn_Click(object sender, ImageClickEventArgs e)

{

Response.Redirect("ShoppingCart.aspx");

}

}

}

9. Код модуля реализующего добавления в корзину страницы веб-сайта, содержащегося в файле «AddToCart.aspx»

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="AddToCart.aspx.cs" Inherits="WingtipToys.AddToCart" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

<title></title>

</head>

<body>

<form id="form1" runat="server">

<div>

</div>

</form>

</body>

</html>

10. Код модуля реализующего функции веб-сайта, содержащихся в файле «ShoppingCart.aspx»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Diagnostics;

using WingtipToys.Logic;

namespace WingtipToys

{

public partial class AddToCart : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

string rawId = Request.QueryString["ProductID"];

int productId;

if (!String.IsNullOrEmpty(rawId) && int.TryParse(rawId, out productId))

{

using (ShoppingCartActions usersShoppingCart = new ShoppingCartActions())

{

usersShoppingCart.AddToCart(Convert.ToInt16(rawId));

}

}

else

{

Debug.Fail("ERROR.");

throw new Exception("ERROR .");

}

Response.Redirect("ShoppingCart.aspx");

}

}

}

11. Код модуля реализующего основной функционал работы страниц веб-сайта, содержащегося в файле «ShoppingCartAction.cs»

using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using WingtipToys.Models;

namespace WingtipToys.Logic

{

public class ShoppingCartActions : IDisposable

{

public string ShoppingCartId { get; set; }

private ProductContext _db = new ProductContext();

public const string CartSessionKey = "CartId";

public void AddToCart(int id)

{

// Retrieve the product from the database.

ShoppingCartId = GetCartId();

var cartItem = _db.ShoppingCartItems.SingleOrDefault(

c => c.CartId == ShoppingCartId && c.ProductId == id);

if (cartItem == null)

{

// Create a new cart item if no cart item exists.

cartItem = new CartItem

{

ItemId = Guid.NewGuid().ToString(),

ProductId = id,

CartId = ShoppingCartId,

Product = _db.Products.SingleOrDefault(

p => p.ProductID == id),

Quantity = 1,

DateCreated = DateTime.Now

};

_db.ShoppingCartItems.Add(cartItem);

}

else

{

// If the item does exist in the cart,

// then add one to the quantity.

cartItem.Quantity++;

}

_db.SaveChanges();

}

public void Dispose()

{

if (_db != null)

{

_db.Dispose();

_db = null;

}

}

public string GetCartId()

{

if (HttpContext.Current.Session[CartSessionKey] == null)

{

if (!string.IsNullOrWhiteSpace(HttpContext.Current.User.Identity.Name))

{

HttpContext.Current.Session[CartSessionKey] = HttpContext.Current.User.Identity.Name;

}

else

{

// Generate a new random GUID using System.Guid class.

Guid tempCartId = Guid.NewGuid();

HttpContext.Current.Session[CartSessionKey] = tempCartId.ToString();

}

}

return HttpContext.Current.Session[CartSessionKey].ToString();

}

public List<CartItem> GetCartItems()

{

ShoppingCartId = GetCartId();

return _db.ShoppingCartItems.Where(

c => c.CartId == ShoppingCartId).ToList();

}

public decimal GetTotal()

{

ShoppingCartId = GetCartId();

// Multiply product price by quantity of that product to get

// the current price for each of those products in the cart.

// Sum all product price totals to get the cart total.

decimal? total = decimal.Zero;

total = (decimal?)(from cartItems in _db.ShoppingCartItems

where cartItems.CartId == ShoppingCartId

select (int?)cartItems.Quantity *

cartItems.Product.UnitPrice).Sum();

return total ?? decimal.Zero;

}

public ShoppingCartActions GetCart(HttpContext context)

{

using (var cart = new ShoppingCartActions())

{

cart.ShoppingCartId = cart.GetCartId();

return cart;

}

}

public void UpdateShoppingCartDatabase(String cartId, ShoppingCartUpdates[] CartItemUpdates)

{

using (var db = new WingtipToys.Models.ProductContext())

{

try

{

int CartItemCount = CartItemUpdates.Count();

List<CartItem> myCart = GetCartItems();

foreach (var cartItem in myCart)

{

// Iterate through all rows within shopping cart list

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

{

if (cartItem.Product.ProductID == CartItemUpdates[i].ProductId)

{

if (CartItemUpdates[i].PurchaseQuantity < 1 || CartItemUpdates[i].RemoveItem == true)

{

RemoveItem(cartId, cartItem.ProductId);

}

else

{

UpdateItem(cartId, cartItem.ProductId, CartItemUpdates[i].PurchaseQuantity);

}

}

}

}

}

catch (Exception exp)

{

throw new Exception("ERROR: Unable to Update Cart Database - " + exp.Message.ToString(), exp);

}

}

}

public void RemoveItem(string removeCartID, int removeProductID)

{

using (var _db = new WingtipToys.Models.ProductContext())

{

try

{

var myItem = (from c in _db.ShoppingCartItems where c.CartId == removeCartID && c.Product.ProductID == removeProductID select c).FirstOrDefault();

if (myItem != null)

{

// Remove Item.

_db.ShoppingCartItems.Remove(myItem);

_db.SaveChanges();

}

}

catch (Exception exp)

{

throw new Exception("ERROR: Unable to Remove Cart Item - " + exp.Message.ToString(), exp);

}

}

}

public void UpdateItem(string updateCartID, int updateProductID, int quantity)

{

using (var _db = new WingtipToys.Models.ProductContext())

{

try

{

var myItem = (from c in _db.ShoppingCartItems where c.CartId == updateCartID && c.Product.ProductID == updateProductID select c).FirstOrDefault();

if (myItem != null)

{

myItem.Quantity = quantity;

_db.SaveChanges();

}

}

catch (Exception exp)

{

throw new Exception("ERROR: Unable to Update Cart Item - " + exp.Message.ToString(), exp);

}

}

}

public void EmptyCart()

{

ShoppingCartId = GetCartId();

var cartItems = _db.ShoppingCartItems.Where(

c => c.CartId == ShoppingCartId);

foreach (var cartItem in cartItems)

{

_db.ShoppingCartItems.Remove(cartItem);

}

// Save changes.

_db.SaveChanges();

}

public int GetCount()

{

ShoppingCartId = GetCartId();

// Get the count of each item in the cart and sum them up

int? count = (from cartItems in _db.ShoppingCartItems

where cartItems.CartId == ShoppingCartId

select (int?)cartItems.Quantity).Sum();

// Return 0 if all entries are null

return count ?? 0;

}

public struct ShoppingCartUpdates

{

public int ProductId;

public int PurchaseQuantity;

public bool RemoveItem;

}

public void MigrateCart(string cartId, string userName)

{

var shoppingCart = _db.ShoppingCartItems.Where(c => c.CartId == cartId);

foreach (CartItem item in shoppingCart)

{

item.CartId = userName;

}

HttpContext.Current.Session[CartSessionKey] = userName;

_db.SaveChanges();

}

}

}

Размещено на Allbest.ru

...

Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.