机房收费系统Section Three

跟上机比较起来,下机稍微复杂一点点。但是基本套路还是一样的,用到的表还是那四个,student,online,line,basicdata

下面是下机的流程图:

机房收费系统Section Three_第1张图片

打小就不会算账,这次在验收机房的时候,下机收费也出现了逻辑问题,我开始是这么想的,小于准备时间是不收费的,花费时间为0,大于准备时间小于最低收费时间,花费时间等于最低消费时间,大于最低消费时间小于递增时间,花费时间等于递增时间,大于递增时间就有四舍五入算的,我的递增时间设的是60分钟,最低消费时间设的是5分钟,导致了一个问题就是如果我上机小于一小时就要花一个小时的钱,那样顾客就花了冤枉钱,但是当你上机时间为一小时零29分钟,就只花一个小时的钱,这样老板是吃亏的,原因在与我设置的最低消费时间太短了,如果最低消费时间为30分钟,递增时间也设为30分钟,这样问题就解决了。

下边是收费这块的代码:

 '实际在线时间
    Ontime = DateDiff("n", mrc1.Fields(7), Time)
    
    txtSQL = "select * from User_Info where userID= '" & Trim(UserName) & "'"
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
    
    txtSQL = "select * from BasicData_Info where Head= '" & Trim(mrc4.Fields(4)) & "'"
    Set mrc2 = ExecuteSQL(txtSQL, MsgText)
    
    If mrc2.EOF Then
        MsgBox "没有设置基础数据,请添加!", vbOKOnly + vbExclamation, "警告"
        Exit Sub
    End If

    
    '判断上机时间各种临界条件下的消费时间
    If Val(Ontime) <= Val(mrc2.Fields(4)) Then        '小于准备时间
        Consumetime = 0
        
    ElseIf Val(Ontime) > Val(mrc2.Fields(3)) And Val(Ontime) < Val(mrc2.Fields(2)) Then    '小于最低消费时间
        Consumetime = Val(mrc2.Fields(2))
    ElseIf Val(Ontime) > Val(mrc2.Fields(2)) Then
        Consumetime = Round(Val(Ontime) / Val(mrc2.Fields(2).Value)) * Val(mrc2.Fields(2).Value)
    End If
    
    
    
    If Trim(mrc.Fields(14)) = "固定用户" Then '分别计算不同类型用户的消费金额
        Consume = Round(Consumetime / mrc2.Fields(2).Value) * mrc2.Fields(0).Value
    ElseIf Trim(mrc.Fields(14)) = "临时用户" Then
        Consume = Round(Consumetime / mrc2.Fields(2).Value) * mrc2.Fields(1).Value
    End If
    
    '计算余额
    Cash = Val(mrc.Fields(7).Value) - Consume
    '更新到student表中
    mrc.Fields(7) = Cash



你可能感兴趣的:(机房收费系统Section Three)