【机房收费系统】——知识点汇总

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyp0304Devin/article/details/82810893

前言

经历了两个多月的机房收费系统算是结了,结了并不意味着不学了,在机房中还是有很多值得我们学习的知识点,值得让我们思考的东西,有些逻辑思维还是很强的。现在将做的过程中感觉比较重要的一些知识点分享出来。

一、整体思路

在机房收费系统中有不同的级别,不同的级别有不同权限,他们所做的事情也不一样,权限是有限的。整个收费系统就像网吧一样,一般用户就相当于去上网的人,但上网的人有经常去的,还有只去一次的,这时就有了临时用户和固定用户,为什么要分固定用户和临时用户呢?那就是他们的待遇不一样!常去的人肯定会给予优惠,收的钱少。而只去一两次的就收费稍微贵点了。

 

机房收费系统主要有三个级别的使用者,管理员,操作员,一般用户,他们的权限是从低到高。职能从图可以看出来。

 

二、重点知识点

1.在开始之前我们首先应该理清模块中的知识,见博客 。

https://blog.csdn.net/yyp0304Devin/article/details/82744485

2.级别登录

在登录的时候我们会选择不同的级别登录,登录的时候如何让他们拥有权限,一般用户登录只能显示一般用户的权限,他看不了操作员和管理员的权限,对他不可见。其次就是操作员,他相当于一个网吧的网管,他没有网吧老板的权限,他在中间架起管理员和一般用户的桥梁,让管理员赚一般用户的钱。而管理员就拥有最高权限。

 

级别用户登录代码

If Trim(mrc.Fields(2)) = Trim("一般用户") Then               '一般用户的权限

        If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then     '判断密码是否正确

        txtsql1 = "select * from OnWork_Info"                         '获取到正在上机表

        Set mrc1 = ExecuteSQL(txtsql1, MsgText)

        Me.Hide

        UserName = Trim(txtUserName.Text)              '将用户名给username

        frmMain.Show

        frmMain.GeneralUserMenu.Enabled = True

        frmMain.GeneralUserMenu.Visible = True

        frmMain.OperatorMenu.Enabled = False

        frmMain.OperatorMenu.Visible = False

        frmMain.AdministratorMenu.Enabled = False

        frmMain.AdministratorMenu.Visible = False

        mrc1.AddNew                                              '添加更新到正在上机表里

        mrc1.Fields(0) = Trim(UserName)

        mrc1.Fields(1) = Trim(mrc.Fields(2))

        mrc1.Fields(2) = Trim(Date)

        mrc1.Fields(3) = Trim(Time)

        mrc1.Fields(4) = VBA.Environ("computername")

        mrc1.Update

        mrc1.Close '关闭数据连接

    Else

        MsgBox "输入密码不正确,请重新输入!", vbOKOnly, "提示"

        txtPassword.Text = ""

        txtPassword.SetFocus

        Exit Sub

   End If



   ElseIf Trim(mrc.Fields(2)) = Trim("操作员") Then '操作员的权限

        If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then '判断密码是否正确

        txtsql1 = "select * from OnWork_Info" '获取正在上机表

        Set mrc1 = ExecuteSQL(txtsql1, MsgText)

        Me.Hide

        UserName = Trim(txtUserName.Text) '将用户名给username

        frmMain.Show

        frmMain.GeneralUserMenu.Enabled = True

        frmMain.GeneralUserMenu.Visible = True

        frmMain.OperatorMenu.Enabled = True

        frmMain.OperatorMenu.Visible = True

        frmMain.AdministratorMenu.Enabled = False

        frmMain.AdministratorMenu.Visible = False

        mrc1.AddNew '添加更新到正在上机表离去

        mrc1.Fields(0) = Trim(UserName)

        mrc1.Fields(1) = Trim(mrc.Fields(2))

        mrc1.Fields(2) = Trim(Date)

        mrc1.Fields(3) = Trim(Time)

        mrc1.Fields(4) = VBA.Environ("computername")

        mrc1.Update

        mrc1.Close '关闭数据连接



    Else

        MsgBox "输入密码不正确,请重新输入!", vbOKOnly + vbExclamation, "警告"

        txtPassword.SetFocus

        txtPassword.Text = ""

        Exit Sub

     End If



  ElseIf Trim(mrc.Fields(2)) = Trim("管理员") Then '管理员的权限

    If Trim(mrc.Fields(1)) = Trim(txtPassword.Text) Then '判断密码是否正确

    txtsql1 = "select * from OnWork_Info"     '获取到正在上机表

    Set mrc1 = ExecuteSQL(txtsql1, MsgText)

    Me.Hide

    UserName = Trim(txtUserName.Text)    '将用户名给username

    frmMain.GeneralUserMenu.Enabled = True

    frmMain.GeneralUserMenu.Visible = True

    frmMain.OperatorMenu.Enabled = True

    frmMain.OperatorMenu.Visible = True

    frmMain.AdministratorMenu.Enabled = True

    frmMain.AdministratorMenu.Visible = True

    mrc1.AddNew                          '添加更新到正在上机的表里

    mrc1.Fields(0) = Trim(UserName)

    mrc1.Fields(1) = Trim(mrc.Fields(2))

    mrc1.Fields(2) = Trim(Date)

    mrc1.Fields(3) = Trim(Time)

    mrc1.Fields(4) = VBA.Environ("computername")

    mrc1.Update

2.让系统登录时显示当前时间,并且不能被修改。但是显示时间并且时间时刻更新的前提是要在窗体上放一个定时器。

 Label14.Caption = "当前时间:" & Time

3.学生查看余额

https://blog.csdn.net/yyp0304Devin/article/details/81274743

4.上下机

(1)上机

If Not Testtxt(txtCardNo.Text) Then
        MsgBox "请输入学号!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
        Exit Sub
    End If
    
    '判断是否为数字
   If Not IsNumeric(txtCardNo.Text) Then
        MsgBox "卡号为数字,请输入数字!", vbOKOnly + vbExclamation, "提示"
        txtCardNo.Text = ""
        txtCardNo.SetFocus
        Exit Sub
    End If
    
     
    '验证用户是否已上机
    txtSQL = "select * from onLine_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
            
    If mrc1.EOF = False Then
        MsgBox "该帐号已经上机,不允许重复登录!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.Text = ""
        txtName.Text = ""
        txtDept.Text = ""
        txtSex.Text = ""
        txtSID.Text = ""
        txtType.Text = ""
     Exit Sub
    Else
            
     
    '验证卡号是否存在,有没有注册
    txtSQL = "select * from student_Info where cardno ='" & txtCardNo.Text & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
                            
    If mrc.EOF = True Then
        MsgBox "此用户名不存在,请重新输入!", vbOKOnly + vbExclamation, "警告"
        txtCardNo.SetFocus
    Else
         
      
    txtSQL = "select * from CancelCard_Info where cardno = '" & Val(Trim(txtCardNo.Text)) & "'"
    Set mrc6 = ExecuteSQL(txtSQL, MsgText)
     
    If mrc6.EOF = False Then
        MsgBox "该卡已退,无法上机!", 48, "警告"
        Exit Sub
     End If
    '验证余额是否充足
    txtSQL = "select * from BasicData_Info"
    Set mrc3 = ExecuteSQL(txtSQL, MsgText)
            
    If mrc.Fields(7) < mrc3.Fields(1) Then
        MsgBox "余额小于最小限制金额,请充值后再上机!!", vbOKOnly + vbExclamation, "提示"
        frmRecharge.Show
        frmRecharge.txtCardNo.Text = txtCardNo.Text
        Exit Sub
    Else
        
        txtCardNo.Text = mrc.Fields(0)
        txtName.Text = mrc.Fields(2)
        txtDept.Text = mrc.Fields(4)
        txtSex.Text = mrc.Fields(3)
        txtSID.Text = mrc.Fields(6)
        txtType.Text = mrc.Fields(14)
        txtOnDate.Text = Date
        txtOnTime.Text = Time
        txtCash = mrc.Fields(7)
 
    '更新上机人数
    txtSQL = "select * from User_Info"
    Set mrc2 = ExecuteSQL(txtSQL, MsgText)
        
    txtSQL = "select * from onLine_Info"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        mrc1.AddNew
        mrc1.Fields(0) = Trim(txtCardNo.Text)
        mrc1.Fields(1) = Trim(txtType.Text)
        mrc1.Fields(2) = Trim(txtCardNo.Text)
        mrc1.Fields(3) = Trim(txtName.Text)
        mrc1.Fields(4) = Trim(txtDept.Text)
        mrc1.Fields(5) = Trim(txtSex.Text)
        mrc1.Fields(6) = Date
        mrc1.Fields(7) = Time
        mrc1.Fields(8) = VBA.Environ("computername")
        mrc1.Fields(9) = ""
        mrc.Fields(9) = mrc2.Fields(0)
        mrc1.Update
        Label15.Caption = "当前上机人数:" & mrc1.RecordCount
        mrc1.Close
    txtSQL = "select * from Line_info "
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
'更新到line表
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(13) = "上机"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close

(2)下机

If txtCardNo.Text = "" Then
        MsgBox "请输入学号!", vbOKOnly + vbExclamation, "警告"
    Else
  
'判断该用户是否上机
    txtSQL = "select * from OnLine_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
    If mrc.EOF = True Then
        MsgBox "该卡号未上机,请重新确认", vbOKOnly + vbExclamation, "警告"
        txtCardNo.Text = ""
        txtName.Text = ""
        txtDept.Text = ""
        txtSex.Text = ""
        txtSID.Text = ""
        txtType.Text = ""
        txtOnDate.Text = ""
        txtOnTime.Text = ""
    Else
    
    
'显示上机帐号数据
    txtSQL = "select * from student_Info"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)

    txtSQL = "select * from BasicData_Info"
    Set mrc2 = ExecuteSQL(txtSQL, MsgText)

        txtType.Text = mrc.Fields(1)
        txtCardNo.Text = mrc.Fields(0)
        txtName.Text = mrc.Fields(3)
        txtDept.Text = mrc.Fields(4)
        txtSex.Text = mrc.Fields(5)
        txtOnDate.Text = Format(Trim(mrc.Fields(6)), "yyyy-mm-dd")
        txtOnTime.Text = Format(Trim(mrc.Fields(7)), "hh:mm:ss")
        txtSID.Text = mrc.Fields(2)
        txtOffDate.Text = Format(Date, "yyyy-mm-dd")
        txtOffTime.Text = Format(Time, "hh:mm:ss")
        
 
       '更新上机人数
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "当前上机人数:" & mrc.RecordCount
        mrc.Close
 
            '显示当前时间
        Label14.Caption = "当前时间:" & Time

 
'下机结算:时间,金额
        txtdate = DateDiff("n", txtOnDate.Text, txtOffDate.Text)
        txttime = DateDiff("n", txtOnTime.Text, txtOffTime.Text)
        txtCTime.Text = Int(txtdate) + Int(txttime)
        intcousumetime = txtCTime.Text
        
        
    If Val(intcousumetime) < mrc2.Fields(4) Then               '判断消费时间是否小于准备时间
        txtCTime = "0"
        txtCMoney.Text = "0"
        txtCash.Text = Trim(mrc1.Fields(7))
     
    txtSQL = "Delete from online_info where cardno = '" & Trim(txtCardNo.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "当前上机人数:" & mrc.RecordCount
        mrc.Close
 
        
        MsgBox "下机成功!", vbOKOnly + vbExclamation, "提示"
    Dim ctr1 As Control
    For Each ctr1 In Me.Controls
        If TypeOf ctr1 Is TextBox Then
            ctr1.Text = ""
        End If
    Next
        Exit Sub
  End If

 '判断临时用户的消费金额
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        
    '查找cardno的用户类别是 临时还是固定
    If Trim(mrc1.Fields(14)) = "临时用户" Then
        txtCMoney.Text = (Int(intcousumetime / 60) + 1) * Trim(mrc2.Fields(1))
        txtCash.Text = Trim(mrc1.Fields(7)) - Trim(txtCMoney.Text)
        '==================================================
        '更新表
    If Val(txtCash.Text) < 0 Then
           
        MsgBox "下机失败,请先充值!", vbOKOnly + vbExclamation, "提示"
        frmRecharge.Show
        frmRecharge.txtCardNo.Text = txtCardNo.Text
        Exit Sub
     End If
        MsgBox "下机成功!", vbOKOnly + vbExclamation, "提示"

    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        Label15.Caption = "当前上机人数:" & mrc.RecordCount
           
        mrc1.Close
        mrc.Delete
        mrc.Update
        mrc.Close
        '更新历史下机记录
    txtSQL = "select * from Line_info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
    
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(8) = Trim(txtOffDate.Text)
        mrc4.Fields(9) = Trim(txtOffTime.Text)
        mrc4.Fields(10) = Trim(txtCTime.Text)
        mrc4.Fields(11) = Trim(txtCMoney.Text)
        mrc4.Fields(12) = Trim(txtCash.Text)
        mrc4.Fields(13) = "下机"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close
    
               '更新学生表学生信息(余额)
       
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
       
        mrc1.Fields(7) = Trim(txtCash.Text)
        mrc1.Fields(9) = UserName
        mrc1.Fields(10) = "使用"
        mrc1.Fields(11) = "结账"
        mrc1.Fields(12) = Date
        mrc1.Fields(13) = Time
        mrc1.Update
        mrc1.Close
        
    Else
'判断固定用户的消费金额
        txtCMoney.Text = (Int(intcousumetime / 60) + 1) * Trim(mrc2.Fields(0))
        txtCash.Text = Trim(mrc1.Fields(7)) - Trim(txtCMoney.Text)
        
    If Val(txtCash.Text) < 0 Then
           
        MsgBox "下机失败,请先充值!", vbOKOnly + vbExclamation, "提示"
          frmRecharge.Show
          frmRecharge.txtCardNo.Text = txtCardNo.Text
          Exit Sub
        
    End If
        MsgBox "下机成功!", vbOKOnly + vbExclamation, "提示"
        
        txtSQL = "select * from online_info"
        Set mrc = ExecuteSQL(txtSQL, MsgText)
        
        Label15.Caption = "当前上机人数:" & mrc.RecordCount
           
        mrc1.Close
        mrc.Delete
        mrc.Update
        mrc.Close
        
'更新历史下机记录
    txtSQL = "select * from Line_info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc4 = ExecuteSQL(txtSQL, MsgText)
    
        mrc4.AddNew
        mrc4.Fields(1) = Trim(txtCardNo.Text)
        mrc4.Fields(2) = Trim(txtSID.Text)
        mrc4.Fields(3) = Trim(txtName.Text)
        mrc4.Fields(4) = Trim(txtDept.Text)
        mrc4.Fields(5) = Trim(txtSex.Text)
        mrc4.Fields(6) = Trim(txtOnDate.Text)
        mrc4.Fields(7) = Trim(txtOnTime.Text)
        mrc4.Fields(8) = Trim(txtOffDate.Text)
        mrc4.Fields(9) = Trim(txtOffTime.Text)
        mrc4.Fields(10) = Trim(txtCTime.Text)
        mrc4.Fields(11) = Trim(txtCMoney.Text)
        mrc4.Fields(12) = Trim(txtCash.Text)
        mrc4.Fields(13) = "下机"
        mrc4.Fields(14) = VBA.Environ("computername")
        mrc4.Update
        mrc4.Close
 
'更新学生表学生信息(余额)
    
    txtSQL = "select * from student_Info where cardno='" & Trim(txtCardNo.Text) & "'"
    Set mrc1 = ExecuteSQL(txtSQL, MsgText)
    
        mrc1.Fields(7) = Trim(txtCash.Text)
        mrc1.Fields(9) = UserName
        mrc1.Fields(10) = "使用"
        mrc1.Fields(11) = "结账"
        mrc1.Fields(12) = Date
        mrc1.Fields(13) = Time
        mrc1.Update
        mrc1.Close
 
'更新上机人数
    txtSQL = "select * from online_info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
        Label15.Caption = "当前上机人数:" & mrc.RecordCount
        mrc.Close

5.查看学生充值记录,之前在查看的时候只能查出来每次充值的记录,但是把第一次注册的时候充的钱查不出来,那这样系统就存在缺陷了,用户想查自己的充值记录,可是没有第一条,这时就可以用一个语句把它加到充值表中,在注册时把记录同时存在充值表中。

txtSQL = "select * from Recharge_Info where cardno='" & Trim(txtCardno.Text) & "'"    '使卡号等于充值记录表中的卡号,如果不相等给出提示
        Set mrc1 = ExecuteSQL(txtSQL, MsgText)
        
        Do While Not mrc1.EOF
        .Rows = .Rows + 1
        .CellAlignment = 4
        .TextMatrix(.Rows - 1, 1) = Trim(mrc1.Fields(1))
        .TextMatrix(.Rows - 1, 0) = Trim(mrc1.Fields(2))
        .TextMatrix(.Rows - 1, 2) = Trim(mrc1.Fields(3))
        .TextMatrix(.Rows - 1, 3) = Trim(mrc1.Fields(4))
        .TextMatrix(.Rows - 1, 4) = Trim(mrc1.Fields(5))
        .TextMatrix(.Rows - 1, 5) = Trim(mrc1.Fields(6))
        
        mrc1.MoveNext
        Loop
        End With

6.让所有学生都下线

'删除online表中的信息,让所有的学生下线
    OnlineSQL = "select * from online_Info "
    Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)
    '如果没有人上线,提示
    If mrcOnline.RecordCount = 0 Then
        MsgBox "没有学生上线!", vbOKOnly + vbInformation, "提示"
        Exit Sub
    End If
    a = myflexgrid.Rows - 1
    If myflexgrid.Rows = 0 Then
        MsgBox "没有学生上线!", vbOKOnly + vbInformation, "提示"
        Exit Sub
    End If

    myflexgrid.Rows = 1
    For b = a To 1 Step -1
        '从basicdata表中读取数据
        BasicDataSQL = "select * from basicdata_Info"
        Set mrcBasicData = ExecuteSQL(BasicDataSQL, BMsgtext)

        '从student表中读取数据
        studentSQL = "select * from student_Info"
        Set mrcStudent = ExecuteSQL(studentSQL, Smsgtext)

        '从line表中读取数据
        LineSQL = "select * from line_Info"
        Set mrcLine = ExecuteSQL(LineSQL, LMsgtext)

        '从online表中读取数据
        OnlineSQL = "select * from online_Info"
        Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)

        CostTime = DateDiff("n", Trim(Hour(Time)), Trim(mrcOnline!ontime))
        CostDate = DateDiff("n", Trim(Date), Trim(mrcOnline!OnDate))
        intLineTime = Format(Str(Val(CostTime) + Val(CostDate)))



        '判断实际在线时间是否小于准备时间,若小于则消费时间为0
        If intLineTime < mrcBasicData!prepareTime Then
            intConsumeTime = 0
         '判断实际在线时间是否小于最低消费时间,若小于,则消费时间为最低消费时间
         ElseIf intLineTime < mrcBasicData!leasttime Then
            intConsumeTime = mrcBasicData!leasttime
         Else
            intConsumeTime = Round(intLineTime / mrcBasicData!unittime) * mrcBasicData!unittime 'round()函数为四舍五入函数
         End If

         '计算消费金额(消费金额=消费时间/30*用户类型的半小时费用)
         '固定用户(为什么要除以30)
         If Trim(mrcStudent.Fields(14)) = "固定用户" Then
            curConsume = intConsumeTime / 30 * mrcBasicData!rate
         Else

            curConsume = intConsumeTime / 30 * mrcBasicData!tmpRate
         End If

        '计算余额(账户余额=原账户余额-消费金额)
        curBalance = mrcStudent!cash - curConsume

         '更新学生信息表的余额
         mrcStudent.Fields(7) = curBalance
         mrcStudent.Update
         mrcStudent.Close

         '更新上机记录表(line表)
         LineSQL = "select * from line_Info"
         Set mrcLine = ExecuteSQL(LineSQL, LMsgtext)
         mrcLine.AddNew
         mrcLine.Fields(1) = Trim(mrcOnline!Cardno)
         mrcLine.Fields(2) = Trim(mrcOnline!studentNo)
         mrcLine.Fields(3) = Trim(mrcOnline!studentName)
         mrcLine.Fields(4) = Trim(mrcOnline!Department)
         mrcLine.Fields(5) = Trim(mrcOnline!Sex)
         mrcLine.Fields(6) = Trim(mrcOnline!OnDate)

         mrcLine.Fields(7) = Trim(mrcOnline!ontime)
         mrcLine.Fields(8) = Date
         mrcLine.Fields(9) = Trim(Time & "")
         mrcLine.Fields(10) = intConsumeTime

         mrcLine.Fields(11) = curConsume
         mrcLine.Fields(12) = curBalance
         mrcLine.Fields(13) = "强制下机"
         mrcLine.Fields(14) = Trim(Environ("computername"))
         mrcLine.Update

         '删除在线表中的信息
         OnlineSQL = "select * from online_Info"
         Set mrcOnline = ExecuteSQL(OnlineSQL, OMsgtext)
         mrcOnline.Delete
         mrcOnline.Update


         Next b

7.选中学生下线

If myflexgrid.RowSel = 0 Then
        MsgBox "请选择数据!", 48, "警告"
        Exit Sub
    End If

    txtSQL = "select * from basicdata_info "
    Set mrccc = ExecuteSQL(txtSQL, MsgText)

    With myflexgrid

    For j = 0 To .Rows - 1
        i = 0
        If j > .Row Then
            Exit Sub
        End If

            If .TextMatrix(j, 5) = "√" Then
                hanghao(i) = j

                    txtSQL = "select * from online_info where cardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                    Set mrc = ExecuteSQL(txtSQL, MsgText)

                    txtSQL = "select * from student_info where cardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                    Set mrcc = ExecuteSQL(txtSQL, MsgText)


                    SJ = 0: XF = 0: ontime = ""


                    SJ = Abs(Val(DateDiff("n", Time, Trim(mrc.Fields(7)))))
                        If SJ < Trim(mrccc.Fields(3)) Then

                        Else
                            If Trim(mrcc.Fields(14)) = "临时用户" Then
                                XF = (CInt(Trim(SJ) / 30 + 1)) * (Trim(mrccc.Fields(1)) / 3)
                                mrcc.Fields(7) = Val(Trim(mrcc.Fields(7))) - XF
                                mrcc.Update
                            Else
                                XF = (CInt(Trim(SJ) / 30) + 1) * (Trim(mrccc.Fields(0)) / 2)
                                mrcc.Fields(7) = Val(Trim(mrcc.Fields(7))) - XF
                                mrcc.Update
                            End If
                        End If


                        ontime = mrc.Fields(7)

                        mrc.Delete
                        mrc.Update
                        mrc.Close
'

                        txtSQL = "select * from line_info where ontime = '" & ontime & "'"
                        Set mrcccc = ExecuteSQL(txtSQL, MsgText)

                        txtSQL = txtSQL & txtOnTime & " " & " txtcardno = '" & Trim(myflexgrid.TextMatrix(Val(j), 0)) & "'"
                        Set mrccccc = ExecuteSQL(txtSQL, MsgText)

                        mrcccc.Fields(8) = Date
                        mrcccc.Fields(9) = Time
                        mrcccc.Fields(10) = SJ
                        mrcccc.Fields(11) = XF
                        mrcccc.Fields(12) = mrcc.Fields(7)
                        mrcccc.Fields(13) = "正常下机"

                        mrcccc.Update
                        myflexgrid.TextMatrix(Val(j), 5) = ""
                        myflexgrid.RemoveItem hanghao(i)

                    j = j - 1

            End If

    Next j
    End With

    MsgBox "选中学生已下机!", vbOKOnly + vbInformation, "提示"

8.注册

https://blog.csdn.net/yyp0304Devin/article/details/81415405

9.充值

https://blog.csdn.net/yyp0304Devin/article/details/81542552

10.学生基本信息维护

https://blog.csdn.net/yyp0304Devin/article/details/82707661

11.结账

结账在机房收费系统中也是三大难点之一,有很多让人头疼的东西。

(1)通过用户名让显示操作员的真实姓名

txtSQL = "select * from User_Info where UserID='" & Trim(comboUserName.Text) & "'"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    comboTrueName.Text = mrc.Fields(3)

    mrc.Close

(2)汇总

其他的还好弄,就是在汇总这一块有点烧脑,算账的时候不用心就算不对了,包括一些售卡统计等,在这里有涉及到了临时用户应收金额等就难做了,但是思路理对了也没有多难。


    '汇总
   
        '售卡数量
    txtSQL = "select * from student_Info where UserID='" & Trim(comboUserName.Text) & _
            "' and Ischeck='" & "未结账" & " '"
    Set mrcS = ExecuteSQL(txtSQL, MsgText)

    If mrcS.RecordCount = 0 Then
        txtSellCard.Text = "0"
    Else
        txtSellCard.Text = mrcS.RecordCount
    End If

        '退卡数量
    txtSQL = "select * from CancelCard_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未结账" & " '"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)

    If mrcc.RecordCount = 0 Then
        txtRtnNum.Text = "0"
    Else
        txtRtnNum.Text = mrcc.RecordCount
    End If

        '退卡金额=该操作员操作的所有用户退卡金额的总和
    txtSQL = "select sum(CancelCash) from CancelCard_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未结账" & "'"
    Set mrcc = ExecuteSQL(txtSQL, MsgText)

    If IsNull(Trim(mrcc.Fields(0))) Then
        txtRtnSum.Text = "0"
    Else
        txtRtnSum.Text = Val(mrcc.Fields(0))
    End If

        '充值金额(不区分临时用户和固定用户)
    txtSQL = "select sum(addmoney) from Recharge_Info where UserID='" & Trim(comboUserName.Text) & _
        "'and status='" & "未结账" & "'"
    Set mrcR = ExecuteSQL(txtSQL, MsgText)

    If IsNull(Trim(mrcR.Fields(0))) Then
        txtRechargeSum.Text = "0"
    Else
        txtRechargeSum.Text = Val(mrcR.Fields(0))
    End If
        
        '总售卡数=售卡数量-退卡数量
    txtSaleCardNumber.Text = Val(txtSellCard.Text) - Val(txtRtnNum.Text)

        '应收金额=充值金额-退卡金额
    txtSum.Text = Val(txtRechargeSum.Text) - Val(txtRtnSum.Text)


        Dim mrc1111 As ADODB.Recordset
        '临时收费金额=临时用户注册金额
    txtSQL = "select sum(cash) from student_Info where UserID = '" & Trim(comboUserName.Text) & "'and Ischeck='未结账' and type='临时用户'"
    Set mrc1111 = ExecuteSQL(txtSQL, MsgText)
        
    If IsNull(Trim(mrc1111.Fields(0))) Then
        txtTemporarySum.Text = "0"
    Else
        txtTemporarySum.Text = Val(mrc1111.Fields(0))
    End If

(3)报表

在日结账和周结账这里要做报表,以下是做报表的步骤

https://blog.csdn.net/yyp0304Devin/article/details/82081515

三、收获

1.通过做机房,让自己对代码也有了更深的了解,之前遇到问题就只是找解决方法,问题也不知道出在哪里,有些问题虽然解决了也不知道怎么解决的,由于不断地积累,现在遇到问题就知道出在哪里,针对性比以前强了。机房收费系统不仅考验我们自己写代码,思考,更多的在体验在用户方面,在软件开发工具中学过,系统界面就是软件本身,那我们在做一个软件的时候就要换位思考,怎样让用户对这个软件更喜欢,更想用这个软件。

2.做完这个软件让我在分析问题,认识问题有了不一样的认识,换位思考就是一个方面,还有做的时候怎样能降低代码的冗余度,简洁,让人一看就懂。

3.对很多函数也有了认识,在之前做的时候不知道什么地方该用什么函数,某个函数用在某个地方起什么作用.........................

PS :厚积薄发

猜你喜欢

转载自blog.csdn.net/yyp0304Devin/article/details/82810893