zoukankan      html  css  js  c++  java
  • VB.NET版机房收费系统---七仙女之系统登录

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

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

           

          首先,我们来分析一下系统登录。我们须要做哪些工作,推断用户是否存在,推断username和password是否一致。登录成功之后。须要在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
    '内    容: username与password推断
    '功    能: 查询username与password是否正确
    '文件关系:
    '作    者:丁国华
    '小    组:宝贝计划
    '生成日期: 2014/7/9 9:03:17
    '版本:V2.0
    '改动日志:
    '版权说明:
    '**********************************************
    
    Imports System.Data.SqlClient
    Imports IDAL
    
    Public Class T_UserDAL : Implements IUser
        '/// <summary>
        '/// depiction:<查询username与password是否正确>
        '/// </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层-业务逻辑层,查询username和password是否正确,实例化工厂,然后定义接口变量,调用工厂中的方法。返回一个用户实体的集合。

           

    <span style="font-size:18px;"><span style="font-size:18px;">Imports IDAL
    
    '**********************************************
    '文 件 名: T_UserBLL
    '命名空间: BLL
    '内    容: 业务逻辑层
    '功    能: 查询username和password是否正确
    '文件关系:
    '作    者:丁国华
    '小    组:宝贝计划
    '生成日期: 2014/7/9 9:02:30
    '版本:V2.0
    '改动日志:
    '版权说明:
    '**********************************************
    
    Public Class T_UserBLL
        '/// <summary>
        '/// depiction:<查询username和password是否正确>
        '/// </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("username或password输入错误")
            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。前面的博文有相关介绍。在这里,就不一一介绍了。

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

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

              

  • 相关阅读:
    2019-2020-1 20175228 实验四 外设驱动程序设计
    2019-2020-1 20175228 实验三 实时系统
    2019-2020-1-20175332 20175323 20175228 实验一开发环境的熟悉
    2018-2019-2 20175228实验五《Java网络编程》实验报告
    2018-2019-2 20175228实验四《Android开发基础》实验报告
    2018-2019-2 20175228实验三《敏捷开发与XP实践》实验报告
    MyCP
    2018-2019-2 20175228实验二《面向对象程序设计》实验报告
    2018-2019-2 20175228实验一《Java开发环境的熟悉》实验报告
    转()析构函数
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/5271995.html
Copyright © 2011-2022 走看看