机房开放收费管理系统—后期总结反思
在写了第一个机房收费管理系统功能分析表以后,我是这样想的,既然要模仿现在这个收费管理系统,那么就要了解它的功能,初步知道了功能,那如何实现这个功能,是什么技术支持,这些都好说,比较难找的就是这些功能,这些背后的东西,背后的联系,各自的细节处理等等这些东西都是需要好好考虑的。
就进行第一次分析后,我的步骤就是,按照后台操控、前台管理,分别走了这么一趟,测试过新卡注册、充值、刷卡上下机,各个权限的记录查询,结账,报表...
我把凡是和数据打交道的窗体都初定为一个数据库中的数据表,这样数据处理起来就会简单一点,可是又有好多表关联很紧,于是我就把它们"合并同类项"了,最后定下来了8个表,可是经过这个收费系统各个功能的一通儿实现后,发现这几个表根本不够,有的表中缺少一些其他的数据说明,于是我就增加几列来存储那些数据。有的数据没地儿存储,那只有新建表来存放这些数据啦,难不成让这些数据 "露宿街头"吧~ 。
我认为针对这个系统,了解各个功能窗体还主要是用于分析建表,对于数据库编程来说,主要对象还是数据库里数据的增删改查的基本操作。同样,这些简单的操作叠合在一起就会有金字塔般的效果。很神奇的哈~~
就这样,清点一下 总共是10各表。
其中的表的字段名定义很多不规范的,还需要好好总结,学习。
表1 Rguser_info(注册学生信息/学生的基本信息/学生的上机消费/余额信息)注:在这个表里增加了注册老师这一表项。
学号 | 姓名 | 系别 | 年级 | 班级 | 卡号 | 余额 | 性别 | 状态 | 备注 | 注册老师 |
Student_id | student_name | Subject | grade | class | Card_no | Blance | Sex | Student_state | Remark | Rg_Teacher |
表2 ChargeMo_info(学生充值信息/收取金额查询)
卡号 | 充值金额 | 充值日期 | 充值时间 | 充值教师 | 结账状态(未/已结帐) | 写入结账状态的日期 (用于后面的结账报表) |
Card_no | Charge_amount | Charge_date | Charge_time | Charge_teacher | Close_state | Close_date |
表3 CloseMo_info(退还学生金额信息,退卡信息)
卡号 | 退还金额 | 退还日期 | 退还时间 | 结账老师 | 结账状态() |
Card_no | Close_amount | Close_date | Close_time | Close_teacher | Close_state |
表4 Operator_info(操作员工作记录查询)
序号 | 教师 | 级别 | 上机日期 | 上机时间 | 下机日期 | 下机时间 | 机器名 |
Serial_no | Teacher_name | Level_no | Rg_date | Rg_time | Exit_date | Exit_time | Computer_name |
表5 ModifyOperator_info(添加、删除操作员)
用户名 | 用户级别 | 密码 | 姓名 | 开户人 |
Yhm | Level_no | password | xm | khr |
表6 StudentRcd_info(学生上机记录)
卡号 | 姓名 | 上机日期 | 上机时间 | 下机日期 | 下机时间 | 消费金额 | 余额 | 备注 |
Card_no | Student_name | login_date | login_time | Down_date | Down_time | Expense | Blance | Remark |
表7 OndutyOperator_info(正在值班老师查询)
教师 | 级别 | 登录日期 | 登录时间 | 在线状态 | 机器名 |
teacher_name | Level_no | Login_date | Login_time | Teacher_state | Computer_name |
表8 SetBasedata_info(基本数据设定)
固定用户半小时消费 | 递增时间 | 最少时间 | 准备时间 | 最少金额 |
Half_cost | Time_addstep | Time_atleast | Time_getready | Money_atleast |
表9 DayCheckout_info(日结账报表)
上期充值卡余额 | 当日充值总额 | 当日消费 | 当日退款 | 本期充卡余额 | 备注 |
Lastcharge_blance | Todaycharge_blance | Today_expense | Today_close | Thischarge_blance | Ramark |
表10 WeekCheckout_info(周结账报表)
上期充值卡余额 | 本期充值总额 | 本期消费金额 | 本期退款金额 | 本期充值卡余额 | 备注 |
Lastcharge_blance | Thischarge_amount | Thisexpense_amount | Thisclose_amount | Thischarge_blance | remark |
表9和表10 是新增的表,主要是针对后面的报表打印,要使用GRD++Report 控件,如果单独有两个表来存储相关的数据,那会很省力。
接下来说说,在这个收费管理系统内部编码的过程遇到的一些问题。
1.问题:出现学生消费金额为null值不可读,这些问题出于未正常结账,客户端非正常关闭,这些信息多是因为调试阶段出现问题。
2、问题:显示记录信息的控件会"信息滞留",就是在你进行下一个操作的时候还回现实着上一个学生的信息。这样容易发生错误。只要在change过程里写一个清空,然后再初始化一下。
解决方法如下:
Private Sub txtCardno_Change()
myflexgrid.Clear
With myflexgrid
.CellAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "充值金额"
.TextMatrix(0, 2) = "充值日期"
.TextMatrix(0, 3) = "充值时间"
.TextMatrix(0, 4) = "充值老师"
End With
End Sub
3、如何限制文本框的输入字符数,其实这个功能用处很大的,也很简单就用到了一个textbox的属性,maxlength 属性。0 为默认。
4、一开始设想的时候没有把退卡和注册联系起来。
这样把退卡和注册联系起来,在后面的查找信息可以把退卡的学生直接排除掉。如果退过卡的学生需要再次上机也不会出现"该用户已注册"的错误信息。
5.在关于学生信息信息维护的好多个联合查找窗体中,这些联合的搜索条件是为了使搜索信息更精确,这样flexgrid控件就 只显示一行信息。这需要多个combobox 之间有个限制关系。
在关于操作员记录,学生上机记录等联合查询中,就需要控件能够显示多条数据了。
Option Explicit
Private Sub Form_Load()
Dim i As Integer
For i = 1 To 12
Combo1.AddItem i
Next i
End Sub
Private Sub Combo1_Click()
Dim i As Integer
Combo2.Clear '这样就实现了在combo2中只去掉在combo1.text 的值。
For i = 1 To 12
Combo2.AddItem i
Next
Combo2.RemoveItem (Combo1.ListIndex)
End Sub
6、一些只能选的combox 控件值,应该限制一下属性。style 属性。
使得只能选择,而不能自己填写。
7.点选数据窗体(flexgrid 控件)中的某行数据,判断是否有一行数据被选中,myflexgrid.text 是指当前选中行的首列字段值。可以根据myflexgrid.text 这个字段值来判断。
8、在基本数据设定这个窗体里,我是提前写进了数据,就一条数据,以后直接在这个基础上进行数据的更改操作。
9.已退卡的 再次注册,后面的查询就要多添加一个限制条件。
10、发现把txtsql设成公共变量,给我前期实现功能、后期调试程序,造成了很大的不便。在模块的使用,变量的使用上还存在不足。有不少简便的算法都想不到,使得编写出来的代码显得过于臃肿。
总结:整体的来说,通过这十多天对于这个机房收费管理系统各个功能的实现,发现了很多问题。
1、自身对整个工程的进度缺乏掌控,以致进度比较慢,到近些天才做完,要知道像这种系统还是很小的呢,想来做那些大工程的时候是需要很强毅力的。
2、在写代码的时候,感觉这一行行代码从自己拇指间流过,感觉不错,可是看看这一屏幕的代码,是那么的臃肿,其中不乏好多重复的代码,从一个程序员的基本素质看,代码的复用率不高,自然效率就上不去,其中会存在很多问题,这一通下来,感觉自己的代码虽然能干活,但是不像个样子。自己VB学的也不扎实,进来在论坛里发帖提问,发现了有一个人用到自定义类型来回帖,突然有点返回去看陈伟老师视频的冲动,真的该好好返回去看看那些视频了,真正掌握了一门语言,在其中自由自在、随心所欲的解决问题,是那样的顺手,那样的自然。
3、对于数据库的知识,目前做的这两个大一点的实例,还只是用到的初级的对结果集的操作,还有对于建立表时,其中的关系设置,游标,锁 这样一些东西都还没有涉及到呢。不过对于结果集的最多体会还是处理删除操作,因为这个删除操作需要判断当前结果集里是否有数据。还就是给表、字段、变量,起名字的时候还是生疏,有一部分还是不合起名规则的。
4、初步了解了一点把数据库中数据映射显示出来的报表控件的使用。