機房收費係統之技術總結
機房收費係統,從最初的迷茫到現在的明朗,這一路,總算是到站了。
看到完工後的係統,自己都驚呆了。總共有27個窗體,一個模塊,代碼的多少可想而知,那麼多那麼多,都是自己敲上去的,和學生信息管理係統相比,真的算得上是一次飛躍了吧。前前後後,曆時二十多天,不管是技術上還是思想上,自己的收獲很大。
從頭到尾,自己都是盡心盡力,從新建數據庫到新建各個表,從各個窗體設計到各個窗體代碼,一個也不容小覷。
先從自己的數據庫說起:一共九張表,這個過程很漫長,不是一開始就照著原來的模板建,而是在敲代碼的過程中,用到一個新建一個。
1.新建數據庫
<span >USE master Go create database ChargeSystem on primary /*創建一個名為ChargeSystem的數據庫*/ (name='ChargeSystem_data', /*主數據文件邏輯名稱為ChargeSystem_data*/ filename='D:\Program Files\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\ChargeSystem.mdf', /*物理文件名為ChargeSystem.mdf*/ size=10, /*初始大小為10MB*/ maxsize=unlimited, /*最大尺寸為無限大*/ filegrowth=1024KB) /*增長速度為1MB*/ log on (name=ChargeSystem_log, /*數據庫日誌文件邏輯名稱為ChargeSystem_Log*/ filename='D:\Program Files\SQL\MSSQL10.MSSQLSERVER\MSSQL\DATA\ChargeSystem.ldf', /*物理文件名為ChargeSystem.ldf*/ size=1, /*初始大小為1MB*/ maxsize=unlimited, /*最大尺寸為無限大*/ filegrowth=1024KB ) /*增長速度為1MB*/ Go </span>2.新建表(以基本數據設定和結賬表為例)
<span >Use ChargeSystem create table tb_Check /*創建結賬表*/ (LastBalance int not null, /*上期餘額*/ RechargeSum int not null, /*充值金額*/ ConsumeSum int not null, /*消費金額*/ ReturnSum int not null, /*退卡金額*/ NowSum int not null, /*金額*/ Date date not null); /*日期*/ Create table tb_BasicData /*創建基本數據表*/ (FixedUserCost float Not null, /*固定用戶每小時費用*/ CasualUserCost float Not null, /*臨時用戶每小時費用*/ AddTime int Not null, /*遞增時間*/ LimitedOnlineTime int Not null, /*最低上機時間*/ PreparedTime int Not null, /*準備時間*/ LimitedCost float Not null, /*最低金額*/ Date date not null, /*日期*/ Time char(20) not null); /*時間*/</span>
數據庫這方麵也就這麼多內容了。下麵總結一下驗收後技術方麵的一些收獲和修改。
1.數據類型。在查詢某個條件的內容時,才發現的這個問題。可能大多數人的卡號設計的類型都是INT整數型,可實際上,如果刷卡的話,卡號應該是字符串類型的。這樣,將卡號寫入數據庫時,前麵的00就會自動省去,就會造成怎麼也查不到符合條件的結果。所以,卡號實際上應該設為字符串型,而一般的金額、學號等字段可以設為整型數。這樣,在查詢時,同為字符串型的,從兩者的Ascii碼的大小比較;同為數值型的,就從數值的大小比較了。小小的數據類型,也是非常重要的細節,真的決定成敗呢。
2.刪除數據。這個係統大部分查詢到的數據結果都是顯示在MSFLEXGRID控件中,而正常情況下,我們隻能一行一行刪除其中的數據,這樣就有些不合實際了。所以,必須加以修改。係統中在選中學生下機和刪除用戶中涉及這一部分,下麵以選中學生下機為例。
首先,我們需要實現可以選中多行數據,這裏通過改變其背景色來區分選中與沒選中。
<span >Private Sub MSFlexInquireResult_MouseDown(Button As Integer, Shift As Integer, x As Single, y As Single) If MSFlexInquireResult.CellBackColor = &H80C0FF Then For i_col = 0 To MSFlexInquireResult.Cols - 1 MSFlexInquireResult.Col = i_col MSFlexInquireResult.CellBackColor = vbWhite Next i_col Else For i_col = 0 To MSFlexInquireResult.Cols - 1 MSFlexInquireResult.Col = i_col MSFlexInquireResult.CellBackColor = &H80C0FF Next i_col End If End Sub</span>然後,我加了一個更加清楚的標示符來區別兩者的數據,選中的數據後畫個勾,我們要刪除的就是畫了勾的數據。
<span >MSFlexInquireResult.TextMatrix(MSFlexInquireResult.Row, 5) = "√"</span>最後,需要做的是將選中的數據一一刪除。為了實現這一功能,從第一行刪到最後一行,肯定報錯“下標越界”;所以,我們可以從最後一行開始檢查直到第一行數據。
<span ><span ></span><pre name="code" >'獲取數據的總行數 rowsum = MSFlexInquireResult.Row '從最後一行開始循環 For i = rowsum To 1 Step -1 '判斷是否有標示符 If MSFlexInquireResult.TextMatrix(i, 5) = "√" Then '有,將此行移除 MSFlexInquireResult.RemoveItem i End If Next i</span>
3.數據同步。係統中一共涉及三個下機方式:主界麵的正常下機;所有學生下機;選中學生下機。所謂同步,就是在正常下機後,在事先已打開的顯示全部的數據中,選中該卡號應該提示“該卡號已下機,不可重複下機!”也就是說再選中學生下機之前首先應判斷該卡號是否已經下機。
這是在主界麵下機後看到的提示,現在在顯示全部中該卡號:112仍在上機,這就是數據信息不同步了。我們還做不到那邊下這邊也就直接移除,所以隻有在移除前判斷。
<span >'判斷該號是否已正常下機或強製下機 strTxtSQL = "select * from tb_linerecord where UserID = '" & MSFlexInquireResult.TextMatrix(MSFlexInquireResult.RowSel, 0) & "'" Set mrc = ExecuteSQL(strTxtSQL, strMsgText) Status = Trim(mrc.Fields(13)) If Trim(mrc.Fields(13)) = "正常下機" Or Trim(mrc.Fields(13)) = "強製下機" Then MsgBox "該卡號已下機,不可重複下機!", vbOKOnly + vbExclamation, "下機提示" MSFlexInquireResult.RemoveItem MSFlexInquireResult.RowSel mrc.Close Exit Sub End If</span>以上三點就是在驗收後的修改,也許技術上沒什麼大的挑戰,但都是很重要的細節,不注重細節,一定又是會遇到黃條條的。
最後更新:2017-04-03 05:40:04