前边学习了三层,也写过了三层的理论知识。后续用机房收费系统的登陆实例,实践了三层的理论知识。疏于思考,所以即使敲了两、三遍的登陆窗体也没有用。也是我没有信心将敲的实例贴出来的原因。
所以,我总结了:学习不是应付,做做表面功夫。用心+思考。
环境:VB.NET框架下,以传实体的方式完成。
UI层:即是界面部分。
实体:在UI层、BLL层、DAL层都需要使用的抽象。
'用户类:主要涉及用户的基本属性(信息)
Public Class UserInfo
Private name As String
Private password As String
Private Userid As String
Private level As String
Private account As String
'以下为可读写属性
'登陆用户名字
Public Property user_name() As String
Get
Return name
End Get
Set(value As String)
name = value
End Set
End Property
'登陆用户密码
Public Property user_pwd As String
Get
Return password
End Get
Set(value As String)
password = value
End Set
End Property
'登陆用户ID
Public Property user_id() As String
Get
Return Userid
End Get
Set(value As String)
Userid = value
End Set
End Property
'登陆用户级别
Public Property user_level() As String
Get
Return level
End Get
Set(value As String)
level = value
End Set
End Property
'登陆用户积分
Public Property user_account() As String
Get
Return account
End Get
Set(value As String)
account = value
End Set
End Property
End Class
DAL层:主要是访问数据库,返回查询结果。
Imports System.Data.SqlClient
Imports Entity
Public Class LoginDAL
'数据库连接语句
Dim sCon As String = "Data Source = (local);Initial Catial = Charge_sys;Persist Security Info = True;User ID = sa;Password = 123"
Dim conn As SqlClient.SqlConnection
'实例化连接字符串,并打开
Public Sub New()
conn = New SqlClient.SqlConnection
conn.ConnectionString = sCon
conn.Open()
End Sub
'查询数据库中的用户是否存在.
Public Function Query_User(ByVal txtUser As Entity.UserInfo) As Boolean
'定义数据库查询语句
Dim commandtext As String
commandtext = "select * From User_Info where userID = '" & txtUser.user_id & "'And PWD = '" & txtUser.user_pwd & "'"
Dim sqlcmd As SqlClient.SqlCommand = New SqlClient.SqlCommand(commandtext, conn)
'定义一个reader来读数据,查询用户是否存在
Dim myReader As SqlDataReader
myReader = sqlcmd.ExecuteReader()
'如果查询记录不为空,则返回真;记录为空,返回假。
If myReader.Read() Then
Return True
Else
Return False
End If
'关闭连接
conn.Close()
End Function
End Class
BLL层:主要做逻辑判断,实例化DAL层的类,取得查询结果。进行逻辑判断。
Imports Entity
Imports LoginDAL
Public Class ManagerUser
'定义一个D层的对象
Dim db As New LoginDAL.LoginDAL
'此函数的作用是返回D层的执行的结果
Public Function query_user(ByVal model As Entity.UserInfo) As Boolean
Return db.Query_User(model)
End Function
End Class
UI层:收集用户的信息,实例化BLL层的类,取得判断结果。返回给用户。
Imports Entity
Imports LoginBLL
Public Class Form1
Private Sub btnCancle_Click(sender As Object, e As EventArgs) Handles btnCancle.Click
End
End Sub
Private Sub btnOK_Click(sender As Object, e As EventArgs) Handles btnOK.Click
'定义一个实体类对象,将文本框中的内容赋给实体类对象
Dim CurrentUser As New UserInfo
CurrentUser.user_id = txtUserName.Text.ToString()
CurrentUser.user_pwd = txtUserPWD.Text.ToString()
'定义一个逻辑层对象,根据业务逻辑层返回的结果,通知用户信息
Dim UserBLL As LoginBLL.ManagerUser = New LoginBLL.ManagerUser
If UserBLL.query_user(CurrentUser) Then
MsgBox(True)
Else
MsgBox(False)
End If
End Sub
End Class
至此登陆窗体完成。
小结:
1.登陆实例可谓,麻雀虽小,五脏俱全。容易理清三层之间的关系及操作。
2.数据库查询部分内容可以进行封装,避免重复操作。
3.逻辑层直接将查询结果返回,没有做过多处理,例如对数据库进行操作。
4.方法、函数都相对简单,只是返回布尔值。
5.命名方式不是很合理,待科学化。