机房收费系统(五)——结账

【前言】

机房收费系统终于大收官了,感觉结账可以说是机房收费系统中相对需要好好理清思路的一部分了,其他的现在感觉起来还简单,在结账的过程中每个人都有自己的理解,但是选择自己认为正确的理解去实现功能就好了,要从软件是为谁设计的,要实现什么样的功能出发来思考软件各部分的设计。

下面就总结一下我在结账中的爬摸滚打,为前面的学习做一个完美的总结,为后面的学习留下宝贵的经验。


【内容分析】

1.给谁结账?

是给上机的学生结账还是给操作员结账?

我刚开始结账的时候一直没有搞清楚到底是要给谁结账,以致不知从何下手来实现代码,我们分析如果是给学生结账,就会分析学生卡内的余额,消费金额,但是学生卡内的余额在学生下机的时候,就可以自动地进行计算出来,不需要对其结账。另外我们应该想一下这个系统是给谁用的,是给学校的老师也就是我们说的管理者用的,我们看一下操作员的功能是:注册卡,充值卡,退卡,金额,学生上机查询等工作,操作员相当于员工,工作一天,最后需要把今天的收支情况报告给管理员,只有管理员有结账的权限,结的是操作员(包括管理员)的账,这样管理员就可以很清楚地查看每个操作员今天的收支,最后把所有操作员的收支形成日结账单,就是这一天整个机房的收入情况。所以一定要理清思路。


2.应该怎么结账?

下面就是我们结账的界面。

我们先要选择一个操作员(或管理员),点击下面的sstab不同选项卡,会显示他购卡,充值,退卡等信息,汇总只是对当前要结账的操作员在当天还没有结账的记录中关于售卡张数,退卡张数,应收金额等的一个汇总。

在这里我认为的结账是给操作员和管理员结账,因为管理员也可以注册卡,充值和退卡,最后的钱同样要更新到日结账单中。

计算问题:

售卡张数:在student_info 表中当天该操作员未结账的记录条数。

退卡张数:cancelcard_info 表中当天该操作员未结账的记录条数。

充值金额:recharge_info 表中该操作员当天未结账的金额总数。

临时收费金额:student表中当天该操作员对临时用户的收费金额。

退卡金额:cancelcard_info 表中操作员当天未结账的金额总数。

总售卡数:售卡张数-退卡张数

应收金额:充值金额+注册金额-退卡金额

当我们选中操作员(管理员)之后,点击结账的时候我么需要做两个工作。一是更新日结账单,把要结账的记录更新到日结账单中,二是把相应表中的"未结账"改为"结账"。


3.代码:

'结账分为两部分

'一是将要准备结账的相关信息存入日结账单中,日结账单是结过的账
'二是先将相关表中的 "未结账"改为"结账"

Private Sub cmdsquareacounts_Click()
   Dim txtsql As String
   Dim Ctxtsql As String
   Dim msgtext As String
   Dim mrcS As ADODB.Recordset
   Dim mrcC As ADODB.Recordset
   Dim mrcL As ADODB.Recordset
   Dim sumcash As Integer
   Dim consumecash  As Integer
   Dim mrc As ADODB.Recordset
   Dim precash As Integer
   '先判断所有的内容是否为0,如果为0,则禁止结账
   If Trim(txtcharge.Text) = "0" And Trim(txtsellcard.Text) = "0" And Trim(txtexitcard.Text) = "0" Then
       MsgBox "操作员" & " " & Trim(Combouserid.Text) & "账目已全部结完!", vbOKOnly, "提示"
       Exit Sub
   End If
   
   '结完账之后需要把当天的结账记录更新到日结账单,
   '日结账单是需要每天进行更新的,了解每一天的状况。
   '在写日结账单之前要先判断今天是否已经写过日结账单了,
   '写过的话就直接在当前装态更新当天结账记录,
   '没结过的话添加新记录
   
   '日结账单中的计算
   '上期充值卡余额=昨日日结账单的本期余额
   '当日充值金额=今天充值表中已经结过账的所有钱
   '当日消费金额=今天上机表中,所有学生上机消费的钱
   '当日退款金额=今天退卡表中,已经结过账的退卡的钱
   '本期充值卡金额= 注册金额+充值金额-退卡金额,即今天应该收的钱
   '本期金额,我的理解是赚的钱,本期金额=注册卡+充值-退卡,这样老板就可以一眼看到今天的净利润。
   '上期余额,可以理解成是昨天或前天最后的本期余额,也就是赚的钱。
   
   
   '注册金额应该把注册的钱更新到charge表中,添加一条记录保存起来,
   'recharge中的cash和student中的cash是不一样的,student是卡里的钱,
   'recharge中的cash是每一次充值,或注册时的钱,没有累加在一起,这样会把每一个操作员的工作记录下来。
   '因为cash的值会随上下机,充值等操作而改变
   
   
   '计算注册总金额,从recharge表中找。
    txtsql = "select sum(cash) from recharge_info where userid='" & Trim(Combouserid.Text) & "' and ischeck='" & "未结账" & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrcS = executesql(txtsql, msgtext)
       If IsNull(mrcS.Fields(0)) Then
           sumcash = 0
       Else
           sumcash = mrcS.Fields(0)
       End If
   
     
   '当日充值金额,从recharge_info 表中找,txtcharge.text
   
   '当日消费金额,从line表中找
   txtsql = "select sum(consume) from line_info where ondate='" & Format(Date, "yyyy-mm-dd") & "'"
   Set mrcL = executesql(txtsql, msgtext)
       If IsNull(mrcL.Fields(0)) Then
          consumecash = 0
       Else
          consumecash = mrcL.Fields(0)
       End If
 
   '当日退款金额,从cancel_card表中找,txtexitamount.text

更新日结账单,在这里我们需要注意的是日结账单中的一条记录显示的是当天所有操作员和管理员结账的总和。在结账的过程中我们应该把一个操作员或一个管理员作为一个对象,这个对象的本期金额就是他注册卡金额+充值卡金额-退卡金额,即他应该收的钱,这样每一个操作员应该收的钱加起来就构成了今天的本期金额。同样在往日结账单中更新记录的时候,需要分两种情况,如果今天结过账的话就直接在今天的基础上更新,没有结过的话再添加新的记录。

 '将相应的记录存入到日结账单
   '这里分两种情况,如果当天结过的话,就在当天的基础上更新,没有结过的话就添加新的结账记录
   Ctxtsql = "select * from checkday_info where date='" & Format(Date, "yyyy-mm-dd") & "'"
   Set mrcC = executesql(Ctxtsql, msgtext)
   
   txtsql = "select * from checkday_info where date='" & Format(Date - 1, "yyyy-mm-dd") & "'"
   Set mrc = executesql(txtsql, msgtext)
   
   If mrc.RecordCount = 0 Then
      precash = 0
   Else
      precash = mrc.Fields(4)
   End If
      
   '结过的话就直接在原基上更新,添加上次结过的,本期余额=注册+充值-退卡
   If mrcC.EOF = False Then
      '上期余额,可以理解为昨天赚的钱,日结就需要每天都结账,本期余额就是今天总共赚的钱
      
      mrcC.Fields(0) = mrc.Fields(4)                     '上期余额
      mrcC.Fields(1) = Val(txtcharge.Text) + mrcC.Fields(1)         '当日充值金额
      mrcC.Fields(2) = consumecash + mrcC.Fields(2)                 '当日消费金额
      mrcC.Fields(3) = Val(txtexitamount.Text) + mrcC.Fields(3)     '当日退卡金额
      mrcC.Fields(4) = (sumcash + Val(txtcharge.Text) - Val(txtexitamount.Text)) '总金额
      mrcC.Fields(5) = Date
      mrcC.Update
      mrcC.Close
      mrcS.Close
      mrcL.Close
      mrc.Close
   '没结过的话,添加新记录
   Else
     mrcC.AddNew
     mrcC.Fields(0) = precash
     mrcC.Fields(1) = Val(txtcharge.Text)
     mrcC.Fields(2) = consumecash
     mrcC.Fields(3) = Val(txtexitamount.Text)
     mrcC.Fields(4) = sumcash + Val(txtcharge.Text) - Val(txtexitamount.Text)
     mrcC.Fields(5) = Date
     mrcC.Update
     mrcC.Close
     mrcS.Close
     mrcL.Close
     mrc.Close
   End If
'将相关表中的“未结账”改为“结账”
    '从student表看此操作员是否已经结账
     txtsql = "select * from student_info where userid='" & Trim(Combouserid.Text) & "'and ischeck='" & "未结账" & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
     Set mrc = executesql(txtsql, msgtext)
   
   
    '将student,recharge,cancelcard表中的未结账改为结账
     Do While Not mrc.EOF
       mrc.Fields(11) = "结账"
       mrc.Update
       mrc.MoveNext
     Loop
       mrc.Close
    '将recharge表中的未结账改为结账
    txtsql = "select * from recharge_info where userid='" & Trim(Combouserid.Text) & "'and status='" & "未结账" & "'and date='" & Format(Date, "yyyy-mm-dd") & "' "
    Set mrc = executesql(txtsql, msgtext)
   
    Do While Not mrc.EOF
      mrc.Fields(7) = "结账"
      mrc.Update
      mrc.MoveNext
    Loop
      mrc.Close
    'cancelcard表
    txtsql = "select * from cancelcard_info where userid='" & Trim(Combouserid.Text) & "'and status='" & "未结账" & "'and date='" & Format(Date, "yyyy-mm-dd") & "'"
    Set mrc = executesql(txtsql, msgtext)
    
    Do While Not mrc.EOF
       mrc.Fields(6) = "结账"
       mrc.Update
       mrc.MoveNext
      
    Loop
       mrc.Close
    MsgBox "结账成功!", vbOKOnly, "提示"
  
  
End Sub

总结

结账中理清楚应该怎么结账,这是重点,理解应收金额是什么意思,应该怎么计算,最后应该怎么更新到日结账单中,以及日结账单中的本期金额是干什么用的,这几点比较关键。


 谢谢您的阅读


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 24
    评论
评论 24
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗琪小姐姐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值