像这类的技术博客我写的不多,因为我写不好,技术博客然而技术含量还不高,惭愧。
原本的机房收费系统是学生教师一体的,我不想这么做,所以做了一个教师端,一个学生端,开始之前我认为应该不难,对于现阶段的自己,但是实施起来就上下机而言就阻拦了我一天半。
有不足的还望大神提点
就上机而言,教师端应该并不能上机,只能是赋予学生上机的权限,检测登录语句没有填太多
If txtKaHao.Text = "" Then MsgBox "请输入需要登录的卡号" Exit Sub End If txtSQL = "select quanxian from student_info where kahao='" & txtKaHao.Text & "'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) If mrc.EOF Then MsgBox "没有该用户" mrc.Close Exit Sub End If If Trim(mrc.Fields(0)) = "允许" Then MsgBox "该用户已经允许上线或已经上线" mrc.Close Exit Sub Else mrc.Fields(0) = "允许" mrc.Update mrc.Close MsgBox "登录成功" End If
这里用的Timer比较多,因为我想要的是:一登录就可以动态的计算和显示目前消费的时间和费用。
首先定义变量
Dim hh, dd, ss As Integer '用于计算时间 Dim txtSQL As String Dim Msgtxt As String Dim mrc As ADODB.Recordset '定义数据记录集 Dim JanGe As Integer '计算上机费用的时候用 Dim XianShi(1) As String '同上 Dim LeiXing As String '得到登录学生的类型,计算费用 Dim YuE As Single '中间变量 Dim XiaoJin As Single '中间变量然后在窗体加载的时候 将需要的数据取出,赋给变量
txtSQL = "select * from student_info where kahao = '" & StudentID & "'" '先从数据库中找到对应的记录 Set mrc = ExecuteSQL(txtSQL, Msgtxt) ' YuE = mrc.Fields(8) '将目前卡里的余额取出 Timer6.Enabled = True '用户计算费用的timer启动 Timer1.Enabled = True '显示现在的时间 XiaoJin = txtXiaoJin.Text '将消费金额Text框中的取出 LeiXing = Trim(mrc.Fields(10)) '将数据的类型取出 mrc.Close '关闭数据库链接
像逻辑这部分的主要是Timer之间有些混乱,不能将所有的东西都讲那么细,长期以往,你的主观能动性就没有了,不妨说的是上机的过程中,金额就已经计算了,不需要再在下机的时候计算了,下机的工作就比之前要轻松了,只需要将数据放回数据库就行了。
Private Sub Timer1_Timer() txtTime.Text = Time End Sub Private Sub Timer2_Timer() txtXiaoFei.Text = DateDiff("s", txtOnTime.Text, Time) If Int(txtXiaoFei.Text) >= 3600 Or Int(txtXiaoFei.Text) Mod 3600 > 60 Or Int(txtXiaoFei.Text) Mod 3600 <= 60 Then hh = Int(txtXiaoFei.Text) \ 3600 dd = (Int(txtXiaoFei.Text) Mod 3600) \ 60 ss = (txtXiaoFei.Text - (hh * 3600 + dd * 60)) End If txtXiaoFei.Text = Format(hh & ":" & dd & ":" & ss, "hh:nn:ss") End Sub Private Sub Timer3_Timer() '固定用户消费情况 JanGe = DateDiff("n", txtOnTime.Text, Time) '得到现在上机的第几分钟 XianShi(0) = Format(Round(GuFei / 60 * JanGe, 1), "0.0") '计算上机的费用 XianShi(1) = Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) '使得消费的最小单位是5毛 If Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) <= 5 Then XianShi(1) = 5 XianShi(0) = Fix(XianShi(0)) & "." & XianShi(1) Else XianShi(0) = Format(Round(XianShi(0)), "0.0") End If txtXiaoJin.Text = XianShi(0) '让上机费用显示在文本框中 If YuE <= 0.5 Then Label6.Visible = True Timer5.Enabled = True Else Timer5.Enabled = False Label6.Visible = False End If End Sub Private Sub Timer4_Timer() '临时用户消费情况 JanGe = DateDiff("n", txtOnTime.Text, Time) '得到现在上机的第几分钟 XianShi(0) = Format(Round(LinFei / 60 * JanGe, 1), "0.0") '计算上机的费用 XianShi(1) = Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) '使得消费的最小单位是5毛 If Mid(XianShi(0), InStr(1, XianShi(0), ".") + 1, 1) <= 5 Then XianShi(1) = 5 XianShi(0) = Fix(XianShi(0)) & "." & XianShi(1) Else XianShi(0) = Format(Round(XianShi(0)), "0.0") End If txtXiaoJin.Text = XianShi(0) '让结果显示在文本框中 If YuE <= 0.5 Then Label6.Visible = True<span style="white-space:pre"> </span><span style="color:#ff0000;">显示余额不足的label</span> Timer5.Enabled = True Else Timer5.Enabled = False Label6.Visible = False End If End Sub Private Sub Timer5_Timer() txtSQL = "select jinE from student_info where kahao = '" & StudentID & "'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) YuE = mrc.Fields(0) mrc.Close If YuE <= 0 Then Unload Me End If End Sub Private Sub Timer6_Timer() '动态的将数据库中的金额赋给YuE If Val(txtXiaoJin.Text) <> Format(XiaoJin, "0.0") Then XiaoJin = txtXiaoJin.Text txtSQL = "select jine from student_info where kahao = '" & StudentID & "'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) YuE = Val(mrc.Fields(0)) - 0.5 mrc.Fields(0) = Val(mrc.Fields(0)) - 0.5 mrc.Update mrc.Close End If If LeiXing = "固定" Then Timer2.Enabled = True Timer3.Enabled = True Else Timer2.Enabled = True Timer4.Enabled = True End If End Sub这是学生端的下机,还是那句话,没有过多的检测性语句,简单的有一些,严密的检测语句在后期还可以填。
当然,教师端可以强制使学生端下机,
If LeiXing = "固定" Then txtSQL = "select * from student_info where kahao = '" & StudentID & "' and zhuangtai='使用'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) If mrc.EOF = True Then MsgBox "卡号不存在或已经注销,请检查后重新输入" mrc.Close Exit Sub End If mrc.Close txtSQL = "select * from online where kahao = '" & StudentID & "'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) If mrc.EOF = False Then Timer1.Enabled = False Timer2.Enabled = False Timer3.Enabled = False Timer4.Enabled = False Timer5.Enabled = False Timer6.Enabled = False mrc.Delete mrc.Update mrc.Close txtSQL = "select * from line where kahao = '" & StudentID & "' and status = '正常上机'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) mrc.Fields(5) = Date mrc.Fields(6) = Time mrc.Fields(7) = "正常下机" mrc.Update mrc.Close txtSQL = "select * from student_info where kahao = '" & StudentID & "'" Set mrc = ExecuteSQL(txtSQL, Msgtxt) 'mrc.Fields(8) = mrc.Fields(8) - Val(txtXiaoJin.Text) mrc.Fields(11) = "禁止" mrc.Fields(12) = "离线" mrc.Update mrc.Close MsgBox "下机成功" Unload Me End If Else MsgBox "请到服务台办理退卡" End If这是教师端的下机
If Trim(txtKaHao.Text) = "" Then '判断卡号是否为空 MsgBox "请输入卡号" Exit Sub End If txtSQL = "select * from student_info where kahao = '" & txtKaHao.Text & "' and zhuangtai = '使用'" '判断卡号是否正在使用 Set mrc = ExecuteSQL(txtSQL, Msgtxt) '用mrc读取 student 表中的数据 If mrc.EOF Then '如果记录集中没有数据 MsgBox "卡号不存在或已经注销,请检查后重新输入" mrc.Close '给出相应的提示,关闭mrc库链接 Exit Sub Else '如果正在使用 txtSQL = "select * from online where kahao = '" & txtKaHao.Text & "'" '判断卡号是否在线 Set mrcc = ExecuteSQL(txtSQL, Msgtxt) '用mrcc装载online表数据 If mrcc.EOF = True Then MsgBox "该卡号早已不在线啦" mrcc.Close Exit Sub Else mrcc.Delete mrcc.Update mrcc.Close '*************************************************************************************** txtSQL = "select * from line where kahao = '" & txtKaHao.Text & "' and status = '正常上机'" Set mrcc = ExecuteSQL(txtSQL, Msgtxt) mrcc.Fields(5) = Date mrcc.Fields(6) = Time mrcc.Fields(7) = "正常下机" XiaoFeiShiJian(0) = DateDiff("s", mrcc.Fields(4), Time) If Int(XiaoFeiShiJian(0)) >= 3600 Or Int(XiaoFeiShiJian(0)) Mod 3600 > 60 Or Int(XiaoFeiShiJian(0)) Mod 3600 <= 60 Then hh = Int(XiaoFeiShiJian(0)) \ 3600 dd = (Int(XiaoFeiShiJian(0)) Mod 3600) \ 60 ss = (XiaoFeiShiJian(0) - (hh * 3600 + dd * 60)) End If XiaoFeiShiJian(0) = Format(hh & ":" & dd & ":" & ss, "hh:nn:ss") mrcc.Fields(9) = XiaoFeiShiJian(0) If Trim(mrc.Fields(10)) = "固定" Then XiaoFeiShiJian(1) = DateDiff("n", mrcc.Fields(4), Time) '得到现在上机的第几分钟 XiaoFeiJinE(0) = Format(Round(GuFei / 60 * XiaoFeiShiJian(1), 1), "0.0") '计算上机的费用 XiaoFeiJinE(1) = Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) '使得消费的最小单位是5毛 If Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) <= 5 Then XiaoFeiJinE(1) = 5 XiaoFeiJinE(0) = Fix(XiaoFeiJinE(0)) & "." & XiaoFeiJinE(1) Else XiaoFeiJinE(0) = Format(Round(XiaoFeiJinE(0)), "0.0") End If Else XiaoFeiShiJian(1) = DateDiff("n", mrcc.Fields(4), Time) '得到现在上机的第几分钟 XiaoFeiJinE(0) = Format(Round(LinFei / 60 * XiaoFeiShiJian(1), 1), "0.0") '计算上机的费用 XiaoFeiJinE(1) = Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) '使得消费的最小单位是5毛 If Mid(XiaoFeiJinE(0), InStr(1, XiaoFeiJinE(0), ".") + 1, 1) <= 5 Then XiaoFeiJinE(1) = 5 XiaoFeiJinE(0) = Fix(XiaoFeiJinE(0)) & "." & XiaoFeiJinE(1) Else XiaoFeiJinE(0) = Format(Round(XiaoFeiJinE(0)), "0.0") End If End If mrcc.Fields(10) = XiaoFeiJinE(0) 'mrc.Fields(8) = mrc.Fields(8) - Val(XiaoFeiJinE(0)) mrc.Fields(11) = "禁止" mrc.Fields(12) = "离线" txtKaHao.Text = Trim(mrc.Fields(0)) txtXueHao.Text = Trim(mrc.Fields(1)) txtXiBie.Text = Trim(mrc.Fields(4)) txtLeiXing.Text = Trim(mrc.Fields(10)) txtName.Text = Trim(mrc.Fields(2)) txtXingBie.Text = Trim(mrc.Fields(3)) txtOnDate.Text = Trim(mrcc.Fields(3)) txtOffDate.Text = Trim(mrcc.Fields(5)) txtOnTime.Text = Trim(mrcc.Fields(4)) txtOffTime.Text = Trim(mrcc.Fields(6)) txtXiaoFei.Text = XiaoFeiShiJian(0) txtXiaoJin.Text = Format(XiaoFeiJinE(0), "0.0") mrcc.Update mrcc.Close mrc.Update mrc.Close MsgBox "下机成功" End If End If基本上,上下机就完成了, 还有不足的,敬请提点