Feedback

VB - Software BreakEventPoint und Verkaufspreis-Ermittlung

Veröffentlicht von am 8/26/2008
(1 Bewertungen)
Zur Beurteilung und Abschätzung von Software-Entwicklungen ist es sinnvoll eine schnelle
überschlägliche Ermittlung hinsichtlich des Verkaufspreises und der Anzahl
der abzusetzenden Stückzahlen bis zur Gewinnschwelle zu erhalten.
Wer möchte, kann die ausbauen mit Verzinsung usw.

' Ausführungsbeispiel
Dim Price As New QuickSoftwarePrice
With Price
' Kosten 20.000 Euro, 10% Geschäftskosten, 15 % Gewinnerwartung
.FillQuick(20000, 10, 15)

' bei einem Netto-Verkaufspreis von 200 Euro/Stck
Dim BreakEvenStueckzahl As Integer = .BreakEventPoint(200)
' bei einer Stückzahl von 100
Dim NettoPreisJeEinheit As Decimal = .Verkaufspreis(100)
End With
Public Class QuickSoftwarePrice

    ''' <summary>
    ''' Direkte Kosten der Software in EURO
    ''' </summary>
    ''' <remarks></remarks>
    Public Structure structKosten
        ''' <summary>
        ''' Die Entwicklungskosten für das Softwareprodukt
        ''' </summary>
        ''' <remarks></remarks>
        Public Entwicklungskosten As Decimal
        ''' <summary>
        ''' aufgewendete Fremdkosten für das Softwareprodukt
        ''' z.b. für Freelancer
        ''' </summary>
        ''' <remarks></remarks>
        Public Fremdkostenkosten As Decimal
        ''' <summary>
        ''' Lizenkosten für eingebettete fremde Programme
        ''' </summary>
        ''' <remarks></remarks>
        Public Lizenzkosten As Decimal
        ''' <summary>
        ''' Sachkosten nur für dieses Softwareprodukt
        ''' </summary>
        ''' <remarks></remarks>
        Public Sachkosten As Decimal

        Public Function SummeKosten() As Decimal
            Return Me.Entwicklungskosten + Me.Fremdkostenkosten + Me.Lizenzkosten + Me.Sachkosten
        End Function
    End Structure

    ''' <summary>
    ''' Allgemeine Geschäftskosten in % vom Verkaufspreis
    ''' </summary>
    ''' <remarks></remarks>
    Public Structure structAGKproz
        Public Geschaeftskosten As Decimal
        Public Gewinnspanne As Decimal
    End Structure

    ''' <summary>
    ''' Errechnete Allgemeine Geschäftskosten
    ''' </summary>
    ''' <remarks></remarks>
    Private Structure structAGK
        Public Geschaeftskosten As Decimal
        Public Gewinnspanne As Decimal
        Public Function SummeKosten() As Decimal
            Return Me.Geschaeftskosten + Me.Gewinnspanne
        End Function
    End Structure

    Private m_KOSTEN As structKosten
    Private m_AGKP As structAGKproz
    Private m_AGK As structAGK

    ''' <summary>
    ''' Anzahl der verkauften Software-Einheiten
    ''' </summary>
    ''' <remarks></remarks>
    Private m_AnzahlSoftwareEinheiten As Integer

    Public Sub New()

    End Sub

#Region " Eingabebereich "

    ''' <summary>
    ''' Direkte Kosten der Software in EURO
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Property Kosten() As structKosten
        Get
            Return m_KOSTEN
        End Get
        Set(ByVal value As structKosten)
            m_KOSTEN = value
            m_AGK = _calc_agk(m_KOSTEN.SummeKosten)
        End Set
    End Property

    ''' <summary>
    ''' Allgemeine Geschäftskosten in % vom Verkaufspreis
    ''' </summary>
    ''' <value></value>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Property AGKProz() As structAGKproz
        Get
            Return m_AGKP
        End Get
        Set(ByVal value As structAGKproz)
            m_AGKP = value
            m_AGK = _calc_agk(m_KOSTEN.SummeKosten)
        End Set
    End Property

    ''' <summary>
    ''' Schnelleingabe, die Kosten werden nicht untergliedert
    ''' </summary>
    ''' <param name="SummeKosten">als Gesamtkosten</param>
    ''' <param name="GeschaeftskostenProz">Geschäftkosten in Prozent</param>
    ''' <param name="GewinnspanneProz">Gewinn in Prozent</param>
    ''' <remarks></remarks>
    Public Sub FillQuick(ByVal SummeKosten As Decimal, ByVal GeschaeftskostenProz As Decimal, ByVal GewinnspanneProz As Decimal)
        Dim Kosten As New QuickSoftwarePrice.structKosten
        With Kosten
            .Entwicklungskosten = SummeKosten
            .Fremdkostenkosten = 0
            .Lizenzkosten = 0
            .Sachkosten = 0
        End With

        Dim AGK As New QuickSoftwarePrice.structAGKproz
        With AGK
            .Geschaeftskosten = GeschaeftskostenProz
            .Gewinnspanne = GewinnspanneProz
        End With
        m_AGK = _calc_agk(m_KOSTEN.SummeKosten)
    End Sub

#End Region

#Region " Ergebnisbereich "

    ''' <summary>
    ''' der ermittelte Gewinn
    ''' </summary>
    ''' <value></value>
    ''' <returns>Gewinn in Währung</returns>
    ''' <remarks></remarks>
    ReadOnly Property Gewinn() As Decimal
        Get
            Return m_AGK.Gewinnspanne
        End Get
    End Property

    ''' <summary>
    ''' die anfallenden Geschäftskosten
    ''' </summary>
    ''' <value></value>
    ''' <returns>Geschäftskosten in Währung</returns>
    ''' <remarks></remarks>
    ReadOnly Property Geschaeftskosten() As Decimal
        Get
            Return m_AGK.Geschaeftskosten
        End Get
    End Property

    ''' <summary>
    ''' BreakEvent-Point. Wann kommt man in die Gewinnphase.
    ''' </summary>
    ''' <param name="VPjeProg">Verkaufspreis netto je Softwarepaket</param>
    ''' <returns>Anzahl der zuverkaufende Softwarepakete</returns>
    ''' <remarks></remarks>
    Public Function BreakEventPoint(ByVal VPjeProg As Decimal) As Integer
        Dim SummeKosten As Decimal = m_KOSTEN.SummeKosten
        SummeKosten += _calc_agk(SummeKosten).Geschaeftskosten
        Return CInt((SummeKosten / VPjeProg) + 0.5)
    End Function

    ''' <summary>
    ''' Wiehoch muss der Verkaufspreis sein, wenn eine
    ''' bestimmte Anzahl von Softwarepaketen verkauft werden soll
    ''' und die Gewinnspanne in % erreicht werden soll
    ''' </summary>
    ''' <param name="AnzahlSoftwarePakete">Anzahl der zu verkaufende Softwarepakete</param>
    ''' <returns>Verkaufspreis je Stück netto</returns>
    ''' <remarks></remarks>
    Public Function Verkaufspreis(ByVal AnzahlSoftwarePakete As Integer) As Decimal
        Dim SummeKosten As Decimal = m_KOSTEN.SummeKosten
        SummeKosten += _calc_agk(SummeKosten).SummeKosten
        Return SummeKosten / AnzahlSoftwarePakete
    End Function

#End Region

    ''' <summary>
    ''' berechnet die AGK-Euro-Werte von AGK-%
    ''' </summary>
    ''' <param name="Herstellkosten"></param>
    ''' <returns></returns>
    ''' <remarks></remarks>
    Private Function _calc_agk(ByVal Herstellkosten As Decimal) As structAGK
        Dim Aufschlag As Decimal = m_AGKP.Geschaeftskosten + m_AGKP.Gewinnspanne
        Dim dAGK As New structAGK
        With dAGK
            .Geschaeftskosten = Herstellkosten / (100 - Aufschlag) * m_AGKP.Geschaeftskosten
            .Gewinnspanne = Herstellkosten / (100 - Aufschlag) * m_AGKP.Gewinnspanne
        End With
        Return dAGK
    End Function

End Class

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!

Ähnliche Snippets