719
京東網上商城
機房收費係統之上機、下機
還記得,從八月一日開始做機房收費係統,到今天已經是八月十二號了。期間,碰到了很多困難,有時候,就想這個機房收費係統能成功嗎?解決了一個問題,另一個問題又接踵而至了,心裏同樣很清楚,下麵還有好多好多問題。於是乎,根本不敢想後麵的路。
前三天吧,開始了主界麵上下機代碼的編寫。一個主界麵,包含了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