验收项目的时候,师父们从四方面进行了审核:界面、功能、代码、业务。之后师父布置了三项任务:用自己的理解将一般用户、操作员还有管理员的主要职能搞清楚;将本系统的主要功能化成流程图;“谈钱不伤系统”,但是也要搞清算法~~~

  我是这样理解机房收费系统的消费本质的:机房收费系统,名曰“收费”,实则“消费”,消费的并不是金钱,而是由金钱兑换的时间——上网时间。

  首先说自己对一般用户、操作员还有管理员的认识:

  一般用户就相当于我们去图书馆进行新视野大学英语视听说自主学习,负责签到的那个老师,她相当于是连接我们需要上机才能完成的学习任务接口。机房收费系统给我的感觉就是:这个负责上机的一般用户坐在那里,看着机房里边的所有电脑,而需要消费上网的同学排队来这消费,报上自己的卡号,卡号存在且余额充足就“过关”了,随便找台电脑上机。在上机的过程中,如果某一个学生的余额不足,老师还需要根据提示将相应的学生“请出去”,所以,管理起来很费时,也很费力,期初我是这样理解的。师傅说,理解无对错,但是没有必要让老师一直坐在那里,完全可以装个监控,让来上机的同学们自己去输入,可是,如果学生胆子大,也许在下机的时候还会改一下本地时间也不一定,那样的话,机房亏大发了……

  (PS:一般用户、操作员还有管理员各司其职,只有一般用户负责上下机,其余等级的用户登录的时候,无上机界面——验收项目的时候,师傅表明的一点)

  再来说操作员,进行的是钱的操作:收+退,以及学生信息的增删改查,好比图书馆那个负责充值的老师……

  至于管理员,在我看来,就是一个会计,在这个系统中,他的权限最高,但是,他在结账后还需要将钱上交给更高一级,所以,周结账单就是他工作的凭证,同样,日结账单显示的结果是操作员工作的凭证。

  综上所述:机房收费系统本身存在漏洞,需要我们立足现实情况去考虑,如今的理解无对错~~~

  以下是主要功能块的思维导图:上机+下机,结账部分请见:机房收费系统之结账

<span style="font-size:18px;"><span style="font-size:18px;">Private Sub cmdOnLine_Click()Dim mrc As ADODB.Recordset   'student_Info表Dim mrcO As ADODB.Recordset   'OnLine_Info表Dim mrcB As ADODB.Recordset   'BasicData_Info表Dim mrcU As ADODB.Recordset    'user_Info表Dim txtSQL As StringDim MsgText As StringDim A As Integer    '用做msgbox的返回值Dim Cancel As IntegertxtSQL = "select * from Student_Info where cardno='" & Trim(txtCardNo.Text) & "'and status='" & Trim("不使用") & "'"Set mrcS = ExecuteSQL(txtSQL, MsgText)If mrcS.EOF = False ThenA = MsgBox("此卡已注销,是否激活?", vbOKCancel + vbExclamation, "提示")            '如果已退卡,询问是否要激活If A = vbOK ThenmrcS.Fields(7) = 0mrcS.Fields(10) = "使用"mrcS.Fields(11) = "未结账"mrcS.UpdatemrcS.CloseB = MsgBox("激活成功!是否立即充值?", vbOKCancel + vbExclamation, "提示")If B = vbOK ThentxtCardNo.Text = ""                    '不清空的话会弹出暂时不需要弹出的信息txtSQL = "select * from User_Info where UserID='" & UserName & "' and Level<>'" & "一般用户" & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF = False ThenSetParent frmRecharge.hWnd, frmMain.hWndElseMsgBox "一般用户无权注册,抱歉~", vbOKOnly + vbExclamation, "提示"txtCardNo.SetFocustxtCardNo = ""Exit SubEnd IfElseCancel = TrueExit SubEnd IfElseCancel = TrueExit SubEnd IfEnd If If Trim(txtCardNo.Text = "") ThenMsgBox "请输入卡号!"txtCardNo.SetFocusElse'通过卡号,显示其其它内容txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF = True ThenA = MsgBox("此卡尚未注册!是否立即注册?", vbOKCancel + vbExclamation, "提示")If A = vbOK ThentxtSQL = "select * from User_Info where UserID='" & UserName & "' and Level<>'" & "一般用户" & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF = False ThenSetParent frmRegister.hWnd, frmMain.hWndtxtCardNo.SetFocustxtCardNo = ""ElseMsgBox "一般用户无权注册,抱歉~", vbOKOnly + vbExclamation, "提示"txtCardNo.SetFocustxtCardNo = ""End IfElseCancel = TruetxtCardNo.SetFocustxtCardNo = ""End If                ElsetxtSQL = "select * from OnLine_Info where cardno='" & Trim(txtCardNo.Text) & "'"Set mrcO = ExecuteSQL(txtSQL, MsgText)If Not (mrcO.BOF And mrcO.EOF) ThenMsgBox "此卡号正在上机!"txtCardNo.SetFocustxtCardNo = ""Exit SubElsetxtSQL = "select * from BasicData_Info"Set mrcB = ExecuteSQL(txtSQL, MsgText)If mrc.Fields(7) <= mrcB.Fields(5) ThenA = MsgBox("余额小于最低标准" & mrcB.Fields(5) & ",是否充值?", vbOKCancel + vbExclamation, "提示")If A = vbOK ThentxtSQL = "select * from User_Info where UserID='" & UserName & "' and Level<>'" & "一般用户" & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF = False ThenSetParent frmRecharge.hWnd, frmMain.hWndtxtCardNo.SetFocustxtCardNo = ""ElseMsgBox "一般用户无权充值,抱歉~", vbOKOnly + vbExclamation, "提示"txtCardNo.SetFocustxtCardNo = ""                        End IfElseCancel = TrueEnd IfElse'显示与上机卡号相关的信息txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)lblType.Caption = mrc!TypelblSID.Caption = mrc!studentnolblName.Caption = mrc!studentNamelblDept.Caption = mrc!departmentlblSex.Caption = mrc!sexlblOnDate.Caption = DatelblOnTime.Caption = TimelblBalance.Caption = mrc!cash  '显示余额'将上机记录保留到OnLine表中,便于显示当前上机人数txtSQL = "select * from OnLine_Info"Set mrcO = ExecuteSQL(txtSQL, MsgText)mrcO.AddNewmrcO.Fields(0) = Trim(txtCardNo.Text)mrcO.Fields(1) = mrc!TypemrcO.Fields(2) = mrc!studentnomrcO.Fields(3) = mrc!studentNamemrcO.Fields(4) = mrc!departmentmrcO.Fields(5) = mrc!sexmrcO.Fields(6) = DatemrcO.Fields(7) = TimemrcO.Fields(8) = VBA.Environ("computerName")mrcO.Fields(9) = Date  '不知表中给出的date和上边出现的date是否一样mrcO.Fields(10) = NowmrcO.Update'查询此时正在上机的人数(PS:可以用Timer事件,实时更新当前上机人数)lblPeople.Caption = mrcO.RecordCountmrcO.CloseMsgBox "上机成功!"'清空窗体内所有显示框txtCardNo.SetFocustxtCardNo.Text = ""lblType.Caption = ""lblSID.Caption = ""lblName.Caption = ""lblDept.Caption = ""lblSex.Caption = ""lblOnDate.Caption = ""lblOnTime.Caption = ""lblBalance.Caption = ""End IfEnd IfEnd IfEnd If
End Sub
</span></span>

  我的下机过程写得有点乱,主要提体现在有些数据没必要赋给中间变量;还有一点就是计费方式不合理,应该采取分段计费方式,不然会导致用户不满意。但是整理逻辑还是清楚的,体现在上边的导图中,代码仅供参考:

<span style="font-size:18px;">Private Sub cmdOffLine_Click()Dim txtSQL As StringDim MsgText As StringDim mrc As ADODB.Recordset    'student_Info表,将计算后的最新余额存入Dim mrcO As ADODB.Recordset   'OnLine_Info表  取出上机记录,存入Line_Info表,然后删除Dim mrcB As ADODB.Recordset    'BasicData_Info表,用来算余额和消费时间Dim mrcL As ADODB.Recordset    'Line_Info表,将上下机记录存入Dim PastCash As Integer  '原余额Dim Newcash As Integer   '新余额Dim Timefact As Long '实际上机时间,定义为long便于有利于提高效率Dim FreeTime As Long  '上机前的准备时间,相当于白送的时间Dim FixUserCharge As Integer   '固定用户的单位费用Dim TemUserCharge As Integer   '临时用户的单位费用Dim OnTime As DateDim offTime As Date'判断部分If Trim(txtCardNo.Text = "") ThenMsgBox "请输入卡号!", vbOKOnly + vbExclamation, "警告"txtCardNo.SetFocusExit SubEnd If'判断卡号是否注册txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & "'"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF ThenMsgBox "该卡号未注册,请重新输入!", vbOKOnly + vbExclamation, "警告"txtCardNo.SetFocustxtCardNo.Text = ""Exit SubElse'判断该卡号是否上机txtSQL = "select * from Online_Info where cardno='" & txtCardNo.Text & "'"Set mrcO = ExecuteSQL(txtSQL, MsgText)If mrcO.EOF ThenMsgBox "该卡没有上机!"txtCardNo.SetFocustxtCardNo.Text = ""Exit SubEnd IfEnd If
'----------------------------------------------------------
'----------------------------------------------------------'计算部分(前期准备)'后发现如果只是用time算时间的话,那么还需要用Date算出相差的天数换成分钟与time算出的数相加,所以,直接用Now'在Online表中添加了onnow字段,在Line表中添加了offnow字段OnTime = Trim(mrcO!onnow)'将下机时间等信息赋给中间变量offTime = Time'将原余额提出来用于计算下机后的余额txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & " '"Set mrc = ExecuteSQL(txtSQL, MsgText)PastCash = Val(Trim(mrc!cash))'从基本数据表中取出用于计算的每小时费用txtSQL = "select * from BasicData_Info "Set mrcB = ExecuteSQL(txtSQL, MsgText)FreeTime = Val(mrcB!PrepareTime)'将固定用户和临时用户的每小时费用分别赋给中间变量FixUserCharge = mrcB!RateTemUserCharge = mrcB!tmpRate'计算实际上机时间Timefact = DateDiff("n", OnTime, Now) - FreeTime  '以分钟为单位,避免隔天问题,用Now算上机时间lblCTime.Caption = Timefact'----------------------------------------------------------'----------------------------------------------------------'正式计费'判断实际在线时间是否小于准备时间,若小于则消费时间为0If lblCTime.Caption <= Val(Trim(mrcB!PrepareTime)) ThenlblCTime.Caption = 0lblCMoney.Caption = 0Else'判断实际在线时间是否小于最低消费时间,若小于消费时间为0If lblCTime.Caption <= Val(Trim(mrcB!leasttime)) ThenlblCTime.Caption = 0lblCMoney.Caption = 0Else'实际在线时间大于最低消费时间则按单位时间算,分固定用户和临时用户If lblCTime.Caption >= Val(Trim(mrcB!leasttime)) And lblCTime.Caption < Val(Trim(mrcB!UnitTime)) _And Trim(mrc!Type) = "固定用户" ThenlblCMoney.Caption = FixUserCharge '就像是网吧一样,不到一小时也按照一小时算ElseIf lblCTime.Caption >= Val(Trim(mrcB!leasttime)) And lblCTime.Caption < Val(Trim(mrcB!UnitTime)) _And Trim(mrc!Type) = "临时用户" ThenlblCMoney.Caption = TemUserCharge   '临时用户每小时费用Else'当实际在线时间大于单位时间,即递增单位时间60分钟,就按有几个单位时间算,分固定用户和临时用户'计算固定用户的消费If lblCTime.Caption > Val(mrcB!UnitTime) And Trim(mrc!Type) = "固定用户" ThenlblCMoney.Caption = Int(Val(lblCTime.Caption) / 60 + 1) * Val(FixUserCharge) '加1是避免1.5小时按1小时算Else'计算临时用户的消费If lblCTime.Caption > Val(mrcB!UnitTime) And Trim(mrc!Type) = "临时用户" ThenlblCMoney.Caption = Int(Val(lblCTime.Caption) / 60 + 1) * Val(TemUserCharge)End IfEnd IfEnd IfEnd IfEnd IfEnd If'计算余额=原余额—消费金额Newcash = PastCash - Val(lblCMoney.Caption)'----------------------------------------------------------
'----------------------------------------------------------'下机信息完整显示'先通过卡号显示上机信息txtSQL = "select * from Online_Info where cardno='" & txtCardNo.Text & "'"Set mrcO = ExecuteSQL(txtSQL, MsgText)lblType.Caption = mrcO!cardtypelblSID.Caption = mrcO!studentnolblName.Caption = mrcO!studentNamelblDept.Caption = mrcO!departmentlblSex.Caption = mrcO!sexlblOnDate.Caption = Format(mrcO!ondate)lblOnTime.Caption = mrcO!OnTime'然后显示下机信息lblOffDate.Caption = Date  '下机日期lblOffTime.Caption = offTime   '下机时间lblBalance.Caption = Newcash '显示余额'----------------------------------------------------------
'----------------------------------------------------------'更新相应表中的数据'更新student表中的余额记录txtSQL = "select * from student_Info where cardno='" & txtCardNo.Text & " '"Set mrc = ExecuteSQL(txtSQL, MsgText)mrc!cash = Newcashmrc.Updatemrc.Close'更新Line_Info表txtSQL = "select * from Line_Info"Set mrcL = ExecuteSQL(txtSQL, MsgText)mrcL.AddNew    '敲代码时忘了加了,导致3021错误mrcL.Fields(1) = mrcO.Fields(0)mrcL.Fields(2) = mrcO.Fields(2)mrcL.Fields(3) = mrcO.Fields(3)mrcL.Fields(4) = mrcO.Fields(4)mrcL.Fields(5) = mrcO.Fields(5)mrcL.Fields(6) = mrcO.Fields(6)mrcL.Fields(7) = mrcO.Fields(7)'向line表中存入当前日期和时间mrcL.Fields(8) = DatemrcL.Fields(9) = offTime'向line表中存入经过计算的数据mrcL.Fields(10) = lblCTime.CaptionmrcL.Fields(11) = lblCMoney.CaptionmrcL.Fields(12) = Newcash'向line表中存入固定数据mrcL.Fields(13) = "正常下机"mrcL.Fields(14) = VBA.Environ("ComputerName")mrcL.Update'删除Online表中的上机数据mrcO.DeletemrcO.UpdateMsgBox "下机成功!欢迎再次使用~~~"mrcO.Close'重新打开上机表,更新一下,重新计算当前上机人数,否则保留的是原来取得的旧记录txtSQL = "select * from Online_Info "Set mrcO = ExecuteSQL(txtSQL, MsgText)lblPeople.Caption = mrcO.RecordCount'将显示的内容清空txtCardNo.Text = ""lblType.Caption = ""lblSID.Caption = ""lblName.Caption = ""lblDept.Caption = ""lblSex.Caption = ""lblOnDate.Caption = ""lblOnTime.Caption = ""lblBalance.Caption = ""lblOffDate.Caption = ""lblOffTime.Caption = ""lblCMoney.Caption = ""lblCTime.Caption = ""lblBalance.Caption = ""End Sub
</span>

  关于结账部分:机房收费系统之结账,听取小伙伴们的建议,画了一张流程图,更新中,敬请期待……

机房收费系统之纵观全局相关推荐

  1. 机房收费系统-- MDI子窗体显示技巧(续vb.net版)

    在vb6.0版的机房收费系统中说道过这个问题,回顾请点击:http://blog.csdn.net/chenjinge7/article/details/8231546这次在vb.net版本中想再次利 ...

  2. 重构机房收费系统(二)

    接上篇<机房收费系统重构(一)> 二.概要设计 完成了用例图,并用结合用例图完善了一下需求分析说明书,忘记是第几次修订需求分析说明书.有了用例图,很自然就进入了概要设计阶段.我认为这一阶段 ...

  3. 机房收费系统总结之5——抽象工厂+反射+配置文件

    起初,机房收费系统用纯三层在做,三层结构已把高内聚,低耦合的思想发挥的淋漓尽致.因为一直听说"抽象工厂",也开始尝试去应用,经过了一番尝试,也OK了.其中当然会用到反射和配置文件, ...

  4. 数据库设计说明书——机房收费系统

    数据库设计说明书 1引言 1.1编写目的 说明编写这份数据库设计说明书的目的,指出预期的读者. 本数据库设计说明书说明了机房收费系统的数据库设计和结构情况,用于开发人员进行项目设计,同时也为后期数据库 ...

  5. 机房收费系统.Net个人版总结

    机房收费系统.Net版到前两天为止才算是彻底完工了.从寒假开始的初步文档+图设计,以及之后的代码实现,到三月中旬开始的文档规范.图规范.代码规范.这个生命周期真是一个长啊.给自己总结了一下:本次机房收 ...

  6. 机房收费系统总结【1】-整体流程

    前言: 拖了3个月终于学完了机房收费,真正做机房的时间不到一个月,拖了好久,不应该! 以后,在学习的过程中遇到的问题(计算机+心得体会)在今目标的项目上简单标注! 这个过程中自己解决的问题博客总结!还 ...

  7. 机房收费系统【VB版】——选择下机

    前言: 今天实现机房收费系统--一般用户--学生上机状态查看--选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统--上机状态查询之下机 过程: 要显示的表格式写查询,就会出来 ...

  8. 机房收费系统【VB版】——上下机

    前言: 机房收费系统三大难点之一--上下机,需要一点一点开始分析,不断完善自己的逻辑,然后对照逻辑[查表--更新--显示],编写代码. 逻辑流程图: 注意 计算消费金额: 总结: 其实这里自己应该反思 ...

  9. 机房收费系统【VB版】——前期准备

    前言: 没有源码和参考的机房收费系统,很犯怵的开始,完全不懂如何下手,经过后来小伙伴的交流和巨人的博客. 准备: 1.安装机房收费系统程序 1.1添加ODBC数据源--添加文件DSN--附加数据库-- ...

最新文章

  1. C#_关于静态类和静态方法(转)
  2. 编java用jdk还是editplus_怎样运用EditPlus进行配置Java编译环境
  3. 使用shell进行mvn打包,根据mvn是否打包成功来进行下一步操作
  4. [其它] - 博客园积分算法探讨
  5. 用tf-faster-rcnn训练自己制作的车牌号数据集(VOC2007格式)
  6. 统计自然语言处理---信息论基础
  7. Linux磁盘配额教程,磁盘配额设置及使用
  8. 配置中心—Consul配置管理
  9. windows下安装openssl工具及生成pfx文件
  10. Outliers: The Story of Success
  11. 图解网络:组建一个网络需要哪些网络设备和安全设备
  12. 想拿高工资?Java面试资料集合,附赠课程+题库
  13. android图片消失动画效果,用setAnimationStyle来设置popwindow显示消失的动画效果
  14. web前端学习笔记(二)
  15. iOS - CodeReview 代码评审
  16. 分枝限界法求解流水线作业调度问题
  17. Asp.Net支付宝沙箱支付(也可用手机扫描支付)详细教程
  18. Spring微服务间登录用户信息共享思路
  19. U盘杀毒专家3.21 官方最新版已破解
  20. 如果你有一个ods,里面需要放进去2个country的信息:ship-to coutry和 sold-to country,你怎么做?

热门文章

  1. python nonetype_Python NoneType类型
  2. 抖音矩阵号系统搭建,企业同时管理1000+账号的基础逻辑
  3. 概率密度变换公式 雅可比矩阵_雅克比行列式在连续型随机变量函数分布密度中应用.doc...
  4. 【Android】 字体setTypeface动态实现加粗字体
  5. redis4.0.14哨兵自动故障迁移失败
  6. WSL2+Ubuntu20.04+warp-ctc安装排雷(THC.h)
  7. [52ABP实战系列] .NET CORE实战入门视频课程出来啦
  8. static关键字:静态局部变量,静态全局变量与静态函数详解
  9. git 查看分支创建时间
  10. python中bs包的使用方法