閱讀719 返回首頁    go 京東網上商城


機房收費係統之上機、下機

還記得,從八月一日開始做機房收費係統,到今天已經是八月十二號了。期間,碰到了很多困難,有時候,就想這個機房收費係統能成功嗎?解決了一個問題,另一個問題又接踵而至了,心裏同樣很清楚,下麵還有好多好多問題。於是乎,根本不敢想後麵的路。

前三天吧,開始了主界麵上下機代碼的編寫。一個主界麵,包含了15個文本框要填,可想而知,這真的是一個龐大的工程。

在開始動工之前,自己還是分析了整個流程,不然混亂的自己,早晚會被帶溝裏去的。

首先是上機:


在這一流程中,要注意的是,在LineRecord表中不可出現相同的卡號的記錄,否則無法進行準確判斷是否正在上機。

下麵是下機:


兩者加之一起,就把卡號上下機操作搞定了。在此界麵上,還有三個需要通過計算才可以得到的:上機人數、消費時間和消費金額。

這個過程真的花費了我好長的時間,一遍遍理思路,掉溝裏好幾次,最後終於上岸了。

(1)消費人數的計算,兩種方法。通過查找“正在上機”的字段的個數。

一是可以利用循環查找。把此記錄集中所有記錄都遍曆一遍,最後得出個數。

<span ><strong>'利用循環計算人數
            strTxtSQL = "select * from tb_linerecord where status = '正在上機' "
            Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
            Sum = 0
            Do While Not mrc.EOF
                Sum = Sum + 1
                mrc.MoveNext
            Loop
            txtNowCount.Text = Sum</strong></span>

二是利用SQL語句,直接在數據庫中計算,再將其值返回到VB中。

<span ><strong> '計算上機人數,利用SQL語句
            strTxtSQL = "select count(status) as count from tb_lineRecord where status = '正在上機'  "
            Set mrc = ExecuteSQL(strTxtSQL, strMsgText)
            Sum = mrc("count").Value
            txtNowCount.Text = Sum</strong></span>
這裏用到的是select Count語句,既然碰到了,不妨多了解了解吧。

(2)消費時間的計算

首先列出三個時間:

T1=準備時間(Basic Data表)中

T2=總消費時間(從上機命令生效開始計時)

T3=實際消費時間(T2-T1)

這裏用到了DateDiff(時間間隔函數),特別方便。

<span ><strong>            'CDate()轉換為日期函數
            '實際消費時間=總消費時間-準備時間
            txtConsumeTime.Text = DateDiff("n", CDate(txtOnLineDate.Text), CDate(txtLineDate.Text))
            txtConsumeTime.Text = txtConsumeTime.Text + DateDiff("n", CDate(txtOnLineTime.Text), CDate(txtLineTime.Text))
            txtConsumeTime.Text = txtConsumeTime.Text - vntpreparedtime</strong></span>

(3)計算消費金額

<span ><strong>            '在準備時間段內,可自由下機
            '判斷消費時間是否大於準備時間
            If Trim(txtConsumeTime.Text) < 0 Then    '消費時間少於準備時間,消費時間為0
               txtConsumeTime.Text = 0
               txtConsumeMoney.Text = 0
               MsgBox "已成功下機,消費時間為0!", vbOKOnly + vbExclamation, "下機提示"
            Else
            '判斷消費時間是否大於最低消費時間
                 If Trim(txtConsumeTime.Text) < vntlimitedtime Then
                    txtConsumeTime.Text = txtConsumeTime.Text      '消費時間小於最低消費時間,消費金額為最低消費金額
                    txtConsumeMoney.Text = vntlimitedmoney
                 Else
            '消費時間大於最低消費時間,則根據用戶類型,計算消費金額</strong></span>
<span ><strong><span >	</span>    'Round()為四舍五入函數
                    If Trim(txtUserType.Text) = "固定用戶" Then
                       txtConsumeMoney.Text = Round(txtConsumeTime.Text / Addtime * fixedusercost) + fixedusercost
                    Else
                       txtConsumeMoney.Text = Round(txtConsumeTime.Text / Addtime * casualusercost) + casualusercost
                    End If
                 End If
             End If</strong></span>
後兩者的計算是分不開的,所以必須很清楚的知道它們間的關係。有個流程圖,自己才沒有被弄得那麼混。


最後的最後,我終於把主界麵的所有文本框都搞定了。


這個過程中,一次次跌倒,一次次頭暈,可是,自己強大的內心還是戰勝了所有的敵人,沒有什麼不可以。其實正確地應該是不需要去想後麵的路,隻要走好腳下的路,一步一步,就一定可以。路,還在自己腳下。




最後更新:2017-04-03 05:39:49

  上一篇:go 8月12日OTS升級通知
  下一篇:go 漸變背景(background)效果