程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB.NET >> VB.NET版機房收費系統之七仙女之系統登錄

VB.NET版機房收費系統之七仙女之系統登錄

編輯: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 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層負責數據的輸入與輸出,調用Facade層驗證用戶類的查詢方法來確認該用戶是否存在,最後通過調用Facade層的方法登錄。

<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,前面的博文有相關介紹,在這裡,就不一一介紹了。自此,一個小小的登錄功能就實現了,在七層登錄還沒有成型的時候,各種糾結,各種不想做,有種快到臨界點的感覺,可是走過之後,發現,這個臨界點是打開三界的結界,打開之後,發現這個世界如此美麗多彩。一如七仙女的故事,我們的七層登錄也是各司其職,在自己的工作崗位履行著自己的職責。

第二版機房收費系統,未完,待續......

作者:csdn博客 丁國華

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved