【前言】
经过一个多月时间的学习第一次机房收费系统终于是完成了,其中借鉴了许多前辈和同学的经验。充分利用现有的学习资源为己用,再将所学所用整合为自己脑子里的知识,这应该就是站在巨人的肩膀的真谛吧!下面就对整个系统进行一下总结,巩固自己学习的知识。
机房我是从上下机部分开始的,该部分的总结可以点击传送门查看,有兴趣的同学可以看看,具体就不在累述。下面是对机房整体总结性的导图:
开始机房是首先我们要对其整体结构有一定的了解,机房主要分为三大功能模块:一般用户、操作员和管理员。其中不同用户等级拥有不同权限,等级越高权限越高,高权限拥有低权限所有功能。具体顺序:管理员→操作员→一般用户,下面我们由一般用户逐级介绍,还是先看导图:
一般用户:该功能模块中主要涉及的都是数据的增删改,因此需要注意各个数据表的调用和基础sql语句的严格性和有效性。
在该模块需要重点注意的有两点:1.一般用户一般我们认为是学生即普通用户,作为消费者一般用户应只能修改或查询自身信息,而不能对其他用户信息进行修改或查询。因此在使用一般用户权限登录机房收费系统时需要对其设置权限,禁止查询自身之外的客户信息。2.上机状态查询功能涉及到上下机操作,这是作为普通用户不应该具有的权限。我们可以再登陆时验证用户等级,当一般用户登录时该功能不可见,只有在更高权限用户登录时才可以使用此功能。
接下来是操作员部分,思维导图如下:
操作员:首先操作员拥有一般用户所有权限,然后在此基础上添加了用户注册、充值和退卡功能及更多的记录查询功能。这里的操作员更类似于工作人员的性质,拥有基本的客户信息增改删功能。
该模块的重点在于组合查询部分,组合查询每个人都有自己不同的思路,我的整体思路大概是:首先限制第二行和第三行为不可输入,在第一行条件输入时检测第一个组合关系输入是否为空,如为空则执行第一行条件语句,否则第二行可输入,继续输入第二行查询条件,以此类推。代码部分如下所示:
Private Sub cmdquery_Click()
Dim mrc As ADODB.Recordset
Dim txtSQL As String
Dim msgtext As String
txtSQL = "select * from student_Info where"
If Trim(com1.Text) = "" Or Trim(com2.Text) = "" Or Trim(txt1.Text) = "" Then
MsgBox "请填写完整的查询条件", vbInformation, "提示"
Exit Sub
Else
txtSQL = txtSQL & " " & Field(com1.Text) & " " & com2.Text & "'" & Trim(txt1.Text) & "'"
If Trim(com7.Text) <> "" Then
If Trim(com3.Text) = "" Or Trim(com4.Text) = "" Or Trim(txt2.Text) = "" Then
MsgBox "请填写完整的查询条件", vbInformation, "提示"
Exit Sub
Else
txtSQL = txtSQL & "" & Field(com7.Text) & " " & Field(com3.Text) & "" & com4.Text & "'" & Trim(txt2.Text) & "'"
If Trim(com8.Text) <> "" Then
If Trim(com5.Text) = "" Or Trim(com6.Text) = "" Or Trim(txt3.Text) = "" Then
MsgBox "请填写完整的查询条件", vbInformation, "提示"
Exit Sub
Else
txtSQL = txtSQL & "" & Field(com8.Text) & " " & Field(com5.Text) & "" & Trim(com6.Text) & "'" & Trim(txt3.Text) & "'"
End If
End If
End If
End If
Private Sub com7_Click()
If com7.Text <> "" Then
com3.Enabled = True
com4.Enabled = True
com8.Enabled = True
txt2.Enabled = True
End If
End Sub
在组合查询时还需注意一点:在原始数据表中学号和卡号都定义为字符串类型,但是在比较大小时字符串类型无法实现此功能,就会出现比较大小功能并不能实现。所以我们需要将数据表中相关字符串类型转化为数值类型,这样才可以实现改功能。
管理员部分导入如下:
管理员:该角色类似于BOSS拥有所有的权限,包括所有用户的增删、基础数据设定、当前员工工作状态查看以及最重要结账和收入报表的查看。其中关于基本数据的增改删的部分就不在介绍,报表部分的总结可以可以点击传送门查看,下面我们主要介绍结账部分的逻辑。
结账部分在源程序中只包括了操作员的结账,但是我们知道有很多情况下管理员也进行了很多的操作。所以应该添加上管理员结账,否则管理员进行的操作始终处于未结账状态。结账功能中购卡、充值、退卡和临时用户只是数据的增改删,无需过多累述。重点在汇总部分:总售卡=售卡总数-退卡总数 充值金额中包括临时用户的金额,因此为避免重复计算 应收金额=充值金额-退款金额,临时金额不计算其中。代码如下:
If st.Caption = "汇总" Then
Dim i As Integer
If txtcash.Text = "0" Then
txtSQL = "select * from student_Info where userID='" & Trim(comuser.Text) & "'" & " and Ischeck='未结账'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
txtsk.Text = mrc.RecordCount '计算售卡数目
txtSQL = "select * from CancelCard_Info where userID='" & Trim(comuser.Text) & "'" & " and status='未结账'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
txttk.Text = mrc.RecordCount '计算退卡数量
txtzs.Text = Val(txtsk.Text) - Val(txttk.Text) '计算总售卡数
txtSQL = "select * from student_Info where userID='" & Trim(comuser.Text) & "'" & " and type='临时用户'" '& " and status='使用'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
For i = 1 To mrc.RecordCount
txttemcash.Text = Val(txttemcash.Text) + Val(Trim(mrc.Fields(7))) '临时金额计算
Next i
mrc.Close
txtSQL = "select * from Recharge_Info where userID='" & Trim(comuser.Text) & "'" & "and status='未结账'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
txtrecharge.Text = ""
Do While Not mrc.EOF
txtrecharge.Text = Val(txtrecharge.Text) + Val(Trim(mrc.Fields(3)))
mrc.MoveNext '充值金额计算
Loop
txtSQL = "select * from CancelCard_Info where userID='" & Trim(comuser.Text) & "'" & " and status='未结账'"
Set mrc = ExecuteSQL(txtSQL, msgtext)
txttj.Text = ""
Do While Not mrc.EOF
txttj.Text = Val(txttj.Text) + Val(Trim(mrc.Fields(2)))
mrc.MoveNext '退款金额计算
Loop
txtcash.Text = Val(txtrecharge.Text) - Val(txttj.Text) '应收金额计算
End If
【总结】
机房收费系统是我们学习过程中里程碑式的项目,在经过这么长时间的学习后,无论是对代码的熟悉度还是自信心方面亦或者解决问题的能力都有了很大的进步。在其中也少不了各位同学的帮助,真的很感谢各位的帮助同时也让我认识到:闻道有先后,术业有专攻。一定要和别人多交流多学习,既提升了自己也帮助别人提高了自己。