機房收費系統 上下機操作

2021-07-16 23:53:31 字數 4730 閱讀 4348

按照順序來講到網咖的顧客,分為兩種一是辦卡充錢的會員,一種是交錢上網的臨時使用者。充完錢之後,一般使用者(網管)就需要對顧客進行上機來記錄時間,下機時進行收費。

上機:上機過程比較簡單,涉及資料庫中的三張表:

online_info 

、student_info

、basicdata_info      

上機的判斷過程如下:1.從

student

表中判斷卡號是否存在、此卡狀態是否使用 2.

判斷卡內或者臨時使用者的金額是否充足(

>0??)

3.從online

表判斷此卡是否正在上機 4.

將資訊顯示到上級介面中,更新

online

表資訊

下機:下機過程涉及到收費的錢數計算,所以相對複雜,涉及資料庫中的四張表:

online_info

、student_info

、basicdata_info

、line_info

下機的判斷過程如下:1.從

student

表中判斷卡號是否存在、此卡狀態是否使用 2.

從online

表判斷此卡是否正在上機 3.

更新line

表和student

表中的金額

計算消費時間是乙個難點,用

datediff

函式計算間隔時間,但是使用者除了一天的上機時間,有時出現包宿或者兩天連續上網,就需要考慮進來。共分出三種情況:(1)、

24小時內的消費時間(2

)、沒有超過

24小時但是經過了

24:00:00時刻(

3)、超過了

24小時的消費時間

**如下:'datediff函式的格式:datediff(datepart,startdate,enddate),計算結果是後者減去前者

diffmtime = val(datediff("n", time, mrce.fields(7))) '時間差以分表示  

diffhtime = val(datediff("h", mrce.fields(7), time)) '時間差以小時表示

diffdtime = val(datediff("d", mrce.fields(6), date)) '時間差以天表示

if diffhtime >= 0 and diffdtime = 0 then '24小時以內的時間計算

diffmtime = val(datediff("n", mrce.fields(7), time))

elseif diffhtime < 0 and diffdtime > 0 then '過了24:00:00但是沒有超過24小時

diffmtime = 24 * 60 + diffmtime

else

diffmtime = (diffdtime * 24 + diffhtime) * 60 '超過24小時

end if

txtsql = "select * from basicdata_info"

set mrcf = executesql(txtsql, msgtext)

'第一種情況:上機時間《準備時間

if abs(val(diffmtime)) < val(mrcf.fields(4)) then

txtoffdate = date

txtofftime = time

txtconsumetime.text = abs(diffmtime)

txtconsume.text = 0

msgbox "下機成功!", vbokonly + vbexclamation, "恭喜"

'第二種情況:準備時間《上機時間《至少上機時間

elseif abs(val(diffmtime)) <= val(mrcf.fields(3)) then

txtoffdate.text = date

txtofftime.text = time

txtconsumetime.text = abs(diffmtime)

if txttype.text = "固定使用者" then

txtconsume.text = round((mrcf.fields(3) / 60) * mrcf.fields(0))

else

txtconsume.text = round((mrcf.fields(3) / 60) * mrcf.fields(1))

end if

txtcash.text = mrcd.fields(7) - txtconsume.text

msgbox "下機成功!", vbokonly + vbexclamation, "恭喜"

exit sub

'把固定使用者、臨時使用者單位時間的費用分別賦給費用

'第三種情況:上機時間》至少上機時間

elseif abs(val(diffmtime)) > val(mrcf.fields(3)) then

txtconsumetime.text = abs(diffmtime)

txtoffdate.text = date

txtofftime.text = time

if txttype.text = "固定使用者" then

txtconsume = format(round(diffmtime / 60 * mrcf.fields(0), 2), "0.0")

else

txtconsume = format(round(abs(diffmtime) / 60 * mrcf.fields(1), 2), "0.0")

end if

round(number, num_digits)

引數number

必需。要四捨五入的數字。

num_digits

必需。位數,按此位數對

number 

引數進行四捨五入。

round

函式不是一般意義上的四捨五入

,這改變了我以前的理解

四捨六入五單雙(舉例:

1.24=1.2  1.26=1.3)

五後非零應進一(舉例:

1.251=1.3)

五後皆零視奇偶

五前為偶應捨去(舉例:

1.25=1.2)

五前為奇則進一(舉例:

1.35=1.4)

format

格式轉換函式用來保留小數點前的零:

vb 中獨特的處理數字的格式使得小數在

text

中顯示時小數點前的零被省略,所以需要用到

format

函式。

舉例:小數點前全省略

format

(0.05,」

##.##「)

=.05             

小數點前以0補齊

format

(0.05,「

00.00」)

=00.005   

正確格式:

format

(0.05,「

0.00」)

=0.005

附加功能:考慮到理論和實際情況的聯絡,我們增加了實時動態更新上機費用,防止使用者剩餘金額出現零元或者負值的情況。

功能實現:新增

timer

控制項,編寫它的

timer

事件。動態下機和下機的**基本一致,只是通過乙個整體的

do  while

…………

loop

語句實現對每乙個上機使用者的迴圈檢查,每一秒鐘迴圈檢查一次,一旦使用者餘額為「

0」,立即強制下機,更新

line

表和student表。

在上機和下機的過程中涉及到了乙個統計上機人數的問題,按照我自己的固有思路就是在上機和下機的**中增加上機人數的更新,每次上機增加

1每次下機減少

1,利用

mrc.recordcount

統計總上機人數,因此在上機和下機中都要新增

sql查詢語句,這種方法在思路和應用中沒有問題,只是增加了**量並且摻雜在本來就很大**量的上下機中會增加我們出錯的概率,參考師哥師姐部落格發現可以用到

timer

控制項,編寫它的

timer

時間,每次上機或者下機的下一秒都會觸發

timer

事件,及時計算上機人數,**如下:

private sub timer_timer()                        '利用timer控制項實時更新上機人數

dim txtsql as string

dim msgtext as string

dim mrc as adodb.recordset

txtsql = "select * from online_info "

set mrc = executesql(txtsql, msgtext)

label16.caption = mrcd.recordcount

mrcd.close

end sub

這就是我認識的上下機,本來一籌莫展的問題,只要有了方向和思路就很容易解決了。

機房收費系統 上下機

最近大家都在進行機房收費系統,看大家的部落格,基本上都是先理清思路再實現功能,回想自己當時做的時候就不夠好,只是盲目的敲 卻忽略了方向比努力更重要這個道理,導致最後出現了很多漏洞,於是又重新畫了一遍上下機的流程圖,希望能對以後機房的學習有幫助。上機 只要思路清晰,具體的 實現很簡單。下機 下機需要計...

機房收費系統 上下機

在 上機下機中 主要是要想到所有在上機中可能發生的事件 並作出相應的對策 確保使用者可以成功的上機 下 機。上機 卡號是否位數字,需要判斷卡號是否存在,卡內餘額是否充足,卡號是否正在被使用。首先 查詢資料庫 中的student表 判斷卡號是否存在,且 處於可使用狀態 如果均符合以上要求 那麼就要檢視...

機房收費系統 上下機

前言 這兩個窗體 邏輯基本類似,開始正文 邏輯圖 重要 展示 從下機來說下機時間的確定是乙個承上啟下的作用 basicsql select from basicdata info 連線基本資料表 set basicmrc executesql basicsql,basictext if online...