ASP.NET基于web的订餐系统的设计与实现

摘要

随着市场、经济的全球化,越来越多的企业认识到:提高企业的竞争力,选择信息化是必由之路。本文论述的订餐系统是针对餐饮娱乐业而设计的一种商务服务网站。其主要功能是完成外卖的前期和辅助工作,即通过网络进行定餐和对服务进行评价。而餐饮工作流程的其他部分如送外卖、付款等后期工作依旧采用传统方式。

微软的. NET平台作为新一代的互联网平台,提供了支持未来计算的高效的Web服务开发工具。利用.NET平台进行订餐系统的开发是此类系统未来开发的趋势之一。本文所设计的系统在.NET平台上进行开发,采用了最新的ASP.NET技术,用VB.NET进行了编码,并使用SQL server进行数据库设计,基本实现了预定的目标,建立起一个比较完整的外卖系统。其特点是方便快捷的操作方式,简单易懂的管理方法,因此对于企业和用户来说,都是一种新型的、节约型的系统。

关键词:企业信息化;订餐系统;.NET;ASP.NET;SQL server

2.1  .NET开发平台及VB.NET开发语言

ASP.NET在进行用户界面开发和基础程序结构生成时具有很多优势。首先,ASP.NET是一个已编译的、基于.NET的开发环境,利用整个.NET框架,开发人员可以方便的进行程序开发;其次,ASP.NET可以无缝地与其它HTML编辑器及其编程工具一起工作,使得Web开发更加方便;再次,在ASP.NET中利用.NET框架中的ADO.NET的强大功能,可以高效便捷的访问数据库,ASP.NET提供了简单的模型,该模型使开发人员能够编写应用程序的运行逻辑,并且保留了会话状态功能;最后,.NET框架和ASP.NET中提供了默认授权和验证方案,可以根据需要方便地移除、添加或者替换这些方案。

Visual Basic.NET是一种完全面向对象的BASIC语言,它能够继承,重载,共享成员,结构化异常处理。它有强壮的语言,严格的类型检查,变量声明时候初始化,支持垃圾收集。功能强大,支持委托,Freethreading、Variant数据类型被Object代替。VB.NET还提供了很多的类型转换函数型运算符,如果不是标准类型,就要用函数型运算符CType来实现。在本次课题中也有一定的使用。

2.2  信息安全性

在大多数系统中,用户的密码信息在数据库中是以明文的方式存放的,数据库管理员稍有疏忽就有可能导致用户的隐私泄漏,尤其是对于一些涉及金融、商业领域的网络应用,这一点漏洞将会导致十分严重的后果。所以,为了加强本系统信息的安全性,在用户登录模块中,对密码这样的敏感信息进行加密是十分必要的。本课题使用了一种常见的哈希加密算法——MD5加密算法。MD5加密算法是不可逆的,经过哈希加密的数据是没有相应的解密算法回到原状的,在应用中是通过比较两个数据的哈希值是否相等,从而达到校验的目的。本课题中,在新客户注册的时候,对客户设置的登录密码用MD5加密算法进行加密,那么存入数据库的将是客户登录密码的MD5哈希值,在登录验证时根据用户输入的密码计算响应的MD5哈希值进行比较。

​​​​​​​5.1  用户功能模块实现

用户模块包括:新用户注册,注册用户登录,注册用户订餐,注册用户留言和评分。

​​​​​​​​​​​​​​        5.1.1  新用户注册

用户填写注册信息包括必填项:用户名,密码,验证密码,email;和可选填写的信息。注册成功后返回登录成功页面,可以选择进行订餐和留言、评分操作。流程图如下:

图4 注册流程图


注册页面设计如图:

图5 注册页面

在提交的时候,检测用户名是否已经存在,若存在,则返回错误信息,重新填写注册信息。从工作流上看,只有注册成功后才可以进行订餐和留言。

代码如下:

        conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"‘链接数据库

        cmd.Connection = conn

        cmd.CommandType = CommandType.Text

        conn.Open()

        Dim strsql As String = "select * from shopper where cshopperid='" & Trim(txtName.Text) & "'"

        cmd = New SqlCommand(strsql, conn)

        Dim reader As SqlDataReader = cmd.ExecuteReader()

        If reader.Read() = True Then

            namewrong.Text = "已有此用户名"

            conn.Close()

        Else

            conn.Close()

所有信息正确便将密码加密之后,将所有信息插入数据表shopper中。

代码如下:

              Dim conn1 As New System.Data.SqlClient.SqlConnection

                Dim cmd1 As New System.Data.SqlClient.SqlCommand

                Dim str1 As String

                Dim str2 As String

                str1 = Password1.Text

                str2 = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(str1, "MD5")

使用MD5加密算法加密密码文本框的值

                conn1.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

                cmd1.Connection = conn1

                cmd1.CommandType = CommandType.Text

                conn1.Open()

                sqlstr = "insert shopper([cshopperid],[cpassword],[csex],[cage],[vaddress],[cphone],[vemail],[vmemo],[dregistertime],[dlastlandtime]) values('"

                sqlstr += txtName.Text & "','"

                sqlstr += str2 & "','"

                If man.Checked Then

                    sqlstr += "男','"

                ElseIf woman.Checked Then

                    sqlstr += "女','"

                End If

                sqlstr += txtAge.Text & "','"

                sqlstr += txtAddress.Text & "','"

                sqlstr += txtPhone.Text & "','"

                sqlstr += txtEmail.Text & "','"

                sqlstr += txtMemo.Text & "','"

                sqlstr += System.DateTime.Now & "','"

                sqlstr += System.DateTime.Now & "')"

                cmd1.CommandText = sqlstr  ‘将注册信息插入数据库

                cmd1.ExecuteNonQuery()

                conn1.Close()

注册成功页面如下:


图6 注册成功

​​​​​​​​​​​​​​        5.1.2  登录

用户需要填写用户名和密码,对输入的用户名与数据库的进行比较,若没有则返回错误,对密码也进行判断,因为密码在保存时是经过MD5加密的,所以在判断的时候也把输入的密码先进行MD5加密,然后进行比较。登录成功进入登录成功页面。
流程图如下:

图7 登录流程图


登录页面设计如下:

图8 登录页面

代码如下:

  Dim cmd As New System.Data.SqlClient.SqlCommand

        conn.Open()Dim str As String

        str = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(txtPass.Text, "MD5")  ‘使用MD5加密密码文本框的值,用于下面跟数据库里面的值进行比较

        cmd.CommandText = "select * from shopper where cshopperid='" & Trim(txtName.Text) & "' and cpassword= '" & str & "' "

        cmd.Connection = conn

        Dim reader As SqlDataReader = cmd.ExecuteReader

        If reader.Read() Then

            Session("cshopperid") = Trim(reader("cshopperid"))   ‘检测用户名是否已经存在

                       Response.Redirect("login_suc.aspx")

        Else

            Session("cshopperid") = Nothing

            wrong.Text = "用户名或者密码错误!"

        End If

        conn.Close()
登录成功后界面如下:

图9 登录成功

​​​​​​​​​​​​​​        5.1.3  订餐

使用DATAGRID绑定DISH表显示菜单,在DATAGRID上每行绑定一个多选按钮和下拉列表,进行多选和数量的选择。然后在文本框中输入送餐的地点,电话和其他的备注信息。若菜品和地址都填写好,则进入订餐成功页面,可以查看自己的订餐信息,可以进行修改和删除。若错误,则报告错误信息,返回订餐页面。流程图如下:

    

'指定数据源并绑定到DataGrid控件

    Private Sub BindGrid()

        Dim conn As New SqlConnection

        Dim cmd As New SqlCommand

        Dim DS As New DataSet

        conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

        conn.Open()

        cmd.Connection = conn

        Dim adpt1 As New SqlDataAdapter("select cdishid,vdishname 菜品名称,cdishrate 价格,vdishdescription 口味  from dish", conn)  ‘显示dish表的内容

        adpt1.Fill(DS, "OUTER")

        DataGrid1.DataSource = DS

        DataGrid1.DataBind()

        conn.Close()

    End Sub

‘在绑定每行时,判断多选按钮的状态和下拉列表的状态

Private Sub DataGrid1_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataGridItemEventArgs) Handles DataGrid1.ItemDataBound

        If e.Item.ItemType = ListItemType.Item Or e.Item.ItemType = ListItemType.AlternatingItem Then

          

            Dim offset As Integer

            offset = txtSaveValue.Value.IndexOf(CType(e.Item.Cells(1).FindControl("TitleShow"), Literal).Text)

            If txtSaveValue.Value.IndexOf(CType(e.Item.Cells(1).FindControl("TitleShow"), Literal).Text) >= 0 Then

                Dim ChkSelected As HtmlInputCheckBox = CType(e.Item.Cells(0).FindControl("ChkSelect"), HtmlInputCheckBox)

                ChkSelected.Checked = True

                offset = txtSaveValue.Value.IndexOf(",", offset)

                Dim numoffset As String

                numoffset = txtSaveValue.Value.Substring(offset + 1, 1)

                Dim NumSelected As HtmlSelect = CType(e.Item.Cells(2).FindControl("snumber"), HtmlSelect)

                Dim x As Integer

                x = CInt(numoffset) - 1

                NumSelected.SelectedIndex = x

            End If

        End If

    End Sub

在点击提交时,判断选定的菜品及数量和输入的信息,并插入数据库。

代码如下:

     Private Sub Submit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Submit.Click

        If txtSaveValue.Value = "" Then

            Me.lb_info.Text = "请选择菜品!"

        ElseIf Request("memo") = "" Then

            Me.lb_info.Text = "请输入您的地址!"

        Else

            GetDishCart()   ‘调用GetDishCart将数据写入数据库

            Me.lb_info.Text = "suc"

            Response.Write("<SCRIPT language=JavaScript>alert('提交成功!');")

            Response.Write("this.location.href='order_suc.aspx';</SCRIPT>")

        End If

    End Sub

    Private Sub GetDishCart()

        Dim IdList() As String = txtSaveValue.Value.ToString().Split(";")

        Dim tconn As New SqlConnection

        Dim tcmd As New SqlCommand

        Dim objReader As SqlDataReader

        Dim x As Integer

        tconn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

        tconn.Open()

        tcmd.Connection = tconn

        tcmd.CommandText = "select orderid from neworder order by  oid desc"

        objReader = tcmd.ExecuteReader()

        If objReader.Read Then

            x = CInt(objReader("orderid")) + 1

        End If

        objReader.Close()

        tconn.Close()

        For i As Integer = 0 To IdList.Length - 2 Step 1

            Dim NuList() As String = IdList(i).Split(",")

            tconn.Open()

            tcmd.CommandType = CommandType.StoredProcedure

            tcmd.CommandText = "orderinsert"     ‘调用存储过程向neworder表插入数据

            tcmd.Parameters.Clear()

            tcmd.Parameters.Add(New SqlParameter("@orderid", x))

            tcmd.Parameters.Add(New SqlParameter("@dishid", NuList(0)))

            tcmd.Parameters.Add(New SqlParameter("@dishnumber", NuList(1)))

            tcmd.Parameters.Add(New SqlParameter("@userid", Session("cshopperid")))

            tcmd.Parameters.Add(New SqlParameter("@birdate", DateTime.Now.ToLongDateString()))

            tcmd.ExecuteNonQuery()

            tconn.Close()

        Next

        '插入相应订单地址

        Dim tsql As String

        tsql = "Insert into orderadd values('" & x & "','" & Request("memo") & "')"

        tcmd.CommandType = CommandType.Text

        tcmd.CommandText = tsql

        tconn.Open()

        tcmd.ExecuteNonQuery()

        tconn.Close()

        Session("orderid") = CStr(x)

    End Sub
订餐成功后,页面如下:

图12 订餐成功页面

​​​​​​​​​​​​​​        5.1.4  留言

在留言页面,用户可以对服务进行评分,同时进行留言

对留言的显示同样采用DATAGRID对数据库进行读取然后显示。提交留言的时候对分数进行判断,然后对留言内容是否为空进行判断,然后写进数据库。流程图如下:


图13 留言流程图

代码如下:

If Request("word") = "" Then

            Response.Write("<SCRIPT language=JavaScript>alert('留言信息不能为空!');")

            Response.Write("this.location.href='message.aspx';</SCRIPT>")

        End If

        sqlstr = "insert message([cmessageid],[cshopperid],[dmessagetime],[cscore],[vmessage]) values('++ cmessageid ','" & Session("cshopperid") & "','" & System.DateTime.Now & "','"

判断评分的分数值

        If s1.Checked Then

            sqlstr += "1','"

        ElseIf s2.Checked Then

            sqlstr += "2','"

        ElseIf s3.Checked Then

            sqlstr += "3','"

        ElseIf s4.Checked Then

            sqlstr += "4','"

        ElseIf s5.Checked Then

            sqlstr += "5','"

        End If

        sqlstr += Request("word") & "')"

        cmd1.CommandText = sqlstr

        cmd1.ExecuteNonQuery()

        conn1.Close()

        BindGrid()

        Response.Write("<SCRIPT language=JavaScript>alert('留言成功!');")

        Response.Write("this.location.href='message.aspx ';</SCRIPT>")

留言成功后,将DATAGRID重新绑定,返回到留言页面。

​​​​​​​5.2  管理员模块

在此模块中,采用技术都是一样的,所以同一种操作只列出一个。

​​​​​​​​​​​​​​        5.2.1  订单管理

使用DATAGRID绑定数据库显示订单信息,

订单信息分为三类,已经确认的和没有确认的还有已经处理的。

没有确认的订单信息,管理员都可以进行确认或者删除。

流程图如下:

确认订单代码如下:

'command事件处理

    Sub PickArt(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

        If e.CommandName = "Delete" Then

            Dim Selected_Id As Integer

            Selected_Id = CInt(e.Item.Cells(2).Text)

            Dim conn As New SqlConnection

            Dim cmd As New SqlCommand

            conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

            conn.Open()

            cmd.Connection = conn

            '形成delete语句

            cmd.CommandText = "delete from neworder where dishid =" & Selected_Id

            cmd.ExecuteNonQuery()

            conn.Close()

        ElseIf e.CommandName = "Select" Then

            Dim Selected_Id As Integer

            Selected_Id = CInt(e.Item.Cells(2).Text)

            Dim conn As New SqlConnection

            Dim cmd As New SqlCommand

            conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

            conn.Open()

            cmd.Connection = conn

            '形成更新语句修改处理的标志位

            cmd.CommandText = "update neworder set status= status+1 where dishid =" & Selected_Id

            cmd.ExecuteNonQuery()

            conn.Close()

处理订单操作和确认订单相似,都含有处理和删除两个按钮列,以便于进行操作。所有已经处理过的订单,都可以通过另一个页面进行管理操作,里面只包含了一个按钮列:删除。

        ​​​​​​​5.2.2  留言管理

使用DATAGRID绑定数据库显示留言信息,在DATAGRID上添加一列按钮列进行删除操作。流程图如下:

图15 留言管理流程图

代码如下:

  '删除事件处理

    Sub PickArt(ByVal sender As Object, ByVal e As DataGridCommandEventArgs)

        If e.CommandName = "Delete" Then

            Dim Selected_Id As Integer

            Selected_Id = CInt(e.Item.Cells(1).Text)

            Dim conn As New SqlConnection

            Dim cmd As New SqlCommand

            conn.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial Catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

            conn.Open()

            cmd.Connection = conn

            '形成delete语句

            cmd.CommandText = "delete from message where id =" & Selected_Id

            cmd.ExecuteNonQuery()

            conn.Close()

        End If

        BindGrid()

End Sub

​​​​​​​5.2.3  菜单管理

使用DATAGRID绑定数据库显示留言信息,在DATAGRID上添加两个按钮列进行删除操作和更新操作,还可进行新菜品的添加。流程图如下:

图16 菜单管理流程图

添加菜品代码如下:

        cmd1.CommandText = "select max(cdishid) maxcdishid from dish"  ‘查找菜品ID 的最大值

        objReader = cmd1.ExecuteReader()

        If objReader.Read Then

            x = CInt(objReader("maxcdishid")) + 1   ‘将最大值+1

        End If

        objReader.Close()  

        conn2.ConnectionString = "Connect Timeout=5;packet size=4096;persist security info=False;initial catalog=dishsale;data source=32A5C0037011401;user id=sa;password=''"

        cmd2.Connection = conn2

        cmd2.CommandType = CommandType.Text

        conn2.Open()

        strsql = "Insert Into dish (cdishid,vdishname,vdishdescription,cdishrate ) Values('x','" & Trim(name.Text) & "','" & Trim(description.Text) & "','" & Trim(dishrate.Text) & "')"

        cmd2.CommandText = strsql

        cmd2.ExecuteNonQuery()    ‘将新菜品的信息插入数据库

        conn2.Close()

        Response.Write("<SCRIPT language=JavaScript>alert('操作成功!');")

        Response.Write("this.location.href='menumanage.aspx ';</SCRIPT>")

​​​​​​​        5.2.4  用户管理

同样采用DATAGRID绑定数据库进行显示,在DATAGRID上添加按钮列:删除,进行删除操作。
流程图如下:

图17 用户管理流程图

  • 20
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值