1. 程式人生 > >機房收費系統【VB版】——選擇下機

機房收費系統【VB版】——選擇下機

前言:

今天實現機房收費系統——一般使用者——學生上機狀態檢視——選中全部/部分下機部分收穫很多!多虧了看光哥的部落格,寫的很清楚機房收費系統——上機狀態查詢之下機

過程:

要顯示的表格式寫查詢,就會出來這樣子

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

這裡寫圖片描述
接著我們可以看到它的
這裡寫圖片描述
要想實現選中的下機,首先把選中的記錄用一個符號√來標識這條記錄!
這裡定義了兩個陣列,分別來儲存標識√的記錄它的行號學號

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表中刪除這些資訊

接著,非常奇妙的部分就是如何實現部分
選中
這段選擇的程式碼真的是非常的巧妙,本意按下滑鼠,選擇要下機的學生;
前提是顯示出來的資訊都是沒有選中的!在顯示全部後所有的資訊都是沒有選中的狀態!
在選的過程中:
按下滑鼠之前,假設是沒有選中的,按下後把它變為選中的狀態;
按下滑鼠之前,假設是選中的狀態,按下後把它變為沒有選中的狀態;【二次按下滑鼠就會需要這樣的機制】

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$:去掉字串左右兩端的空格