机房收费系统VB版,是我们第一个不参照代码做出来的系统。写一下做这个系统的历程,第一次完完全全自己的系统,值得记录!
首先进行功能分析:
机房收费系统总体上分三个级别:一般用户、操作员、管理员。每个权限有每个权限的特定功能。先看一般用户功能:
一般用户权限是最低的,仅仅能查看数据库中的记录;能修改的只有密码。一般用户仅能使用一般用户的功能。
然后看操作员:
操作员的权限高于一般用户,修改数据库的功能大大增加。操作员可以使用操作员和一般用户的功能。
最后我们看管理员的功能:
管理员拥有最大的权限,可以使用所有的功能。下图是 各级别用户对数据库操作情况。
以上所有的操作都是在数据库之上进行的。下面我们介绍数据库的情况。
以上是对数据库进行修改的主要操作,我们可以根据这些信息提取出几张大概的表:用户信息表(UserInfo)、注册表(又称学生表)、充值表、退卡表、上机表、下机表、基本信息表、账单表,其余的功能都可以以这几张表为基础进行操作。
此系统共用到了25个窗体,下面主要介绍两种对数据库操作的典型窗体。
1、查询
查询操作不会对数据库中的表进行修改,仅需要显示出符合条件的记录即可。同时查询操作还有一个特点,查询出的信息大部分是用控件MSHFlexGrid控件显示。MSHFlexGrid控件显示和操作表格数据。其对包含字符串和图片的表格提供了灵活的排序、插入数据和格式编排功能,使用简单操作方便同时满足系统功能的要求。
(1)我们先来看一个基本查询窗体:
代码:
Option Explicit '查询上机记录 Private Sub cmdOK_Click() Dim Up_Rst As ADODB.Recordset Dim strtxtSQL As String Dim strMsg As String Dim RstCount As Integer On Error GoTo Error_Handle '根据卡号查询上机记录 strtxtSQL = "select *from Up where CardNo='" & txtCardNo.Text & "'" Set Up_Rst =QuerySQL(strtxtSQL, strMsg) '显示 With MSHFlexGrid1 Do While NotUp_Rst.RecordCount = 0 .Rows = .Rows + 1 .TextMatrix(.Rows -1, 0) = Up_Rst.Fields(0) .TextMatrix(.Rows -1, 1) = Up_Rst.Fields(1) .TextMatrix(.Rows -1, 2) = Up_Rst.Fields(2) .TextMatrix(.Rows -1, 3) = Up_Rst.Fields(3) .TextMatrix(.Rows -1, 4) = Up_Rst.Fields(4) .TextMatrix(.Rows -1, 5) = Up_Rst.Fields(5) .TextMatrix(.Rows -1, 6) = Up_Rst.Fields(6) .TextMatrix(.Rows -1, 7) = Up_Rst.Fields(7) .TextMatrix(.Rows -1, 8) = Up_Rst.Fields(8) Up_Rst.MoveNext If Up_Rst.EOF =True Then Exit Do End If Loop End With Exit Sub ‘错误处理 Error_Handle: MsgBox Err.Description Exit Sub End Sub
(2)组合查询
代码:
' 查询 Private SubcmdInquire_Click() Dim Up_Rst AsADODB.Recordset Dim strtxtSQL AsString Dim strMsg AsString On Error GoToError_Handle '如果仅有一个查询条件 If cboRelation1.Text = "" Then cboRelation2.Enabled = False '查询 strtxtSQL = "select * from Up where" & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & " '" & Trim(txtInquire1.Text) &"'" Set Up_Rst = QuerySQL(strtxtSQL, strMsg) Else If cboRelation2.Text="" Then '查询 strtxtSQL = "select * from Up where" & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & "'" & Trim(txtInquire1.Text) &" '" & Trim(cboRelation1.Tag) & "" &Trim(cboFileName2.Tag) & " " & Trim(cboSign2.Text) &" '" & Trim(txtInquire2.Text) & "'" Set Up_Rst = QuerySQL(strtxtSQL, strMsg) Else '查询并显示符合三个条件的记录 strtxtSQL = "select * fromUp where " & Trim(cboFileName1.Tag) & " " &Trim(cboSign1.Text) & "'" & Trim(txtInquire1.Text) &" ' " & Trim(cboRelation1.Tag) & "" &Trim(cboFileName2.Tag) & " " & Trim(cboSign2.Text) &" '" & Trim(txtInquire2.Tag) & "'" &Trim(cboRelation2.Tag) & "" & Trim(cboFileName3.Tag) &" " & Trim(cboSign3.Text) & " '" &Trim(txtInquire3.Text) & "'" Set Up_Rst = QuerySQL(strtxtSQL,strMsg) End If End If
逻辑查询根据逻辑“与” 、“或”、空总共分为3中情况进行考虑:仅有一个查询条件;有两个查询条件;有三中逻辑情况,这样考虑就会简单很多。
2、修改
最基本的对数据库进行修改的操作,我们来看部分主要代码:
'存盘 Private SubcmdSave_Click() Dim Stu_Rst AsADODB.Recordset Dim Recharge_RstAs ADODB.Recordset Dim strtxtSQL AsString Dim strtxtSQL2 AsString Dim strMsg2 AsString Dim Stu_Rst2 AsADODB.Recordset Dim strMsg AsString Dim User_Rst AsADODB.Recordset Dim RegisterStateAs String On Error GoToError_Handle '判断是否已经注册 strtxtSQL = "select * from Stu whereCardNo='" & Trim(txtCardNo.Text) & "'and State='使用' " Set Stu_Rst = QuerySQL(strtxtSQL, strMsg) If Stu_Rst.EOF = False Then MsgBox "此卡号已经注册!" Stu_Rst.Close txtCardNo.SetFocus Exit Sub '未注册的话将注册信息写入学生表中 Else Stu_Rst.AddNew Stu_Rst.Fields(0) =Trim(txtCardNo.Text) Stu_Rst.Fields(1) =Trim(txtStuID.Text) Stu_Rst.Fields(2) =Trim(txtName.Text) Stu_Rst.Fields(3) = Trim(cboSexy.Text) Stu_Rst.Fields(4) =Trim(txtClass.Text) Stu_Rst.Fields(5) =Trim(txtGrade.Text) Stu_Rst.Fields(6) =Trim(txtDepart.Text) Stu_Rst.Fields(7) = Trim(txtPayMoneyShow.Text) Stu_Rst.Fields(8) =Trim(UserName) Stu_Rst.Fields(9) =Trim(cboState.Text) Stu_Rst.Fields(10) =Trim(txtComment.Text) Stu_Rst.Fields(11) = Date Stu_Rst.Fields(12) = Time Stu_Rst.Fields(13) = "已结帐" Stu_Rst.Update Stu_Rst.Close Msgbox "注册成功!" End If End Sub
和学生信息管理系统相比,机房收费系统做完之后感觉自己成长了很多,一些之前犯过的小错误,机房收费系统几乎没有遇到,因为是做完一个窗体调试一个窗体,所以整体测试的时候比较顺利。但是在做机房收费系统时遇到了很多之前没有见过的知识,比如:导出Excel、打印报表等之前没有遇到过的方面;同时还用到了很多之前没有用过的控件,比如:DateTimePicker、SStab等。
同时还有一些小的问题需要注意一下:
(1).登录时,判断用户名、密码是否输入若已经输入则执行查询操作,查询是否已经登录;
(2).将用户名附给全局变量UserName,并将对应的UserType赋值;
(3).开始需要有一组基本数据;
(4).在开始时给全局变量LeastTime、LeastMoney、VipPay等赋值;
(5).上机前查询卡号是否输入、已注册、是否余额充足、是否未登录;
(6).下机时考虑是否输入卡号、已经上机,上机时间是否小于最小上机时间,考虑递增时间,余额小于最小金额 时给出提示;
(7).注册时,判断注册信息是否不为空、考虑卡号是否已经注册、学号是否重复;
(8).充值时,考虑卡号是否已经注册、充值后的余额是否小于最小金额
(9).退卡时,考虑此卡是否已经注册、是否正在上机;
(10).日结账单与周结账单:考虑用什么事件触发在数据库中记录周结与日结账单;
通过做机房收费系统,不仅完善了自己的知识网,更增加了信心,之前没有想过自己单独完成一个系统,现在敢想了。同时,感觉自己在做系统时很“混乱”没有规划,没有什么规则和约束,想通过以后的学习更加地完善自己!