4.7.1. Xây dựng giỏ hàng
4.7.1.1. Xây dựng lớp hàng hóa
Lớp Item gồm các thuộc tính: Mã sản phẩm, số lƣợng, giá, hình ảnh và tên của sản phẩm. Lớp Item dùng để đại diện cho một sản phẩm trong giỏ hàng.
public class Item
{
private int iDProduct; public int IDProduct {
get { return iDProduct; } set { iDProduct = value; } }
private int quantity; public int Quantity {
get { return quantity; } set { quantity = value; } }
public int Price {
get { return price; } set { price = value; } }
private string image; public string Image {
get { return image; } set { image = value; } }
private string name; public string Name {
get { return name; } set { name = value; } }
}
4.7.1.2. Xây dựng lớp giỏ hàng
Lớp ShoppingCart có một thuộc tính là danh sách các Item. Danh sách này thể hiện các sản phẩm hiện có trong giỏ hàng.
Lớp ShoppingCart có các phƣơng thức: Add (thêm một Item vào trong giỏ hàng), Delete (xóa một Item ra khỏi giỏ hàng), Update (chỉnh sửa thông tin của một Item) và Total (tính tổng tiền hiện tại của giỏ hàng).
public class ShoppingCart
{
public List<Item> ItemCollection = new List<Item>(); public void Add(Item item)
{
for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection[i].Quantity += item.Quantity; return; } } ItemCollection.Add(item); }
public void Delete(Item item) {
for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection.RemoveAt(i); return; } } }
public void Update(Item item) {
for (int i = 0; i < ItemCollection.Count; i++) { if (item.IDProduct == ItemCollection[i].IDProduct) { ItemCollection[i].Quantity = item.Quantity; return; } } }
public int Total() {
int total = 0;
for (int i = 0; i < ItemCollection.Count; i++) { total += ItemCollection[i].Price; } return total; } }
4.7.2. Thiết kế giao diện
Trang thông tin giỏ hàng gồm 1 danh sách các sản phẩm hiện đang có trong giỏ hàng, hai nút tiếp tục mua hàng và đặt hàng.
<div class="title"><span class="title_icon">
<img src="images/bullet1.gif" alt="" title="" /></span>Giỏ hàng</div>
<div class="feat_prod_box_details">
<asp:Repeater ID="rep_Cart" runat="server"
OnItemDataBound="rep_Cart_ItemDataBound">
<HeaderTemplate>
<table class="cart_table">
<tr class="cart_title"> <td>Hình ảnh</td> <td>Tên sách</td> <td>Giá</td> <td>Số lượng</td> <td>Tổng tiền</td> </tr> </HeaderTemplate> <ItemTemplate> <tr>
<td><a href="Detail.aspx?id=<%#Eval("IDProduct") %>">
<img src="Photos/Thumb/<%#Eval("Image") %>" alt=""
title="" border="0" class="cart_thumb" />
</a></td>
<td><%#Eval("Name") %></td>
<td><%#Eval("Quantity") %></td>
<td>
<asp:Literal ID="lit_ThanhTien"
runat="server"></asp:Literal> VNĐ</td> </tr>
</ItemTemplate> </asp:Repeater>
<tr>
<td colspan="4" class="cart_total"><span
class="red">TOTAL:</span></td>
<td>
<asp:Literal ID="lit_TongTien"
runat="server"></asp:Literal> VNĐ</td> </tr>
</table>
<a href="Default.aspx" class="continue">< Tiếp tục</a> <a href="Order.aspx" runat="server" id="a_Order"
class="checkout">Đặt hàng ></a> </div>
<div class="clear"></div>
4.7.3. Xử lý tải dữ liệu
Khi ngƣời dùng đi vào chức năng xem giỏ hàng, chƣơng trình tiến hành tải danh sách sản phẩm hiện đang có trong giỏ hàng.
Nếu khách hàng chƣa đăng nhập thì sẽ không hiển thị nút đặt hàng, ngƣợc lại nếu khách hàng đã đăng nhập thì chƣơng trình sẽ cho phép khách hàng đó đặt hàng.
protected void Page_Load(object sender, EventArgs e) {
Session["Page"] = MainMenu.Cart; if (!IsPostBack)
{
LoadData(); }
}
private void LoadData() {
ShoppingCart c = (ShoppingCart)Session["Cart"]; rep_Cart.DataSource = c.ItemCollection;
rep_Cart.DataBind();
lit_TongTien.Text = c.Total().ToString(); if (Session["KhachHang"] == null)
{
} }
protected void rep_Cart_ItemDataBound(object sender,
RepeaterItemEventArgs e) {
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{
Item i = (Item)e.Item.DataItem; Literal lit_ThanhTien =
(Literal)e.Item.FindControl("lit_ThanhTien"); int thanhtien = (i.Price * i.Quantity); lit_ThanhTien.Text = thanhtien.ToString(); }
}
4.8. XÂY DỰNG CHỨC NĂNG ĐẶT HÀNG 4.8.1. Thiết kế giao diện 4.8.1. Thiết kế giao diện
Chức năng đặt hàng gồm có các thông tin: ngày giao hàng và địa chỉ nhận hàng. Trong đó ngày giao hàng là một DateTimePicker cho phép khách hàng chọn ngày để giao hàng.
<script type="text/javascript" src="js/jquery- 1.3.2.min.js"></script>
<script type="text/javascript" src="js/jquery-ui- 1.7.2.custom.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-timepicker- addon.js"></script>
<img src="images/bullet1.gif" alt="" title="" /></span>Đặt hàng</div>
<div class="feat_prod_box_details">
<div class="contact_form">
<div class="form_row">
<label class="contact"><strong>Ngày giao hàng:</strong></label>
<asp:TextBox CssClass="contact_input"
ID="txt_Date" runat="server"></asp:TextBox>
</div>
<div class="form_row">
<label class="contact"><strong>Địa chỉ nhận hàng:</strong></label>
<asp:TextBox CssClass="contact_input"
ID="txt_Address" runat="server"></asp:TextBox>
</div>
<div class="form_row">
<asp:Button ID="btn_Order" CssClass="register"
runat="server" Text="Đặt hàng" OnClick="btn_Order_Click"/>
</div>
<div class="form_row">
<asp:Label ID="lit_ThongBao"
runat="server"></asp:Label>
</div> </div>
</div>
<div class="clear"></div>
<script type="text/javascript">
$(function() { $('#<%=txt_Date.ClientID %>').datepicker({ duration: '', constrainInput: false }); }); </script> 4.8.2. Xử lý chức năng đặt hàng
Sau khi ngƣời dùng nhập đầy đủ thông tin và nhấp chuột vào nút đặt hàng, chƣơng trình tiến hành thêm thông tin đặt hàng này vào cơ sở dữ liệu.
Chƣơng trình sẽ lấy tất cả sản phẩm có trong giỏ hàng và thêm chi tiết đơn hàng này vào cơ sở dữ liệu.
protected void btn_Order_Click(object sender, EventArgs e) {
try
{
ShoppingCart c = (ShoppingCart)Session["Cart"]; tbDonHang donHang = new tbDonHang();
donHang.DaGiao = false;
donHang.DiaChiNhanHang = txt_Address.Text; donHang.NgayDatHang = DateTime.Now;
donHang.NgayGiaoHang = DateTime.Parse(txt_Date.Text); donHang.TriGia = c.Total();
donHang.MaKH =
int.Parse(Session["KhachHang"].ToString()); int id = tbDonHangBUS.Insert(donHang);
for (int i = 0; i < c.ItemCollection.Count; i++) {
tbCTDonHang cTDonHang = new tbCTDonHang(); cTDonHang.MaDH = id; cTDonHang.MaSach = c.ItemCollection[i].IDProduct; cTDonHang.SoLuong = c.ItemCollection[i].Quantity; cTDonHang.DonGia = c.ItemCollection[i].Price; tbCTDonHangBUS.Insert(cTDonHang); }
Session["Cart"] = new ShoppingCart();
lit_ThongBao.Text = "Dat hang thanh cong."; } catch { Response.Redirect("~/Default.aspx"); } }