机房收费系统在我看来就是对知识点的重复使用与学习加深的过程。
在敲操作员权限里面的充值和退卡的时候,我发现这两个窗体实现的功能很相似,在逻辑上相差无几。
当然,不管在你敲哪个窗体,做什么软件,你的逻辑,你的思路是最重要的。只有你的逻辑清楚了,你的代码才会清楚。这个让我联想到了概念设计到逻辑设计的转换。
在这里主要理一下退卡的思路和过程。
在你着手敲退卡的时候,首先要理清逻辑,多点几遍源程序,带着问题去点,善于发现问题。理清之后,画出一个流程图。
逻辑理清,流程图画好,接下来代码就是小case。
Dim txtsql As String
Dim msgText As String
Dim mrc As ADODB.Recordset
Dim mrc1 As ADODB.Recordset
Dim mrc2 As ADODB.Recordset
'1、判断是否输入卡号'
If txtCardNo.Text = "" Then
MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo.SetFocus
Else
txtsql = "select*from student_info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc = ExecuteSQL(txtsql, msgText)
If mrc.EOF Then '判断卡号是否存在'
MsgBox "卡号不存在或已不再使用!", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo.SetFocus
txtCardNo.Text = "" '使卡号为空'
Else
'判断卡是否在使用状态'
txtsql = "select * from student_info where cardNo = '" & Trim(txtCardNo.Text) & "' and status = '" & "使用" & "'"
Set mrc = ExecuteSQL(txtsql, msgText)
If mrc.EOF Then '光标可以移动到最后一行所以数据库中没有相应的卡号'
MsgBox "该卡未使用,请重新输入卡号。", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
Else
'判断是否在上机'
txtsql = "select * from online_info where cardNo = '" & Trim(txtCardNo.Text) & "' "
Set mrc1 = ExecuteSQL(txtsql, msgText)
If mrc1.EOF = False Then ' 光标可以移动到最后一行所以数据库中没有相应的卡号'
MsgBox "该卡在上机,请下机后再退卡。", vbOKOnly + vbExclamation, "苏轼提醒您"
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
Else
txtsql = "select * from cancelcard_info where cardNo = '" & Trim(txtCardNo.Text) & "' and status = '" & "使用" & "'"
Set mrc2 = ExecuteSQL(txtsql, msgText)
mrc2.AddNew
mrc2.Fields(0) = Trim(mrc.Fields(1))
mrc2.Fields(1) = Trim(mrc.Fields(0))
mrc2.Fields(2) = Val(mrc.Fields(7))
mrc2.Fields(3) = Date
mrc2.Fields(4) = Time
mrc2.Fields(5) = Trim(UserName)
mrc2.Fields(6) = "未结账"
mrc2.Update
'显示信息'
txtNotes.Text = "退卡卡号:" & txtCardNo.Text & vbCrLf & vbCrLf & _
"应退款金额:" & Trim(mrc.Fields(7)) & vbCrLf & vbCrLf & _
"退卡日期:" & Date & vbCrLf & vbCrLf & _
"退卡时间:" & Time & vbCrLf & vbCrLf & _
"办理退卡老师:" & mrc.Fields(9)
End If
End If
End If
End If
在更新student表的时候最简单但是最麻烦的办法就是给数据库中那一行数据重新赋值,但是有好多值没有发生变化,所以我想的是直接更新对应数值,但是出现了一个问题。这段代码貌似有毒,每次运行之后程序没有响应,但是数据库中的值是改了的。
'更新student表'
txtsql = "select *from student_info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc = ExecuteSQL(txtsql, msgText)
Do While Not mrc.EOF
mrc!cash = 0
mrc!Status = "未使用"
mrc.Update
Loop
有没有大神知道为什么,或者有其他的办法?可以告诉我一声。