機房收費系統【VB版】——選擇下機
阿新 • • 發佈:2019-02-01
前言:
今天實現機房收費系統——一般使用者——學生上機狀態檢視——選中全部/部分下機部分收穫很多!多虧了看光哥的部落格,寫的很清楚機房收費系統——上機狀態查詢之下機
過程:
要顯示的表格式寫查詢,就會出來這樣子
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$:去掉字串左右兩端的空格