第一遍机房收费系统很顺利就完成了,但是并没有完善,借着建一个样板的机会,写一个相对完善的机房收费系统。首先,就是完善结账功能,很多同学都没有做这个,因为前模板就没有完善这个功能,所以我就写这篇文章,给大家消除一下恐惧感。
首先,我们要了解它的控件窗体里面都有些什么。
从表中我们不难看出:左边的是一部分(主要是用到student表),右边的是另一部分(主要是用到recharge表),我分类的依据是数据库。
第二步:细化功能:
这里可以根据SStab控件的属性里面的每一个选项卡来进行细分。这里我来做最难的一个,当然,你们要是做的话,就按顺序做,因为前面的购卡、充值、退卡、临时用户都很简单。我现在就仅仅讲一下汇总选项卡。
从这里可以看到,很散,我用另一张表来记录它。
是不是看上面的表就可以很清楚的看到他们的数据关系:
不管是张数还是金额,都是很简单的,因为它们都是在select语句中限定条件外加循环做成的。
接下来就是代码实现了:
我觉得就是两部分:
第一:
Select Case SSTab1.Tab
Case 0
With myFlexGrid
.Rows = 1
.CellAlignment = 4
.TextMatrix(0, 0) = "学号"
.TextMatrix(0, 1) = "卡号"
.TextMatrix(0, 2) = "日期"
.TextMatrix(0, 3) = "时间"
txtsql = "select * from student_info where userid='" & CmbUserId & "'" '从student表中查询出购卡的记录
Set mrc = ExecuteSQL(txtsql, msgtext)
If (mrc.EOF Or mrc.BOF) = False Then
While (mrc.EOF = False)
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(1))
.TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(12))
.TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(13))
mrc.MoveNext
Wend
End If
mrc.Close
End With
这是购卡的一个实现,其他的跟这个很类似。
第二就是:结账
Private Sub CmdCheckout_Click()
Dim txtsql As String
Dim msgtext As String
Dim mrc As ADODB.Recordset
Dim AddCheckout_I As Integer
Dim AddCheckOut_TmpRate As Single
Dim AddCheckOut_cancelcash As Single
txtsql = "select * from student_info where userid='" & CmbUserId & "'and status='使用'" '查询student表中的信息售卡情况
Set mrc = ExecuteSQL(txtsql, msgtext)
AddCheckout_I = 0
AddCheckOut_TmpRate = 0
While (mrc.EOF = False)
AddCheckout_I = AddCheckout_I + 1
AddCheckOut_TmpRate = AddCheckOut_TmpRate = mrc.Fields(7)
mrc.Fields(11) = Trim("结账")
mrc.MoveNext
Wend
txtSaleNum = AddCheckout_I '这里算出卖出的钱数
mrc.Close
txtsql = "select * from student_info where userid='" & CmbUserId & "'and status='不使用'" '查询student表中的信息退卡情况
Set mrc = ExecuteSQL(txtsql, msgtext)
AddCheckout_I = 0
AddCheckOut_cancelcash = 0
While (mrc.EOF = False)
AddCheckout_I = AddCheckout_I + 1
AddCheckOut_cancelcash = AddCheckOut_cancelcash = mrc.Fields(7) '这里是退卡的钱数
mrc.Fields(11) = Trim("结账")
mrc.MoveNext
Wend
TxtCancelNum = AddCheckout_I
TxtCancelCash = AddCheckOut_cancelcash
TxtAllCash = AddCheckOut_TmpRate - AddCheckOut_cancelcash '这里算出的总的钱数
mrc.Close
txtsql = "select * from student_info where userid='" & CmbUserId & "'and type='临时用户'and status='使用'" '查询student表中的信息临时用户的金额情况
Set mrc = ExecuteSQL(txtsql, msgtext)
AddCheckOut_TmpRate = 0
While (mrc.EOF = False)
AddCheckOut_TmpRate = AddCheckOut_TmpRate + mrc.Fields(7)
mrc.Fields(11) = Trim("结账")
mrc.MoveNext
Wend
TxtTmpCash = AddCheckOut_TmpRate
mrc.Close
txtsql = "select * from recharge_info where userid='" & CmbUserId & "'" '查询student表中的信息充值金额情况
Set mrc = ExecuteSQL(txtsql, msgtext)
AddCheckOut_TmpRate = 0
While (mrc.EOF = False)
AddCheckOut_TmpRate = AddCheckOut_TmpRate + mrc.Fields(3)
mrc.Fields(7) = Trim("结账")
mrc.MoveNext
Wend
txtRechargeCash = AddCheckOut_TmpRate
mrc.Close
MsgBox "结账成功"
End Sub
别看它的代码这么长,其实懂了里面的一个功能段其他的就很简单了,无非就是循环相加和注意它的数据类型就行了。
上升到思想的高度,首先我们要有全局观,知道我们大体是要实现什么样的功能,哪里的功能是一样的。其次就是细节决定成败,我没有自己把自己给弄乱了,是应为我干什么都用自己的笔记从新给他们分类,就简单了。最后,就是代码的思维了,我一直想这事一种什么思维,其实,很简单,当你把前两条做好了,然后参照代码就行了。