机房收费系统——定时检查卡内余额
收费系统中我们凭卡上机,上之前,我们会线检查卡呢余额,如果不足多少元请持卡人充值后在上机.我们需要设置一个金额,假如说五元.但是这样其实是有点不太合理,有些人的卡内余额其实还可以上,但是也必须得充值到最少余额才可以上.这样其实还有一个漏洞:持卡人可以上机两小时,但是他上了三个小时或是更多,这样就会出现负值.所以我们提前设置一个门槛值是有局限的.所以我稍微做了一下改进:定时检查卡内余额.
定时检测
在系统中增加一个timer事件,定时检查各个正在上机的卡的余额,到门槛值时提醒用户,如果余额为0,那么就强制用户被迫下机。
思路如下:
其中判断计算消费时间用到了时间函数:datediff ;和自定义的判断消费金额函数:DynCash。
定时长短,可以根据具体情况而定.在timer控件的interval属性设置就好。
代码如下:
Private sub timer_click()StrSqla = "select CID,ontime from Online"Set objrsa = ExecuteSQL(StrSql, StrMsg) ReDim DynCard(objrsa.RecordCount) As Integer '定义卡号数组ReDim DynTime(objrsa.RecordCount) As String '定义上机时间字符串数组Dim StaticOver As Integer '定义消费前余额Dim DynInterval As Integer '定义实时时间间隔Dim Intindex As IntegerDim DynOver As Integer ’定义动态余额 '将卡号和余额依次放入到数组中For Intindex = 0 To objrsa.RecordCount - 1 objrsa.MoveFirst DynCard(Intindex) = objrsa!CID DynTime(Intindex) = objrsa!OnTime'计算余额 StrSqlb = "select Cash from stuinfo where CID='" & DynCard(Intindex) & "'" Set objrsb = ExecuteSQL(StrSqlb, StrMsg) StaticOver = objrsb!Cash'1求时间间隔 DynInterval = interval(DynTime(Intindex), Time)'2消费的金额 DynOver = DynCash(DynInterval)'3求余额 StaticOver = StaticOver - DynOver'对余额进行判断If StaticOver < 5 Then MsgBox "您的余额不足五元,请酌情上机", vbOKOnly, "提示"End IfIf StaticOver = 0 Then MsgBox "卡内余额不足", vbOKOnly, "提示" cmdOff_Click StrSqlb = "select * from consumeinfo where cid='" & DynCard(Intindex) & "'" Set objrsb = ExecuteSQL(StrSqlb, StrMsg) objrsb!Status = "被迫下机" MsgBox DynCard(Intindex) & "号卡已经下机!", vbOKOnly, "下机提示"End If '卡号向后移动objrsa.MoveNextNextEnd sub’******************************************************************************’调用的自定义函数如下:' '获取时间间隔Private Function interval(StrStart As String, StrEnd As String) As Integer interval = DateDiff("n", StrStart, StrEnd)End Function Private Function DynCash(IntConsumeTime As Integer) As Integer'判断用户类型,收取费用。 If txtType.Text = "一般用户" Then '上机时间少于五分钟,收费为0 If IntConsumeTime < 5 Then DynCash = 0 Else DynCash = (Int(IntConsumeTime / 30) + 1) * 1 End If Else '上机时间少于五分钟,收费为0 If IntConsumeTime < 5 Then DynCash = 0 Else DynCash = Int(IntConsumeTime / 30) * 0.5 End If End IfEnd Function
有不足之处请指正。