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