机房收费系统——定时稽查卡内余额

机房收费系统——定时检查卡内余额

收费系统中我们凭卡上机,上之前,我们会线检查卡呢余额,如果不足多少元请持卡人充值后在上机.我们需要设置一个金额,假如说五元.但是这样其实是有点不太合理,有些人的卡内余额其实还可以上,但是也必须得充值到最少余额才可以上.这样其实还有一个漏洞:持卡人可以上机两小时,但是他上了三个小时或是更多,这样就会出现负值.所以我们提前设置一个门槛值是有局限的.所以我稍微做了一下改进:定时检查卡内余额.

 

定时检测

在系统中增加一个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 Integer

Dim 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 If

If 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.MoveNext

Next

End 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 If

End Function


 

有不足之处请指正。

 

7楼lidaasky昨天 20:17
不错的想法
Re: wangyongxia921昨天 20:18
回复lidaaskyn这是为了避免投机倒把,哈哈
6楼hejingyuan6昨天 20:16
是不是应该定的时间短点比较好呢,还是我没有完全理解你的意思呀,我也想过,就是没有写觉得很麻烦,嘿嘿
Re: wangyongxia921昨天 20:17
回复hejingyuan6n恩,这个时间根据具体情况设定,在vb的timer里好像一分钟时最长间隔。
5楼lishehe昨天 20:16
想法很好在实践中ing,呵呵
4楼dandanzmc昨天 22:57
借鉴
Re: wangyongxia921昨天 20:15
回复dandanzmcn互相学习
3楼liujiahan629629昨天 22:48
想法很好,这样就像网吧那样了,更人性化了!
Re: wangyongxia921昨天 22:51
回复liujiahan629629n得神话,哈哈
2楼lishehe昨天 20:48
这个真的很好啊
Re: wangyongxia921昨天 21:05
回复lishehen这个还可以,哈哈
1楼han_yankun2009前天 11:08
借鉴呀
Re: wangyongxia921昨天 16:12
回复han_yankun2009n互相学习