您的位置:首页 > 数据库

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

2014-09-23 16:55 330 查看
接着上次的总结,我们继续哈!

问题五:报表

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

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

小结

整个机房收费系统敲下来,我的唯一感觉是:累,真心很累。花了大概一个月的时间敲机房,整个过程不说历经坎坷,也是披荆斩棘了。考验的不是一个人技术水平有多高,考研的是一个人的耐心和坚持。看到很多人跑到那那那前边去了,也仍然能心平气和的继续自己的学习。正在一点点的领悟提高班培养的不是码农,是精英······
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据库 管理 报表