机房和网吧其实是差不多的,去过网吧的都知道,我们是需要下机的,可下机并不简单,他不仅得计算上机的时间和消费的金额到line表,将金额进行同步,还得从上机表中删除。一开始想的时候总是缺点东西,之后看了师哥师姐的博客,加上自己的理解,也算了明白了其中的一些重点。
全部下机:
Private Sub AllOffLine_Click()
'连接上机表
txtSQL = "select*from online_info"
Set mrc_On = ExecuteSQL(txtSQL, MsgText)
txtSQL = "select*from line_info "
Set mrc_Line = ExecuteSQL(txtSQL, MsgText)
'如果有数据,移动到第一条
If mrc_On.EOF And mrc_On.Bof Then
'添加初始的表头
myFlexgrid.Clear
With myFlexgrid
.Rows = 1
.CellAlignment = 4
.ColAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "上机日期"
.TextMatrix(0, 3) = "上机时间"
.TextMatrix(0, 4) = "机房号"
End With
Exit Sub
End If
'进行循环
While Not mrc_On.EOF
mrc_Line.AddNew
mrc_Line.Fields(1) = Trim(mrc_On.Fields(0)) '卡号
CardNO = mrc_On.Fields(0)
CardType = mrc_On.Fields(1)
mrc_Line.Fields(2) = Trim(mrc_On.Fields(2)) '学号
StuId = Trim(mrc_On.Fields(2))
mrc_Line.Fields(3) = Trim(mrc_On.Fields(3)) '姓名
mrc_Line.Fields(4) = Trim(mrc_On.Fields(4)) '院系
mrc_Line.Fields(5) = Trim(mrc_On.Fields(5)) '性别
mrc_Line.Fields(6) = Trim(mrc_On.Fields(6)) '上机日期
mrc_Line.Fields(7) = Trim(mrc_On.Fields(7)) '上机时间
'获得上机时间
txtOnDate = Trim(mrc_On.Fields(6))
txtOnTime = Trim(mrc_On.Fields(7))
'获得下机日期 下机时间
txtOffDate = Format(Date, "yyyy-MM-dd")
txtOffTime = Format(Now, "hh:mm:ss")
mrc_Line.Fields(8) = Trim(txtOffDate) '下机日期
mrc_Line.Fields(9) = Trim(txtOffTime) '下机时间
'计算上机时间(分钟)
If Trim(txtOffDate) = Trim(txtOnDate) Then
WorkMin = DateDiff("n", txtOnTime, txtOffTime) '分钟
Work = WorkMin
Else
Work = Work + DateDiff("n", txtOnDate, txtOffDate) - 1440
WorkDay = DateDiff("n", "00:00:00", txtOffTime)
Work = Work + WorkDay
WorkDay = DateDiff("n", txtOnTime, "23:59:00")
Work = Work + WorkDay + 1
End If
mrc_Line.Fields(10) = Trim(Work) '消费时间
'得到最低消费金额
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(CardType) = "临时用户" 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
mrc_Line.Fields(11) = OnHour * Cost '消费金额
'得到余额
txtSQL = "select *from student_info where cardno='" & CardNO & "'"
Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)
If mrc_Stu.EOF Then
MsgBox "该号没有上机", 0 + 48, "警告"
mrc_Stu.Close
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
Else
Cash = mrc_Stu.Fields(7) '原本余额
mrc_Stu.Close
End If
mrc_Line.Fields(12) = Cash - OnHour * Cost '剩余金额
mrc_Line.Fields(13) = "正常下机"
mrc_Line.Fields(14) = GetThisComputerName '电脑名
mrc_Line.Fields(15) = Trim(UserName) '操作员
mrc_Line.Fields(16) = "未结账" '状态
'修改学生表中的不使用
txtSQL = "select *from student_info where cardno='" & CardNO & "'"
Set mrc_Stu = ExecuteSQL(txtSQL, MsgText)
mrc_Stu.Fields(7) = Cash - OnHour * Cost
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(StuId) '学号
mrc_CCard.Fields(1) = Trim(txtCardNo) ' 卡号
mrc_CCard.Fields(2) = Cash - OnHour * Cost '消费金额
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
mrc_Line.Update
mrc_On.Delete
mrc_On.MoveNext
Wend
mrc_Line.Close
mrc_On.Close
'添加初始的表头
myFlexgrid.Clear
With myFlexgrid
.Rows = 1
.CellAlignment = 4
.ColAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "上机日期"
.TextMatrix(0, 3) = "上机时间"
.TextMatrix(0, 4) = "机房号"
End With
End Sub
当然我们不可能每次都让全部人下机,总有人还想继续学习,这时候我们就要有能将部分选中的人进行下机的功能
部分下机
Private Sub ChooseOffLine_Click()
myFlexgrid.SelectionMode = flexSelectionByRow '单击的时候选择的是整行
myFlexgrid.FocusRect = flexFocusNone '在当前单元的周围华一个焦点框
myFlexgrid.HighLight = flexHighlightWithFocus '该值决定了所选的单元是否突出显示
With myFlexgrid
If .RowSel = 0 Then
MsgBox "请选择数据!", 0 + 48, "提示"
Exit Sub
Else
If .Rows > 0 Then
txtSQL = "select*from online_info where cardno='" & Trim(myFlexgrid.TextMatrix(.RowSel, 0)) & "'"
Set mrc_User = ExecuteSQL(txtSQL, MsgText)
'判断用户是否正在登陆
If Trim(myFlexgrid.TextMatrix(.RowSel, 0) = UserName) Then
MsgBox "该用户正在登陆,不能删除!", 0 + 48, "警告"
mrc_User.Close
Exit Sub
Else
a = MsgBox("确定要对该用户进行下机吗?", vbYesNo, "提示")
If a = 6 Then '如果选择的是确定
.RemoveItem .RowSel
Call OFF
Else
Exit Sub
End If
End If
End If
End If
End With
'显示全部
Call SumAll
End Sub