前言
作为机房收费系统的核心,上下机的总结是必不可少的。不管我们做什么事情都要有全局意识,上下机也是这样,只有把上下机的整体逻辑思路搞清楚了,我们才能准确的把功能实现。
正文
首先,先把流程图画出来。
上机部分代码:
'是否输入卡号'
If Trim(txtCardNo(0).Text = "") Then '判断用户名是否为空'
MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
Exit Sub
Else
'是否上机'
onlinesql = "select*from online_info where cardno='" & txtCardNo(0).Text & "'"
Set mrcOnline = ExecuteSQL(onlinesql, OnlineMsgtext)
If mrcOnline.EOF = False Then '判断此卡号是否在上机'
MsgBox "此卡正在上机!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
txtCardNo(0).Text = ""
Exit Sub
Else
'是否注册'
studentSQL = "select*from student_Info where cardno= '" & txtCardNo(0).Text & "'and status='" & "使用" & "'"
Set mrcStudent = ExecuteSQL(studentSQL, Studentmsgtext)
If mrcStudent.EOF Then
MsgBox "卡号不存在,请重新输入!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
txtCardNo(0).Text = "" '使卡号为空'
'清除text文本'
For Each ctl In Controls
If TypeOf ctl Is TextBox Then
ctl.Text = ""
End If
Next ctl
'清除combobox文本'
For Each ctl1 In Controls
If TypeOf ctl1 Is ComboBox Then
ctl1.Text = ""
End If
Next ctl1
Else
'余额是否充足'
studentSQL = "select*from student_Info where cardno= '" & txtCardNo(0).Text & "' and status='" & "使用" & "'"
Set mrcStudent = ExecuteSQL(studentSQL, Studentmsgtext)
If Val(mrcStudent.Fields(7)) < 1 Then
MsgBox "余额不足,请先充值!", vbOKOnly + vbExclamation, "警告"
txtCardNo(0).SetFocus
txtCardNo(0).Text = ""
Exit Sub
Else
'更新上下机界面'
txtSID(12).Text = mrcStudent.Fields(1) '更新上下机界面'
……
txtBaLance(9).Text = Val(mrcStudent.Fields(7))
'更新online表'
onlinesql = "select*from online_info"
Set mrcOnline = ExecuteSQL(onlinesql, OnlineMsgtext)
mrcOnline.AddNew
mrcOnline.Fields(0) = Trim(txtCardNo(0).Text)
……
mrcOnline.Fields(8) = Trim("MARK")
mrcOnline.Fields(9) = Date
mrcOnline.Update
lblOnlineNumber.Caption = mrcOnline.RecordCount '在界面上显示正在上机的人数
mrcOnline.Close
'增加上机记录'
LineSQL = "select * from Line_Info" '
Set mrcLine = ExecuteSQL(LineSQL, LineMsgtext)
mrcLine.AddNew
mrcLine.Fields(1) = Trim(txtCardNo(0).Text)
……
mrcLine.Fields(13) = "正常上机"
mrcLine.Fields(14) = "MARK"
mrcLine.Update
mrcLine.Close
End If
End If
End If
End If
下机部分代码:
'是否输入卡号'
If Trim(txtCardNo(0).Text = "") Then '判断用户名是否为空'
MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
Exit Sub
Else
'是否上机'
onlinesql = "select*from online_info where cardno='" & txtCardNo(0).Text & "'"
Set mrcOnline = ExecuteSQL(onlinesql, OnlineMsgtext)
If mrcOnline.EOF = True Then '判断此卡号是否在上机'
MsgBox "此卡未上机!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
txtCardNo(0).Text = ""
Exit Sub
Else
'是否注册'
studentSQL = "select * from student_Info where cardno= '" & txtCardNo(0).Text & "'and status='" & "使用" & "'"
Set mrcStudent = ExecuteSQL(studentSQL, Studentmsgtext)
If mrcStudent.EOF Then
MsgBox "卡号不存在,请重新输入!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo(0).SetFocus
txtCardNo(0).Text = "" '使卡号为空'
Else
'从basicdata表中读取数据'
BasicDataSQL = "select * from basicdata_Info"
Set mrcBasicData = ExecuteSQL(BasicDataSQL, BasicdataMsgtext)
'从student表中读取数据'
studentSQL = "select * from student_Info"
Set mrcStudent = ExecuteSQL(studentSQL, Studentmsgtext)
'从line表中读取数据'
LineSQL = "select * from line_Info"
Set mrcLine = ExecuteSQL(LineSQL, LineMsgtext)
'从online表中读取数据'
onlinesql = "select * from online_Info"
Set mrcOnline = ExecuteSQL(onlinesql, OnlineMsgtext)
'CostTime = DateDiff("n", Trim(mrcOnline!ontime), Trim(Hour(Time)))
CostTime = DateDiff("n", CDate(mrcOnline!ondate), CDate(Date)) + DateDiff("n", CDate(mrcOnline!ontime), CDate(Time))
CostDate = DateDiff("n", Trim(mrcOnline!ondate), Trim(Date))
intLineTime = Val(Format(Str(Val(CostTime) + Val(CostDate))))
'判断实际在线时间是否小于准备时间,若小于则消费时间为0'
If intLineTime < mrcBasicData!prepareTime Then
intConsumeTime = 0
'判断实际在线时间是否小于最低消费时间,若小于,则消费时间为最低消费时间'
ElseIf intLineTime < mrcBasicData!leastTime Then
intConsumeTime = mrcBasicData!leastTime
Else
intConsumeTime = intLineTime
End If
'计算消费金额(消费金额=消费时间/30*用户类型的半小时费用)'
'固定用户(为什么要除以30) 最小计费单位'
If Trim(mrcStudent.Fields(14)) = "固定用户" Then
curConsume = Int(intConsumeTime / 30 * mrcBasicData!Rate) + 1
Else
curConsume = Int(intConsumeTime / 30 * mrcBasicData!tmpRate) + 1
End If
'计算余额(账户余额=原账户余额-消费金额)'
curBalance = Int(mrcStudent!cash - curConsume)
'更新学生信息表的余额'
studentSQL = "select * from student_Info where cardno= '" & txtCardNo(0).Text & "'"
Set mrcStudent = ExecuteSQL(studentSQL, Studentmsgtext)
mrcStudent.Fields(7) = curBalance
mrcStudent.Update
mrcStudent.Close
'更新上机记录表(line表)'
LineSQL = "select * from line_Info"
Set mrcLine = ExecuteSQL(LineSQL, LineMsgtext)
mrcLine.AddNew
'更新上机记录表(line表)'
LineSQL = "select * from line_Info"
Set mrcLine = ExecuteSQL(LineSQL, LineMsgtext)
mrcLine.Fields(8) = Date
……
mrcLine.Fields(14) = Trim(Environ("computername"))
mrcLine.Update
mrcLine.Close
'删除在线表中的信息'
onlinesql = "select * from online_Info"
Set mrcOnline = ExecuteSQL(onlinesql, OnlineMsgtext)
mrcOnline.Delete
mrcOnline.Update
'更新上下机界面
txtOffDate(6).Text = Date
……
lblOnlineNumber.Caption = mrcOnline.RecordCount '在界面上显示正在上机的人数
mrcOnline.Close
End If
End If
End If
后记
其实现在看来上下机也不是很难,只要你去做了,就会完成。