机房收费系统【VB版】——选择下机
前言:
今天實(shí)現(xiàn)機(jī)房收費(fèi)系統(tǒng)——一般用戶——學(xué)生上機(jī)狀態(tài)查看——選中全部/部分下機(jī)部分收獲很多!多虧了看光哥的博客,寫的很清楚機(jī)房收費(fèi)系統(tǒng)——上機(jī)狀態(tài)查詢之下機(jī)
過(guò)程:
要顯示的表格式寫查詢,就會(huì)出來(lái)這樣子
Private Sub 顯示全部_Click()Dim txtSQL As StringDim MsgText As StringDim mrc As ADODB.Recordset '作為的連接online_info表查詢的結(jié)果集txtSQL = "select cardno,studentNo,ondate,OnTime,computer from OnLine_Info"Set mrc = ExecuteSQL(txtSQL, MsgText)If mrc.EOF = True ThenMsgBox "查詢到0條記錄", vbOKOnly + vbInformation, "提示!"ElseWith MSFlexGrid1Do 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.MoveNextLoopEnd WithEnd If
End Sub
接著我們可以看到它的
要想實(shí)現(xiàn)選中的下機(jī),首先把選中的記錄用一個(gè)符號(hào)√來(lái)標(biāo)識(shí)這條記錄!
這里定義了兩個(gè)數(shù)組,分別來(lái)存儲(chǔ)標(biāo)識(shí)√的記錄它的行號(hào)和學(xué)號(hào)。
i=0 有√標(biāo)識(shí)的記錄數(shù)目
for j=0 to .rows-1if 符合√ then記錄行號(hào)到數(shù)組xh(s)記錄學(xué)號(hào)到數(shù)組sz(z)i=i+1end if
next j
'j是真實(shí)的表格中的行數(shù),通過(guò)標(biāo)識(shí)√篩選遍歷一遍,將有√記錄的信息記錄并保留到數(shù)組中,并且將有記錄的行數(shù)計(jì)算出了
for Z=0 to i-1 (0~i-1=i行,也就是由記錄的i行)通過(guò)數(shù)組引用一個(gè)個(gè)的學(xué)號(hào),學(xué)號(hào)是主鍵,查詢表得到記錄集mrc3 basicdate_infomrc4 studeng_infomrc1 online_infomrc2 Line_infoZ=Z+1
next Z
'通過(guò)這樣的一次遍歷查詢到數(shù)據(jù)庫(kù)中的每一條記錄
'因?yàn)檫x中的部分即將下機(jī),引用這些記錄的信息來(lái)進(jìn)行結(jié)算帳目部分的計(jì)算!下機(jī)之前結(jié)賬完畢!
'將選中的學(xué)生的數(shù)據(jù)進(jìn)行更新,消費(fèi)時(shí)間,消費(fèi)金額,正常下機(jī)等等!修改包括student表和Line表
'最后從Online_info表中刪除這些信息
接著,非常奇妙的部分就是如何實(shí)現(xiàn)部分
這段選擇的代碼真的是非常的巧妙,本意按下鼠標(biāo),選擇要下機(jī)的學(xué)生;
前提是顯示出來(lái)的信息都是沒(méi)有選中的!在顯示全部后所有的信息都是沒(méi)有選中的狀態(tài)!
在選的過(guò)程中:
按下鼠標(biāo)之前,假設(shè)是沒(méi)有選中的,按下后把它變?yōu)檫x中的狀態(tài);
按下鼠標(biāo)之前,假設(shè)是選中的狀態(tài),按下后把它變?yōu)闆](méi)有選中的狀態(tài);【二次按下鼠標(biāo)就會(huì)需要這樣的機(jī)制】
Private Sub msflexgrid1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)'如何選中不連續(xù)的行Dim col As IntegerIf MSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√" ThenMSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = ""'改變行顏色(變?yōu)闆](méi)選中之前的)For col = 0 To MSFlexGrid1.Cols - 1MSFlexGrid1.col = colMSFlexGrid1.CellBackColor = vbWhiteNext colElseMSFlexGrid1.TextMatrix(MSFlexGrid1.Row, 5) = "√"'改變行顏色(選中后的顏色)For col = 0 To MSFlexGrid1.Cols - 1MSFlexGrid1.col = colMSFlexGrid1.CellBackColor = &HFFFF00 Next colEnd If
這部分的代碼是復(fù)制的,但我覺(jué)得寫得非常巧妙!
總結(jié):
1.分析代碼,不會(huì)就一點(diǎn)一點(diǎn)測(cè)試
2.寫代碼而不是改代碼,學(xué)習(xí)一招致命。
3.把問(wèn)題復(fù)雜化其實(shí)是了避免直接面都那么難的問(wèn)題,找到本質(zhì),就不難!
4.選擇單行MSFlexGrid或是單元格
MouseColLong返回鼠標(biāo)光標(biāo)的列坐標(biāo)位置
MouseRowLong返回鼠標(biāo)光標(biāo)的行坐標(biāo)位置
選中某個(gè)單元
MsFlexGrid.Row=1
MsFlexGrid.Col=1
5. Dim sTokens() As String ‘定義名為sTokens字符串(數(shù)組)
Dim sTokens As string ‘定義名為sTokens字符串
6.trim:刪除字串符的空格
Trim$:去掉字符串左右兩端的空格
總結(jié)
以上是生活随笔為你收集整理的机房收费系统【VB版】——选择下机的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: vb中可视对象的操作
- 下一篇: 配置动态路由协议OSPF