【机房收费系统】——问题总结(二)

接着上次的总结,我们继续哈!

问题五:报表

由于我的进度较慢,所以我做到这块的时候已经看到很多人的技术文章了,其中我觉得昌哥的博文最是清楚了。关于报表,我的印象最深刻的是动态数据这块。周报表中有时间段选择,具体体现在代码里就是:

    Report.ParameterByName("startime").AsDateTime = Format(startime.Value, "yyyy-mm-dd")
    Report.ParameterByName("endtime").AsDateTime = Format(endtime.Value, "yyyy-mm-dd")
如果想知道当前管理员,直接在报表设计时,直接双击出现“综合文字框文本”,然后点击“插入域”,出现“选择数据库”对话框,从引用类型中选择参数,然后从参数中选择UserID就妥了!

然后是报表的一系列功能,我也觉得特别神奇,比如刷新:

GRDisplayViewer1.Refresh '刷新
还有打印

Report.[Print] (True) '打印
预览也是报表功能的一个特色

Report.PrintPreview (True) '预览
问题六:结账

结账,是我在整个机房中遇到的一大难关那!刚开始做结账的时候,真的不知道结账的原理。拿着好久都不知道怎么下手。真正开始知道结账原理,还是在第一次验收系统之后,经过师傅的点播,总算是能了解一点点。结账,是管理员给操作员和一般用户结账,说的实例化一点,就是公司老板查看财务经手的资金情况。所以一般用户和操作员应该是没有权限查看结账的,这就涉及到权限问题:一般用户的权限仅不能查看操作员和管理员记录,而操作员不能查看管理员记录,这就是规矩!

问题七:下机

下机是我的最痛!花的时间也绝对是最多的。这儿涉及到的四张表:student_Info,online_Info,line_Info,database_Info都快被我折腾疯了!下机这块,还是以图表示吧:

【机房收费系统】——问题总结(二)_第1张图片

为什么没有理清楚下机这块,就是因为四张表的关系没有理清楚。Online表和Line表是由联系的,但是当时可能是一叶障目了吧,想的特别简单:上机就是把记录录入到Online表中,下机就把Online表中数据删除了,然后line表重新录入数据,但是没有把line表和Online表联系起来。所以总是剪不断,理还乱。

上边叙述的是主页上的下机,还有比较复杂的选择下机和全部下机。

在主页上的下机理清楚之后,全部下机就比较清楚了,一个循环解决问题:

    Do While Mrc(4).RecordCount > 0  '只有OnLine表中还有数据就进行操作
        '算花费时间
        strCostTime(1) = Hour(Time) * 60 + Minute(Time)
        strCostTime(2) = Hour(Mrc(4).Fields(7)) * 60 + Minute(Mrc(4).Fields(7))
        strCostTime(3) = strCostTime(1) - strCostTime(2)
        
        '将数据录入line表中
        Mrc(3).AddNew
        Mrc(3)!cardno = Mrc(4)!cardno
        Mrc(3)!studentNo = Mrc(4)!studentNo
        Mrc(3)!studentName = Mrc(4)!studentName
        Mrc(3)!Department = Mrc(4)!Department
        Mrc(3)!sex = Mrc(4)!sex
        Mrc(3)!ondate = Mrc(4)!ondate
        Mrc(3)!OnTime = Mrc(4)!OnTime
        Mrc(3)!offdate = Format(Date, "yyyy-mm-dd")
        Mrc(3)!offtime = Time
        Mrc(3)!consumeTime = strCostTime(3)
        Mrc(3)!Status = "正常下机"
        Mrc(3)!Computer = Mrc(4)!Computer
        
        '判断时间是否大于一个小时,一个小时内统一按照2元收费
        If strCostTime(3) < 60 Then
            Mrc(3).Fields(11) = 2
        Else
        '否则的话根据用户类型进行分类收费
            If Mrc(2).Fields(14) = "临时用户" Then
                Mrc(3).Fields(11) = Int(Mrc(4).Fields(1) * Hour(txtCostTime.Text))
            Else
                Mrc(3).Fields(11) = Int(Mrc(4).Fields(0) * Hour(txtCostTime.Text))
            End If
        End If
        
        '算所剩余额
        Mrc(3).Fields(12) = Val(Mrc(1).Fields(7)) - Val(Mrc(3).Fields(11))
        Mrc(1).Fields(7) = Mrc(3).Fields(12)
        
        Mrc(4).Delete
        Mrc(4).MoveNext
        If Mrc(4).RecordCount = 0 Then Exit Do
    Loop
再说选择下机,在盖盖的帮助下,知道怎么去将在myflexgrid中的记录与数据库的记录对应起来。

stuNo = Trim(myflexgrid.TextMatrix(myflexgrid.Row, 0))
    
然后再对其进行操作:

            strCostTime(1) = Hour(Time) * 60 + Minute(Time)
            strCostTime(2) = Hour(Mrc(3).Fields(7)) * 60 + Minute(Mrc(3).Fields(7))
            strCostTime(3) = strcosttime1 - strcosttime2
            
            '更新line表
            Mrc(1).AddNew
            Mrc(1)!cardno = Mrc(3)!cardno
            Mrc(1)!studentNo = Mrc(3)!studentNo
            Mrc(1)!studentName = Mrc(3)!studentName
            Mrc(1)!Department = Mrc(3)!Department
            Mrc(1)!sex = Mrc(3)!sex
            Mrc(1)!ondate = Mrc(3)!ondate
            Mrc(1)!OnTime = Mrc(3)!OnTime
            Mrc(1)!offdate = Format(Date, "yyyy-mm-dd")
            Mrc(1)!offtime = Time
            Mrc(1)!consumeTime = strCostTime(3)
            Mrc(1)!Status = "正常下机"
            Mrc(1)!Computer = Mrc(3)!Computer
            
            '算钱
            If strCostTime(3) < 60 Then
                Mrc(1).Fields(11) = 2
            Else
                If Mrc(2).Fields(14) = "临时用户" Then
                    Mrc(1).Fields(11) = Int(Mrc(4).Fields(1) * Hour(txtCostTime.Text))
                Else
                    Mrc(1).Fields(11) = Int(Mrc(4).Fields(0) * Hour(txtCostTime.Text))
                End If
            End If
            '所剩余额计算
            Mrc(1).Fields(12) = Val(Mrc(2).Fields(7)) - Val(Mrc(1).Fields(11))
            Mrc(2).Fields(7) = Mrc(1).Fields(12)
            Mrc(2).Update
            Mrc(1).Update
            Mrc(3).Delete
            
            MsgBox "下机成功!"
            '删除所选行
            myflexgrid.RemoveItem Row

小结

整个机房收费系统敲下来,我的唯一感觉是:累,真心很累。花了大概一个月的时间敲机房,整个过程不说历经坎坷,也是披荆斩棘了。考验的不是一个人技术水平有多高,考研的是一个人的耐心和坚持。看到很多人跑到那那那前边去了,也仍然能心平气和的继续自己的学习。正在一点点的领悟提高班培养的不是码农,是精英······






你可能感兴趣的:(数据库,管理,报表)