机房收费系统差不多有一个半月的时间,总的来说过程很纠结很难过,总是在着急赶时间和烦躁中完成的。但是完成之后觉得当初遇到的问题都不算什么,反而带给自己更多的知识和解决问题的方法。想好好写篇总结纪念一下,但是想到的之后这么多,一些功能的实现前面的博客已经写过了。这是整体的总结:
一、总体看懂菜单功能——用户权限。
用户一共有三种权限,分别为一般用户、操作员和管理员。每个用户权限大小各不同。从设计系统的开始就应该有这种权限等级的意识,根据权限的不同而设计用户的功能。不要等最后调试的时候才做,当真正做一个大的系统的时候就太晚了。应该首先就具有全局观念。
一般用户只负责管理查询学生上机的基本信息,权限最低,主要体现在“查”上,包括查看余额,上机记录。充值记录、上机状态等。
操作员的权限就稍微大一些,可以对新用户注册、所有学生进行充值、退卡等操作,还可以查询此操作员的充值和退卡金额,对学生信息的查询不实局限在只单一的查,而是进行统计,有方向的查看,例如学生基本信息维护和学生上机统计信息查询两个窗体。操作员工作记录是对所有操作员工作的查询,也是统计系统全面或有方向的查询,不想一般用户那样单一。
管理员权限最大,和钱有直接的接触。对学生上机的结账操作和账单查询,学生上机的基本数据的设定,查看正在值班教师,打印报表等,同时这种权限问题正在管理员设定的,当管理员注册一个用户时同时也规定了他的权限。
而上下机操作和对学生进行强制下机是所有员工都可以使用的。并且员工都可是行使自身权限和比自身低的所有权限。
只知道这个系统有这样三种权限,但是这样做的意义在哪里呢,在敲代码的时候并没有多想,只是实现了他们的每一个功能。我想权限的管理是为了更好的设计数据库吧,也或者是为了满足业务需求。
二、界面设计。
刚开始的时候就遇到了界面的问题,因为在MDI窗体只能添加有对其属性的控件,所以一开始是借用的学生信息管理系统的方法,因为在MDI父窗体上添加picturebox控件作为框架容器,但是在整体运行时就遇到了麻烦,由于有正在操作的子窗体时别的窗体就不能获得焦点,只能一次打开一个功能窗体,使用完关闭在打开另一个子窗体,这无疑增加了麻烦。
最后采用了添加一个form窗体作为容器控件,对这个窗体的属性做一些更改之后界面就更美观了,当再打开另一个子窗体时上一个就自动显示为最小化。当然这个方法并不是我想出来的,赵崇同学的博客:
三、我的两次验收。
这里最需要我的检讨。自己觉得拖得时间太长了,最后就不认真起来了,第一次验收的时候还有很多错误,我要是师傅会很严厉的骂我自己一顿的。师傅说敲这个系统不是为了完成它而是为了学习知识体会做系统的过程而做。很不耐心的回来改好了错误。但是从心里厌烦的报表还是出了问题,以至于我的两次验收都是很不光彩。
回来做了很多的思考。包括设计到“钱”的问题。
我出现的一些问题:
因为所有的输入框都会直接的写入到数据库表中,所以对数据的类型就需要注意,所以在输入框输入时都应该有限制的,或者是长度或者是符号等,这里要回顾一下以前学过的ASCII表。
退卡,我设计的是退卡时这个用户还存在,只是退还了所有剩余金额,而有的是把这个用户彻底从数据数中删除。如果用户正在上机就不能进行退卡操作,还有就是退卡和上下机的关系。
结账,要注意是否还有正在上机的同学,如果有怎么办,这里应该给一个提示。
到现在还在困惑我的一个问题还没有解决,就是怎么想网吧那样,可以在你最后几分钟提醒用户余额不足,不知道是怎么实现的一直在计算用户的消费还是?这是个大问题。
四、学会代码复用。
整个系统一共有四个窗体用到组合查询,四个窗体用到导出excel表,凡是查询的就会用MSFlexGrid表来显示结果,每个功能实现的代码都有一样的,这是为了减少代码的冗余和免得自己再敲一遍代码,我们可以采用模块思想。当再遇到这个功能时只需要调用即可。例如:组合查询中判断输入框是否为空,将连接符转化成数据库表中的字段名,将选择的字段汉字转化成数据库中的字段等。功能怎么都是实现,为什么不让自己的代码简单一些呢。
例如:
Public Function FieldName(strFieldName As String) As String Select Case strFieldName Case "卡号" FieldName = "cardno" Case "学号" FieldName = "studentNo" Case "姓名" FieldName = "studentName" Case "性别" FieldName = "sex" Case "系别" FieldName = "department" Case "年级" FieldName = "grade" Case "班号" FieldName = "class" Case "上机日期" FieldName = "ondate" Case "上机时间" FieldName = "ontime" Case "下机日期" FieldName = "offdate" Case "下机时间" FieldName = "offtime" Case "消费金额" FieldName = "consume" Case "余额" FieldName = "cash" Case "备注" FieldName = "status" Case "级别" FieldName = "level" Case "教师" FieldName = "UserID" End Select End Function
五、数据库。
在刚开始的时候听了家长的话,找清了每个窗体与每个表的关系。之前也写过一篇别人看来都很恐怖的博客,因为实在很乱,关系只有我自己看的懂。在学习一点软工知识后觉得没有好好的对系统对分析没有自己亲自建数据库而遗憾。
六、整理心态。
我承认自己的心态很不好,在敲机房收费的日子我的心情总是伴随着问题的出现与解决而变化。遇到问题以为自己解决不了而烦恼,其实到了自己做总结的时候想想整个系统代码都是自己敲出来的还是有种有成就的感觉。在开始的时候总是对别人说不知道从哪开始就不开始,只有自己做了和做过了才知道做的事情带给自己的是什么,学到的是什么。希望这个系统让我在以后的日子里不会畏惧任何的学习。