⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shoppingcart.vb

📁 《ASP.NET C#程序设计案例教程》
💻 VB
字号:
Imports System.Data
Imports System.Data.OleDb

'该类用来查询、添加、删除和更新记录
Public Class ShoppingCart           'ShoppingCart是自己定义的类的名称

    '定义一个只读属性,用来返回购物车中是否有物品
    Public ReadOnly Property HasBooks() As Boolean
        Get
            '从Session中获取购物车中的货物信息
            Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
            If htBooks.Count > 0 Then
                Return (True)
            Else
                Return (False)
            End If
        End Get
    End Property

    '定义一个只读属性,用来返回购物总数量
    Public ReadOnly Property TotalNum() As Integer
        Get
            '从Session中获取购物车中的货物信息
            Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
            '将购物车中的所有货物数量加起来
            Dim intTotalNum As Integer = 0
            Dim objItem As DictionaryEntry
            For Each objItem In htBooks
                intTotalNum = intTotalNum + objItem.Value
            Next
            Return (intTotalNum)
        End Get
    End Property

    '定义一个只读属性,用来返回购物总金额
    Public ReadOnly Property TotalMoney() As Single
        Get
            '从Session中获取购物车中的货物信息
            Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
            '将购物车中的所有货物数量加起来
            Dim sglTotalMoney As Single = 0
            Dim objItem As DictionaryEntry
            For Each objItem In htBooks
                '此处会掉用函数返回价格,然后计算出总金额
                sglTotalMoney = sglTotalMoney + GetBookPrice(objItem.Key) * objItem.Value
            Next
            Return (sglTotalMoney)
        End Get
    End Property


    '定义一个私有函数,专门用来返回每一本书的价格
    Private Function GetBookPrice(ByVal intBookId As Integer) As Single
        Dim conn As New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))
        Dim strSql As String = "Select BookPrice From Book Where BookId=" & intBookId
        Dim cmd As New OleDbCommand(strSql, conn)     '建立Command对象
        conn.Open()
        Dim sglBookPrice As Single = cmd.ExecuteScalar()  '返回第一行第一列的记录值,也就是价格
        conn.Close()
        Return (sglBookPrice)         '返回函数值
    End Function

    '定义一个私有函数,专门用来返回每一本书的名称
    Private Function GetBookName(ByVal intBookId As Integer) As String
        Dim conn As New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))
        Dim strSql As String = "Select BookName From Book Where BookId=" & intBookId
        Dim cmd As New OleDbCommand(strSql, conn)     '建立Command对象
        conn.Open()
        Dim strBookName As String = cmd.ExecuteScalar()  '返回第一行第一列的记录值,也就是价格
        conn.Close()
        Return (strBookName)          '返回函数值
    End Function


    '建立构造函数,在其中会判断,如果购物车为空,就会初始化
    Public Sub New()
        If HttpContext.Current.Session("Books") Is Nothing Then
            Dim htBooks As New Hashtable
            HttpContext.Current.Session("Books") = htBooks
        End If
    End Sub

    '该过程用来返回购物车中的所有书籍,注意,这里是将HashTable中的数据转换到了一个DataTable中,最后返回一个DataView对象
    '转换成DataTable的原因是为了显示购物车时方便的帮定到DataGrid控件
    Public Function GetBook() As DataView
        '从Session中获取购物车中的货物信息
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")

        '下面将这个HashTable转换为DataTable
        Dim dt As New DataTable("Books")      '声明并建立DataTable对象,表的名称为 Books
        Dim dc As DataColumn         '声明DataColumn对象变量
        Dim dr As DataRow          '声明DataRow对象变量

        '下面开始建立表格的结构
        '建立第0列,书编号BookId
        dc = New DataColumn("BookId", System.Type.GetType("System.Int32"))
        dt.Columns.Add(dc)
        '建立第1列,书名称BookName
        dc = New DataColumn("BookName", System.Type.GetType("System.String"))
        dt.Columns.Add(dc)
        '建立第2列,书单价BookPrice
        dc = New DataColumn("BookPrice", System.Type.GetType("System.Single"))
        dt.Columns.Add(dc)
        '建立第3列,购书数量BookNum
        dc = New DataColumn("BookNum", System.Type.GetType("System.Int32"))
        dt.Columns.Add(dc)
        '建立第4列,这是一个计算列,为每本书的价格 * 购书数量
        dc = New DataColumn("SubTotal", System.Type.GetType("System.Single"), "BookPrice*BookNum")
        dt.Columns.Add(dc)

        '下面根据HashTable中的购书信息添加每一行
        Dim objItem As DictionaryEntry
        For Each objItem In htBooks
            '逐行赋值
            dr = dt.NewRow()        '新建1行,注意和新建列的区别 
            dr("BookId") = objItem.Key     '书的编号
            dr("BookName") = GetBookName(objItem.Key)  '调用函数,返回书的名称
            dr("BookPrice") = GetBookPrice(objItem.Key) '调用函数,返回书的价格
            dr("BookNum") = objItem.Value     '购书数量
            dt.Rows.Add(dr)          '将该行加到表dt中
        Next
        '返回函数值,注意返回的是DataView
        Return (dt.DefaultView)
    End Function

    '该函数用来判断该书是否已经在购物车中
    Public Function IsExist(ByVal intBookId As String) As Boolean
        '从Session中获取购物车中的货物信息
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
        If htBooks.Contains(intBookId) = True Then
            Return (True)          '表示该书已经存在
        Else
            Return (False)          '表示该书不存在
        End If
    End Function

    '向购物车中添加一本书,如果该书已经存在,只要修改数量即可,如果不存在,则需要添加一项
    Public Sub AddBook(ByVal intBookId As Integer)
        '从Session中获取购物车中的购物信息
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
        If htBooks.Contains(intBookId) = True Then
            '这表示该书已经存在,只要将数量加上1即可
            htBooks(intBookId) = htBooks(intBookId) + 1
        Else
            '表示该书不存在,需要添加一项。其中第二个参数1表示添加1本
            htBooks.Add(intBookId, 1)
        End If
        '最后将新的购物信息保存到Session中
        HttpContext.Current.Session("Books") = htBooks
    End Sub

    '从购物车中删除一本书
    Public Sub RemoveBook(ByVal intBookId As Integer)
        '从Session中获取购物车中的购物信息
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
        '下面删除该书
        htBooks.Remove(intBookId)
        '最后将新的购物信息保存到Session中
        HttpContext.Current.Session("Books") = htBooks
    End Sub

    '更改购物车中的货物数量
    Public Sub UpdateBook(ByVal intBookId As Integer, ByVal intBookNum As Integer)
        '从Session中获取购物车中的购物信息
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
        '下面更改数量
        htBooks(intBookId) = intBookNum '注意,这里如果该书存在,就会更改数量,如果不存在,会自动添加一项
        If intBookNum <= 0 Then
            htBooks.Remove(intBookId)  '如果数量<=0,就将其删除
        End If
        '最后将新的购物信息保存到Session中
        HttpContext.Current.Session("Books") = htBooks
    End Sub

    '结账函数。该函数将产生本次订单,并记录明细情况,最后返回订单号码
    Public Function CheckOut() As Integer
        '因为多次用到Command对象,所以这里建立Command对象的方式不太一样,请大家注意
        Dim conn As New OleDbConnection(ConfigurationSettings.AppSettings("strConn"))
        Dim cmd As New OleDbCommand
        cmd.Connection = conn         '指定Command对象的连接属性
        cmd.CommandType = CommandType.Text     '指定Command对象的命令为SQL字符串
        '下面打开连接
        conn.Open()

        '下面首先添加一个订单,注意这里要调用属性总数量和总金额
        cmd.CommandText = "Insert Into Orders(UserId,TotalNum,TotalMoney,SubmitDate) Values('" & HttpContext.Current.Session("UserId") & "'," & TotalNum & "," & TotalMoney & ",#" & Now() & "#)"
        cmd.ExecuteNonquery()
        '下面马上返回本次的订单编号
        cmd.CommandText = "Select Top 1 OrderId From Orders Where UserId='" & HttpContext.Current.Session("UserId") & "' Order By OrderId Desc"
        Dim intOrderId As Integer = cmd.ExecuteScalar()  '返回第一行第一列的记录值,也就是订单号码
        '下面从Session中获取购物信息,并依次添加到订单详细表中
        Dim htBooks As Hashtable = HttpContext.Current.Session("Books")
        Dim objItem As DictionaryEntry
        For Each objItem In htBooks
            cmd.CommandText = "Insert Into Orders_Particular(OrderId,BookId,BookNum) Values(" & intOrderId & "," & objItem.Key & "," & objItem.Value & ")"
            cmd.ExecuteNonquery()
        Next

        '下面要更新Users表中该用户的购买金额和购买数量
        cmd.CommandText = "Update Users Set TotalNum = TotalNum + " & TotalNum & ",TotalMoney = TotalMoney + " & TotalMoney & " Where UserId='" & HttpContext.Current.Session("UserId") & "'"
        cmd.ExecuteNonquery()
        '下面关闭数据库连接
        Conn.Close()

        '结账完毕,可以将购物车清空
        htBooks.Clear()           '清空所有购物信息
        HttpContext.Current.Session("Books") = htBooks   '将清空的HashTable重新保存到Session中,以备再次购物

        '返回函数值,就是产生的订单号
        Return (intOrderId)
    End Function
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -