您的位置:首页 > 数据库

机房收费系统之六(上下机窗体)

2017-06-10 17:39 393 查看
上机
1.刚开始进行上下机窗体的时候,想的比较简单,以至于后来遗漏很多问题。所以流程图改了好几遍才算比较完善。

上机模块主要功能就是输入卡号开始计时消费,类似于登陆窗体模块。需要注意的有两点:一是要考虑输入的卡号是否正在上机(卡号不能重复上机),二是考虑余额是否充足(不充足提醒充值)。

2.流程图:



通过多次改进流程图,基本上可以全面了解了上机模块的整个流程。然后再写代码就很顺畅了。

下机
1.下机模块和上机差不多。我觉得最复杂的地方就是计算消费。需要计算消费时间,通过消费时间计算出消费金额。这里需要通过结合基本数据表来判断和计算。我在这里思考了好久。

2.流程图:



3.重要的代码学习:

下机模块代码:

Private Sub cmdxiaji_Click()
Dim txtSQL As String
Dim txtSQL1 As String
Dim txtSQL2 As String
Dim txtSQL3 As String
Dim txtSQL4 As String
Dim msgText As String
Dim mrc As ADODB.Recordset '连接student表
Dim mrc1 As ADODB.Recordset '连接Online表
Dim mrc2 As ADODB.Recordset '连接Line表
Dim mrc3 As ADODB.Recordset '连接Basic表
Dim mrc4 As ADODB.Recordset '连接Online,确认人数
Dim intlinetime As Integer '用于存储实际在线时间
Dim intconsume As Single
Dim curconsume As Single '用于存储真正花费钱的时间
Dim curbalance As Single '用于存储用户的余额
Dim fixedunit As Single '用于存储单位金额
Dim temunit As Single '用于存储单位金额
Dim a As Integer
Dim Remaincash As Single

'模块一:判断卡号是否为空,判断卡号是否为数字
If Trim(txtcardno.Text = "") Then
MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "提示"
Call Clear_Info
txtcardno.SetFocus
Exit Sub
Else
If Not IsNumeric(Trim(txtcardno.Text)) Then
MsgBox "卡号必须输入数字!", vbOKOnly + vbExclamation, "提示"
Call Clear_Info
'                txtcardno.Text = ""
txtcardno.SetFocus
Exit Sub
End If
End If

'模块二:判断卡号是否注册,是否已经退卡。这里先查student_Info
txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, msgText)

If mrc.BOF And mrc.EOF Then
MsgBox "该卡号未注册,请先注册信息!", vbOKOnly + vbExclamation, "提示"
Call Clear_Info
txtcardno.SetFocus
Exit Sub
Else
If Trim(mrc.Fields(10)) = "不使用" Then
MsgBox "该卡已经退卡", vbOKCancel + vbInformation, "提示"
Call Clear_Info
txtcardno.SetFocus
Exit Sub
End If
End If
' mrc.Close
':判断卡号是否在上机,没有上机不能退卡.连接Online表
txtSQL1 = "select * from OnLine_Info where cardno= '" & Trim(txtcardno.Text) & "'"
Set mrc1 = ExecuteSQL(txtSQL1, msgText)

If mrc1.EOF = True Then
MsgBox "该卡没有上机,不能进行下机处理", vbOKOnly + vbExclamation, "警告"
Call Clear_Info
txtcardno.SetFocus
Exit Sub
End If

'在线时长计算
intlinetime = (Date - DateValue(mrc1!ondate)) * 1440 + (Hour(Time) - Hour(TimeValue(mrc1!OnTime))) * 60 + (Minute(Time) - Minute(TimeValue(mrc1!OnTime))) '时间单位为分钟

'txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'" ' 多余
'Set mrc = ExecuteSQL(txtSQL, Msgtext)

'获得基本表的数据
txtSQL3 = "select * from Basicdata_Info"
Set mrc3 = ExecuteSQL(txtSQL3, msgText) 'mrc3连接basicdata表
mrc3.MoveLast

'单位时间的费用 (把固定用户,临时用户单位时间的费用分别赋值给费用)

fixedunit = Val(mrc3.Fields(0)) '把固定用户的金额赋值给变量

temunit = Val(mrc3.Fields(1)) '把临时用户的金额赋值给变量

'判断在线时间是否小于准备时间,若小于则 消费金额=0

If intlinetime <= Val(Trim(mrc3.Fields(4))) Then
txtxftime.Text = "0"
Else
'判断在线时间是否小于最低消费时间,若小于则为0
If intlinetime < Val(Trim(mrc3.Fields(3))) Then
txtxftime.Text = "0"
End If
End If

'在线时间大于单位时间,就按有几个单位时间算,分为固定用户和临时用户
If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "固定用户" Then
a = Int(intlinetime / Val(Trim(mrc3!unitTime)))
If a = intlinetime / Trim(mrc3!unitTime) Then
curconsume = a
Else
curconsume = a + 1
End If
txtxfjine.Text = Val(curconsume) * Val(fixedunit)

If txtxfjine.Text = "" Then txtxfjine.Text = "0"
Else
If intlinetime >= Val(Trim(mrc3!leastTime)) And intlinetime And Trim(mrc.Fields(14)) = "临时用户" Then
a = Int(intlinetime / Val(Trim(mrc3!unitTime)))
If a = intlinetime / Trim(mrc3!unitTime) Then
curconsume = a
Else
curconsume = a + 1
End If

txtxfjine.Text = Val(curconsume) * Val(temunit)
End If
End If

'更新student表
txtSQL = "select * from student_Info where cardno='" & Trim(txtcardno.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, msgText)
Remaincash = mrc!cash - Val(txtxfjine.Text)

mrc.Fields(7) = Remaincash
mrc.Update
mrc.Close

'下机显示
txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtcardno.Text) & "'"
Set mrc1 = ExecuteSQL(txtSQL, msgText)

txtxjdate.Text = Format(Date, "yyyy-mm-dd")
txtxjtime.Text = Time
txttype = Trim(mrc1.Fields(1))
txtSID = Trim(mrc1.Fields(2))
txtname = Trim(mrc1.Fields(3))
txtxibie = Trim(mrc1.Fields(4))
txtsex = Trim(mrc1.Fields(5))
txtsjtime = Trim(mrc1.Fields(7))
txtsjdate = Trim(mrc1.Fields(6))
txtxftime.Text = intlinetime
txtcash.Text = Remaincash

'更新上机记录表line表

txtSQL2 = "select * from line_Info where cardno='" & Trim(txtcardno.Text) & "'"
Set mrc2 = ExecuteSQL(txtSQL2, msgText)

mrc2.Fields(8) = Trim(txtxjdate.Text)
mrc2.Fields(9) = Trim(txtxjtime.Text)
mrc2.Fields(10) = Trim(txtxftime.Text)
mrc2.Fields(11) = Trim(txtxfjine.Text)
mrc2.Fields(12) = Trim(txtcash.Text)
mrc2.Fields(13) = Trim("正常下机")
mrc2.Update
mrc2.Close

a = MsgBox("下机成功,欢迎下次再来", vbOKOnly + vbExclamation, "提示")

If a = vbOK Then Call Clear_Info

'删除online表的信息
mrc1.Delete
mrc1.Update
mrc1.Close

txtSQL4 = "select * from OnLine_Info"
Set mrc4 = ExecuteSQL(txtSQL4, msgText)

Label15.Caption = mrc4.RecordCount  '显示上机人数

mrc4.Close

End Sub


      总结:遇到问题,多思考,多请教“巨人”。感谢您的阅读!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息