房费制——登录优化

房费制——登录优化

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

     《客房收费系统个人版》基本完成,矿U层的代码是非常非常混乱。基本上D层有几个函数,B层就相应有几个函数,U层使用相应B层中的每个函数。比方说在登录中,U层首次要使用一个函数检查username和用户password是否正确,然后再使用“加入用户上机记录”的函数。以下是登录的时序图:

房费制——登录优化

        登录业务比較简单,可是对于复杂的上机过程呢?U层要检查卡是否注冊。剩余金额是否充足,卡的状态是否在使用中。该卡是否如今不在线,通过这一系列检验后,还要查询学生表显示学生信息等等。

这样就造成U层有好多函数,和B层的耦合度太大。如今我们来回想一下三层中各层的功能:

 表现层(UI):採集用户的输入信息和操作,向用户展现特定业务数据。通俗讲就是用户界面,即用户在使用一个系统的时候他的所见所得。

 业务逻辑层(BLL):针对详细问题的操作。也能够说是对数据层的操作。对数据业务逻辑处理。主要有三种方式:从UI中获取用户指令和数据,运行业务逻辑;从DAL中获取数据,以供UI显示;从UI中获取用户指令和数据,通过DAL写入数据源。

 数据訪问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、改动、查找等。

    

        

    在师傅的指点下,进行了改动:

U层:

'登录
    Private Sub btnLogin_Click(sender As Object, e As EventArgs) Handles btnLogin.Click
        '查空
        If PublicFunction.IsEmptyText(Me) = True Then
            Exit Sub
        End If

        '实例化实体User,引用B层
        Dim euser As New Entity.User
        Dim euserRecord As New Entity.UserRecord
        Dim blogin As New BLL.LoginBLL

        Try
            '将用户输入的信息传给实体
            euser.ProuserID = txtUserID.Text.Trim
            euser.ProuserPwd = txtUserPwd.Text

            '用户验证后反馈信息
            If blogin.Check(euser, euserRecord) Then '登录成功
                ''UserID和UserLevel为全局变量,其它功能要用到
                UserID = euser.ProuserID.Trim  '去空格
                UserLevel = euser.ProuserLevel.Trim '去空格
                '主窗口显示
                Me.Hide()
                frmMain.Show()
            Else
                MsgBox("登录失败!username或password有误。

", vbExclamation, "系统提示") txtUserID.Focus() Exit Sub End If Catch ex As Exception MsgBox("错误!", vbExclamation, "系统提示") End Try End Sub

B层:

Public Function Check(ByVal euser As Entity.User, ByVal euserRecord As Entity.UserRecord) As Boolean
        Dim dt As DataTable
        dt = iuser.QueryUser(euser)

        Try
            If dt.Rows.Count = 0 Then
                Return False
            Else 'username和password输入正确
                euser.ProuserID = dt.Rows(0).Item(0) '用户ID
                euser.ProuserLevel = dt.Rows(0).Item(2) '用户级别

                '输入用户上机记录信息
                euserRecord.ProuserID = euser.ProuserID
                euserRecord.ProuserLevel = euser.ProuserLevel
                euserRecord.ProloginTime = Now
                euserRecord.PrologoutTime = Now
                euserRecord.ProisOnline = 1  '1表示在线。0表示不在线
                euserRecord.Procomputer = My.Computer.Name '获得当前电脑的username
                '加入用户上机记录
                Dim result As Integer
                result = iuser.AddUserRecord(euserRecord)

                If result <> 0 Then '加入用户记录成功
                    Return True
                End If
            End If
        Catch ex As Exception
            Throw New Exception
        End Try
     
    End Function


D层:

  '查找用户的方法
    Public Function QueryUser(euser As Entity.User) As DataTable Implements IUser.QueryUser
        Try
            Dim strSQL As String = "select * from T_User where userID=@userID and userPwd=@userPwd "
            Dim params() As SqlParameter = {New SqlParameter("@userID", euser.ProuserID), New SqlParameter("@userPwd", euser.ProuserPwd)}
            Dim helper As New SqlHelper.sqlHelper
            Dim table = helper.GetDataTable(strSQL, CommandType.Text, params)
            Return table
        Catch ex As Exception
            Throw New Exception
        End Try
      
    End Function

    '用户登录成功加入记录到UserRecord
    Public Function AddUserRecord(euserRecord As Entity.UserRecord) As Integer Implements IUser.AddUserRecord
        '每个字段都填写时,可省略前面括号里的内容
        'Dim strSQL As String = "insert into T_UserRecord values(@userID,@level,@loginTime,@logoutTime,@computer,@isOnline)"
        Try
            Dim strSQL As String = "insert into T_UserRecord (userID,userLevel,loginTime,logoutTime,computer,isOnline)values(@userID,@level,@loginTime,@logoutTime,@computer,@isOnline)"

            Dim params() As SqlParameter = {New SqlParameter("@userID", euserRecord.ProuserID),
                                            New SqlParameter("@level", euserRecord.ProuserLevel),
                                            New SqlParameter("@loginTime", euserRecord.ProloginTime),
                                            New SqlParameter("@logoutTime", euserRecord.PrologoutTime),
                                            New SqlParameter("@computer", euserRecord.Procomputer),
                                            New SqlParameter("@isOnline", euserRecord.ProisOnline)}
            Dim helper As New SqlHelper.sqlHelper
            Dim intResult = helper.ExecuteNoQuery(strSQL, CommandType.Text, params)
            Return intResult
        Catch ex As Exception
            Throw New Exception
        End Try
       
    End Function

改动后的登录时序图:

房费制——登录优化

       两幅登录时序图形成鲜明的对照,这样用户点击“登录”button后,U层负责採集用户输入的username和password,然后仅仅需调用一个Check()函数进行验证。B层处理业务逻辑。先推断用户信息,若输入正确则进行下一步加入用户上机记录。D层和数据库打交道。进行增删改查。U层根本不知道详细的验证用户细节。这样就解耦了,各司其职。

       

       小结:从去年的第一次机房收费系统。到如今的个人版重构。以及接下来的合作重构,每一步都是跨越。最初我们是纯面向过程的,如今学习了三层架构,使用了设计模式,但距离面向对象仍然非常遥远。我们正在一步一步向前走,这个过程非常重要。好比是唐僧西天取经,假设让孙悟空翻个跟头就能取到经。那就不会有经典的《西游记》了。


版权声明:本文博主原创文章,博客,未经同意不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/116772.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 本以为java语言很难学,其实就学完下面这些知识,就能理解了

    本以为java语言很难学,其实就学完下面这些知识,就能理解了刚毕业,找工作,很多人都面临相同的问题。自己能做什么?什么工作既舒服,福利又好(不存在的,除非银行你家开的)。然后社会是个发展的社会,现代人的生活越来越智能,生活中其实充满“技术”!!!所以,在各个岗位中,其实编程类的岗位工资是平均水平最高的。可以加你Java资料分享群java《学习》+交流523401738作为5大编程语言的JAVA是当今最受各大公司的青睐,很多项目,很多工程都需要用到java…

    2022年7月8日
    17
  • Mac配置maven环境变量「建议收藏」

    Mac配置maven环境变量「建议收藏」1.配置maven环境变量前必须先配置好Java环境变量2.打开终端输入vim~/.bash_profile编辑配置文件3.英文输入法下按i进入编辑模式4.把下面两行配置写进去,注意第一行要换成你的目录exportMaven_HOME=/Users/mac/kaifaruanjian/apache-maven-3.8.4exportPATH=$PATH:$Maven_HOME/bin5.保存,按ESC,输入英文:,输入wq,按下回车6.输入source~/.bash_profile

    2022年6月18日
    62
  • PyCharm使用教程 — 5、PyCharm的基本配置「建议收藏」

    PyCharm使用教程 — 5、PyCharm的基本配置「建议收藏」PyCharm基础配置PyCharm安装完毕之后,我们需要修改一些常用的配置让视觉上更加享受,比如修改PyCharm的主题以及字体显示呢基础配置在File->Settings中进行修改主题在Settings中选择Appearance&Behavior->Appearance,如下图所示我个人习惯使用Darcula的黑色主题,除了默认的主题,我们也可以自己安装其他主题风格。如何安装主题主题可以从网站http://www.themesmap.com/上进行下

    2022年8月29日
    3
  • 换BLOG了~http://hi.baidu.com/aekdycoin/blog

    换BLOG了~http://hi.baidu.com/aekdycoin/bloghttp://hi.baidu.com/aekdycoin/blog

    2022年7月23日
    14
  • 3. java缓存-线程内缓存guava cache

    3. java缓存-线程内缓存guava cacheguavacache的缓存结构常用的guavacache缓存根据上图中的缓存框架,我们常用的一些缓存实例有:LocalManualCache和LocalLoadingCache,两者唯一的区别就是LocalLoadingCacheextendsLocalManualCacheimplementsLoadingCache&amp;amp;amp;lt;K,V&amp;amp;amp;gt;接口。LocalManualCache…

    2022年10月4日
    2
  • cpu后缀讲解

    cpu后缀讲解Intel桌面式CPUX后缀 X代表Extreme,中文意思是至尊级,代表同一时代性能最强的CPU。如Corei7-5960X、Corei7-4960X。X代表在同一代中只有一款CPU黄袍加身,地位至高无上。加上没有竞争对手可以望其项背,从露面都退出市场,期待的弑君者没有出现。SandyBridge时代到现在,竞争的天平一直向Intel倾斜。K后缀自从SandyBridge时代Intel限制

    2022年5月7日
    54

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号