機房收費系統之六(上下機窗體)
阿新 • • 發佈:2019-02-08
上機
1.剛開始進行上下機窗體的時候,想的比較簡單,以至於後來遺漏很多問題。所以流程圖改了好幾遍才算比較完善。
上機模組主要功能就是輸入卡號開始計時消費,類似於登陸窗體模組。需要注意的有兩點:一是要考慮輸入的卡號是否正在上機(卡號不能重複上機),二是考慮餘額是否充足(不充足提醒充值)。
2.流程圖:
通過多次改進流程圖,基本上可以全面瞭解了上機模組的整個流程。然後再寫程式碼就很順暢了。
下機
1.下機模組和上機差不多。我覺得最複雜的地方就是計算消費。需要計算消費時間,通過消費時間計算出消費金額。這裡需要通過結合基本資料表來判斷和計算。我在這裡思考了好久。
2.流程圖:
3.重要的程式碼學習:
下機模組程式碼:
Private Sub cmdxiaji_Click() Dim txtSQL As String Dim txtSQL1 As String Dim txtSQL2 As String Dim txtSQL3 As String Dim txtSQL4 As String Dim msgText As String Dim mrc As ADODB.Recordset '連線student表 Dim mrc1 As ADODB.Recordset '連線Online表 Dim mrc2 As ADODB.Recordset '連線Line表 Dim mrc3 As ADODB.Recordset '連線Basic表 Dim mrc4 As ADODB.Recordset '連線Online,確認人數 Dim intlinetime As Integer '用於儲存實際線上時間 Dim intconsume As Single Dim curconsume As Single '用於儲存真正花費錢的時間 Dim curbalance As Single '用於儲存使用者的餘額 Dim fixedunit As Single '用於儲存單位金額 Dim temunit As Single '用於儲存單位金額 Dim a As Integer Dim Remaincash As Single '模組一:判斷卡號是否為空,判斷卡號是否為數字 If Trim(txtcardno.Text = "") Then MsgBox "請輸入卡號!", vbOKOnly + vbExclamation, "提示" Call Clear_Info txtcardno.SetFocus Exit Sub Else If Not IsNumeric(Trim(txtcardno.Text)) Then MsgBox "卡號必須輸入數字!", vbOKOnly + vbExclamation, "提示" Call Clear_Info ' txtcardno.Text = "" txtcardno.SetFocus Exit Sub End If End If '模組二:判斷卡號是否註冊,是否已經退卡。這裡先查student_Info txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" Set mrc = ExecuteSQL(txtSQL, msgText) If mrc.BOF And mrc.EOF Then MsgBox "該卡號未註冊,請先註冊資訊!", vbOKOnly + vbExclamation, "提示" Call Clear_Info txtcardno.SetFocus Exit Sub Else If Trim(mrc.Fields(10)) = "不使用" Then MsgBox "該卡已經退卡", vbOKCancel + vbInformation, "提示" Call Clear_Info txtcardno.SetFocus Exit Sub End If End If ' mrc.Close ':判斷卡號是否在上機,沒有上機不能退卡.連線Online表 txtSQL1 = "select * from OnLine_Info where cardno= '" & Trim(txtcardno.Text) & "'" Set mrc1 = ExecuteSQL(txtSQL1, msgText) If mrc1.EOF = True Then MsgBox "該卡沒有上機,不能進行下機處理", vbOKOnly + vbExclamation, "警告" Call Clear_Info txtcardno.SetFocus Exit Sub End If '線上時長計算 intlinetime = (Date - DateValue(mrc1!ondate)) * 1440 + (Hour(Time) - Hour(TimeValue(mrc1!OnTime))) * 60 + (Minute(Time) - Minute(TimeValue(mrc1!OnTime))) '時間單位為分鐘 'txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" ' 多餘 'Set mrc = ExecuteSQL(txtSQL, Msgtext) '獲得基本表的資料 txtSQL3 = "select * from Basicdata_Info" Set mrc3 = ExecuteSQL(txtSQL3, msgText) 'mrc3連線basicdata表 mrc3.MoveLast '單位時間的費用 (把固定使用者,臨時使用者單位時間的費用分別賦值給費用) fixedunit = Val(mrc3.Fields(0)) '把固定使用者的金額賦值給變數 temunit = Val(mrc3.Fields(1)) '把臨時使用者的金額賦值給變數 '判斷線上時間是否小於準備時間,若小於則 消費金額=0 If intlinetime <= Val(Trim(mrc3.Fields(4))) Then txtxftime.Text = "0" Else '判斷線上時間是否小於最低消費時間,若小於則為0 If intlinetime < Val(Trim(mrc3.Fields(3))) Then txtxftime.Text = "0" End If End If '線上時間大於單位時間,就按有幾個單位時間算,分為固定使用者和臨時使用者 If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "固定使用者" Then a = Int(intlinetime / Val(Trim(mrc3!unitTime))) If a = intlinetime / Trim(mrc3!unitTime) Then curconsume = a Else curconsume = a + 1 End If txtxfjine.Text = Val(curconsume) * Val(fixedunit) If txtxfjine.Text = "" Then txtxfjine.Text = "0" Else If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "臨時使用者" Then a = Int(intlinetime / Val(Trim(mrc3!unitTime))) If a = intlinetime / Trim(mrc3!unitTime) Then curconsume = a Else curconsume = a + 1 End If txtxfjine.Text = Val(curconsume) * Val(temunit) End If End If '更新student表 txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" Set mrc = ExecuteSQL(txtSQL, msgText) Remaincash = mrc!cash - Val(txtxfjine.Text) mrc.Fields(7) = Remaincash mrc.Update mrc.Close '下機顯示 txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtcardno.Text) & "'" Set mrc1 = ExecuteSQL(txtSQL, msgText) txtxjdate.Text = Format(Date, "yyyy-mm-dd") txtxjtime.Text = Time txttype = Trim(mrc1.Fields(1)) txtSID = Trim(mrc1.Fields(2)) txtname = Trim(mrc1.Fields(3)) txtxibie = Trim(mrc1.Fields(4)) txtsex = Trim(mrc1.Fields(5)) txtsjtime = Trim(mrc1.Fields(7)) txtsjdate = Trim(mrc1.Fields(6)) txtxftime.Text = intlinetime txtcash.Text = Remaincash '更新上機記錄表line表 txtSQL2 = "select * from line_Info where cardno='" & Trim(txtcardno.Text) & "'" Set mrc2 = ExecuteSQL(txtSQL2, msgText) mrc2.Fields(8) = Trim(txtxjdate.Text) mrc2.Fields(9) = Trim(txtxjtime.Text) mrc2.Fields(10) = Trim(txtxftime.Text) mrc2.Fields(11) = Trim(txtxfjine.Text) mrc2.Fields(12) = Trim(txtcash.Text) mrc2.Fields(13) = Trim("正常下機") mrc2.Update mrc2.Close a = MsgBox("下機成功,歡迎下次再來", vbOKOnly + vbExclamation, "提示") If a = vbOK Then Call Clear_Info '刪除online表的資訊 mrc1.Delete mrc1.Update mrc1.Close txtSQL4 = "select * from OnLine_Info" Set mrc4 = ExecuteSQL(txtSQL4, msgText) Label15.Caption = mrc4.RecordCount '顯示上機人數 mrc4.Close End Sub
總結:遇到問題,多思考,多請教“巨人”。感謝您的閱讀!