閱讀238 返回首頁    go 微軟 go windows


機房收費係統之上下機

          上下機這塊兒,主要是算法,很容易亂,不過有第一次 的經驗,現在也有些頭緒,下麵和大家分享一下:

       U層: 

    ''' <summary>
    ''' 上機
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnLoginIn_Click(sender As Object, e As EventArgs) Handles btnLoginIn.Click
        Try
            If txtCardNo.Text = "" Then
                MessageBox.Show("卡號不能為空!", "提示")
                txtCardNo.Focus()
            End If
            Dim enCardNo As New CardInfoEntity
            enCardNo.CardNo = txtCardNo.Text.Trim()
            '第一步判斷該卡是否存在
            Dim bllfrmMain As New frmMainBLL
            Dim dtCard As New DataTable
            dtCard = bllfrmMain.IsCardExists(enCardNo)
            If dtCard.Rows.Count > 0 Then
                '第二步判斷該卡是否正在上機
                Dim dtLine As DataTable
                dtLine = bllfrmMain.isOnline(enCardNo)
                If dtLine.Rows.Count = 0 Then
                    '第三步上機並更新T_LineInfo
                    txtCash.Text = dtCard.Rows(0).Item("Cash").ToString().Trim
                    txtDepartment.Text = dtCard.Rows(0).Item("Department")
                    txtType.Text = "固定用戶"
                    txtSex.Text = dtCard.Rows(0).Item("Sex")
                    txtStudentName.Text = dtCard.Rows(0).Item("StudentName")
                    txtStudentNo.Text = dtCard.Rows(0).Item("StudentNo")
                    txtOnDate.Text = DateTime.Today.ToString("yyyy-MM-dd")
                    txtOnTime.Text = DateTime.Now.ToString("HH:mm ")

                    Dim enLine As New LineInfoEntity
                    Dim intResult As Integer
                    enLine.CardNo = txtCardNo.Text.Trim()
                    enLine.StudentName = dtCard.Rows(0).Item("StudentName")
                    enLine.Computer = pubshare.strComputer
                    enLine.OnDate = txtOnDate.Text.Trim()
                    enLine.OnTime = txtOnTime.Text.Trim()
                    intResult = bllfrmMain.AddOnline(enLine)
                    If intResult <= 0 Then
                        Throw New Exception("添加上機信息失敗")
                    Else
                        Label24.Visible = True
                        Label24.Text = "歡  迎  光   臨  !"
                    End If
                End If
            Else
                Throw New Exception("該卡不存在")
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "提示")
        End Try
    End Sub
  ''' <summary>
    ''' 下機
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Private Sub btnLogOut_Click(sender As Object, e As EventArgs) Handles btnLogOut.Click


        If txtCardNo.Text.Trim = "" Then
            MessageBox.Show("卡號不能為空!")
            txtCardNo.Focus()
        Else
            Call OffLine()
        End If


    End Sub
         這裏寫的過程OffLine()如下:

 Public Sub OffLine()
        Dim enOnLine As New Entity.LineInfoEntity
        Dim bllAllOffLine As New QueryOnStatusBLL
        Dim enLine As New LineInfoEntity '更新上機信息
        Dim dtOnLine As DataTable
        '判斷DataGridView中是否存在數據
        Try
            '第一步,判斷該用戶是否正在上機
            enOnLine.CardNo = txtCardNo.Text.Trim
            dtOnLine = bllAllOffLine.SelectOnLine(enOnLine)
            If dtOnLine.Rows.Count <= 0 Then
                Throw New Exception("該卡尚未上機")
            Else
                '第二步,獲取收費信息
                Dim dtBasicData As New DataTable

                Dim enBasicData As New BasicDataEntity
                Dim bllBasicData As New BasicDataBLL
                dtBasicData = bllBasicData.SelectBasicData()
                enBasicData.Rate = dtBasicData.Rows(0).Item("Rate")
                enBasicData.PrepareTime = dtBasicData.Rows(0).Item("PrepareTime")
                enBasicData.UnitTime = dtBasicData.Rows(0).Item("UnitTime")

                '第三步,獲取上機信息
                Dim bllQueryOnStatus As New QueryOnStatusBLL
                Dim dtOnlineinfo As New DataTable
                Dim enOnlineinfo As New LineInfoEntity
                enOnlineinfo.CardNo = txtCardNo.Text.Trim
                dtOnlineinfo = bllQueryOnStatus.SelectOnLine(enOnlineinfo)
                If dtOnlineinfo.Rows.Count <= 0 Then
                    Throw New Exception("獲取上機信息失敗")
                End If
                '第四步,獲取卡餘額信息
                Dim bllCard As New CardBLL
                Dim dtCard As New DataTable
                Dim enCard As New CardInfoEntity
                enCard.CardNo = txtCardNo.Text.Trim
                dtCard = bllCard.SelectCash(enCard)
                If dtCard.Rows.Count <= 0 Then
                    Throw New Exception("獲取卡餘額信息失敗")
                End If
                '第五步,計算消費時間和消費金額
                Dim consumeTime As Integer
                Dim intResult As Integer

                enLine.OffDate = DateTime.Today.ToString("yyyy-MM-dd")
                enLine.OffTime = DateTime.Now.ToString("HH:mm")
                enOnLine.OnDate = dtOnlineinfo.Rows(0).Item("OnDate")
                enOnLine.OnTime = dtOnlineinfo.Rows(0).Item("OnTime")
                enLine.Note = "正常下機"
                'Dim a As Date = CDate(enOnLine.OffDate)
                consumeTime = Val(DateDiff("n", Format(CDate(enOnLine.OnDate)), CDate(enLine.OffDate)) + DateDiff("n", CDate(enOnLine.OnTime), CDate(enLine.OffTime))) - enBasicData.PrepareTime

                '如果消費時間小於0
                If consumeTime < 0 Then
                    consumeTime = 0
                    enLine.ConsumeCash = Val("0")
                    enLine.Cash = dtCard.Rows(0).Item("Cash")
                    intResult = bllAllOffLine.AllOffLine(enLine)
                Else
                    Dim intCard As Integer
                    Dim enCardInfo As New CardInfoEntity
                    Dim bllCardInfo As New CardBLL
                    enLine.CardNo = txtCardNo.Text.Trim
                    '如果消費時間不是30的倍數
                    If consumeTime Mod 30 > enBasicData.UnitTime Then
                        enLine.ConsumeCash = Int(consumeTime / 30) * Val(enBasicData.Rate) + Val(enBasicData.Rate)
                        enLine.Cash = Val(dtCard.Rows(0).Item("Cash")) - Val(enLine.ConsumeCash)
                        '更新LineInfo
                        intResult = bllAllOffLine.AllOffLine(enLine)
                        '更新卡表
                        enCardInfo.Cash = enLine.Cash
                        enCardInfo.CardNo = txtCardNo.Text.Trim
                        intCard = bllCardInfo.UpdCard(enCardInfo)
                        '將上下機信息返回到主界麵
                        Dim enCardNO As New CardInfoEntity
                        Dim dtLine As New DataTable
                        Dim bllfrmMain As New frmMainBLL
                        enCardNO.CardNo = txtCardNo.Text.Trim
                        dtLine = bllfrmMain.LineInfo(enCardNO)
                        txtCash.Text = dtLine.Rows(0).Item("Cash")
                        txtConsumeCash.Text = dtLine.Rows(0).Item("ConsumeCash")
                        txtConsumeTime.Text = Format(consumeTime / 60, "0.00")
                        txtDepartment.Text = dtLine.Rows(0).Item("Department")
                        txtOffDate.Text = dtLine.Rows(0).Item("OffDate").ToString
                        txtOffTime.Text = dtLine.Rows(0).Item("OffTime").ToString
                        txtOnDate.Text = dtLine.Rows(0).Item("OnDate").ToString
                        txtOnTime.Text = dtLine.Rows(0).Item("OnTime").ToString
                        txtSex.Text = dtLine.Rows(0).Item("Sex")
                        txtStudentName.Text = dtLine.Rows(0).Item("StudentName")
                        txtStudentNo.Text = dtLine.Rows(0).Item("StudentNo")
                        txtType.Text = dtLine.Rows(0).Item("Type")
                        Label24.Text = "歡迎下次再來!"
                    Else
                        enLine.ConsumeCash = Int(consumeTime / 30) * Val(enBasicData.Rate)
                        enLine.Cash = Val(dtCard.Rows(0).Item("Cash")) - Val(enLine.ConsumeCash)
                        '更新T_LineInfo
                        intResult = bllAllOffLine.AllOffLine(enLine)
                        '更新卡表
                        enCardInfo.Cash = enLine.Cash
                        enCardInfo.CardNo = txtCardNo.Text.Trim
                        intCard = bllCardInfo.UpdCard(enCardInfo)
                        '將上下機信息返回到主界麵
                        Dim enCardNO As New CardInfoEntity
                        Dim dtLine As New DataTable
                        Dim bllfrmMain As New frmMainBLL
                        enCardNO.CardNo = txtCardNo.Text.Trim
                        dtLine = bllfrmMain.LineInfo(enCardNO)
                        txtCash.Text = dtLine.Rows(0).Item("Cash")
                        txtConsumeCash.Text = dtLine.Rows(0).Item("ConsumeCash")
                        txtConsumeTime.Text = Format(consumeTime / 60, "0.00")
                        txtDepartment.Text = dtLine.Rows(0).Item("Department")
                        txtOffDate.Text = dtLine.Rows(0).Item("OffDate").ToString
                        txtOffTime.Text = dtLine.Rows(0).Item("OffTime").ToString
                        txtOnDate.Text = dtLine.Rows(0).Item("OnDate").ToString
                        txtOnTime.Text = dtLine.Rows(0).Item("OnTime").ToString
                        txtSex.Text = dtLine.Rows(0).Item("Sex")
                        txtStudentName.Text = dtLine.Rows(0).Item("StudentName")
                        txtStudentNo.Text = dtLine.Rows(0).Item("StudentNo")
                        txtType.Text = dtLine.Rows(0).Item("Type")
                    End If
                End If
            End If
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Exclamation, "提示")
        End Try
    End Sub
          這裏主要是U層的計算,剩下B層,D層和其他的沒有區別,在調試代碼的過程中,出現了一些問題,不過也都用各種辦法解決了,突然發現拋異常真的能夠非常有效的提高調試的效率,而且經過對每個窗體的調試,我發現調試絕不僅僅是用F11,是有一些技巧的,學會用這些技巧感覺比把邏輯理清楚更重要,大家有什麼不同的見解,希望和大家交流!

        

最後更新:2017-04-03 08:26:15

  上一篇:go 連載:麵向對象葵花寶典:思想、技巧與實踐(32) - LSP原則
  下一篇:go 防止工具(八門神器)進行內存修改的方法