前言:上下机的核心操作:上机就是将数据从student表中写入到online表中,然后并在line表中写上一部分的内容,而下机的时候就是计算好时间和消费金额,然后写入到line表中,删除online的内容,并且将金额同步到student表中,
主要流程

注意:我在下机表中添加了日期和Userid这一列,为了在结账的时候更方便计算。
上机
注意: 因为我一开始没有领悟那么深,所以我在下机的时候才把数据添加到line表中。
Private Sub cmdOnline_Click()
'判断是否输入卡号
If Trim(txtCardNo.Text) = "" Then
txtCardNo.BackColor = vbRed
txtCardNo.SetFocus
Exit Sub
Else
txtCardNo.BackColor = vbWhite
End If
'判断卡号是否为数字
If Not IsNumeric(txtCardNo.Text) Then
MsgBox "您的卡号应该为数字,请重新输入!", vbOKOnly + vbExclamation, "警告"
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
End If
'连接数据库,判断是否正在登陆
txtSQL = "select *from online_info where cardno='" & txtCardNo.Text & "'"
Set mrc_On = ExecuteSQL(txtSQL, MsgText)
'如果表中有数据,证明正在上机
If mrc_On.EOF = False Then
MsgBox "此卡正在上机", vbOKOnly + vbExclamation, "警告"
'将对应数据传送到表格中
txtType.Text = Trim(mrc_On.Fields(1))
txtSID.Text = Trim(mrc_On.Fields(2))
txtName.Text = Trim(mrc_On.Fields(3))
txtDept.Text = Trim(mrc_On.Fields(4))
txtSex.Text = Trim(mrc_On.Fields(5))
txtOnDate.Text = Format(Trim(mrc_On.Fields(6)), "yyyy-MM-dd")
txtOnTime.Text = Trim(mrc_On.Fields(7))
mrc_On.Close '关闭数据库
Exit Sub
End If
'连接数据库,加载信息
txtSQL = "select*from student_info where cardno='" & txtCardNo.Text & "'"
Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)
'如果没有这个卡号
If mrc_Stu.EOF Then
MsgBox "此卡尚未注册", vbOKOnly + vbExclamation, "警告"
mrc_Stu.Close
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
End If
'判断是否停用
If Trim(mrc_Stu.Fields(10)) = "不使用" Then
MsgBox "此卡尚未注册", vbOKOnly + vbExclamation, "警告"
mrc_Stu.Close
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
End If
'将数据从stu表中传到控件中
txtType.Text = mrc_Stu.Fields(14)
txtSID.Text = Trim(mrc_Stu.Fields(1))
txtName.Text = Trim(mrc_Stu.Fields(2))
txtDept.Text = Trim(mrc_Stu.Fields(4))
txtSex.Text = Trim(mrc_Stu.Fields(3))
txtOnDate.Text = Format(Date, "yy-mm-dd")
txtOnTime.Text = Format(Now, "hh:mm:ss")
txtBalance.Text = Trim(mrc_Stu.Fields(7))
mrc_Stu.Close
txtSQL = "select *from online_info where cardno='" & txtCardNo.Text & "'"
Set mrc_On = ExecuteSQL(txtSQL, MsgText)
'将数据写到上机表上
mrc_On.AddNew
mrc_On.Fields(0) = Trim(txtCardNo.Text)
mrc_On.Fields(1) = Trim(txtType.Text)
mrc_On.Fields(2) = Trim(txtSID.Text)
mrc_On.Fields(3) = Trim(txtName.Text)
mrc_On.Fields(4) = Trim(txtDept.Text)
mrc_On.Fields(5) = Trim(txtSex.Text)
mrc_On.Fields(6) = Trim(txtOnDate.Text)
mrc_On.Fields(7) = Trim(txtOnTime.Text)
'将计算机名同步到数据库的相应表格中
mrc_On.Fields(8) = GetThisComputerName
mrc_On.Fields(9) = Date
mrc_On.Update
mrc_On.Close
‘这里还需要写入到下机表,但是我没有做!
End Sub
下机
临时用户问题?
思考: 对于临时用户,那么下机是否等于退卡呢?
我的答案: 对于临时用户下机就等于退卡。
所以在下机的时候做了如下判断。
'修改学生表中的不使用
txtSQL = "select *from student_info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)
mrc_Stu.Fields(7) = Trim(txtBalance.Text)
mrc_Stu.Update
If Trim(mrc_Stu.Fields(14)) = "临时用户" Then
mrc_Stu.Fields(10) = "不使用"
mrc_Stu.Update
mrc_Stu.Close
'下机表
txtSQL = "select *From cancelcard_info "
Set mrc_CCard = ExecuteSQL(txtSQL, MsgText)
mrc_CCard.AddNew
mrc_CCard.Fields(0) = Trim(txtSID.Text) '学号
mrc_CCard.Fields(1) = Trim(txtCardNo.Text) ' 卡号
mrc_CCard.Fields(2) = Trim(txtBalance.Text) '消费金额
mrc_CCard.Fields(3) = Format(Date, "yyyy-MM-dd") '日期
mrc_CCard.Fields(4) = Format(Now, "hh:mm:ss") '时间
mrc_CCard.Fields(5) = Trim(UserName) '操作人名称
mrc_CCard.Fields(6) = "未结账" '状态
mrc_CCard.Update
mrc_CCard.Close
End If
时间和余额的问题
首先得到基础数据
'得到最低消费金额
txtSQL = "select *from basicdata_info "
Set mrc_BData = ExecuteSQL(txtSQL, MsgText)
If mrc_BData.EOF Then
MsgBox "没有基础数据,请添加基础数据,请联系管理员", 0 + 48, "警告"
mrc_BData.Close
txtCardNo.Text = ""
Exit Sub
Else
LessTime = mrc_BData.Fields(3) '准备时间
Rate = mrc_BData.Fields(0) '会员价格
TmpRate = mrc_BData.Fields(1) '临时价格
UnitTime = mrc_BData.Fields(2) '递增时间
mrc_BData.Close
End If
计算上机时间
'计算上机时间(分钟)
’判断上下机时间是不是同一天
If Trim(txtOffDate.Text) = Trim(txtOnDate.Text) Then
WorkMin = DateDiff("n", txtOnTime.Text, txtOffTime.Text) '分钟
Work = WorkMin
Else 如果不是
Work =DateDiff("n", txtOnDate.Text, txtOffDate.Text) - 1440
WorkDay = DateDiff("n", "00:00:00", txtOffTime.Text)
Work = Work + WorkDay
WorkDay = DateDiff("n", txtOnTime.Text, "23:59:00")
Work = Work + WorkDay + 1
End If
txtCTime = Work '消费时间
金额计算
’根据不同类型,使用不同的金额
If Trim(txtType.Text) = "临时用户" Then
Cost = TmpRate
Else
Cost = Rate
End If
'判断是否大于准备时间
If Work < LessTime Then
'如果小于就相当于不收钱
OnHour = 0
Else
’如果大于就算取金额
‘根据分钟,换算出小时,这里采用的进一法。
OnHour = (Fix((Work - 2) / UnitTime))
If (Work Mod 60) > 0 Then
OnHour = OnHour + 1
End If
End If
'消费金额计算
txtCMoney.Text = OnHour * Cost
希望我的分享能你有所帮助!
感谢您的阅读,如果您有更好的方法,欢迎分享给我,谢谢您!
本文详细介绍了上下机管理系统的实现流程,包括上机时将数据从student表写入online表,下机时计算时间和消费金额并更新数据库。文章还讨论了临时用户下机等特殊情况的处理方法。
549





