机房收费系统虽然伴随着功能的实现、Bug的不断修复和系统各方面的优化,落下了帷幕。这次机房收费的收获确实很大,一开始只是想着赶快将系统敲完,也没有对机房收费系统进行仔细的分析,也就是宏观的把控。盲目的完成系统,导致对系统的理解不是很深。现在反思起来,确实很多地方都做的不对,那么在完成了机房收费系统之后,暴露的一些问题以及对于系统存在的疑问就在这里进行一些总结和分析,仅是个人观点,仅供参考!
一.注释的作用
很多人看到这个觉得觉得没什么意思,注释能有什么可总结的?事情发生在验收系统的时候,师傅看到我的代码只有部分有注释,就问“为什么就这些注释?”,我回答“这些注释是我不懂的地方,其他的我都知道什么意思,就不用注释”。师傅就说你去好好想想注释到底是用来干什么的。后来,经过师傅的指点和我的查询,得出了我的想法是大错特错 的。注释到底有什么作用呢?
首先我们来看注释在编程语言中的作用,就是用来解释一行或某段代码的含义。那我也没错啊,是不。。。可关键是,系统编写出来的时候,我还是记忆深刻的,明白某段代码的含义,知道他的作用。可是如果我们又学习了很长时间后,再回来看这个系统,早已经印象模糊,总不能再把系统的语言都从新的解释一遍吧。所以,注释就在这时起到了重要的作用。其次,现在的系统很少有是自己完成的,都是通过合作来完成,那么在合作的时候,要完成整个系统,如果我没有注释,那另一个人还得将我的代码分析一遍,不然没法合作。这个时候的重要性就不用多说了吧!这可是工作效率的问题。所以,还是要将注释的作用重视起来。
二.系统的分析
对于机房收费系统,你怎么看?到底是给谁用的,有的说是是给学生,老师和领导用的,有的说是给老师和领导用的。。。各种版本的分析。就我个人而言,我更加认为这是给教师用的一个系统,用来管理学生的工具,但是同时学生在上机时登陆收费系统进行上机。
首先分析一般用户,所谓的一般用户具有系统中最低的权限,在我看来就是学生,学生在操作员那里激活卡号后,在电脑进行上下机和上机信息的查询的功能,但一般用户中的全部下机功能就应该转移到操作员的权限中。其次是操作员,具有中等的操作权限,能够给学生注册,充值,退卡以及修改学生信息的功能,也就是机房负责人的角色。而管理员是系统中权限最高的,可以结账、添加用户、查看值班教师、基本数据设定和打印报表的工作,也就是部门领导的角色了。
具体的操作流程就是,学生注册后拥有卡号,来机房后在值班教师那里激活卡号,然后到电脑上登陆收费系统进行上下机和查询自己上机信息的功能。
其实,这种想法只是其中一个解释,也可以一般用户是普通教师,每一种想法都可以,只要解释的合理并且实际,就能够可以,毕竟需求不同,所用的操作方法也不一样。You have an idea, I have an idea, We swap, Now we each have two ideas!
三.系统代码的疑问
1.在模块窗体中将窗体实例化的作用,代码如下:
Public fMainForm as frmMain Sub Main Dim fLogin AS new frmLogin fLogin.show vbModal '显示登陆窗体实例 If Not Flogin.OK then 'ok为fMainForm类的成员 end End If Unload fLogin set fMainForm=New frmMain ’显示主窗体实例 fMainForm.show end sub首先,定义一个窗体类。而实例化,就想当于给这个对象分配了一个可用空间,就是把这个实例放到了内存当中,他的作用就是让程序可以正常使用这个类。那么将窗体实例化的作用就是,在加载窗体的时候能够快速的显示窗体。在机房收费中由于系统简单,登陆窗体需要加载的内容少,所以会很快的显示出登陆窗体。如果是大的程序,那么如果不用实例化的话,那么在你打开该软件的时候,等了好长时间,登陆窗体才显示出来,这会严重影响用户的体验的。所以,合理的利用窗体实例化很有必要。
2.Set mrc =ExecuteSQL(txtSQL,MsgText)
在我们对数据库进行操作的时候,经常的看到这段代码,如下:
txtSQL = "select * from User_Info where userID='" & txtUsername.Text & "'" Set mrc = ExecuteSQL(txtSQL, MsgText)
mrc是一段记录集,ExecuteSQL是执行SQL语句,括号中的txtSQL参数指的是将要执行的SQL语句,也就是上面查询传递的内容。MsgText是指的是执行完SQL语句后的弹出框,是成功还是失败之类的。
所以整段代码的含义就是:执行txtSQL中的代码记录在mrc中。
3.EOF(End of File)和BOF(Before of FIle)
看到这些代码,相信大家都会很熟悉,因为他们从我们与数据库的接触开始就出现了,我对这个总是弄错,所以在这总结一下:
BOF:指当前记录位置位于Recordset对象的第一个记录之前
EOF:指当前记录位置位于Recordset对象的最后一个记录之后
这两个的属性值均返回布尔型:True和False.(默认值为true)
如图所示:
让我们根据代码来分析它们各自的作用。
(1)
txtSQL = "select * from User_Info where userID='" & txtUsername.Text & "'" '查询User表 Set mrc = ExecuteSQL(txtSQL, MsgText) If mrc.EOF Then '判断是否存在数据 MsgBox "没有这个用户,请重新输入用户名!", vbOKOnly + vbExclamation, "警告" txtUserName.Text = "" txtUserName.SetFocus Exit Sub End If如上:If mrc.EOF Then 进行判断,意思是,如果在User表中从第一条记录到最后一条记录的下一条中没有该数据,则进行后面的代码。
(2)
txtSQL = "select * from student_Info where userID= '" & Trim(Combo1.Text) & "' and Ischeck='未结账'" Set mrc = ExecuteSQL(txtSQL, MsgText) While mrc.EOF = False mrc.Fields(11) = "结账" mrc.Update mrc.MoveNext Wend如上面代码所示,在student表中进行查询,在while中循环,如果表中最后一条记录的后面有数据即:mrc.EOF=Flase,则执行循环。
(3)
看到这个是不是感觉很熟悉,它是学生信息管理系统中的查询,对于BOF的运用非常重要。
因为在点击第一条记录的时候,游标会不断上移直至第一条记录,那么当游标已经在第一条记录的时候,我们还点击上一条,那么记录就会为空值,所以就会出现无法移动游标而报错。
那么如何解决这个问题呢?就是我们可以利用mrc.bof 和mrc.eof返回值的不同让记录集显示到最后一行记录,这样就可以避免出现错误。我们可以再其中加入这样的代码:
If mrc.BOF=True and mrc.EOF=False Then mrc.MoveLast
如果点击上一条时正好记录时第一条记录。让游标指向最后一条记录,通过mrc.movelast使游标回到最后一条记录,从而让它形成一个循环往复下去。这样就不会报错了。
4.Exit Sub
我们在判断中经常用到Exit Sub,它到底是用来干什么的?
Exit Sub就是中断程序,他的作用是将运行的语句到此中断,不在执行后面的代码。
在系统的登陆窗体中,设定 miCount = 0,是为了判断登陆次数。如下面代码:
Private Sub cmdOK_Click() txtSQL = "select * from User_Info where userID='" & txtUsername.Text & "'" Set mrc = ExecuteSQL(txtSQL, MsgText) If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then ’密码验证 OK = True Me.Hide userName = Trim(txtUsername.Text) frmMain.Show<pre name="code" class="vb" style="font-size:14px; line-height: 26px;"> End If miCount = miCount + 1 '密码次数的验证 If miCount = 3 Then Unload Me End If End Sub
如果没有Exit Sub,假如你已经输错了两次代码,第三次输入对了,那么代码执行完密码验证后还会执行密码次数的验证,第三次无法进入系统,所以这避免了错误。在很多的if语句中都要用到Exit Sub,防止代码的继续执行导致的错误。
总结:点滴知识点的积累在我看来相当的重要,每一次总结都是对知识的重新理解和认识。学而不思则罔大概就是这个道理吧!