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

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

第二版机房收费系统,未完,待续......

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

时间: 2024-08-03 11:30:45

VB.NET版机房收费系统---七仙女之系统登录的相关文章

vb.net版机房收费系统——教你七层架构(三)—外观模式

上次我们看到了D层是怎样运作的,现在,我简单演示一下我的外观和B层是如何和U层和D层打交道的. 首先我跟大家说的是我的外观是按照界面功能划分的,粒度有点小,大家在做的时候,记得外观有几个就行了,但是不能没有,U层不能直接调用B层,这样就会增加U层和B层的耦合: '************************** '文 件 名:UserInfo_BLL '命名空间:BLL '内 容: '功 能: '文件关系: '作 者:邱慕夏 '小 组:邱慕夏 '生成日期:2014-06-07 17:36:4

VB.NET版机房收费系统---SqlHelper

SqlHelper,最早接触这个词儿的时候,好像是13年的暑假,那个夏天来的比往年来的稍晚一些,呵呵,sqlhelper,翻译成中文就是数据库助手,帮手.百度百科这样对她进行阐述: SqlHelper是一个基于.NET Framework的数据库操作组件.组件中包含数据库操作方法.SqlHelper用于简化我们重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等.SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,

VB.NET版机房收费系统—数据库设计

之前第一遍机房收费的时候,用的数据库是别人的,认知也只能建立在别人的基础上,等自考中<数据库系统原理>这本书学完了之后,再去看以前的数据库,发现数据库真的还需要进一步的优化,下面是我设计数据库的一些见解,希望大家多提些意见. 数据库设计 E-R模型: 在观念模型设计阶段,一个系统都是建立在ER模型上的,设计好ER模型,很重要. 我设计的ER图: 系统中的实体:很简单,就是将系统中的名词都抽象出来,再具体了就是转换为数据库的逻辑设计时才要考虑的. 系统中的联系:在图中可以看得很清楚,这里我要重点

VB.NET版机房收费系统—DataGridView应用

事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句,并用DataGridView显示出来,这个功能不能实现,但这里给大家写一下,假设有什么地方不好的会,请大家指出: 第一版: 窗口设计: 须要的控件: DateTimePicker.DataSet.DataGridView 把握的三步骤: 第一步:使用视图,创建出你要的产寻结果的视图(假设是一个表就能

vb.net版机房收费系统重构

机房收费系统重构版终于正式开工了! 前几天,刚刚看完三层的视频,在视频中详细的讲解了一个登录功能.天真的我,当时以为三层结构是那么的简单,所以我草草地做完总结之后,就很快就开始机房收费系统的重构了.可是谁想到,当我一打开编程软件,就让我"碰了一鼻子的灰"!首先是不知道vs 怎么用,其次就是看三层的时候,登录的实例使用C#写的,而这次我们需要用VB.NET写,所以对于其中的语法是知之甚少.虽然,前段时间我看了一遍台湾讲师--曹祖胜的<VB.NET 视频>,但是他讲的几乎都是一

VB.NET版机房收费系统---导出Excel表格

datagridview,翻译成中文的意思是数据表格显示,使用DataGridView控件,可以显示和编辑来自不同类型的数据源的表格,将数据绑定到DataGridView控件非常简单和直观,大多数情况下,只需要设置DataSource属性即可,在绑定到包含多个列表或表的数据库源时,只需将DataMember属性设置为绑定的列表或表的字符串即可.机房收费系统多次用到数据表格的显示,并且导出为Excel表格,第一次机房收费系统是用VB版本的,她导出Excel的方法如下: 打开VB-工程-应用-勾选M

VB.NET版机房收费系统---异常处理

异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便.是代替日渐衰落的Error Code方法的新法,提供Error Code 所未能具体的优势.异常处理巧妙又不失完美的分离了接收和处理错误代码.这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解. 异常处理(又称为错误处理)功能提供了

vb.net版机房收费——助你学会七层架构(二)反射+抽象工厂

上一篇咱们做好了准备工作,数据库设计和Entity层,现在介绍 4.反射+抽象工厂 反射:用来消除Switch和if的,这里我尽量简单地介绍,以便大家理解.反射其实用起来很简单,你就认为他就是决定:去某个地方找应该要实例化的类是哪个.怎么理解? '************************** '文 件 名:DataAccess '命名空间:Factory '内 容: '功 能: '文件关系: '作 者:邱慕夏 '小 组:邱慕夏 '生成日期:2014-06-09 9:17:51 '版 本

VB.NET版机房收费系统---报表

报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据. 比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上.数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改. VB版机房收费系统的报表采用的是第三方的Grid++Report,