机房收费系统之日结账,周结账--逻辑篇(日账单的各项金额代表什么?如何计算?)

      日结账表和周结账表可谓是三大难题的最后一关了,既然是难题那就要好好的思考一番后再动手了,以下是我的日结账、周结账程序思路及代码集。

一、问题集

      我们在做日结账单,周结账单之前需要考虑几个问题:

1、我们做的日结账,周结账表是给谁看的?

     管理员,只有管理员才有这个权限。

2、日结账表和周结账表都包含什么内容?

     内容:上期充值卡余额,本期充值金额,本期消费金额,本期退款金额,本期充值卡余额

3、这些数据汇总起来展示给管理员的是什么数据?是今日营业额或本周营业额的数据么?

      不是,展示的是充值卡余额的数据。

4、管理员为什么不直接看营业额,如果要是看营业额,直接看金额机房内所有消费者的消费金额不就行了,那就是今日机房的实际收入额,为什么还要考虑充值卡余额?

      个人现阶段的理解是:营业额(消费金额)只是金额显示的一部分,机房账面上除了显示当日营业额之外,还会显示已经充值的金额(并非是机房的真实收入,里面的金额一部分会归入机房收入,另一部分会返还到消费者的手里(退卡,甚至极端条件下会全部返还),所以这里的显示金额是虚拟的。)营业者通过了解充值卡内的余额,可以考虑机房或网吧的资金投入。-----以上是我个人的理解,仅供参考,如果不足还望多多给予指教^_^。

5、那充值卡余额如何计算?

      本期充值卡余额=上期充值卡余额+本期充值金额-本期消费金额-本期退款金额(注:此处计算的是充值卡余额,所以是需要减去消费金额的)

6、日结账单与周结账单何时向数据库更新数据?

      管理员打开日结账表和周结账表窗体时会进行计算并将数据加载至数据库CheckDay_Info 和CheckWeek_Info 的数据表中,当点击刷新时,如果有操作则删除原有记录,将新的计算数据加载至数据表,若没有操作则不更新数据表。

以上问题考虑清楚了,就可以开始敲代码咯。

二、代码集(以日结账表为例)

①上期充值卡金额

    txtSQL = "select sum(addmoney) as A from Recharge_Info where date <'" & Format(Now(), "yyyy-MM-dd") & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    Prc = mrc("A").Value       '将查询出来的日期小于当日充值金额总和A,赋值给上机充值卡金额Pre
    mrc.Close

②当日充值金额

    txtSQL = "select sum(addmoney) as B from Recharge_Info where date='" & Format(Now(), "yyyy-MM-dd") & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    Trc = mrc("B").Value          '将查询出来的当日充值金额总和B,赋值给当日充值金额Trc
    mrc.Close

③当日消费金额

    linetxtSQL = "select sum(consume) as C from Line_Info where offdate='" & Format(Now(), "yyyy-MM-dd") & "'"
    Set linemrc = ExecuteSQL(linetxtSQL, lineMsgText)
    Tcc = linemrc("C").Value     '将查询出来的当日消费金额总和C,赋值给当日充值金额Tcc
    linemrc.Close

④当日退款金额

    ctxtSQL = "select sum(CancelCash) as D from CancelCard_Info where Date='" & Format(Now(), "yyyy-MM-dd") & "'"
    Set cmrc = ExecuteSQL(ctxtSQL, cMsgText)
    Tcac = cmrc("D").Value      '将查询出来的当日消费金额总和D,赋值给当日退款金额Tcac
    cmrc.Close
    

⑤本期充值余额

Tprc = Prc + Trc - Tcc - Tcac   '本期充值卡余额=上期充值卡余额+当日充值金额-当日消费金额-当日退款金额

⑥更新CheckDay_Info数据表

    '更新数据之前要先删除以前的数据,在更新新的数据
    CDtxtSQL = "delete from CheckDay_Info where date='" & Format(Now(), "yyyy-MM-dd") & "'"
    Set CDmrc = ExecuteSQL(CDtxtSQL, CDMsgText)

    CDtxtSQL = "select * from CheckDay_Info"            '设置日账单查询语句
    Set CDmrc = ExecuteSQL(CDtxtSQL, CDMsgText)
    CDmrc.AddNew
        CDmrc.Fields(0) = Prc
        CDmrc.Fields(1) = Trc
        CDmrc.Fields(2) = Tcc
        CDmrc.Fields(3) = Tcac
        CDmrc.Fields(4) = Tprc
        CDmrc.Fields(5) = Format(Now(), "yyyy-MM-dd")
    CDmrc.Update

周账单与日账单大部分都是相同的,相同的代码不再赘述,区别有两点:

1、查询的日期范围不同

2、周账单需要在文本框中显示上期余额

核心代码如下:

    If beginDate.Value > endDate.Value Then        '开始日期不能大于结束日期
        MsgBox "开始日期不能大于结束日期", vbOKOnly, "温馨提示:"
        endDate.SetFocus
        Exit Sub
    End If
    
    '查询周结账单内数据
    txtSQL = "select  * from checkWeek_Info where date between '" & beginDate.Value & "' and '" & endDate.Value & "' "   '通过SELECT查询创建记录集
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    If mrc.EOF Then
        MsgBox "无该时间段数据!", vbOKOnly, "温馨提示:"     '无数据时提示信息
    Else
        txtRemainCash.Text = mrc.Fields(0)                   '有数据时,将Grid++Report表中第一行的上期余额数据显示到txtRemainCash的文本框中
    End If

       以上均是根据自己的理解进行的设计与梳理,如果有不足的地方还望小伙伴们多多给予指导,下一站最后一个结账窗体走起^_^

猜你喜欢

转载自blog.csdn.net/Elsa15/article/details/83411049