机房收费系统中涉及到的对数据库的操作有:增删改查,四类。现在按照不同的操作将机房的26个窗体分成四类,然后一类一类的去完成!
分别是:添加用户窗体、基本数据设定窗体、注册窗体。当你理解了其中一个窗体的代码,其他的窗体就很容易实现了,所以咱们以一个窗体为例来了解“增”的操作,就拿添加用户窗体来举例!思路:判断用户名是否存在,各个文本框是否为空,密码和确认密码是否一致。好,这些判断工作做完后,就写添加的代码了,如下:
<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>好的,基本数据设定窗体和注册窗体就可以参考完成了!
此类窗体比较少,只有删除和添加用户窗体,但是不要小看它,因为你在其他的窗体中也会用到它的!思路:选择某行信息,在数据库中找到对应的信息,删除数据库中信息。
代码如下:
<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>
分别是:退卡窗体、修改密码窗体、修改学生信息窗体、充值窗体。好,首先以充值窗体为例了解“改”的操作。思路:提取卡号信息,判断余额是否大于最少余额(代码中没有体现,自行编写),判断充值后余额是否大于最少余额,充值后更新充值记录表和学生信息表中的余额数据,显示文本信息,提示充值成功。代码如下:
<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>
关于“查”可以分为组合查询和单项查询。组合查询有:学生基本信息维护窗体、学生上机统计信息窗体、操作员工作记录窗体;单项查询有:结账窗体、日结账单窗体、周结账单窗体、正在值班教师查询窗体、收取金额查询窗体、学生查看余额窗体、学生查看上机记录窗体、学生上机状态查看窗体、充值记录窗体、金额返还信息查询窗体。先举例了解一下单项查询的操作,比如说学生查看余额窗体,思路:保证输入卡号不为空且存在(可用),调出学生表中对应行的信息!代码如下:
<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>
上篇博客写完了登陆窗体和首页的窗体,然后作者窗体、关于窗体、说明窗体都是没什么代码的,所以这里就没什么写的了。
总结:至此,机房收费系统概览算是做完了。但是这只是实现了功能的部分,后面就要开始考虑其中的逻辑了。这也是很重要的一部分,相比来说,功能这一块儿是最简单的,不要有畏难心理!这些都不是很难的,认真去做就行!后期的想法很重要!