机房收费系统学生下机结账小结
??
? 這幾天一直在考慮機房收費系統(tǒng)學生下機操作。學生下機,一則須要加入學生下機記錄信息;還須要計算學生在整
個上機過程中所花費的金額,而且更新學生剩余金額。那么如何做在性能上或者擴展上更好一些呢?
?操作?
?
? 1.加入學生下機信息
? 2.計算學生上機時間
? 3.依據(jù)上機時間來計算學生所花費的金額
? 4.更新學生的剩余金額
設計模式
?
在通過學生上機時間來計算學生所花費的金額這步操作上,須要進行一些條件分支語句的推斷。由于上機時間被分為
了三部分:準備時間、至少上機時間、上機時間。所以在步驟3中有大量的條件分支語句,從某種程度上看,這是一
種不好的現(xiàn)象。
?
為了解決問題,能夠增加設計模式來解除大量的條件分支語句的推斷。
?
?? 策略模式
http://blog.csdn.net/luckyzhoustar/article/details/27661807
????????
策略模式的使用,封裝了不同類型用戶之間計算消費金額的算法,對于以后的擴展極其有利。比方說假設以后,學生
能夠採取一小時一積分的形式,來兌換一些禮品或者一些其它的增值服務的話,那么策略模式就特別的easy擴展,僅僅
須要添加一個策略就能夠了。可是也有一些問題,假設全部同一時候強制下機的話,人數(shù)過多的話,須要不斷的計算消費
金額和更新后臺數(shù)據(jù)庫,easy導致系統(tǒng)崩潰的狀態(tài)。
?狀態(tài)模式?
http://blog.csdn.net/luckyzhoustar/article/details/27679497
?????
狀態(tài)模式的應用,僅僅只是簡單的接觸了if……else分支推斷的操作,對于系統(tǒng)以后假設在時間上有所擴展的話,比較有
優(yōu)勢,比方說學生連續(xù)上機超過4小時的話,能夠免費添加一小時上網(wǎng)時間,這時候僅僅要簡單的添加一個狀態(tài)就可以,
也是比較easy擴展的。
職責鏈模式
http://blog.csdn.net/luckyzhoustar/article/details/27689679
???
職責鏈模式的應用跟狀態(tài)模式同樣也是解除了If……else分支推斷的操作,沒有太大實質(zhì)性的意義。
小結(jié)?
? 關于以上三種模式對于學生下機計算消費金額的操作中,后兩種模式可能加起來有些牽強,僅僅是單純的為了解除
if……else分支推斷的耦合操作,沒有太大實質(zhì)性的意義。而策略模式才是王道,才真真正正的符合這個場景。由于策
略模式從本身上來說,就是定義算法家族,分別封裝起來,讓它們之間能夠互相替換。
? 可是我們從三種模式中發(fā)現(xiàn),假設一旦強制全部人下機的話,而且在上機人數(shù)過多的情況下,前臺須要不斷地與后
臺server打交道,可能會出現(xiàn)崩潰的狀況,為了解決問題,小編又有了新的想法。
建議:對于設計模式,在這個階段能夠大膽的嘗試創(chuàng)新,這也是對自己前段時間學習的一種磨練,不管用的好與壞這都無所謂。僅僅有你不斷的利用,你才會掌握設計模式的真諦。
觸發(fā)器
是SQL server 提供給程序猿和數(shù)據(jù)分析員來保證數(shù)據(jù)完整性的一種方法,它是與表事件相關的特殊的存儲過程,它的運行不是由程序調(diào)用,也不是手工啟動,而是由事件來觸發(fā)。
因此我們能夠通過觸發(fā)器的操作,在后臺數(shù)據(jù)庫中自己主動的實現(xiàn)更新學生下機金額的計算。我們把算法所有封裝到觸發(fā)器中,全然的解除前段與數(shù)據(jù)庫的聯(lián)系,當前段更新學生下機記錄的時候,直接觸發(fā)觸發(fā)器,自己主動的完畢學生剩余金額的更新操作。這樣在某種程度上就降低了當眾多人強制下機的時候,系統(tǒng)出現(xiàn)崩潰的狀況。
代碼
<span style="font-size:18px;"><span style="font-size:24px;">--假設這個存儲過程存在的話,就刪除 if(OBJECT_ID('tgr_UpdateOffline','tr') is not null) drop trigger tgr_UpdateOffline go create trigger tgr_UpdateOffline on onlineInfo for insert--插入觸發(fā) as --定義變量 declare @regulareUser float,@instantUser float, @atleastTime float,@prepareTime float,@stuid char(11), @consumeTime float,@money float,@atleastMoney float select @regulareUser =RegularUser,@instantUser =instantUser,@atleastTime=atleastTime,@prepareTime =preparetime,@atleastMoney=AtLeastMoney from BasicData --計算出學生上機消費時間 select @stuid=stuid,@consumeTime= datediff(minute,convert(time(0),offTime),convert(time(0),onlineTime)) from inserted --開始推斷學生上機花費的時間 --begin...and操作封裝計算學生剩余金額操作 begin if @consumeTime -@prepareTime <0 set @money=0 else if @consumeTime -@prepareTime -@atleastTime <0 set @money=@atleastMoney else set @money=@instantUser/60 * @consumeTime end--最后更新學生剩余金額操作 update StudentInfo set money =money-@money where stuid=@stuid </span></span>
當然了為了能夠優(yōu)化觸發(fā)器,在更新學生剩余金額表上能夠建立有關于學生卡號的索引,能夠提高執(zhí)行速度。?
以上就是小編對于學生下機計算金額操作的小結(jié),假設各位有更好的建議,能夠多多交流。
?
總結(jié)
以上是生活随笔為你收集整理的机房收费系统学生下机结账小结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: myeclipse启动错误:org.ec
- 下一篇: 谈谈Web加速