结账这部分算是机房收费系统的一个难点,之所以它难,是因为这个窗体不光涉及到代码,而且还涉及到算数的问题,还和报表有关,所以它是个难点,但是只要把思路弄清楚了,再难的东西也不怕啦!
思维导图:
思路有没有清楚一点呢?
代码片段
先让操作员的名字和label框实现同步:
txtsql = "select * from user_info where userid= '" & Trim(cboOpUserID.Text) & "'"
Set mrc_u = ExecuteSQL(txtsql, msgtext)
If mrc_u.EOF Then
mrc_u.Close
Exit Sub
Else
lblusername.Caption = mrc_u.fields(3)
mrc_u.Close
End If
以一个为例:
txtsql = "select * from student_info where ischeck= '未结账'and userid= '" & Trim(cboOpUserID.Text) & "'"
Set mrc = ExecuteSQL(txtsql, msgtext)
Do While mrc.EOF = False
With MSHFlexGrid1
.CellAlignment = 4
.Rows = 2
.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
End With
Loop
mrc.Close
重头戏来了,让我们看一下结账部分:
首先我们要先弄清楚以下几个关系:
1、售卡张数=student_info表中的总数
2、退卡张数=cancelcard_info表中的总数
3、总售卡张数=售卡张数-退卡张数
4、临时用户金额=当天未结账的临时用户金额
5、应收金额=充值金额-退卡金额(充值金额=充值金额+注册金额)
下面我们来看一下具体的代码应该怎么写:
Private Sub cmdAccount_Click()
'充值部分
Dim txtsql1 As String
Dim msgtext1 As String
Dim mrc1 As ADODB.Recordset '连接recharge_info表
'退卡部分
Dim txtsql2 As String
Dim msgtext2 As String
Dim mrc2 As ADODB.Recordset '连接cancel_info表
'临时用户部分
Dim txtsql3 As String
Dim msgtext3 As String
Dim mrc3 As ADODB.Recordset '连接student_info表
Dim mrc4 As ADODB.Recordset '连接为结账的学生表
Dim mrc_line As ADODB.Recordset '连接line表
Dim mrc_c As ADODB.Recordset '连接checkday表
'退卡金额
txtsql2 = "select sum(cancelcash) from cancelcard_info where userid= '" & Trim(cboOpUserID) & "' and status='" & "未结账" & "'and date= '" & Date & " '"
Set mrc2 = ExecuteSQL(txtsql2, msgtext2)
If IsNull(mrc2.fields(0)) Then
txtBackCardMoney.Text = "0"
Else
txtBackCardMoney.Text = mrc2.fields(0)
End If
'充值金额
txtsql1 = "select sum(addmoney) from recharge_info where userid= '" & Trim(cboOpUserID) & "'and status='" & "未结账" & "'and date='" & Date & " '"
Set mrc1 = ExecuteSQL(txtsql1, msgtext1)
If IsNull(mrc1.fields(0)) Then
txtRecharge.Text = "0"
Else
txtRecharge.Text = mrc1.fields(0)
End If
'临时金额
txtsql3 = "select sum(cash) from student_info where userid= '" & Trim(cboOpUserID) & "'and type='" & "临时用户" & "'and ischeck='" & "未结账" & "'and date='" & Date & "'"
Set mrc3 = ExecuteSQL(txtsql3, msgtext3)
If IsNull(mrc3.fields(0)) Then
txtTmpRecharge.Text = "0"
Else
txtTmpRecharge.Text = mrc3.fields(0)
End If
'应收金额
'应收金额=充值金额-退卡金额,也就是挣得的钱,充值金额包括充值金额+注册金额
txtCollectMoney.Text = Val(txtRecharge.Text) + Val(txtTmpRecharge.Text) - Val(txtBackCardMoney.Text)
千万要记住一定要把记录同步到日结账表和周结账表中
'将记录同步到checkday_info表中
Dim mrcStudent As ADODB.Recordset
Dim mrcline As ADODB.Recordset
Dim mrccheckday As ADODB.Recordset
Dim mrcrecharge As ADODB.Recordset
Dim mrccancel As ADODB.Recordset
Dim txtsql As String
Dim msgtext As String
Dim lastRecharge As Integer
Dim LastExitcash As Integer
Dim RemainCash As Integer
Dim RechargeCash As Integer
Dim ConsumeCash As Integer
Dim CancelCash As Integer
'计算上期充值卡余额(上期就是昨天的钱=充值卡的钱-退卡的钱)
'计算昨天充值卡里面的余额
txtsql = "select sum(addmoney) from recharge_info where date= '" & Date - 1 & "'"
Set mrcrecharge = ExecuteSQL(txtsql, msgtext)
'判断充值卡里面的钱是否为空
If IsNull(mrcrecharge.fields(0)) = True Then
lastRecharge = "0"
Else
'引用sum函数,默认的addmoney列为field(0)
lastRecharge = mrcrecharge.fields(0)
'计算昨天退卡表里面的钱
txtsql = "select sum(cancelcash) from cancelcard_info where date= '" & Date - 1 & "'"
Set mrccancel = ExecuteSQL(txtsql, msgtext)
If IsNull(mrccancel.fields(0)) = True Then
LastExitcash = "0"
Else
RemainCash = lastRecharge - LastExitcash
End If
End If
'计算当日充值金额
txtsql = "select sum(addmoney) from recharge_info where date='" & Date & "'"
Set mrcrecharge = ExecuteSQL(txtsql, msgtext)
If IsNull(mrcrecharge.fields(0)) Then
RechargeCash = "0"
Else
RechargeCash = mrcrecharge.fields(0)
End If
'计算当日消费金额
txtsql = "select sum(consume) from line_info where offdate= '" & Date & "'"
Set mrcline = ExecuteSQL(txtsql, msgtext)
If IsNull(mrcline.fields(0)) Then
ConsumeCash = "0"
Else
ConsumeCash = mrcline.fields(0)
End If
'计算当日退还金额
txtsql = "select sum(cancelcash) from cancelcard_info where date= '" & Date & "'"
Set mrccancel = ExecuteSQL(txtsql, msgtext)
If IsNull(mrccancel.fields(0)) Then
CancelCash = "0"
Else
CancelCash = mrccancel.fields(0)
End If
'清楚当天记录
txtsql = "delete checkday_info where date= '" & Date & "'"
Set mrccheckday = ExecuteSQL(txtsql, msgtext)
'将数据同步到checkday_info 表中
txtsql = "select * from checkday_info "
Set mrccheckday = ExecuteSQL(txtsql, msgtext)
mrccheckday.AddNew
mrccheckday!RemainCash = Val(RemainCash)
mrccheckday!RechargeCash = Val(RechargeCash)
mrccheckday!ConsumeCash = Val(ConsumeCash)
mrccheckday!CancelCash = Val(CancelCash)
mrccheckday!allcash = Val(RechargeCash) - Val(CancelCash)
mrccheckday!Date = Date
mrccheckday.Update
mrccheckday.Close
MsgBox "结账成功!", 0 + 46, "提示"
txtsql = "select * from student_info where date = '" & Date & "'and ischeck= '" & "未结账" & "'"
Set mrcStudent = ExecuteSQL(txtsql, msgtext)
Do While Not mrcStudent.EOF
mrcStudent!ischeck = "结账"
mrcStudent.Update
mrcStudent.MoveNext
Loop
mrcStudent.Close
txtsql = "select * from recharge_info where date= '" & Date & " 'and status= '" & "未结账" & "'"
Set mrcrecharge = ExecuteSQL(txtsql, msgtext)
Do While Not mrcrecharge.EOF
mrcrecharge!status = "结账"
mrcrecharge.Update
mrcrecharge.MoveNext
Loop
mrcrecharge.Close
txtsql = "select * from cancelcard_info where date = '" & Date & "'and status='" & "未结账" & "'"
Set mrccancel = ExecuteSQL(txtsql, msgtext)
Do While Not mrccancel.EOF
mrccancel!status = "结账"
mrccancel.Update
mrccancel.MoveNext
Loop
mrccancel.Close
'将数据同步到checkweek表中
Dim mrccheckweek As ADODB.Recordset
Dim mrc23 As ADODB.Recordset
'删除原先的记录
txtsql = "delete checkweek_info"
Set mrccheckweek = ExecuteSQL(txtsql, msgtext)
txtsql = "insert into checkweek_info select * from checkday_info"
Set mrc23 = ExecuteSQL(txtsql, msgtext)
End Sub