下机功能是整个机房收费系统中非常重要的一个环节,这个环节关乎到使用我们软件的商家会不会赔钱,所以,我们在做这个窗体的时候一定要把各个细节的问题都要考虑到。
首先“下机”的主要功能是:
1:使正在上机的用户停止上机
2:计算用户上机所花费的时间和金额
3:然后将卡中的余额减去花费的金钱是当前用户所剩余的钱数。
4:将这个信息全部链接到数据库的表中,有的需要添加,有的需要更新,有的需要删除。
我在这个窗体中一共用到了5个数据库表,他们的名字和功能如下
(可能有些疏忽的地方多多指点):
数据库表 |
实现的功能 |
1: student_info |
----用来判断输入的用户是否正确,判断用户是固定用户还是临时用户 ---更新用户剩余的金额
|
2:onLine_info
|
---首先需要判断用户是否处于上机 ---下机的时候需要将该用户用该表中删除 |
3: basicdata_info
|
---根据该表中的数据进行结算金额 |
4: Line_info
|
---记录用户上机记录 |
5: checkday_info
|
---根据用户花费的金额,在日账单中显示出来 |
下面是我的流程图:
Private Sub downComputer_Click()
Dim mrc As ADODB.Recordset '用来存放online表中的数据
Dim mrc1 As ADODB.Recordset '用来存放basicdata 表中的数据
Dim mrc2 As ADODB.Recordset ' 用来存放 student 表中的数据
Dim mrb As ADODB.Recordset '用来存放line表中的数据
Dim mrcc As ADODB.Recordset '用来连接日账单
Dim txtsqlc As String
Dim msgtextc As String
Dim cc As Integer
'定义一个时间变量
Dim nowtti
nowtti = Date
Dim txtsqb As String
Dim msgtxb As String
Dim msgtxt As String
Dim txtsql As String
Dim txtsqla As String
Dim costday As String
Dim costtime As String
Dim alltime As Integer
Dim cashmoney As Integer
Dim rate As String
Dim tmprate As String
Dim unittime As String
Dim preparetime As String
Dim useMoney As Integer
'判断输入输入卡号
If Trim(cardNumber.Text = "") Then
MsgBox "请输入卡号", vbOKOnly + vbExclamation, "警告"
Else
'判断输入的卡号是否在注册表中
txtsql = "select * from student_info where cardno='" & cardNumber.Text & "'"
Set mrc2 = ExecuteSQL(txtsql, msgtxt)
If mrc2.EOF Then
MsgBox "您输入的卡号还未注册,请先注册! ", vbOKOnly + vbExclamation
cardNumber.SetFocus
Else
'判断该用户是否正在上机,如果正处于上机状态,那么可以执行“下机操作”,否则不可以
txtsql = "select * from online_info where cardno='" & cardNumber & "'"
Set mrc = ExecuteSQL(txtsql, msgtxt)
If mrc.EOF Then
MsgBox "该用户没有上机,请重新选择", vbOKOnly + vbExclamation
Else
MsgBox cashmoney
downTi(6).Caption = Time
downDay(5).Caption = Date
costday = DateDiff("n", mrc.Fields(6), Date) '花费的时间
costtime = DateDiff("n", mrc.Fields(7), Time) '花费的时间
alltime = Val(costday) + Val(costtime)
useTime(7).Caption = Str(alltime)
cashmoney = mrc2.Fields(7) '从student表中调用它剩余的金额
MsgBox cashmoney '提示框弹出卡中剩余的金额
mrc.Delete
'判断花费的金钱,这个时候需要调用basicdatab表中的信息
txtsql = "select * from basicdata_info"
Set mrc1 = ExecuteSQL(txtsql, msgtxt)
rate = mrc1.Fields(0) '普通用户的收费标准
tmprate = mrc1.Fields(1) '会员的收费标准
unittime = mrc1.Fields(2) '每60分钟收费一次
preparetime = mrc1.Fields(4) '上机准备时间
txtsqb = "select * from line_info where cardno='" & Trim(cardNumber.Text) & "'"
Set mrb = ExecuteSQL(txtsqb, msgtxb)
If mrb.EOF Then
MsgBox "该用户还没有上机"
Else
'下机日期
mrb.Fields(8) = downDay(5).Caption
mrb.Fields(9) = downTi(6).Caption
mrb.Fields(10) = Str(alltime)
mrb.Fields(13) = "正常下机"
mrb.Update
End If
'判断时间是否多余准备上机时间,如果低于准备时间,具体看情况
'收费,低于准备时间 固定用户半价收费,临时用户全额收费
If alltime < preparetime Then
useMoney = 0
useM(8).Caption = Str(useMoney)
Else
If mrc2.Fields(14) = "固定用户" Then
' 如果用户上机时间小于标准时间60分钟
If alltime < unittime Then
useMoney = Val(tmprate / 2)
useM(8).Caption = Str(useMoney)
mrb.Fields(11) = useM(8).Caption
mrb.Fields(10) = Trim(alltime)
lastMoney(9).Caption = Trim(cashmoney - useMoney)
mrb.Fields(12) = lastMoney(9).Caption
mrb.Update
Else
useMoney = (alltime Mod Val(unittime)) * Val(tmprate)
useM(8).Caption = Str(useMoney)
mrb.Fields(11) = useM(8).Caption
mrb.Fields(10) = Trim(alltime)
lastMoney(9).Caption = Trim(Val(cashmoney) - Val(useMoney))
mrb.Fields(12) = lastMoney(9).Caption
mrb.Update
End If
Else
'如果零时用户小于标准时间60分钟
If alltime < unittime Then
useMoney = Val(rate)
useM(8).Caption = Str(useMoney)
mrb.Fields(11) = useM(8).Caption
mrb.Fields(10) = Trim(alltime)
lastMoney(9).Caption = Str(cashmoney - useMoney)
mrb.Fields(12) = Trim(lastMoney(9).Caption)
mrb.Update
Else
useMoney = (alltime Mod Val(unittime)) * Val(rate)
useM(8).Caption = Str(useMoney)
mrb.Fields(11) = useM(8).Caption
lastMoney(9).Caption = Str(cashmoney - useMoney)
mrb.Fields(12) = Trim(lastMoney(9).Caption)
mrb.Update
End If
End If
'用来更新student 表中学生的余额。
mrc2.Fields(7) = Trim(lastMoney(9).Caption)
mrc2.Update
txtsqlc = "select * from checkday_info where date='" & Trim(nowtti) & "'"
Set mrcc = ExecuteSQL(txtsqlc, msgtextc)
If mrcc.EOF Then
mrcc.AddNew
mrcc.Fields(2) = Trim(useMoney)
mrcc.Update
Else
cc = mrcc.Fields(2)
mrcc.Fields(2) = Str(cc + useMoney)
mrcc.Update
End If
End If
End If
End If
End If
End Sub