【机房收费系统】——下机
【前言】
下机比上机用到的表要多一些,需要判断的条件也多了几个,还有计算消费时间时可能会觉得难一点,但是不要怕,只要理清思路,代码实现什么的肯定是“车到山前必有路,船到桥头自然直”啦!接下来小编将以 [逻辑——流程图——代码——重难点] 的顺序为大家揭秘下机的真实面目!
【正文】
一、逻辑
- 点击下机按钮:
- 判断student_Info表中此卡号是否存在,若不存在则提示“此卡号不存在!”,若存在则:
- 判断是否正在上机: 从OnLine_Info表中搜索有无此卡号记录:
- 若无记录(没在上机):弹框提示“此卡号未上机!”
- 若有记录 (正在上机): 弹框提示 "是否使该卡号下机":
- 若点击“是”:判断上机时长是否小于最小限制时长,若小于则消费金额为0,若大于则判断是否是固定用户,若是:则消费金额=固定用户价格×消费时间,否则消费金额=临时用户价格×消费时间
- 将下机信息加载到文本框中,将下机信息更新到Line_Info表中,将余额字段更新到student_Info表中,删除Online_Info表中的记录并弹框提示“该卡号已成功下机!”;
- 若点击“否”则关闭弹框;
二、流程图
三、代码
Private Sub CmdOffline_Click()
txtSQL = "select * from Online_Info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, MsgText)
txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc2 = ExecuteSQL(txtSQL, MsgText)
If mrc2.EOF Then
MsgBox "该卡号不存在,请重新输入卡号!"
Else
If mrc.EOF Then
MsgBox "该卡号未上机!"
Else
'利用MsgBox的返回值做判断
a = MsgBox("是否使该卡号下机", vbYesNo)
If a = vbYes Then
txtSQL = "select * from basicdata_Info "
Set mrc1 = ExecuteSQL(txtSQL, MsgText)
If Trim(txtCash.Text) > Trim(mrc1.Fields(5)) Then
'将数据加载到文本框中
txtCardNo.Text = Trim(mrc2.Fields(0))
txtID.Text = Trim(mrc2.Fields(1))
txtDepartment.Text = Trim(mrc2.Fields(4))
txtType.Text = Trim(mrc2.Fields(14))
txtName.Text = Trim(mrc2.Fields(2))
txtSex.Text = Trim(mrc2.Fields(3))
txtCash.Text = Trim(mrc2.Fields(7))
txtOnlinedate.Text = Trim(mrc.Fields(6))
txtOnlinetime.Text = Trim(mrc.Fields(7))
txtOfflinedate.Text = Date
txtOfflinetime.Text = Time
datediff1 = mrc.Fields(6) & " " & mrc.Fields(7)
txtdependtime.Text = DateDiff("n", datediff1, Now())
If txtdependtime < mrc1.Fields(3) Then
txtdependcash.Text = 0
Else
'判断用户是固定用户还是临时用户
If Trim(mrc2.Fields(14)) = "固定用户" Then
txtdependcash.Text = Trim(txtdependtime.Text) * Trim(mrc1.Fields(0))
Else
txtdependcash.Text = Trim(txtdependtime.Text) * Trim(mrc1.Fields(1))
End If
End If
mrc2.Fields(7) = Trim(txtCash.Text) - Trim(txtdependcash.Text)
txtCash = Trim(mrc2.Fields(7))
txtSQL = "select * from Line_Info "
Set mrc3 = ExecuteSQL(txtSQL, MsgText)
'将数据更新到Line_Info表中
mrc3.AddNew
mrc3.Fields(1) = Trim(txtCardNo.Text)
mrc3.Fields(2) = Trim(txtID.Text)
mrc3.Fields(3) = Trim(txtName.Text)
mrc3.Fields(4) = Trim(txtDepartment.Text)
mrc3.Fields(5) = Trim(txtSex.Text)
mrc3.Fields(6) = Trim(txtOnlinedate.Text)
mrc3.Fields(7) = Trim(txtOnlinetime.Text)
mrc3.Fields(8) = Trim(txtOfflinedate.Text)
mrc3.Fields(9) = Trim(txtOfflinetime.Text)
mrc3.Fields(10) = Trim(txtdependtime.Text)
mrc3.Fields(11) = Trim(txtdependcash.Text)
mrc3.Fields(12) = True
mrc3.Fields(13) = Trim(VBA.Environ("computername"))
mrc3.Fields(15) = Trim(txtCash.Text)
mrc3.Update
mrc3.Close
mrc.Delete
MsgBox "此卡号已成功下机!"
Else
MsgBox "余额不足,请充值!"
End If
Else
End If
End If
End If
End Sub
四、重难点
本来以为这块也很简单,但还是在进行计算消费时间时卡住了!倒是想到用DateDiff函数了,但却没能弄明白DateDiff函数在VB中的用法!下面介绍一下DateDiff函数的使用:
- 1.表达式:DateDiff(timeinterval,date1,date2 [, firstdayofweek [, firstweekofyear]])
- 2.参数意义:
- ①DateDiff表示date1和date2之间间隔的时间
- ②timeinterval 表示相隔时间的类型,如:yyyy 年,q 季,m 月,y 一年的日数,d 日,w 一周的日数,ww 周,h 时,n 分钟,s 秒
- 3.实例:
- datediff1 = mrc.Fields(6) & " " & mrc.Fields(7)
- txtdependtime.Text = DateDiff("n", datediff1, Now())
- ①在这里 mrc.Fields(6) 和 mrc.Fields(7) 分别是 Online_Info 表中的 OnlineDate 和 OnlineTime。
- ②"n":表示将结果显示为分钟数
- ③Now():表示系统当前日期和时间
【结尾】
不要轻易被一点点小困难所吓倒,更不要轻易的否定自己!你的潜力永远比你想象的要大的多!坚信自己一定能行!在不断的积累中感受“车到山前必有路,船到桥头自然直”的奇妙!