机房收费系统之结账与报表

机房收费系统在几天前终于告一个段落了,这篇是关于最后阶段结账与报表的总结。

结账,首先清楚该窗体的作用是:管理员对每个操作员工作情况的查看。其中包括售卡数量,充值金额以及退还金额。

知道全局后,操作上就会简单不少了。我们需要做的就是将遍历学生信息表、充值信息表和退卡信息表后的该操作员和结账状态为“未结账”的所有金额总计。然后在单击结账后,将汇总后的信息写入结账表,将前面三个表中的结账状态标记为“已结账”。

结账流程:

Part One:将所有操作员ID和Name提取出来,以供选择。(下面以选择姓名为例)

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">    '将数据库中操作员的UserName提供出来
    strTxtSQL = "select UserID from tb_User where userlevel='操作员'"
    Set mrc = ExecuteSQL(strTxtSQL, strMsgText)

    '点击操作员姓名,相应地出现其ID
    strTxtSQL = "select * from tb_User where username='" & comboOperatorName.Text & "'"
    Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
    comboOperatorID.Text = mrc.Fields(0)</span></strong>

Part Two:从ID或Name中任意选择一个,便将该操作员的工作记录显示在SSTAB控件中,全部是“未结账”状态下的工作记录。(下面以充值选项为例)

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;"> '充值选项
         RechargeFlexGrid.Visible = True
         '从充值表中查看是否有该操作员的充值工作记录
         strTxtSQL = "select * from tb_Recharge where checkState = '未结账' and UserID= '" & Trim(comboOperatorID.Text) & "'"
         Set mrc = ExecuteSQL(strTxtSQL, strMsgText)

         If mrc.EOF = True Then         '该操作员没有充值工作记录
                With RechargeFlexGrid
                    .Rows = 1
                    .TextMatrix(0, 0) = "卡号"
                    .TextMatrix(0, 1) = "学号"
                    .TextMatrix(0, 2) = "日期"
                    .TextMatrix(0, 3) = "时间"
                    .TextMatrix(0, 4) = "充值金额"
                End With
         Else
             With RechargeFlexGrid       '该操作员充值工作记录显示
                  .Rows = 1
                  .TextMatrix(0, 0) = "卡号"
                  .TextMatrix(0, 1) = "学号"
                  .TextMatrix(0, 2) = "日期"
                  .TextMatrix(0, 3) = "时间"
                  .TextMatrix(0, 4) = "充值金额"
                  .ColWidth(0) = 800
                  .ColWidth(1) = 800
                  .ColWidth(2) = 2000
                  .ColWidth(3) = 2000
                  .ColWidth(4) = 2000
                  Do While Not mrc.EOF
                        .Rows = .Rows + 1
                        .TextMatrix(.Rows - 1, 0) = mrc.Fields(2)
                        .TextMatrix(.Rows - 1, 1) = mrc.Fields(1)
                        .TextMatrix(.Rows - 1, 2) = mrc.Fields(4)
                        .TextMatrix(.Rows - 1, 3) = mrc.Fields(5)
                        .TextMatrix(.Rows - 1, 4) = mrc.Fields(3)
                        .ColWidth(0) = 800
                        .ColWidth(1) = 800
                        .ColWidth(2) = 2000
                        .ColWidth(3) = 2000
                        .ColWidth(4) = 2000
                    '该操作员通过学生充值所获得的金额
                        Rechargemoney = Rechargemoney + Trim(mrc.Fields(3))
                        mrc.MoveNext
                   Loop
                    '该操作员的售卡金额
                        txtRechargeSum.Text = Trim(Rechargemoney)
                        mrc.Close
              End With
                '该操作员的注册、充值和退卡后的总金额
                txtSum.Text = Val(Trim(txtSum.Text)) + Val(Trim(txtRechargeSum.Text)) - Val(Trim(txtReturnCardSum.Text))
          End If</span></strong>

Part Three:确认结账。将所有表中结账状态改变。(以充值表为例)

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">'将所有信息修改为“已结账”
    strTxtSQL = "select * from tb_recharge where userid ='" & Trim(comboOperatorID.Text) & "'" & " and checkstate = '" & "未结账" & "'"
    Set mrc = ExecuteSQL(strTxtSQL, strMsgText)

    Do While mrc.EOF = False
       mrc.Fields(7) = "已结账"
       mrc.Update
       mrc.MoveNext
    Loop

     mrc.Close</span></strong>

并将数据写入到结账表中。

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">'连接结账表,将新的信息写入表中
    '向结账表中添加数据
    strTxtSQL = "select * from tb_checkout where userid='" & Trim(comboOperatorID.Text) & "'"
    Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
    '如果没有新的记录则提示
    If Trim(txtSaleCardCount.Text) = "0" And Trim(txtRechargeSum.Text) = "0" And _
        Trim(txtReturnCardCount.Text) = "0" And Trim(txtReturnCardSum.Text) = "0" And _
        Trim(txtSaleCardSum.Text) = "0" And Trim(txtSum.Text) = "0" Then
        MsgBox "数据未更新,结账操作无效!", vbOKOnly + vbExclamation, "结账提示"
    End If

    '如果有新的工作记录
     strTxtSQL = "select * from tb_checkout where userid='" & Trim(comboOperatorID.Text) & "'"
     Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
     If mrc.EOF = True Then
        lastbalance = " 0"
     Else
        lastbalance = mrc.Fields(1)
     End If

         '向结账表中添加数据
         mrc.AddNew
         mrc.Fields(0) = frmLogin.txtUserName.Text
         mrc.Fields(1) = lastbalance
         mrc.Fields(2) = txtRechargeSum.Text
         mrc.Fields(3) = txtCasualSum.Text
         mrc.Fields(4) = txtReturnCardSum.Text
         mrc.Fields(5) = txtSum.Text
         mrc.Fields(6) = Date
         mrc.Fields(7) = "已结账"
         mrc.Update
         mrc.Close

    MsgBox "已成功结账!", vbOKOnly + vbExclamation, "结账提示"</span></strong>

Part Four:解决问题。如果按照上面的流程去做,那么在结账表中只会出现该管理员点击“结账”后的记录。如果该管理员某天休息,没有及时结账,那么这一天的数据变会丢失。那么账单中肯定会少钱了,这系统做的就不合格了。所以,在此之前,我将所有信息都先存在了另一个新表中,不管是该管理员结账了还是没结账,数据都写进去。

<strong><span style="font-family:KaiTi_GB2312;font-size:18px;">       '不管是否结账,都将该操作员的信息写入DayCheck中
       '向表DayCheck中添加数据
        strTxtSQL = "select * from tb_daycheck where date ='" & Trim(Label10.Caption) & "'"
        Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
        If mrc.EOF = True Then
            Trim(lastbalance) = 0
            mrc.AddNew
            mrc.Fields(0) = lastbalance
            mrc.Fields(1) = txtRechargeSum.Text
            mrc.Fields(2) = txtCasualSum.Text
            mrc.Fields(3) = txtReturnCardSum.Text
            mrc.Fields(4) = txtSum.Text
            mrc.Fields(5) = Date
            mrc.Update
            mrc.Close
        Else
            mrc.MoveLast
            lastbalance = Trim(mrc.Fields(4))
            mrc.MoveNext
            mrc.AddNew
            mrc.Fields(0) = lastbalance
            mrc.Fields(1) = txtRechargeSum.Text
            mrc.Fields(2) = txtCasualSum.Text
            mrc.Fields(3) = txtReturnCardSum.Text
            mrc.Fields(4) = txtSum.Text
            mrc.Fields(5) = Date
            mrc.Update
            mrc.Close
        End If</span></strong>

Part Five:制作报表,以便查询账单。

报表,一个以前没有接触的东西。刚开始,可能无从下手,不过我们可以站在巨人的肩膀上,如果你的报表还没有做,推荐一个师哥的博客:

用VB做报表(一)http://blog.csdn.net/wlccomeon/article/details/8269917  

用VB做报表(二)http://blog.csdn.net/wlccomeon/article/details/8296679

很详细的讲解,一个报表,也可以轻松搞定。
最后,说说做这个部分的感受。还是感觉全局认识很重要,如果心中没有谱,肯定不知道如何下手。与其浪费时间坐在那瞎想,瞎敲,还不如花些时间把流程弄明白。这样会起到一个事半功倍的效果。

时间: 2024-11-01 08:24:42

机房收费系统之结账与报表的相关文章

VB.NET版机房收费系统---报表

       报表,即报告情况的表格,简单的说:报表就是用表格.图表等格式来动态显示数据,可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔来记录数据.       比如:民间常常说的豆腐帐,就是卖豆腐的每天将自己的卖出的豆腐记在一个本子上,然后每月都要汇总算算,这种情况下,报表数据和报表格式是紧密结合在一起的,都在同一个本子上.数据也只能有一种几乎只有记帐的人才能理解的表现形式,且这种形式难于修改.      VB版机房收费系统的报表采用的

机房收费系统之报表

 报表,是什么呢?她跟我们平时所熟悉的课程表,成绩表,中国历史大事年表,有没有相同的地方呢?那么现在就让我们揭开她神秘的面纱吧,报表是企业管理的基本措施和途径,是企业的基本业务要求,也是实施BI战略的基础,报表可以帮助企业访问,格式化数据,并把数据信息以可靠和安全的方式呈现给使用者,深入洞察企业运营状况,是企业发展的强大驱动力.       简单的说:报表就是用表格.图表等格式来动态显示数据.可以用公式表示为:"报表 = 多样的格式 + 动态的数据". 在没有计算机以前,人们利用纸和笔

软工文档-机房收费系统:详细设计说明书

详细设计说明书   1引言   1.1编写目的 详细设计说明书是在概要设计的基础上进一步明确系统结构,表示出软件结构的图表,完成算法设计.数据结构设计.物理设计等,详细地描述的逐个模块,包括算法和逻辑流程,为下一步系统的实现和测试做准备. 本文档的预期读者是程序开发人员和程序测试人员. 1.2背景 A.待开发软件名称:机房收费系统 B.项目提出者:米新江教授   开发者:吴士龙   用户:廊坊师范学院全体教职工和学生   实现该软件的计算中心或计算机网络:廊坊师范学院局域网 C.该软件系统同其他

机房收费系统之结尾

       机房收费系统在这个冬月告一个不完美的结局,刚开始接触他的时候,各种纠结,各种逃避,各种不想做,接触一个新的事物,内心充满了恐惧与排斥,机房收费系统与学生管理系统不一样,没有源码,这个时候,需要自己不断的给予自己鼓励,七八九期的师哥师姐都做出来了,你完全有理由相信,自己也能做出来.        机房收费系统来来回回验收了三次,这期间,很谢谢陈金阁师哥耐心的指导,一次又一次,不厌烦的告诉我做系统的思路以及要注意哪些细节问题.现在,就机房收费系统,做个简单的总结.         结账

机房收费系统之表

         机房收费系统,主要是用于对学生在机房上机的收费问题,首先要建立的是数据库,数据库中有三个角色,一般用户.管理员.操作员,管理员对操作员进行设置,然后由操作员员对一般用户的信息进行设置,注册.       首先管理员员登陆这个系统,管理员的用户名,密码,姓名,然后将机房的收费标准录入到数据库中.然后将登陆密码交给操作员,让操作员管理的上机.用户进入机房进行上网,此时开始计费,一直到学生出机房,再次刷卡下机.做系统之前,一定要理清楚表之间的关系,以及这张表有什么用,在系统的那块儿用

机房收费系统之思想性总结

一个系统,不管功能有多强大或是多简单,最重要的是它最终都将面向对象--用户.一个系统,看它成功与否,用户评价的好坏就是关键了.一个系统,只要全心全意为人民服务的精神贯穿始终,那一定不会差到哪去. 机房收费系统,其对象同样是用户,具体地说,这个系统将用户这个类实例化后,可分为三种对象,分别为:一般用户.操作员和管理员.总而言之,不管是哪种对象,时时刻刻都需要想着为其服务. 下面将从三个不同对象的角度展开来讲,看看要使得为其服务,应该做些什么. (一)一般用户 一般用户的权限在这个系统中最小,但其要

机房收费系统之技术总结

机房收费系统,从最初的迷茫到现在的明朗,这一路,总算是到站了. 看到完工后的系统,自己都惊呆了.总共有27个窗体,一个模块,代码的多少可想而知,那么多那么多,都是自己敲上去的,和学生信息管理系统相比,真的算得上是一次飞跃了吧.前前后后,历时二十多天,不管是技术上还是思想上,自己的收获很大. 从头到尾,自己都是尽心尽力,从新建数据库到新建各个表,从各个窗体设计到各个窗体代码,一个也不容小觑. 先从自己的数据库说起:一共九张表,这个过程很漫长,不是一开始就照着原来的模板建,而是在敲代码的过程中,用到

VB.NET机房收费系统总结

     又一次机房收费系统,有一次总结,第一次是vb6,这次则采用VB.NET+设计模式+三层.     vb6的机房收费系统是面向过程开发,代码量大,不易维护,而这次的VB.NET则是面向对象的开发,代码量虽然没有减少反而增多,但是系统的结构变得灵活的多,可维护性增强了不少,采用了分层和设计模式,对象化了各个模块,复用率也大大提高了.     具体来说一下吧.在网上查了资料,简单了解了三层后,开始了我的三层之旅.先用EA画了3层的登录例子.下面是我的系统架构(包图):     当时一开始只有

VB.NET版机房收费系统---异常处理

        异常处理,英文名为Exceptional Handling, 那时年少,还记得那年一起学习过的VB6.0的时候,常常使用ONError的错误语句.与传统VB6.0中的OnError语句相比.NET平台的异常处理机制更加灵活,而且使用更加方便.是代替日渐衰落的Error Code方法的新法,提供Error Code 所未能具体的优势.异常处理巧妙又不失完美的分离了接收和处理错误代码.这个功能理清了编程者的思绪,也帮助代码增强了可读性,方便了维护者的阅读和理解.         异常