UI层:展现给用户的界面,并为用户提供对系统进行操作的接口,此处即为用户提供身份验证的接口(验证用户名和密码).由于UI层向用户提供了接口所以其必有接受、传递用户名、密码的方法,当用户身份验证通过后还应该有显示用户信息的方法。
界面设计:
业务逻辑层:针对用户身份验证的逻辑处理,所以对于登陆模块功能来说业务逻辑层有一个用户身份验证的方法,该方法实现对用户身份验证的逻辑处理。
数据访问层:访问数据库,该层实现对数据库的连接,对数据进行增、删、查、改。
模块类图:
用户登录状态图:
用户登录时序图:
UI层界面类实现:
Imports LoginBLL
'系统登陆界面类
Public Class UserLogin
Private usermanager As New UserManager
Public Sub Login(ByVal username As String, ByVal password As String) '系统登陆方法
Dim a As LoginEntity.Status = usermanager.Validate(username, password)
If (a = LoginEntity.Status.success) Then
Display(username)
ElseIf (a = LoginEntity.Status.fail) Then
MsgBox("用户名或密码错误!")
ElseIf (a = LoginEntity.Status.lock) Then
MsgBox("用户登录次数过多该账户已被锁定!")
End '用户被锁定后系统退出
End If
End Sub
Public Sub Display(ByVal username As String) '登陆成功后显示用户名跟欢迎信息
MsgBox(username + ":欢迎登陆")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Me.Login(txtUserName.Text, txtPassWord.Text)
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
End
End Sub
End Class
业务逻辑层具体实现:
Imports LoginDLL
Imports LoginEntity
'业务逻辑处理类
Public Class UserManager
Private userdao As New UserDao
Private user As New User
Public Function Validate(ByVal username As String, ByVal password As String) As Status '验证用户身份返回用户状态
user = userdao.Query(username, password)
user.userCount = user.userCount + 1
'MsgBox(user.userCount)
If (user.userName <> username Or user.userPassword <> password) Then
user.UserState = Status.fail
Else
user.UserState = Status.success
End If
If (user.userCount > 3) Then
user.UserState = Status.lock
End If
Return user.UserState
End Function
End Class
数据访问层实现:
Imports LoginEntity
Imports System.Data.SqlClient
'数据库访问类
Public Class UserDao
Private user As New User
Private Const connectstr = "server=.;database=bbs;uid=sa;pwd=123456"
Private conn As SqlClient.SqlConnection
Private rs As SqlClient.SqlDataReader
Private cmd As SqlClient.SqlCommand
Public Sub New()
conn = New SqlClient.SqlConnection
conn.ConnectionString = connectstr
Try
conn.Open() '打开数据库连接
Console.WriteLine("数据库连接成功!")
Catch ex As Exception
Finally
End Try
End Sub
Public Sub Colse() '关闭数据库连接
conn.Close()
End Sub
Public Function Query(ByVal username As String, ByVal password As String) As User '查询用户信息并返回用户信息
cmd = New SqlClient.SqlCommand("select * from users where name='" + username + "'and password='" + password + "'", conn)
Try
rs = cmd.ExecuteReader()
While (rs.Read)
user.userName = rs.Item("name")
user.userPassword = rs.Item("password")
user.UserState = Status.success
End While
Catch ex As Exception
Finally
If Not IsNothing(conn) Then
Colse()
End If
End Try
Return user
End Function
End Class
用户实体类:
'用户实体类
Public Class User
Private Count As Integer = 0 '私有成员属性记录该用户验证登陆次数
Private state As Status '用户状态
Private name As String '用户名
Private password As String '密码
Public Property UserState As Status
Get
Return state
End Get
Set(ByVal value As Status)
state = value
End Set
End Property
Public Property userName As String
Get
Return name
End Get
Set(ByVal value As String)
name = value
End Set
End Property
Public Property userPassword As String
Get
Return password
End Get
Set(ByVal value As String)
password = value
End Set
End Property
Public Property userCount As String
Get
Return Count
End Get
Set(ByVal value As String)
Count = value
End Set
End Property
End Class
状态枚举类:
'用户状态枚举类
Public Enum Status
success
fail
lock
End Enum