机房收费系统上级状态管理之全部下机和选中下机

 

                                机房上级状态管理之全部下机和选中下机

全部下机:操作员有权力将所有正在上机的卡号全部进行下机操作,我们需要考虑的问题是如何能够将所有正在上机的卡号全部进行下机操作,这时候只需要定义一个数组,这个数组可以代表各个卡号,然后一直循环进行下机操作。

选中下机:操作员有权力从正在上机的卡号中选择特定的卡号进行下机操作

全部/选中 下机流程图

将下机代码进行封装,以便全部下机和选中下机的时候调用,减少代码的冗余

Public Function offline(j As String)
    
    Dim mrcline As ADODB.Recordset
    Dim mrcbasic As ADODB.Recordset
    Dim mrccash As ADODB.Recordset
    Dim mrcupdate1 As ADODB.Recordset
    Dim mrcupdate2 As ADODB.Recordset
    Dim msgtext As String
    Dim txtsql As String
    
    '从上下机表中查询所有的正在上机的卡号
    txtsql = "select * from line_info where status='上机中'"
    Set mrcline = ExecuteSQL(txtsql, msgtext)
    
    '查询基础数据表
    txtsql = "select * from basicdata_info"
    Set mrcbasic = ExecuteSQL(txtsql, msgtext)
    
    alltime = Fix(DateDiff("n", mrcline!ondatetime, Now()))

    '计算花费金额cost
    
    '判断是否超过准备时间
    If alltime < mrcbasic!leasttime Then
        costmoney = 0
    Else
        '根据用户类型结算每15分钟的花费
        If Trim(mrcline!cardtype) = "固定用户" Then
            unitmoney = Format(1 / 4 * Val(mrcbasic!Rate), "0.00")
        Else
            unitmoney = Format(1 / 4 * Val(mrcbasic!tmprate), "0.00")
        End If
        
        '不是十五的整倍数的进1,按照十五进行计算
        If alltime Mod 15 = 0 Then
            '判断用户类型而收费
            If Trim(mrcline!cardtype) = "固定用户" Then
                    costmoney = Format(alltime / 15 * unitmoney, "0.00")
                Else
                    costmoney = Format(alltime / 15 * unitmoney, "0.00")
            End If
        
        Else
            '判断用户类型而收费
            If Trim(mrcline!cardtype) = "固定用户" Then
                costmoney = Format((Fix(alltime / 15) + 1) * unitmoney, "0.00")
            Else
                costmoney = Format((Fix(alltime / 15) + 1) * unitmoney, "0.00")
            End If
        
        End If

        '查询之前的余额
        txtsql = "select * from card_info where cardno='" & j & "'"
        Set mrccash = ExecuteSQL(txtsql, msgtext)
        
        newcash = Format(Val(mrccash!cash) - costmoney, "0.00")
        
        '更新上下机表
        txtsql = "update line_info set offdatetime='" & Now() & "',consumetime='" & alltime & _
        "',consume='" & costmoney & "',cash='" & newcash & "',status='已下机' where cardno='" & j & "' and status='上机中'"
        Set mrcupdate1 = ExecuteSQL(txtsql, msgtext)
        
        '更新卡号表
        txtsql = "update card_info set cash='" & newcash & "' where cardno='" & j & "'"
        Set mrcupdate2 = ExecuteSQL(txtsql, msgtext)
    End If
    
End Function

全部下机代码:

Private Sub allstudentoff_Click()
    
    Dim mrcline As ADODB.Recordset
    Dim msgtext As String
    Dim txtsql As String
    Dim j As String
    
    '从上下机表中查询所有的正在上机的卡号
    txtsql = "select * from line_info where status='上机中'"
    Set mrcline = ExecuteSQL(txtsql, msgtext)
    
    If mrcline.EOF And mrcline.BOF Then
        MsgBox "没有学生上线!", 0 + 48, 提示
        Exit Sub
    Else
        '移动到第一条数据
        mrcline.MoveFirst
    End If
    
    '定义数组
    ReDim a(mrcline.RecordCount) As String
        For i = 0 To mrcline.RecordCount - 1
            a(i) = Trim(mrcline!cardno)
            j = a(i)
            Call offline(j)
            mrcline.MoveNext
        Next i
        MSFlexGrid1.Clear
End Sub

选中下机是否在选中用对勾表示

'加入对勾标识符
Private Sub MSFlexGrid1_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single)
    
    '获取选中不连续行的权限,以及实现多行选中
    Dim col As Integer
    
    If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3) = "√" Then
        MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3) = ""
        
        '改变行颜色(变为没有选中之前的)
        For col = 0 To MSFlexGrid1.Cols - 1
            MSFlexGrid1.col = col
            MSFlexGrid1.CellBackColor = vbWhite
        Next col
    Else
        MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3) = "√"
        
        '改变行颜色(选中后的颜色)
        For col = 0 To MSFlexGrid1.Cols - 1
            MSFlexGrid1.col = col
            MSFlexGrid1.CellBackColor = vbGreen
        Next col
        
    End If

选中下机代码:将处于选中状态的卡号定义为数组,循环逐个下机,调用下机代码

Private Sub selectedstuoff_Click()
    
    Dim a(999) As String
    Dim j As String
 
    '判断是否处于选中状态
    If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 3) = "" Then
        MsgBox "没有选中任何记录,请先选择再下机!"
        Exit Sub
    End If
    
    '将选中状态记录的卡号定义为数组,循环逐个下机,调用下机代码
    
    For i = MSFlexGrid1.Rows - 1 To 1 Step -1
        
        If MSFlexGrid1.TextMatrix(i, 3) = "√" Then
            a(999) = MSFlexGrid1.TextMatrix(i, 0)
            j = a(999)
            Call offline(j)
            MSFlexGrid1.RemoveItem (i)
        End If
    Next i
    
End Sub

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 20
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值