您的位置:首页 > 编程语言 > VB

VB.NET版机房收费系统---七仙女之系统登录

2014-07-14 08:55 302 查看
VB.NET第一版机房收费系统,告一段落,验收的时候,问题也是大大的存在,没有用上设计模式,什么触发器,存储过程,都没有用上,看看其她小伙伴的,七层实现登录?那是什么东东,相比较我的三层而言,多了两倍还加个一,通过查资料,看博客,憋了好几天,终于,憋出了一个七仙女---七层实现系统登录,七个女儿,各司其职,完美配合,衍生出众多美丽的故事。

从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,不喜欢,就不做,没办法,就一直憋,一直憋,终于,系统登录实现了,接下来,总结一下七层系统登录的相关知识。俗话说,一张图,可以表达文字所不能描绘的情感和世界,现在让我们来看看一下机房收费系统的包图,如下:



首先,我们来分析一下系统登录,我们需要做哪些工作,判断用户是否存在,判断用户名和密码是否一致,登录成功之后,需要在worklog表中添加一条工作记录。该博文就实现系统登录简单描述,添加工作记录再此不赘述。接下来,代码实现部分:

第一层:IDAL-数据接口访问层,放置接口函数。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: IUser
'命名空间: IDAL
'内    容: 实现接口
'功    能: 创建接口
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/9 8:44:27
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************
Public Interface IUser
'/// <summary>
'/// depiction:<选择用户>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体>
'/// </returns>
Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity)

End Interface</span></span>


第二层:D层-数据访问层,通过向SqlHelper中传递sql语句来实现具体的增删改查等功能。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: T_UserDAL
'命名空间: DAL
'内    容: 用户名和密码判断
'功    能: 查询用户名和密码是否正确
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/9 9:03:17
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************

Imports System.Data.SqlClient
Imports IDAL

Public Class T_UserDAL : Implements IUser
'/// <summary>
'/// depiction:<查询用户名和密码是否正确>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns>
Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity) Implements IUser.SelectUser
Dim strText As String = "select * from T_User where UserID=@UserID and password=@password"  'sql语句
Dim cmdType As CommandType = CommandType.Text   '命令类型
Dim Parameter As SqlParameter()
'传参
Parameter = {New SqlParameter("@UserID", enUser.userID),
New SqlParameter("@password", enUser.password)}

Dim SqlHelper As New SqlHelper  '实例化SqlHelper这个类的一个对象
Dim dt As New DataTable
Dim myList As List(Of Entity.UserEntity)

dt = SqlHelper.ExecuteReaderTable(strText, cmdType, Parameter) '调用sqlhelper中executereadertable的方法
myList = EntityHelper.convertToList(Of Entity.UserEntity)(dt)

Return myList
End Function

End Class
</span></span>


第三层:Factory-工厂层,大话设计模式中对抽象工厂和配置文件这块有详细介绍,不明白的小伙伴可以查询《大话设计模式》第一百四十一页,工厂层的主要作用是应用配置文件和反射实现数据库的更换功能。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: DataAccess
'命名空间: Factory
'内    容: 创建接口
'功    能: 创建接口
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/9 8:41:23
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************
Imports System.Reflection
Public Class DataAccess
'/// <summary>
'/// depiction:<创建用户接口>
'/// </summary>
'/// <param name="<>"><></param>
'/// <returns>
'///<返回IUserDAL>
'/// </returns>
Public Function CreateIUser() As IDAL.IUser
Return CType(Assembly.Load("DAL").CreateInstance("DAL.T_UserDAL"), IDAL.IUser)
End Function
End Class</span></span>


第四层:BLL层-业务逻辑层,查询用户名和密码是否正确,实例化工厂,然后定义接口变量,调用工厂中的方法,返回一个用户实体的集合。

<span style="font-size:18px;"><span style="font-size:18px;">Imports IDAL

'**********************************************
'文 件 名: T_UserBLL
'命名空间: BLL
'内    容: 业务逻辑层
'功    能: 查询用户名和密码是否正确
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/9 9:02:30
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************

Public Class T_UserBLL
'/// <summary>
'/// depiction:<查询用户名和密码是否正确>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns>
Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity)
Dim factory As New Factory.DataAccess
Dim IUser As IDAL.IUser
Dim myList As List(Of Entity.UserEntity)

IUser = factory.CreateIUser()
myList = IUser.SelectUser(enUser)

Return myList

End Function
End Class
</span></span>


第五层:Facade-外观层,《大话设计模式》一百零三页有具体的相关介绍。

<span style="font-size:18px;"><span style="font-size:18px;">'**********************************************
'文 件 名: LoginFacade
'命名空间: Facade
'内    容:
'功    能:
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/9 8:41:05
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************

Public Class LoginFacade
'/// <summary>
'/// depiction:<选择用户>
'/// </summary>
'/// <param name="<enUser>"><用户实体></param>
'/// <returns>
'///<返回一个用户实体的集合>
'/// </returns>

Public Function SelectUser(ByVal enUser As Entity.UserEntity) As List(Of Entity.UserEntity)
Dim userBLL As New BLL.T_UserBLL
Dim myList As List(Of Entity.UserEntity)

myList = userBLL.SelectUser(enUser)

If myList.Count = 0 Then
Throw New Exception("用户名或密码输入错误")
Else
Return myList
End If
End Function
End Class</span></span>


第六层:UI层-用户显示层,U层负责数据的输入与输出,调用Façade层验证用户类的查询方法来确认该用户是否存在,最后通过调用Façade层的方法登录。

<span style="font-size:18px;"><span style="font-size:18px;">Imports System.Windows.Forms

'**********************************************
'文 件 名: frmLogin
'命名空间: UI
'内    容: 用户显示层
'功    能: 确认用户是否存在
'文件关系:
'作    者:丁国华
'小    组:宝贝计划
'生成日期: 2014/7/8 17:51:07
'版本号:V2.0
'修改日志:
'版权说明:
'**********************************************
Public Class frmLogin

Public Shared enLogin As New Entity.UserEntity

'/// <summary>
'/// depiction:<确认用户是否存在>
'/// </summary>
'/// <param name="<>"><></param>
'/// <returns>
'///<登录失败给出提示,登录成功进入主界面>
'/// </returns>
Private Sub btnConfirm_Click(sender As Object, e As EventArgs) Handles btnConfirm.Click
Dim facade As New Facade.LoginFacade
Dim myList As New List(Of Entity.UserEntity)
Dim enUser As New Entity.UserEntity      '封装实体
Dim flag As Boolean
Try
enUser.userID = txtUserName.Text.Trim()
enUser.password = txtPassword.Text.Trim()

myList = facade.SelectUser(enUser)

If myList.Count > 0 Then
MsgBox("登录成功")

Dim enWorklog As New Entity.WorklogEntity
enWorklog.userID = txtUserName.Text.Trim()
enWorklog.loginDate = CStr(Format(Now(), "yyyy-MM-dd"))
enWorklog.loginTime = CStr(Format(Now(), "HH:mm:ss"))
enWorklog.status = "正在值班"
enWorklog.computer = Environment.GetEnvironmentVariable("USERNAME")

flag = facade.InsertWorklog(enWorklog)

enLogin.userID = myList.Item(0).userID
enLogin.level = myList.Item(0).level

End If
Catch ex As Exception
MessageBox.Show(ex.Message.ToString())
txtUserName.Focus()
txtUserName.SelectAll()
txtPassword.Text = ""

End Try
End Sub
Private Sub btnCancel_Click(sender As Object, e As EventArgs) Handles btnCancel.Click
Me.Close()
End Sub
End Class
</span></span>

第七层:SqlHelper,前面的博文有相关介绍,在这里,就不一一介绍了。自此,一个小小的登录功能就实现了,在七层登录还没有成型的时候,各种纠结,各种不想做,有种快到临界点的感觉,可是走过之后,发现,这个临界点是打开三界的结界,打开之后,发现这个世界如此美丽多彩。一如七仙女的故事,我们的七层登录也是各司其职,在自己的工作岗位履行着自己的职责。

第二版机房收费系统,未完,待续......
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: