首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

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

2012-09-21 
机房收费系统——定时检查卡内余额收费系统中我们凭卡上机,上之前,我们会线检查卡呢余额,如果不足多少元请持

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

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

 

定时检测

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


 

有不足之处请指正。

 

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互相学习

热点排行