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