加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

VB.net版机房收费系统——三层登录

发布时间:2020-12-17 00:11:43 所属栏目:大数据 来源:网络整理
导读:年后开学这几天,一直在整VB.net版的机房收费系统,设计了数据库,画了ER图,把相关的文档更新了一丁点儿,接下来,就开始了三层之旅。 虽说看了王继彬老师讲的三层视频后,也用C# 代码实现了三层登陆,但是理解得还是不深刻,实战的时候就看出了自己的不足

  年后开学这几天,一直在整VB.net版的机房收费系统,设计了数据库,画了ER图,把相关的文档更新了一丁点儿,接下来,就开始了三层之旅。

  虽说看了王继彬老师讲的三层视频后,也用C# 代码实现了三层登陆,但是理解得还是不深刻,实战的时候就看出了自己的不足。于是,看了好多博客,最后一句简单的代码让我瞬间明白了全局,终于实现了登录,这也让我对七层登录的实现满怀信心~

  首先看一下相关的解决方案:

  下面是相关的代码,写了好多注释,从代码中可以看出我的学习过程和理解~

Entity层

<span style="font-size:18px;">Public Class eUserLogin
    '定义属性变量
    Private e_UserID As String
    Private e_PassWord As String
    '用户名
    Public Property UserID() As String
        Get
            Return e_UserID
        End Get
        Set(value As String)
            e_UserID = value
        End Set
    End Property
    '密码
    Public Property PassWord() As String
        Get
            Return e_PassWord
        End Get
        Set(value As String)
            e_PassWord = value
        End Set
    End Property
End Class</span>
  如果把实体层比作一辆车的话,里边定义的属性变量就是乘客,而且是VIP级的,因为若是没有提前报名,他是不会搭理你的~

UI层

<span style="font-size:18px;">Public Class frmLogin
    Private Sub btnLogin_Click(sender As Object,e As EventArgs) Handles btnLogin.Click
        Try   
            '定义的UserInfo算是全局实体,很像是直达的列车,中途不倒车
            Dim UserInfo As New Entity.eUserLogin
            '将用户名和密码放入实体
            UserInfo.UserID = txtUserName.Text.Trim()
            UserInfo.PassWord = txtPassword.Text.Trim()

            '判断输入是否正确  
            If txtUserName.Text = "" Then
                MsgBox("用户名不能为空!",MsgBoxStyle.Information + MsgBoxStyle.OkOnly,"提示")
                Return
            End If

            If txtPassword.Text = "" Then
                MsgBox("密码不能为空!","提示")
                Return
            End If

            '实例化BLL实体,用来对传入的登录信息实体做判断
            Dim bLogin As New BLL.bUserLogin
            '定义一个最终的返回实体returnUserInfo,承接经过D层查询,B层判断的登录信息
            Dim returnUserInfo As New Entity.eUserLogin
            '调用B层中的方法CheckUserInfo
            returnUserInfo = bLogin.CheckUserInfo(UserInfo)

        Catch ex As Exception
            '错误提示
            MessageBox.Show(ex.Message.ToString())
        End Try
    End Sub</span>

  实体的命名思路:U层实例化一个接收实体,用来存放登录时输入的用户名和密码;由于这个实体承载的信息是全局(我称它为全局实体)故命名上没加前缀,别的层定义实体时,命名规则是:在哪个层定义,前缀就是那个层的首字母。

BLL层

<span style="font-size:18px;">Public Class bUserLogin
    'UserInfo用来承载用户登录时输入的用户名和密码,全局实体

    Public Function CheckUserInfo(ByVal UserInfo As Entity.eUserLogin) As Entity.eUserLogin
        '实例化D层
        Dim dLogin As New DAL.dUserLogin
        '定义B层的返回实体
        Dim bUserInfo As New Entity.eUserLogin
        '调用D层中的SelectUserInfo方法
        bUserInfo = dLogin.SelectUserInfo(UserInfo)

        'If IsNothing(bUserInfo.UserID) Then
        '    Throw New Exception("登录信息有误,请核实~")
        If (bUserInfo.UserID Is Nothing Or bUserInfo.PassWord Is Nothing) Then
            Throw New Exception("用户名或密码错误,请核实~")
        Else
            'MsgBox("登录成功,正在登录系统……")

            '这样写标签名字就不是BLL了,效果见下图
            MsgBox("登录成功,正在登录系统……","提示")
            Return bUserInfo
        End If
    End Function
End Class</span>



DAL层

  SqlHelper,连接数据库的公用字符串:

<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Public Class dSqlHelper
    Public Shared Function connstring() As String
        '连接数据库的字符串
        connstring = "server=SUN;database=ComputerCharge_sys;uid=sa;pwd=1"
    End Function
End Class</span>
数据表T_User_Info如下展示:



  正式和数据库打交道

<span style="font-size:18px;">Imports System.Data
Imports System.Data.SqlClient
Public Class dUserLogin

    Public Function SelectUserInfo(UserInfo As Entity.eUserLogin) As Entity.eUserLogin
        '实例化dSqlHelper中的返回字符串,定义连接打开数据库
        Dim conn As New SqlConnection(dSqlHelper.connstring)
        '打开数据库
        conn.Open()
        'DataReader是一行一行的读取记录的,当记录中有数据时Read(返回True,当到记录集底部时返回False)
        Dim reader As SqlDataReader
        'D层实例化执行查询后的返回实体
        Dim dUserInfo As New Entity.eUserLogin
        '查询语句
        Dim sql As String = "Select * from T_User_Info where UserID= @UserID and PassWord=@PassWord"
        '定义数据库命令,获得SQL语句的具体命令
        Dim cmd As New SqlCommand(sql,conn)
        '**********************************************
        '这段代码注释了也可以执行
        ''获取SQL语句的具体内容()
        'cmd.CommandText = sql
        ''获取上述SQL语句的具体类型,在此为Select
        'cmd.CommandType = CommandType.Text
        '**********************************************
        cmd.Parameters.Add(New SqlParameter("@UserID",UserInfo.UserID))
        cmd.Parameters.Add(New SqlParameter("@PassWord",UserInfo.PassWord))


        '执行查询语句,并返回DataReader对象
        reader = cmd.ExecuteReader()

        '读取查询的数据,并返回给相应的属性
        While (reader.Read())
            '获取数据库中相应字段的数据
            dUserInfo.UserID = reader.GetString(0)
            dUserInfo.PassWord = reader.GetString(1)
            '下面的代码同功能
            'dUserInfo.UserID = reader.GetString(reader.GetOrdinal("UserID"))
            'dUserInfo.PassWord = reader.GetString(reader.GetOrdinal("PassWord"))
        End While
        '返回查询到的实体
        Return dUserInfo
        '关闭数据库
        conn.Close()
    End Function
End Class</span>

总结

  本人菜鸟一枚,看别人博客的时候,被各种命名整的思维混乱,于是花了点时间构思了一下自己的命名规范,从代码的注释中相信读者可以看出来。

  开篇提到,由于对一句代码恍然大悟,所以在原有的三层皮毛知识上树立了自己敲三层的信心,那么是哪句代码呢?这是从UI层摘出来的一句代码:returnUserInfo = bLogin.CheckUserInfo(UserInfo),就是这样的一句,让我瞬间明白了博客中的时序图到底是怎么玩的,同时感慨于实体的伟大之处,真的很像是一辆车,带我们去上学,往返都是它,而且中途不用倒车,贯穿始终~

  PS:Demo已经上传到CSDN资源(VB.net版机房收费系统三层登录源代码)上,以飨读者~

  好了,就说到这里,俺老孙去也~

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读