机房收费系统——动态查询自动下机

前言

在机房系统中,强制下机是非常必要的,当用户余额用完时自动下机。做这个功能还是比较坎坷的,用时2天才完成。最开始的思路是在timer中使用循环,当上机时间每大于5分钟时进行扣费,更新表里余额,写好代码运行,发现上机时间大于5分钟后,每次执行timer都要扣一次费,也就是只要上机时间到了5分钟,用不了1s卡里的钱都被扣光。这时,需要定义一个时间变量,上机时长大于5分钟后,上机时长要+5分钟,以防止扣之前5分钟的费。就是这个时间变量花费了很长时间,代码也比较乱,果断换个思路。下面看看实现功能的思路是什么样的!

流程图

在这里插入图片描述

知识点

Dim 和 Redim的区别

Dim :Dimension(维度的缩写)定义函数时使用,例如:Dim a As Integer,定义整型变量。

Redim :在有些时候不知道需要多大的数组,就可以使用一个能改变大小的数组,就是动态数组,redim是很方便,灵活的可以随时改变大小的数组。有效管理内存,可以将内存空间释放给系统,大大节省内存,提高运行速度。

Redim使用:只能在过程中使用。redim有两种用法,一个带preserve,一个不带,区别是是否保留原来的数据。
例如:有一个Byte数组A,如果知道它的上限最大只能是4,就用Dim
Dim A As Byte()

但如果不能事先确定大小,或在运行时改变它的大小就要用动态数组。
Dim A As Byte()
Redim A (4) '这样改变大小时会清空原来的数据,进行重新定义
Redim Preserve A (4) 这样改变大小时会保留原来的数据

代码片段

timer.interval设置为60000,也就是1min.

Private Sub Timer2_Timer()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset
    Dim mrc1 As ADODB.Recordset
    Dim mrc2 As ADODB.Recordset
    Dim mrc3 As ADODB.Recordset
    Dim mrc4 As ADODB.Recordset
    Dim mrc5 As ADODB.Recordset
    Dim m, i, a, valueDate, valueTime As Integer
    Dim pay As Single
    
        txtSQL = "select * from online_Info"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        '判断是否有卡号上机
        If mrc.EOF Then
            Timer2.Enabled = False
            Exit Sub
        Else
            mrc.MoveFirst
        End If
        
        '将上机卡号定义为一个数组
        ReDim a(mrc.RecordCount) As String
        For i = 0 To mrc.RecordCount - 1
            a(i) = Trim(mrc!cardno)
            cardno = a(i)
            
            txtSQL = "select * from online_Info where cardno='" & Trim(cardno) & "'"
            Set mrc1 = ExecuteSQL(txtSQL, MsgText)
            
            txtSQL = "select * from student_Info where cardno='" & Trim(cardno) & "'"
            Set mrc2 = ExecuteSQL(txtSQL, MsgText)
            
            txtSQL = "select * from line_Info where status='" & "正常上机" & "' and cardno='" & Trim(cardno) & "'"
            Set mrc3 = ExecuteSQL(txtSQL, MsgText)
            
            '记录上机日期时间
            ondate = Trim(mrc1.Fields(6))
            onTime = Trim(mrc1.Fields(7))
            
            '函数计算上机时长
            valueDate = DateDiff("n", ondate, Date)
            valueTime = DateDiff("n", onTime, Time)
            valueTime = valueDate + valueTime
            
            txtSQL = "select * from basicdata_Info"
            Set mrc4 = ExecuteSQL(txtSQL, MsgText)
              
            '计算单位金额
            If mrc2.Fields(14) = "固定用户" Then
                pay = Format(mrc4.Fields(0) / 60, "0.0")
            Else
                pay = Format(mrc4.Fields(1) / 60, "0.0")
            End If
            
            '判断上机时间是否大于2min,计算消费金额
            If valueTime >= 2 Then
                valueTime1 = valueTime - (valueTime - 1)
                pay = Format(pay * valueTime1, "0.0")
            Else
                pay = Format(pay * valueTime, "0.0")
            End If
            
            '更新student的cash
            mrc2.Fields(7) = mrc2.Fields(7) - pay
            mrc2.Update
            
            If Val(mrc2.Fields(7)) > 0 And Val(mrc2.Fields(7)) = Val(mrc4.Fields(5)) Then
                MsgBox a(i) & ",您卡内金额已不足" & Val(mrc4.Fields(5)) & "元,请尽快充值!", 48, "温馨提示"
            End If
            
            '判断是否余额为0,更新student,online表
            If Val(mrc2.Fields(7)) <= 0 Then
                mrc2.Fields(7) = 0
                mrc2.Update
                mrc.Delete
                mrc.Update
                MsgBox "卡号:" & a(i) & ",余额不足,即将下机!", 48, "警告"
            End If
            mrc.MoveNext
            
            '更新line表
            mrc3.Fields(8) = Date
            mrc3.Fields(9) = Time
            mrc3.Fields(12) = mrc2.Fields(7)
            mrc3.Fields(10) = valueTime
            mrc3.Fields(11) = pay
            mrc3.Update
            
        Next i
End Sub
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
机房收费管理系统 问题描述 结合我校计算机机房的运作模式,设计一种适合的收费管理系统,能够实现相关的人员检索,计时收费,管理汇总等功能模块。 开发环境 采用C或C++实现,VC++6.0 基本要求 主要功能模块: (1) 登录模块 (2) 上机管理模块 说明:上机登记时,余额不足3元或卡处于挂失状态,则拒绝登记。 每位同学的一次上机形成一条记录,每30秒遍历一次上机记录表,对表中所有正上机字段为TRUE的记录的上机用时增加30秒,同时减少上机卡表中的余额。 (3) 上机卡管理模块 (4) 充值挂失模块 (5) 查找统计模块:统计某天上机的总时数、每次上机的平均时数和机房的收入;某学生上机的次数、上机总时数、每次上机平均时间;挂失和查询余额。 参考的数据结构: 上机卡(卡号,姓名,专业班级,余额,状态),状态有:正常和挂失。 上机记录(卡号,上机日期,开始时间,上机用时,正上机,管理号代码) 上机记录表永久保存,用于事后查询和统计。 设计要求 1) 界面友好,输入信息符合逻辑:如上机时间设定在合理的时间范围。 2) 能从实践生活出发,设计合理的功能模块 3) 各类信息的数据结构明晰 4) 可根据自身生活体验添加相关功能模块。 拓展功能要求 鼓励采用Turbo C/C++、MFC等开发工具,实现彩色或图形操作界面。鼓励引入小型数据作为处理数据的来源,拓展知识面。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值