【机房收费系统】上机时动态刷新余额
来源:互联网 发布:自我介绍 知乎 编辑:程序博客网 时间:2024/04/28 11:16
机房收费系统在敲完上下机后,在一次下机时,发现由于上机时间过长,卡号余额都成了负数,很显然,在真正机房上机时,这种情况是不允许发生的,所谓机房收费系统,那么就要做出一个尽量真实的机房模拟环境,所以就要再多写一个Timer事件来实现上机时动态检测卡号余额的功能了,代码如下:
Private Sub viewdata() Dim mrc5 As ADODB.Recordset '定义变量 Dim mrc6 As ADODB.Recordset Dim mrc7 As ADODB.Recordset Dim mrc8 As ADODB.Recordset Dim mrcc As ADODB.Recordset Dim txtSQL As String Dim MsgText As String Dim cardnoo As String Dim Usetime, UnitNumber, a, b, c, d, e, cost, Balance As Single Dim Intindex As Long txtSQL = "select * from online_info" Set mrcc = ExecuteSQL(txtSQL, MsgText) If mrcc.EOF Then Timer1.Enabled = False '如果数据库为空,则Timer停止 Else mrcc.MoveFirst '从第一条记录开始查询 End If ReDim DynCard(mrcc.RecordCount) As String '定义卡号数组 For Intindex = 0 To mrcc.RecordCount - 1 DynCard(Intindex) = mrcc!cardno '查找第一条记录的卡号 cardnoo = DynCard(Intindex) '将查找到的卡号赋值给cardnoo,便于后面SQL查询 txtSQL = "select * from OnLine_Info where cardno='" & Trim(cardnoo) & "'" '进行表查询 Set mrc5 = ExecuteSQL(txtSQL, MsgText) txtSQL = "select * from student_info where cardno='" & Trim(cardnoo) & "'" Set mrc6 = ExecuteSQL(txtSQL, MsgText) txtSQL = "select * from Line_Info where status ='正常上机' and cardno ='" & Trim(cardnoo) & "'" Set mrc7 = ExecuteSQL(txtSQL, MsgText) a = Format(Date, "yyyy-mm-dd") b = Format(Time, "hh:mm:ss") c = Abs(Int(DateDiff("n", mrc5.Fields("ondate"), a)) + Int(DateDiff("n", mrc5.Fields("ontime"), b))) '计算当前上机话费的时间c txtSQL = "select * from BasicData_Info" Set mrc8 = ExecuteSQL(txtSQL, MsgText) If Val(mrc8.Fields(4)) <= Val(c) And Val(c) <= Val(mrc8.Fields(3)) Then '如果c大于准备时间且小于最小上机时间,则消费1元 Balance = mrc6.Fields(7) - 1 '余额为student表里的cash-1 Else If Val(c) > Val(mrc8.Fields(3)) Then '如果c大于最小上机时间 Usetime = Val(c) - Val(mrc8.Fields(4)) '计算消费的时间=上机时间-准备时间 UnitNumber = Usetime Mod Val(mrc8.Fields(2)) 'Usetime/60 求余 If UnitNumber = 0 Then '如果余0 UnitNumber = Int(Usetime / Val(mrc8.Fields(2))) '计算小时数 Else UnitNumber = Int(Usetime / Val(mrc8.Fields(2))) + 1 '如果不余0,则向下取整并小时数+1 End If End If If mrc6.Fields(14) = "固定用户" Then e = Val(mrc8.Fields(0)) '如果是固定用户,则2元/小时 Else e = Val(mrc8.Fields(1)) '如果是临时用户,则3元/小时 End If cost = Format(UnitNumber * e, "0.0") '计算消费金额 Balance = Val(mrc6.Fields(7)) - cost '计算余额 End If If Val(Balance) > 0 And Val(Balance) <= 4 Then '如果余额大于0且小于4则给出提醒 MsgBox DynCard(Intindex) & ",您卡内的金额已不足4元,请尽快充值!", vbOKOnly + vbInformation, "提示" mrcc.MoveNext End If If Balance <= 0 Then '如果余额小于等于0元,则强制下机 MsgBox DynCard(Intindex) & ",您卡内金额不足,即将下机", vbOKOnly + vbExclamation, "警告" txtCardNo.Text = Trim(cardnoo) Command2_Click mrcc.MoveNext '继续查询下一个卡号 End If Next End Sub
Private Sub Timer1_Timer() Timer1.Enabled = True Call viewdataEnd Sub
然后改动Timer控件的Interval属性,不过最大只能是60000,也就是一分钟,所以说最长时间就是每分钟来刷新一次了。
0 0
- 【机房收费系统】上机时动态刷新余额
- 机房收费系统之动态刷新下机
- 机房收费系统之余额查询
- [第一次机房收费系统]查询余额优化
- 机房收费系统之查询余额
- 机房收费系统——定时检查卡内余额
- 【机房收费系统】上下机
- 【机房收费系统】上下机
- 机房收费系统-上下机
- 机房收费系统--上下机
- 上下机---机房收费系统
- 【机房收费系统】上下机
- 机房收费系统---上、下机
- 机房收费系统-上下机
- 机房收费系统-上下机
- 【机房收费系统】机房收费系统之动态下机功能
- 机房收费系统——上下机
- 机房收费系统的上下机
- 南邮 OJ 2057 S4全球总决赛(1)
- HDU 5360 Hiking
- Android---63---Android中的动画效果
- iOS UITableViewCell的性能问题
- bat命令批量获取和修改文件名
- 【机房收费系统】上机时动态刷新余额
- C++ 虚函数实现多态浅析
- div水平垂直居中访问
- cocos2dx-24种基本特效
- hdu3015
- 高效率的文件复制的Java代码
- hdu 2955 动态规划
- hdu 5360
- HTML 显示系统时间