首页 > 代码库 > 有关机房收费系统学生下机的思考

有关机房收费系统学生下机的思考



 

                               所谓的专家,就是在一个很小的领域把所有的错误都犯过的人

                                                                                                                                                                          ---------题记

做机房收费系统也有一段时间了,目前已经进行到学生下机操作了。因为学生下机操作时,需要根据不同用户的类别,来进行相应的结账服务,于是乎就想到了以前学习到的设计模式,那么针对这个问题,可以用到那些模式呢?小编在这里总结一下。(可能有些模式过于勉强,但这都无所谓,学习的真谛就在于此,不断的重复和实验)

 

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

前言

 先分析下下机需要用到的数据

固定用户每小时费用:代表会员级别每小时花费金额

临时用户每小时费用:代表临时用户每小时花费金额

至少上机时间:学生如果上机时间小于此的话,就按此时间计算

准备时间:此时间不计算在学生上机时间里面

至少金额:上机时间小于至少上机时间的,就按此计算

 

策略模式

 策略模式以前也写过类似的博客,连接如下

策略模式总结

类图

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

 未完待续……