从三层猛地跳到七层,有种穿越的感觉,说白了就是不会,又是想逃避的感觉,可是人生在世,有的事情不能随着自己的性子来,喜欢了就去做,不喜欢,就不做,没办法,就一直憋,一直憋,终于,系统登录实现了,接下来,总结一下七层系统登录的相关知识。俗话说,一张图,可以表达文字所不能描绘的情感和世界,现在让我们来看看一下机房收费系统的包图,如下:
首先,我们来分析一下系统登录,我们需要做哪些工作,判断用户是否存在,判断用户名和密码是否一致,登录成功之后,需要在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.SqlClientImports IDALPublic 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 FunctionEnd 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.ReflectionPublic 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 FunctionEnd 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 FunctionEnd 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 FunctionEnd 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 SubEnd Class</span></span>
第七层:SqlHelper,前面的博文有相关介绍,在这里,就不一一介绍了。自此,一个小小的登录功能就实现了,在七层登录还没有成型的时候,各种纠结,各种不想做,有种快到临界点的感觉,可是走过之后,发现,这个临界点是打开三界的结界,打开之后,发现这个世界如此美丽多彩。一如七仙女的故事,我们的七层登录也是各司其职,在自己的工作岗位履行着自己的职责。
第二版机房收费系统,未完,待续......
再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow