下机,就是将正在上机的卡号进行下机,其他的要求不考虑,计算上机时间,消费金额,还有余额
几个概念要搞明白:
**
下机日期:就是系统当前日期 date
下机时间,即系统当前时间 time
消费时间 = (下机日期-上机日期) + (下机时间-上机时间)
消费金额 = 消费时间 ×单位消费金额 (一般单位时间为一小时,根据用户级别分别计算)
余额:上机前金额-消费金额 **
计算是时间差要用到DateDiff函数,定义数据类型为long,用法在代码中会体现到
下机流程图
下机代码展示
'是否输入卡号
If txtCardNo.Text = "" Then
MsgBox "请输入要下机的卡号!", 48, "提示"
txtCardNo.SetFocus
Exit Sub
End If
'判断卡号是否为数字
If Not IsNumeric(Trim(txtCardNo.Text)) Then
MsgBox "请输入数字!", 48, "提示"
txtCardNo.SetFocus
txtCardNo.Text = ""
Exit Sub
End If
'该号是否上机
txtsql = "select * from OnLine_info where cardno = '" & txtCardNo.Text & "'"
Set mrc1 = ExecuteSQL(txtsql, msgtext)
If mrc1.EOF = True Then
MsgBox "该号没有上机!", 48, "提示"
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
Else
txtType.Text = mrc1!cardtype
txtStudentNO.Text = mrc1!studentno
txtDept.Text = mrc1!department
txtName.Text = mrc1!studentname
ComboSex.Text = mrc1!sex
txtonDate.Text = mrc1!ondate
txtonTime.Text = mrc1!ontime
'计算时间
dim codate as long
dim cotime as long
txtoffDate.Text = Date '下机日期
txtoffTime.Text = Time '下机时间
codate = DateDiff("n", txtonDate.Text, txtoffDate.Text) '日期差
cotime = DateDiff("n", txtonTime.Text, txtoffTime.Text) '时间差
costTime.Text = (Val(codate) + Val(cotime))
End If
'计算消费金额
txtsql = "select * from basicdata_info "
Set mrc4 = ExecuteSQL(txtsql, msgtext)
'消费时间小于等于准备时间,不收费,超过准备时间,按用户类型收费
If costTime.Text <= Val(mrc4.Fields(4)) Then
costMoney.Text = 0
ElseIf txtType.Text = "固定用户" Then
ElseIf 60 <= costTime.Text <= 420 Then
costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 4, "0.00")
ElseIf 420 < costTime.Text < 600 Then
costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 2, "0.00")
ElseIf txtType.Text = "临时用户" Then
ElseIf 60 <= costTime.Text <= 420 Then
costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 5, "0.00")
ElseIf 420 < costTime.Text < 600 Then
costMoney.Text = Format(costTime.Text / mrc4.Fields(2) * 5, "0.00")
End If
'计算余额 = 表内金额 - 消费金额
txtsql = "select * from student_info where cardno= '" & Trim(txtCardNo.Text) & " 'and status= '使用'"
Set mrc = ExecuteSQL(txtsql, msgtext)
txtBalance.Text = mrc.Fields(7) - costMoney.Text
'删除online表
mrc1.Delete
mrc1.Update
mrc1.Close
'更新line表
txtsql = "select * from line_info where cardno = '" & txtCardNo.Text & "'"
Set mrc2 = ExecuteSQL(txtsql, msgtext)
With mrc2
.Fields(8) = Trim(txtoffDate.Text)
.Fields(9) = Trim(txtoffTime.Text)
.Fields(10) = Trim(costTime.Text)
.Fields(11) = Trim(costMoney.Text)
.Fields(12) = Trim(txtBalance.Text)
.Fields(13) = "正常下机"
.Fields(14) = VBA.Environ("computername")
.Update
.Close
End With
'更新学生表
txtsql = "select * from student_info "
Set mrc2 = ExecuteSQL(txtsql, msgtext)
mrc.Fields(7) = Trim(txtBalance.Text)
mrc.Update
mrc.Close
'更新上机人数
txtsql = "select count(*) from OnLine_info "
Set mrc1 = ExecuteSQL(txtsql, msgtext)
lblpeople.Caption = Trim(mrc1.Fields(0))
'更新临时用户数
txtsql = "select count(*) from OnLine_info where cardtype='临时用户 '"
Set mrc1 = ExecuteSQL(txtsql, msgtext)
lblplain.Caption = Trim(mrc1.Fields(0))
'更新固定用户数
txtsql = "select count(*) from OnLine_info where cardtype='固定用户 '"
Set mrc1 = ExecuteSQL(txtsql, msgtext)
lblmember.Caption = Trim(mrc1.Fields(0))
mrc1.Close
MsgBox "下机成功!", 48, "提示"
txtCardNo.Text = ""
txtStudentNO.Text = ""
txtDept.Text = ""
txtName.Text = ""
ComboSex.Text = ""
txtonDate.Text = ""
txtType.Text = ""
txtoffDate.Text = ""
txtBalance.Text = ""
txtonTime.Text = ""
txtoffTime.Text = ""
costTime.Text = ""
costMoney.Text = ""
下机机房的一个重点,一定要搞清楚各个名词之间的关系,否则弄不好就要算错账了。
欢迎评论区留言!