機房收費係統之上下機
上下機這塊兒,主要是算法,很容易亂,不過有第一次 的經驗,現在也有些頭緒,下麵和大家分享一下:
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