1. 程式人生 > >有關機房收費系統學生下機的思考

有關機房收費系統學生下機的思考



                               所謂的專家,就是在一個很小的領域把所有的錯誤都犯過的人

---------題記

做機房收費系統也有一段時間了,目前已經進行到學生下機操作了。因為學生下機操作時,需要根據不同使用者的類別,來進行相應的結賬服務,於是乎就想到了以前學習到的設計模式,那麼針對這個問題,可以用到那些模式呢?小編在這裡總結一下。(可能有些模式過於勉強,但這都無所謂,學習的真諦就在於此,不斷的重複和實驗)

-------------------------------------------------------------------------------------------------------------------------------------------------------

前言

先分析下下機需要用到的資料

固定使用者每小時費用:代表會員級別每小時花費金額

臨時使用者每小時費用:代表臨時使用者每小時花費金額

至少上機時間:學生如果上機時間小於此的話,就按此時間計算

準備時間:此時間不計算在學生上機時間裡面

至少金額:上機時間小於至少上機時間的,就按此計算

策略模式

策略模式以前也寫過類似的部落格,連線如下

類圖

Strategy介面:封裝了不同類別使用者計算金額的演算法

Context類:封裝了不同的角色,當外部呼叫時,無須知道演算法,直接例項化該類即可

 

程式碼:

''' <summary>
''' 策略的介面
''' </summary>
''' <remarks></remarks>
Public Interface Strategy
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="consumeTime">花費的時間</param>
    ''' <param name="bill">不同型別使用者上機每小時花費金額</param>
    ''' <returns>返回消費的金額</returns>
    ''' <remarks></remarks>
    Function ConsumeMoney(ByVal consumeTime As Single, bill As Single) As Single


End Interface

''' <summary>
''' 固定使用者實現介面
''' </summary>
''' <remarks></remarks>
Public Class regularUser
    Implements Strategy
    Public Function ConsumeMoney(consumeTime As Single, bill As Single) As Single Implements Strategy.ConsumeMoney
        '如果小於準備時間的話,不收費的
        If consumeTime < 5 Then
            Return 0
            '如果小於最少上機時間的話,就收費最少金額
        ElseIf consumeTime > 5 And consumeTime < 30 Then
            Return 2
        Else
            Return bill / 60 * consumeTime
        End If
    End Function
   
    
End Class

Public Class context
    '抽象策略
    Dim strategy As Strategy = Nothing
    '建構函式設定具體策略
    '注意在vb.net中使用sub new()關鍵字來使用建構函式
    Sub New(ByVal _strategy As Strategy)
        Me.strategy = _strategy
    End Sub
    '封裝後的策略方法
    Public Sub count(ByVal consumeTime As Single, bill As Single)
        Me.strategy.ConsumeMoney(consumeTime, bill)
    End Sub
End Class

特別宣告:這只是一個學生下機結賬的小Demo

未完待續……