机房收费系统——编写思路

时间:2022-12-20 15:34:55

       机房收费系统中涉及到的对数据库的操作有:增删改查四类。现在按照不同的操作将机房的26个窗体分成四类,然后一类一类的去完成!


一、与“增”有关的窗体(3)


       分别是:添加用户窗体、基本数据设定窗体、注册窗体。当你理解了其中一个窗体的代码,其他的窗体就很容易实现了,所以咱们以一个窗体为例来了解“增”的操作,就拿添加用户窗体来举例!思路:判断用户名是否存在,各个文本框是否为空,密码和确认密码是否一致。好,这些判断工作做完后,就写添加的代码了,如下:

<span style="font-size:18px;">        txtSQL = "select * from User_Info "      '调处数据表
Set mrc = ExecuteSQL(txtSQL, Msgtext) '执行上面的语句</span>

<span style="font-size:18px;">            mrc.AddNew                           '增加新行,在临时列表中
mrc.Fields(0) = Trim(Text1.Text)
mrc.Fields(1) = Trim(Text3.Text)
mrc.Fields(3) = Trim(Text2.Text)
mrc.Fields(2) = Trim(Combo1.Text)
mrc.Fields(4) = UserName
mrc.Update '更新数据库
mrc.Close
Me.Hide
MsgBox "添加用户成功!", vbOKOnly + vbInformation, "提示"</span>

好的,基本数据设定窗体和注册窗体就可以参考完成了!


二、与“删”有关的窗体(1)


       此类窗体比较少,只有删除和添加用户窗体,但是不要小看它,因为你在其他的窗体中也会用到它的!思路:选择某行信息,在数据库中找到对应的信息,删除数据库中信息。代码如下:

<span style="font-size:18px;">    Dim txtSQL, Msgtext As String
Dim mrc As ADODB.Recordset
Dim mrcc As ADODB.Recordset

MSFlexGrid1.SelectionMode = flexSelectionByRow '单击的时候选择的是整行
MSFlexGrid1.FocusRect = flexFocusNone '在当前单元的周围画一个焦点框
MSFlexGrid1.HighLight = flexHighlightWithFocus '该值决定了所选定的单元是否突出显示

If Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)) = "用户名" Then
MsgBox "没有选中行,请重新选择!", vbOKOnly + vbExclamation, "提示"
<span style="white-space:pre"></span>Exit Sub
End If
'选择要删除的行进行删除
txtSQL = " select * from User_Info where userID = '" & Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)) & "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
If Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)) = Trim(UserName) Then
x = MsgBox("该用户正在登陆,不能删除!", vbOKOnly + vbExclamation, "提示")
Else
txtSQL = "delete from User_Info where userID ='" & Trim(MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 0)) & "'"
Set mrcc = ExecuteSQL(txtSQL, Msgtext)
'删除选中行对应数据库中的数据
MSFlexGrid1.RemoveItem MSFlexGrid1.Row
MsgBox "删除成功!", vbOKOnly + vbInformation, "提示"
End If</span>

三、与“改”有关的窗体(4)


       分别是:退卡窗体、修改密码窗体、修改学生信息窗体、充值窗体。好,首先以充值窗体为例了解“改”的操作。思路:提取卡号信息,判断余额是否大于最少余额(代码中没有体现,自行编写),判断充值后余额是否大于最少余额,充值后更新充值记录表和学生信息表中的余额数据,显示文本信息,提示充值成功。代码如下:

<span style="font-size:18px;">                                                    '提取出学生信息表中符合卡号的信息
txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrcc = ExecuteSQL(txtSQL, Msgtext)
If mrcc.EOF Then
MsgBox "卡号不存在,请重新输入!", vbOKOnly + vbExclamation, "提示"
txtCardNo.SetFocus
txtCardNo.Text = ""
txtRechargeMoney.Text = ""
Exit Sub
Else
Number = Trim(mrcc.Fields(1)) '获取对应卡号的学号信息
lastcash = Val(Trim(CStr(mrcc.Fields(7)))) '获取对应卡号的余额信息
End If
mrcc.Close
'更新recharge表中的数据
txtSQL = "select * from Recharge_Info"
Set mrc = ExecuteSQL(txtSQL, Msgtext)

mrc.AddNew
mrc.Fields(1) = Number
mrc.Fields(2) = Trim(txtCardNo.Text)
mrc.Fields(3) = Trim(txtRechargeMoney.Text)
mrc.Fields(4) = Format(Date, "yyyy-mm-dd")
mrc.Fields(5) = Time
mrc.Fields(6) = UserName
mrc.Fields(7) = "未结账"
mrc.Update
mrc.Close
'更新student表中的最新余额
txtSQL = "select * from student_Info where cardno = '" & Trim(txtCardNo.Text) & "'"
Set mrcc = ExecuteSQL(txtSQL, Msgtext)
mrcc.Fields(7).Value = lastcash + Val(txtRechargeMoney.Text)
a = mrcc.Fields(7)
mrcc.Update
mrcc.Close
'文本框中显示充值信息
Text1.Text = "充值卡号:" & Trim(txtCardNo.Text) & vbCrLf _
& "上次卡内余额:" & lastcash & vbCrLf _
& "最新卡内余额:" & a & vbCrLf _
& "充值日期:" & Date & vbCrLf _
& "充值时间:" & Time & vbCrLf _
& "充值教师:" & UserName & vbCrLf
MsgBox "充值成功!", vbOKOnly + vbInformation, "提示"
txtCardNo.Text = ""
txtRechargeMoney.Text = ""
Text1.Text = ""</span>

四、关于“查”的窗体(13)


       关于“查”可以分为组合查询单项查询。组合查询有:学生基本信息维护窗体、学生上机统计信息窗体、操作员工作记录窗体;单项查询有:结账窗体、日结账单窗体、周结账单窗体、正在值班教师查询窗体、收取金额查询窗体、学生查看余额窗体、学生查看上机记录窗体、学生上机状态查看窗体、充值记录窗体、金额返还信息查询窗体。先举例了解一下单项查询的操作,比如说学生查看余额窗体,思路:保证输入卡号不为空且存在(可用),调出学生表中对应行的信息!代码如下:

<span style="font-size:18px;">   Dim txtSQL As String
Dim Msgtext As String
Dim mrc As ADODB.Recordset

If txtCardNo.Text = "" Then '保证卡号不为空
MsgBox "请输入卡号!", vbOKOnly + vbExclamation, "提示"
txtCardNo.SetFocus
Exit Sub
Else
txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
If mrc.EOF = True Then '数据库中不存在此条信息
MsgBox "卡号不存在或者不再使用!", vbOKOnly + vbExclamation, "提示"
txtCardNo.Text = ""
txtCardNo.SetFocus
Exit Sub
Else '从数据库中调出信息
txtStuNo.Text = mrc.Fields(1)
txtName.Text = mrc.Fields(2)
cboSexy.Text = mrc.Fields(3)
txtDeparte.Text = mrc.Fields(4)
txtGrade.Text = mrc.Fields(5)
txtClass.Text = mrc.Fields(6)
txtState.Text = mrc.Fields(10)
txtComment.Text = mrc.Fields(8)
txtRemain.Text = mrc.Fields(7)
mrc.Close
End If
End If</span>

       单项查询很简单吧,组合查询也不难,下面咱们来了解组合查询的操作,以学生基本信息维护窗体为例,思路:第一行信息填满,可以查询,组合关系不为空,第二行可用,必须填写,第二个组合关系不为空,第三行可用,第三行必须填写。查询顺序是:先查第一行信息,查第二行的时候,先写第一行信息的条件,再加上第二行的条件,中间涉及到一个SQL的继承,总体的意思就是,从上到下查下来,依次继承上一个条件,是条件的简单相加。理解了什么是条件,条件怎么加的一起就OK!代码如下:

<span style="font-size:18px;">    Dim a, b, c
Dim txtSQL As String
Dim Msgtext As String
Dim mrc As ADODB.Recordset

txtSQL = "select * from student_Info" '调出数据库中student表的信息
Set mrc = ExecuteSQL(txtSQL, Msgtext) '执行调出语句

If Trim(Combo1(0).Text) = "" Then '保证第一行数据不为空
MsgBox "请输入第一行字段名!", vbOKOnly + vbExclamation, "提示"
Combo1(0).SetFocus
Exit Sub
Else
If Trim(Combo4(0).Text) = "" Then
MsgBox "请输入第一行操作符!", vbOKOnly + vbExclamation, "提示"
Combo4(0).SetFocus
Exit Sub
Else
If Trim(Text1(0).Text) = "" Then
MsgBox "请在第一行输入要查询的内容!", vbOKOnly + vbExclamation, "提示"
Text1(0).SetFocus
Exit Sub
Else
'按第一行填写的条件,查询并调出数据库中的信息
txtSQL = "select * from student_info where " & tName(Combo1(0).Text) & Combo4(0).Text & "'" & Text1(0).Text & "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)

If mrc.EOF Then '判断数据库中有没有符合条件的信息
MsgBox "当前没有该内容!", vbOKOnly + vbCritical, "提示"
Exit Sub
Else
If Combo7(0).Text = "" Then
GoTo case1
End If
End If
End If

Select Case Combo7(0) '利用select语句,判断与或者非,并记入a(组合关系)
Case "与"
a = "and"
Case "非"
a = "or"
End Select

If Not Testtxt(Combo1(1).Text) Then
MsgBox "请输入第二行字段名!", vbOKOnly + vbExclamation, "提示"
Combo1(1).SetFocus
Exit Sub
Else
If Not Testtxt(Combo4(1).Text) Then
MsgBox "请输入第二行操作符!", vbOKOnly + vbExclamation, "提示"
Combo4(1).SetFocus
Exit Sub
Else
If Not Testtxt(Text1(1).Text) Then
MsgBox "请输入第二行要查询的内容!", vbOKOnly + vbExclamation, "提示"
Text1(1).SetFocus
Exit Sub
Else '继承上一行查询时的条件(txtSQL)
txtSQL = txtSQL & a & " " & tName(Combo1(1).Text) & Combo4(1).Text & "'" & Text1(1).Text & "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)

If mrc.EOF Then
MsgBox "当前没有该内容!", vbOKOnly + vbCritical, "提示"
Exit Sub
Else
If Combo7(1).Text = "" Then
GoTo case1
End If
End If
End If

Select Case Combo7(1)
Case "与"
a = "and"
Case "或"
a = "or"
End Select

If Not Testtxt(Combo1(2).Text) Then
MsgBox "请输入第三行字段名!", vbOKOnly + vbExclamation, "提示"
Combo1(2).SetFocus
Exit Sub
Else
If Not Testtxt(Combo4(2).Text) Then
MsgBox "请输入第三行操作符!", vbOKOnly + vbExclamation, "提示"
Combo4(2).SetFocus
Exit Sub
Else
If Not Testtxt(Text1(2).Text) Then
MsgBox "请在第三行输入要查询的内容!", vbOKOnly + vbExclamation, "提示"
Text1(2).SetFocus
Exit Sub
Else
txtSQL = txtSQL & a & " " & tName(Combo1(2).Text) & Combo4(2).Text & "'" & Text1(2).Text & "'"
Set mrc = ExecuteSQL(txtSQL, Msgtext)
If mrc.EOF Then
MsgBox "当前没有该内容!", vbOKOnly + vbCritical, "提示"
Exit Sub
Else
GoTo case1
End If
End If
End If
End If
End If
End If
End If
End If
case1:
With MSFlexGrid1
.Rows = 1
.CellAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "学号"
.TextMatrix(0, 3) = "余额"
.TextMatrix(0, 4) = "系别"
.TextMatrix(0, 5) = "年级"
.TextMatrix(0, 6) = "班级"
.TextMatrix(0, 7) = "性别"
.TextMatrix(0, 8) = "状态"
.TextMatrix(0, 9) = "备注"
.TextMatrix(0, 10) = "类型"
.TextMatrix(0, 11) = "日期"
.TextMatrix(0, 12) = "时间"
Do While mrc.EOF = False
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) = Trim(mrc.Fields(0))
.TextMatrix(.Rows - 1, 1) = Trim(mrc.Fields(2))
.TextMatrix(.Rows - 1, 2) = Trim(mrc.Fields(1))
.TextMatrix(.Rows - 1, 3) = Trim(mrc.Fields(7))
.TextMatrix(.Rows - 1, 4) = Trim(mrc.Fields(4))
.TextMatrix(.Rows - 1, 5) = Trim(mrc.Fields(5))
.TextMatrix(.Rows - 1, 6) = Trim(mrc.Fields(6))
.TextMatrix(.Rows - 1, 7) = Trim(mrc.Fields(3))
.TextMatrix(.Rows - 1, 8) = Trim(mrc.Fields(10))
.TextMatrix(.Rows - 1, 9) = Trim(mrc.Fields(8))
.TextMatrix(.Rows - 1, 10) = "固定用户"
.TextMatrix(.Rows - 1, 11) = Trim(mrc.Fields(12))
.TextMatrix(.Rows - 1, 12) = Trim(mrc.Fields(13))
mrc.MoveNext
Loop
AutocolWidth Me, MSFlexGrid1 '宽度自动适应文本大小
End With</span>
       其中,里面有个tName,它的作用是什么呢?它的作用就是将文本框中的文字转换为对应数据表中的英文,以便计算机能够理解!所以就有了下面的定义,代码如下:

<span style="font-size:18px;">Private Function tName(Englishname As String) As String
Select Case Englishname
Case "卡号"
tName = "cardno"
Case "学号"
tName = "studentno"
Case "姓名"
tName = "studentname"
Case "性别"
tName = "sex"
Case "系别"
tName = "department"
Case "班级"
tName = "class"
Case "年级"
tName = "grade"
End Select
End Function</span>

五、其他窗体(5)


       上篇博客写完了登陆窗体和首页的窗体,然后作者窗体、关于窗体、说明窗体都是没什么代码的,所以这里就没什么写的了。


总结


       至此,机房收费系统概览算是做完了。但是这只是实现了功能的部分,后面就要开始考虑其中的逻辑了。这也是很重要的一部分,相比来说,功能这一块儿是最简单的,不要有畏难心理!这些都不是很难的,认真去做就行!后期的想法很重要!