书城计算机网络综合应用软件设计
8724600000033

第33章 软件构造(12)

Handles btnReturn.Click

Me.ShowQuery()

End Sub

6.6.4如何实现购物车功能

购物车是商务网站常见的一种功能。它把用户在该网站浏览时所感兴趣的、有购买意向的商品或相关服务短暂记录在客户端。只要用户还处于登录状态就可以随时查看、修改、编辑他所选择的商品。如果用户觉得他所选择的商品非常满意,就可以提交,把商品的相关信息提交到服务器端处理。此时用户所选的商品已经成为历史,不能再进行修改。用户把喜欢的商品都放到购物车里,最后到出口处进行结账,这个过程非常像在超市里买东西。结账就意味着交易完成,这就相当于用户把商品信息提交到服务器端。

在实现购物车功能时,要用到cookie技术。cookie用来保存用户在登录期间,在该网站所有放入购物车中的商品信息。因为cookie中存放的信息字节有限(不能超过4096 字节),所以一般在cookie里只保存该用户放入购物车中的商品id号(数据库设计时专门有一张商品表,每一种商品有唯一的标识id,作为主键),以及用户需要修改的信息,比如所购商品的数量。而商品的其他信息,可以根据商品id从数据库中读出来,再显示到前台页面,用DataGrid显示购物车中的商品信息。顾客对购物车中的商品信息进行编辑。用户也可以清空购物车,购物车的清空状态。编辑结果可存入商品数据库表中,商品数据库表。

下面是实现购物车功能的代码:

Private Sub Page_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load

’在此处放置初始化页的用户代码

ErrMsg.Text=””

’声明cookie

Dim cookie As HttpCookie

’商品的id

Dim Productid As Integer

’商品是否添加的标志

Dim isexist As Boolean=False

If Not IsPostBack Then

’判断前一个页面是否把批Productid通过查询字符串传递过来

If Not Request.QueryString(”ProductId”)Is Nothing Then

Productid=CInt(Request.QueryString(”productId”).ToString())

’获取Cookie(ProductCart)

If Request.Cookies(”ProductCart”)Is Nothing Then

cookie=New HttpCookie(”ProductCart”)

Else

cookie=Request.Cookies(”ProductCart”)

End If

Dim i As Integer

’循环读出Cookie(ProductCart)中所保存用户添加到购物车中的商品的信息

For i=0 To cookie.Values.Count—1

If Not cookie.Values.AllKeys(i)Is Nothing Then

Dim tempstr As String=cookie.Values.AllKeys(i).ToString

If tempstr.Trim()<>””Then

’判断当前添加的商品购物车是否已经存在

If Productid=CInt(cookie.Values.AllKeys(i))Then

isexist=True

Exit For

End If

End If

End If

Next

’购物车里没有改商品,把它添加到购物车了,默认数量为1

If Not isexist Then

cookie.Values.Add(Productid.ToString(),”1”)

Else

ShowErrMsg(”此产品已经添加过了”)

End If

’设置cookie生存时间

Dim ts As TimeSpan=New TimeSpan(0,0,10,0)

cookie.Expires=DateTime.Now.Add(ts)

Response.AppendCookie(cookie)

End If

’把购物车里的商品信息通过DataGrid显示出来

BindGrid()

End If

End Sub

Private Sub ShowErrMsg(ByVal er As String)

ErrMsg.Visible=True

ErrMsg.Text=”<script language="javascript"> alert("”&er&”")</script>”

End Sub

Private Sub BindGrid()

’声明一个datatable表数据结构

Dim mydt As New DataTable

Dim mydr As DataRow

’初始化表的结构

mydt.Columns.Add(New DataColumn(”id”,Type.GetType(”System.String”)))

mydt.Columns.Add(New DataColumn(”Name”,Type.GetType(”System.String”)))

mydt.Columns.Add(New DataColumn(”Price”,Type.GetType(”System.String”)))

mydt.Columns.Add(New DataColumn(”Number”,Type.GetType(”System.String”)))

mydt.Columns.Add(New DataColumn(”Unit”,Type.GetType(”System.String”)))

mydt.Columns.Add(New DataColumn(”Totle”,Type.GetType(”System.String”)))

If Not Request.Cookies(”ProductCart”)Is Nothing Then

Dim cookie As HttpCookie=Request.Cookies(”ProductCart”)

Dim i As Integer

For i=0 To cookie.Values.Count—1

Dim id As Integer

’新行实例化

mydr=mydt.NewRow

’声明数据库表中的一行

Dim row As T_ProductRow

Dim mynearfar As New Nearfar

’把cookie中保存的信息写到定义的表里

If cookie.Values.AllKeys(i)<>””And cookie.Values(i)<>””Then

id=CInt(cookie.Values.AllKeys(i))

’根据cookie中保存的productid查询数据库中商品的其他信息

row=mynearfar.T_ProductCollection.GetByPrimaryKey(id)

mydr(0)=id