接着上次的总结,我们继续哈!
问题五:报表
由于我的进度较慢,所以我做到这块的时候已经看到很多人的技术文章了,其中我觉得昌哥的博文最是清楚了。关于报表,我的印象最深刻的是动态数据这块。周报表中有时间段选择,具体体现在代码里就是:
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都快被我折腾疯了!下机这块,还是以图表示吧:
为什么没有理清楚下机这块,就是因为四张表的关系没有理清楚。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
小结
整个机房收费系统敲下来,我的唯一感觉是:累,真心很累。花了大概一个月的时间敲机房,整个过程不说历经坎坷,也是披荆斩棘了。考验的不是一个人技术水平有多高,考研的是一个人的耐心和坚持。看到很多人跑到那那那前边去了,也仍然能心平气和的继续自己的学习。正在一点点的领悟提高班培养的不是码农,是精英······