機房重構經過近乙個月的努力,終於成型了!在優化的過程中,注意到非常多的問題,今天就來總結一下上機使用者的餘額實時判斷。
大家應該對網咖的收費系統有所了解,如果你上機的時候充值了5元,網咖的收費是每小時5元,也就是你的金錢只可以上機乙個小時,當快到乙個小時的時候,系統會提醒你的餘額不足,讓你充值,如果不充值,就會自動下機!同理機房收費系統也需要同樣的機制,要不然,老闆會賠錢的!哈哈!
說說之前的版本,沒有這個判斷機制,乙個卡片裡面有5元(大於最低金額),上機之後,如果使用者不下機,便可以一直上機,當使用者下機之後,會發現欠下鉅額的費用,這種機制已經不符合實際情況了。
1、要實現實時的判斷使用者的餘額,那就需要乙個計算使用者餘額的方法。
2、方法裡要注意對於不同型別的使用者,採用不同的收費政策。固定使用者和臨時使用者的收費策略不一樣。
3、這個方法要根據時間的間隔自動執行計算,並實時更新到使用者的餘額中。採用timer控制項。
4、計算出使用者的實時餘額後,還不行!還需要乙個判斷機制,判斷使用者的餘額是否充足。也就是將餘額的不同切位幾個不同的狀態,比如大於10元的狀態,不進行提示,不足10元的狀態,提醒使用者充值,然後不足5元的狀態,讓使用者下機。這種在不同的狀態間轉換的情況,讓我突然想起了設計模式中的狀態模式。
2、結合設計模式中的狀態模式,很好的對使用者的餘額進行判斷,並進行不同狀態的提示!很方便!
1、首先需要封裝乙個計算餘額的方法
//定義計算固定使用者花費金額的方法,括號裡的是需要傳進來的引數,也就是基本收據中的引數。因為結算需要基本資料中的資料
public
double
regularuser(out
double casttime, double rate,double preparetime,double unittime,datetime startdate, datetime starttime, datetime enddate, datetime endtime)
else
//如果上機時間大於準備時間,計算
return castcash;//返回計算好的消費時間
}//臨時使用者的同理
public
double
casualuser(out
double casttime,double tmprate, double preparetime, double unittime, datetime startdate, datetime starttime, datetime enddate, datetime endtime)
else
return castcash;
}
2、狀態模式的建立
計算餘額的方法已經封裝好了,接下來建立狀態模式。
ps:我是按照設計模式的書,先把狀態模式基本的**敲出來了,然後根據自己的需要進行的改變,這也能看出來,自己對狀態模式的應用不夠熟悉。
public
abstract
class state//建立乙個抽象的狀態類
public
class context//建立了乙個環境類
public
int cardno
public
double limitcash
public
void
setstate(state s)//設定狀態的方法
public
void
checkbalance()//狀態模式中狀態轉換時執行的方法
}class concretestatec : state//具體的狀態類c
else}}
public
class concretestatea:state//具體的狀態類a
else}}
public
class concretestateb : state
else
}}
3、在客戶端中實現。
要想將這個實現,需要你已經完成了下機!如果你已經完成了下機的方法,並建立了相應的層。接下來就開始實現。
首先需要新增乙個timer控制項
在窗體的load事件中新增一下**。
timer1.interval = 60000;//計時器的計算時間間隔,這裡設定1分鐘,也就每隔一分鐘觸發一次事件
timer1.tick += new eventhandler(timer1_tick);
timer1.start();
private void timer1_tick(object sender, eventargs e)
catch (exception ex)
finally
else}}
else
catch (exception ex)
finally}}
}}
}}
未完,還將更改! 機房重構 動態更新餘額
之前的動態下機通過實時檢查資料庫,這會使程式增加負擔,這次將餘額更新到了label控制項中顯示,更新label控制項就可以了。顧客通過登入介面直接進入上機介面,將上機的資訊顯示在狀態列中,實時更新顯示餘額的label控制項,經過乙個晚上的上機如下 實在主窗體寫的,如下 更新餘額的timer事件 pr...
C 機房重構之實時更新餘額
根據自己設定的基本資料表查詢用卡使用者的基本資料,判斷每小時的單價。datatable dtbasic loginfacade.inquirybasicdatainfo basic 呼叫查詢基礎資料的方法 判斷使用者型別,如果時會員卡就返回會員卡的單價,否則就執行非會員卡的單價 if dtcard....
以太坊錢包之餘額該咋整?
自從做了錢包,餘額就一直是個不大不小的問題,說問題大吧,那是因為使用者看到自己的不對了,立刻 說其小是因為,其實錢包裡餘額是水中月亮,月亮還是那個月亮,你的錢還是你的錢,只是偶爾有點水波盪漾,影子有點模糊。由於eth的效能不像eos這麼屌,你剛轉賬立刻就到賬了 eth是需要一段時間的,就是這一段時間...