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

       机房收费系统中涉及到的对数据库的操作有:增删改查,四类。现在按照不同的操作将机房的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)。

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

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

你可能感兴趣的:(机房收费系统——编写思路)