对于机房收费系统来说很重要的就是上下机了。敲上下机之前一定要理清好思路。最好画一个流程图,这样能更好的帮助尽量不出现逻辑性的错误。
上机:
我觉得上机时代码部分比较容易忽略的地方或者是说比较难想的地方有如下两个部分:
1.判断是否金额不足:
strSQL3 = "select * from student_Info where cardno='" & Trim(txtcard.Text) & "'" Set objRst3 = executeSQL(strSQL3, strMsgText3) strSQL4 = "select * from BasicData_Info " Set objRst4 = executeSQL(strSQL4, strMsgText4) If objRst3.Fields(13) < objRst4.Fields(5) Then MsgBox "金额不足,请充值!", vbOKOnly + vbExclamation, "提示" txtxtcard.Text = "" txtcard.SetFocus Exit Sub
2.显示上机人数
strSQL6 = "select * from OnLine_Info" Set objRst6 = executeSQL(strSQL6, strmsgtext6) If objRst6.EOF = True Then lblshangji.Caption = 0 Else lblshangji.Caption = objRst6.RecordCount End If其实下机差不多是同样的道理:
下机:判断卡号是否为空——判断该卡是否注册——判断该卡是否正在上机
其中计算消费时间以及消费金额是难点:
If txtcard.Text = "" Then MsgBox "卡号不能为空", vbOKOnly + vbExclamation, "警告" Exit Sub End If '判断此号有没有注册 txtSQL = "select * from student_Info where cardno='" & txtcard.Text & "'" Set mrc = executeSQL(txtSQL, msgText) If mrc.EOF = True Then MsgBox "此号还没有注册!请先注册。", vbInformation, "提示" Else '判断该卡号是否上机 txtSQL = "select * from OnLine_Info where cardno='" & txtcard.Text & "'" Set mrcc = executeSQL(txtSQL, msgText) If mrcc.EOF = True Then MsgBox "该号没有上机!", vbOKOnly + vbExclamation, "提示" txtcard.Text = "" txtbuytime.Text = "" txtsex.Text = "" txtmoney.Text = "" txtextra.Text = "" txtdept.Text = "" txtSID.Text = "" txtonline.Text = "" txttime.Text = "" txtout.Text = "" txtouttime.Text = "" txtname.Text = "" txtdept.Text = "" txttype.Text = "" txtmoney.Text = "" Else '如果此号在上机,下机时从online表中把数据输出 '在添加一个下机提示 txtSID.Text = mrcc.Fields(2) txttype.Text = mrcc.Fields(1) txtname.Text = mrcc.Fields(3) 'txtextra.Text = mrc.Fields(7) txtsex.Text = mrc.Fields(3) txtdept.Text = mrc.Fields(4) txtout.Text = Date txtouttime.Text = Time txtextra.Text = Trim(mrc.Fields(7)) txtonline.Text = mrcc.Fields(6) txttime.Text = mrcc.Fields(7) '计算消费时间 ' 'http://zhidao.baidu.com/question/33366253datediff函数的用法 a = DateDiff("n", Trim(txtonline.Text), Trim(txtout.Text)) b = DateDiff("n", Trim(txttime.Text), Trim(txtouttime.Text)) txtbuytime.Text = Val(a + b) mrcc.Delete '删除记录 mrcc.Update 'labcount.Caption = Trim(mrcc.RecordCount) End If End If '显示消费金额 txtSQL = "select * from BasicData_Info " Set mrs = executeSQL(txtSQL, msgText) If Trim(txttype.Text) = "固定用户" Then If Val(a + b) < Trim(mrs.Fields(4)) Then txtmoney.Text = 0 Else c = (Int(Val((Val(a + b) - Val(mrs.Fields(4))) / 60) + 1) * mrs.Fields(0)) txtmoney.Text = c End If Else If Val(a + b) < Trim(mrs.Fields(4)) Then txtmoney.Text = 0 Else c = (Int(Val((Val(a + b) - Val(mrs.Fields(4))) / 60) + 1) * Val(mrs.Fields(1))) txtmoney.Text = c End If End If '显示消费余额 txtextra.Text = Val(txtextra.Text) - Val(c) '将上下机信息传送到line表中 txtSQL = "select * from line_Info where cardno='" & txtcard.Text & "' and status='" & "正常上机" & "' and ondate='" & Date & "'" Set mrss = executeSQL(txtSQL, msgText) If mrss.EOF = False Then ' mrs.AddNew mrss.Fields(1) = Trim(txtcard.Text) mrss.Fields(2) = Trim(txtSID.Text) mrss.Fields(3) = Trim(txtname.Text) mrss.Fields(4) = Trim(txtdept.Text) mrss.Fields(5) = Trim(txtsex.Text) mrss.Fields(6) = Trim(txtonline.Text) mrss.Fields(7) = Trim(txttime.Text) mrss.Fields(8) = Date mrss.Fields(9) = Time mrss.Fields(10) = Trim(txtbuytime.Text) mrss.Fields(11) = Trim(txtmoney.Text) mrss.Fields(12) = Trim(txtextra.Text) mrc.Fields(7) = Trim(mrc.Fields(7)) - c mrss.Fields(13) = "正常下机" mrss.Fields(14) = Environ("computername") mrss.Update mrc.Update End If strSQL6 = "select * from OnLine_Info" Set objRst6 = executeSQL(strSQL6, strmsgtext6) If objRst6.EOF = True Then lblshangji.Caption = 0 Else lblshangji.Caption = objRst6.RecordCount End If
' http://zhidao.baidu.com/question/33366253datediff函数的用法该链接为datediff函数的用法。
计算消费金额的时候注意固定用户和临时用户的金额是不一样的。具体看基本数据表中的信息。