机房收费系统【VB版】——选择下机

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

前言:

今天实现机房收费系统——一般用户——学生上机状态查看——选中全部/部分下机部分收获很多!多亏了看光哥的博客,写的很清楚机房收费系统——上机状态查询之下机

过程:

要显示的表格式写查询,就会出来这样子

Private Sub 显示全部_Click()
    Dim txtSQL As String
    Dim MsgText As String
    Dim mrc As ADODB.Recordset  '作为的连接online_info表查询的结果集
    txtSQL = "select cardno,studentNo,ondate,OnTime,computer from OnLine_Info"
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    If mrc.EOF = True Then
        MsgBox "查询到0条记录", vbOKOnly + vbInformation, "提示!"
    Else
         With MSFlexGrid1
           Do While mrc.EOF = False
                .Rows = .Rows + 1
' .CellAlignment = 4
                .TextMatrix(.Rows - 1, 0) = mrc!cardno
                .TextMatrix(.Rows - 1, 1) = mrc!studentNo
                .TextMatrix(.Rows - 1, 2) = mrc!ondate
                .TextMatrix(.Rows - 1, 3) = mrc!OnTime
                .TextMatrix(.Rows - 1, 4) = mrc!computer
                .TextMatrix(.Rows - 1, 5) = ""
                mrc.MoveNext
            Loop
        End With
    End If
End Sub

机房收费系统【VB版】——选择下机
接着我们可以看到它的
机房收费系统【VB版】——选择下机
要想实现选中的下机,首先把选中的记录用一个符号√来标识这条记录!
这里定义了两个数组,分别来存储标识√的记录它的行号学号

i=0  有√标识的记录数目
for j=0 to .rows-1
    if 符合√ then
        记录行号到数组xh(s)
        记录学号到数组sz(z)
        i=i+1
    end if 
next j
'j是真实的表格中的行数,通过标识√筛选遍历一遍,将有√记录的信息记录并保留到数组中,并且将有记录的行数计算出了
for Z=0 to i-1 (0~i-1=i行,也就是由记录的i行)
    通过数组引用一个个的学号,学号是主键,查询表得到记录集
    mrc3 basicdate_info
    mrc4 studeng_info
    mrc1 online_info
    mrc2 Line_info
    Z=Z+1
next Z
'通过这样的一次遍历查询到数据库中的每一条记录
'因为选中的部分即将下机,引用这些记录的信息来进行结算帐目部分的计算!下机之前结账完毕!
'将选中的学生的数据进行更新,消费时间,消费金额,正常下机等等!修改包括student表和Line表
'最后从Online_info表中删除这些信息

接着,非常奇妙的部分就是如何实现部分
机房收费系统【VB版】——选择下机
这段选择的代码真的是非常的巧妙,本意按下鼠标,选择要下机的学生;
前提是显示出来的信息都是没有选中的!在显示全部后所有的信息都是没有选中的状态!
在选的过程中:
按下鼠标之前,假设是没有选中的,按下后把它变为选中的状态;
按下鼠标之前,假设是选中的状态,按下后把它变为没有选中的状态;【二次按下鼠标就会需要这样的机制】

Private Sub msflexgrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  '如何选中不连续的行
  Dim col As Integer
  If MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√" Then
    MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = ""
    '改变行颜色(变为没选中之前的)
    For col = 0 To MSFlexGrid1.Cols - 1
      MSFlexGrid1.col = col
      MSFlexGrid1.CellBackColor = vbWhite
    Next col
  Else
    MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√"
    '改变行颜色(选中后的颜色)
    For col = 0 To MSFlexGrid1.Cols - 1
      MSFlexGrid1.col = col
      MSFlexGrid1.CellBackColor = &HFFFF00 
    Next col
  End If

这部分的代码是复制的,但我觉得写得非常巧妙!

总结:

1.分析代码,不会就一点一点测试
2.写代码而不是改代码,学习一招致命。
3.把问题复杂化其实是了避免直接面都那么难的问题,找到本质,就不难!


4.选择单行MSFlexGrid或是单元格
MouseColLong返回鼠标光标的列坐标位置
MouseRowLong返回鼠标光标的行坐标位置

选中某个单元 
MsFlexGrid.Row=1 
MsFlexGrid.Col=1

5. Dim sTokens() As String ‘定义名为sTokens字符串(数组)
  Dim sTokens As string ‘定义名为sTokens字符串
  
6.trim:删除字串符的空格
 Trim$:去掉字符串左右两端的空格