上下机是机房收费系统中比较重要的一部分,所以我们一定要把上下机的思路理清楚才可以,不然会很乱,一会儿就把自己绕进去了,现在我们一起分析一下下机的思路吧!
代码片段:
判断上下机的情况
Private Sub cmdOffLine_Click()
Dim mrconline As ADODB.Recordset
Dim mrconline2 As ADODB.Recordset
Dim mrcStudent As ADODB.Recordset
Dim mrcbasic As ADODB.Recordset
Dim mrcline As ADODB.Recordset
Dim mrcline2 As ADODB.Recordset
Dim mrc As ADODB.Recordset
Dim time1 As Long
Dim time2 As Long
Dim time3 As Long
Dim msgtext As String
Dim txtsql1 As String
Dim txtsql2 As String
Dim txtsql3 As String
'消费时间
Dim consumetime As String
'连接表
txtsql2 = "select * from basicdata_info" '从数据表中获取基本数据
Set mrcbasic = ExecuteSQL(txtsql2, msgtext)
txtsql3 = "select * from student_info where cardno='" & Trim(txtCardNo.Text) & "'and status='" & "使用" & "'" '得出余额
Set mrcStudent = ExecuteSQL(txtsql3, msgtext)
If txtCardNo.Text = "" Then
MsgBox "请输入卡号!", 0 + 48, "警告"
Else
'判断此卡是否已经下机
txtsql1 = "select * from online_info where cardno= '" & Trim(txtCardNo.Text) & "'"
Set mrconline = ExecuteSQL(txtsql1, msgtext)
If mrconline.EOF = True Then
MsgBox "没有上机"
Else
'从online_info数据表中获取数据到下机界面
txtSID.Text = mrconline.fields(2)
txtDept.Text = mrconline.fields(4)
txttype.Text = mrconline.fields(1)
txtName.Text = mrconline.fields(3)
txtSex.Text = mrconline.fields(5)
txtOndate.Text = mrconline.fields(6)
txtOffDate.Text = Date
txtOntime.Text = mrconline.fields(7)
txtOffTime.Text = Time
计算消费时间和消费金额
'计算上机时间
consumetime = Abs(Val(DateDiff("n", Trim(mrconline!Date), Now))) '把日期差转换成分钟
'判断是否小于准备时间
txtCtime.Text = consumetime
mrconline.Update
If consumetime < mrcbasic.fields(4) Then
txtCMoney.Text = "0"
txtCtime.Text = "0"
txtBalance.Text = Trim(mrcstudent.fields(7))
Else
'判断是否小于最小上机时间
'判断消费时间小于最小上机时间时消费金额为1
If consumetime > mrcbasic!leasttime Then
txtCMoney.Text = "1" '消费金额为1元
txtBalance.Text = Val(mrcstudent.fields(7)) - Val(txtCMoney.Text)
Else
If mrconline.fields(1) = "固定用户" Then
txtCMoney.Text = Round((mrcbasic.fields(0) / 60 * consumetime)) 'cdbl将时间转换成double类型,round是将数据四舍五入,保留两位小数
txtBalance.Text = Val(mrcstudent.fields(7)) - Val(txtCMoney.Text)
Else
txtCMoney.Text = Round((mrcbasic.fields(1) / 60 * consumetime)) '计算临时用户金额
txtBalance.Text = Val(mrcstudent.fields(7)) - Val(txtCMoney.Text)
mrcstudent.fields(7) = Trim(txtBalance.Text)
mrcstudent.fields(11) = "未结账"
mrcstudent.Update
txtCtime.Text = consumetime
End If
End If
End If
End If
End If
更新记录
txtsql = “select * from line_info where ontime=’” & Trim(txtOntime.Text) & “‘and cardno=’” & Trim(txtCardNo.Text) & “’”
Set mrcline2 = ExecuteSQL(txtsql, msgtext)
If mrcline2.EOF = True Then
MsgBox "该用户没有上机记录,请退出!", 0 + 46, "提示"
Else
mrcline2.fields(8) = Date
mrcline2.fields(9) = Time
mrcline2.fields(10) = Trim(txtCtime.Text)
mrcline2.fields(11) = Val(txtCMoney.Text)
mrcline2.fields(12) = Val(txtBalance.Text)
mrcline2.fields(13) = "正常下机"
mrcline2.Update
mrcline2.MoveNext
MsgBox "下机成功", 0 + 48, "提示"
mrconline.Delete
mrconline.Update
End If
以上内容就是上下机的具体代码!上下机是机房的核心部分,也是最关键的部分,所以一定要一次性的把它做好,不然后期优化还会再找麻烦的,下机一般不同的人有不同的写法, 以下是我遇到的两个思路:
**1、先判断online_info表中是否有记录,若有则代表该卡正在上机,若没有则代表该卡已经下机!
2、判断line_info表中是否有“正常下机”的记录,若有则代表已经下机,若没有则代表正在上机!**
第二种思路可能会有漏洞,因为一个卡号如果多次上下机的话会出现错误,我刚开始就用的第二种思路,但是发现这种思路如果一直走下去的会很麻烦,所以还不如换个方向呢,于是我就采取了第一种思路,这种思路还是比较简单的,同时也是我上面的思路,建议大家用第二种方法,会节省不少代码量!
以上就是下机的思路和代码,如果有不合适的代码,欢迎大家给我指正!