閱讀417 返回首頁    go 阿裏雲 go 技術社區[雲棲]


機房收費係統之技術總結

機房收費係統,從最初的迷茫到現在的明朗,這一路,總算是到站了。

看到完工後的係統,自己都驚呆了。總共有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

  上一篇:go Javascript 學習 筆記一
  下一篇:go Javascript 學習 筆記一