【VB.NET机房重构】.NET三层登录

         重构这么久,刚摸出点门道,先来介绍一下.NET三层登录。

一、分析

       1、逻辑分析


2、前提准备

【VB.NET机房重构】.NET三层登录_第1张图片

【VB.NET机房重构】.NET三层登录_第2张图片

3、登录界面

【VB.NET机房重构】.NET三层登录_第3张图片

二、代码实现

【VB.NET机房重构】.NET三层登录_第4张图片

Entity层代码(UserInfoEntity和WorkLogEntity)

Public Class UserInfoEntity
    '定义变量
    Private struserID As String
    Private strpassword As String
    Private strlevel As String
    Private strstatus As String

    Public Property UserID() As String
        Get
            Return struserID
        End Get
        Set(value As String)
            struserID = value
        End Set
    End Property
    Public Property Password() As String
        Get
            Return strpassword
        End Get
        Set(value As String)
            strpassword = value
        End Set
    End Property
    Public Property Level() As String
        Get
            Return strlevel
        End Get
        Set(value As String)
            strlevel = value
        End Set
    End Property
    Public Property Status() As String
        Get
            Return strstatus
        End Get
        Set(value As String)
            strstatus = value
        End Set
    End Property
End Class

Public Class WorkLogEntity
    Private struserID As String
    Private strloginTime As String
    Private strlogoutTime As String
    Private strstatus As String

    Public Property UserID() As String
        Get
            Return struserID
        End Get
        Set(value As String)
            struserID = value
        End Set
    End Property
    Public Property LoginTime() As String
        Get
            Return strloginTime
        End Get
        Set(value As String)
            strloginTime = value
        End Set
    End Property
    Public Property LogoutTime() As String
        Get
            Return strlogoutTime
        End Get
        Set(value As String)
            strlogoutTime = value
        End Set
    End Property
    Public Property Status() As String
        Get
            Return strstatus
        End Get
        Set(value As String)
            strstatus = value
        End Set
    End Property
End Class
DAL层代码(UserInfoDAL和WorkLogDAL)

Imports System.Data.SqlClient
Imports System.Data
Public Class UserInfoDAL
    ''' <summary>
    ''' 查询用户
    ''' </summary>
    ''' <param name="userinfoentity1"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Function SelectUser(ByVal userinfoentity1 As Entity.UserInfoEntity)
        Dim conn As New SqlConnection '创建连接对象
        Dim cmd As New SqlCommand '创建命令对象
        conn = New SqlConnection(Dbutil.connstring()) '连接数据库
        cmd.Connection = conn '获取SQL语句的内容

        Dim reader As SqlDataReader '定义SqlDataReader的变量reader

        '传递数据
        cmd.Parameters.Add(New SqlParameter("@UserID", userinfoentity1.UserID))
        cmd.Parameters.Add(New SqlParameter("@Password", userinfoentity1.Password))
        '定义SQL语句
        cmd.CommandText = "Select * from UserInfo where UserID=@UserID and Password=@Password and Status='True'"
        cmd.CommandType = CommandType.Text
        conn.Open() '打开数据库链接

        reader = cmd.ExecuteReader() '执行查询语句,生成一个DataReader

        Dim userinfoentity3 As New Entity.UserInfoEntity
        '读取查询到的数据,返回相应属性
        While reader.Read()
            userinfoentity3.UserID = reader.GetString(0)
            userinfoentity3.Password = reader.GetString(1)
        End While
        Return userinfoentity3
    End Function
End Class

Imports System.Data.SqlClient
Imports System.Data
Public Class WorkLogDAL
    Public Function InsertUser(ByVal worklogentity As Entity.WorkLogEntity) As Boolean
        Dim conn As New SqlConnection '创建连接对象
        Dim cmd As New SqlCommand '创建命令对象
        conn = New SqlConnection(Dbutil.connstring()) '连接数据库
        cmd.Connection = conn

        '传入数据
        cmd.Parameters.Add(New SqlParameter("@UserID", Entity.Common2.strCurrentUserID))
        cmd.Parameters.Add(New SqlParameter("@Status", True))
        worklogentity.LoginTime = Format(Now, "yyyy-mm-dd hh:mm:ss")
        cmd.Parameters.Add(New SqlParameter("@LoginTime", worklogentity.LoginTime))

        '定义SQL语句
        cmd.CommandText = "Insert into WorkLog(UserID,LoginTime,Status)values(@UserID,@LoginTime,@Status)"
        conn.Open()

        Dim num As Integer '表示插入命令的结果
        Dim flag As New Boolean
        num = cmd.ExecuteNonQuery '执行插入命令
        If num > 0 Then
            flag = True
        Else
            flag = False
        End If
        Return flag
    End Function
End Class
BLL层代码(LoginBLL和AddWorkLogBLL)

Public Class LoginBLL
    Public Function UserLogin(ByVal userinfoentity2 As Entity.UserInfoEntity) As Entity.UserInfoEntity
        Dim userinfodal As New DAL.UserInfoDAL '实例化UserInfoDAL
        Dim userinfoentity4 As Entity.UserInfoEntity '定义一个UserInfoEntity的参数

        userinfoentity4 = userinfodal.SelectUser(userinfoentity2)

        '判断是否查询到记录
        If IsNothing(userinfoentity4.UserID) Then
            MsgBox("登录失败,用户名和密码不正确!")
        Else
            MsgBox("登录成功,进入系统!")
        End If
        Return userinfoentity4
    End Function
End Class

Public Class AddWorkLogBLL
    Public Function AddWorkLog(ByVal worklogentity As Entity.WorkLogEntity) As Boolean
        Dim worklogdal As New DAL.WorkLogDAL '实例化WorkLogDAL

        Dim flag As Boolean 'flag用于定义DAL层的方法WorkLog的返回结果
        flag = worklogdal.InsertUser(worklogentity)
        Return flag
    End Function
End Class
UI层代码

Public Class frmLogin
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        Dim userinfoentity As New Entity.UserInfoEntity '实例化UserInfoEntity
        Dim worklogeneity As New Entity.WorkLogEntity '实例化WorkLogEntity
        Dim userinfoentity5 As Entity.UserInfoEntity '定义一个实体层的参数

        '将界面中的数据传给实体层
        userinfoentity.UserID = txtUserID.Text.Trim()
        userinfoentity.Password = txtPassword.Text.Trim()

        '判断输入框是否为空
        If txtUserID.Text = "" Then
            MessageBox.Show("用户名不能为空")
            Return
        End If
        If txtPassword.Text = "" Then
            MessageBox.Show("密码不能为空")
            Return
        End If

        '调用B层,进行判断
        Dim loginbll As New BLL.LoginBLL '实例化LoginBLL
        userinfoentity5 = loginbll.UserLogin(userinfoentity)

        '将正在登录的用户登录信息传给全局变量
        Dim strcommon As New Entity.Common2
        strcommon.CurrentUserID = txtUserID.Text.Trim()
        strcommon.CurrentPassword = txtPassword.Text.Trim()

        Dim flag As Boolean
        Dim addworklogbll As New BLL.AddWorkLogBLL '实例化AddWorkLogBLL
        flag = addworklogbll.AddWorkLog(worklogeneity)

        Me.Visible = False
        frmMain.Visible = True
    End Sub
End Class
运行结果:

【VB.NET机房重构】.NET三层登录_第5张图片

总结:三层虽然很简单,但是也要认真的搞清楚,这是后面重构的基础。不管会不会,一定要不停的先去做,再不行先照着别人的敲出来,搞清楚各层的调用和跳转再自己重新敲,肯定会有收获。

你可能感兴趣的:(【VB.NET机房重构】.NET三层登录)