Option Explicit
Private Sub BerechneKostenButton_Click()
On Error GoTo Fehlerbehandlung
Dim Erwachsene As Integer
Dim Jugendliche As Integer
Dim Kinder As Integer
Dim Naechte As Integer
Dim Kosten As Double
' Löscht die Ausgabe, war nicht in der Aufgabe gefordert
Cells(2, 2) = ""
Erwachsene = eingabekontrolle(ErwachseneInput.Text)
Jugendliche = eingabekontrolle(JugendlicheInput.Text)
Kinder = eingabekontrolle(KinderInput.Text)
Naechte = eingabekontrolle(NaechteInput.Text)
plausikontrolle Erwachsene, Jugendliche, Kinder, Naechte
Kosten = BerechneKosten(Erwachsene, Jugendliche, Kinder, Naechte)
Cells(2, 2) = Kosten
Unload Me
Exit Sub
Fehlerbehandlung:
MsgBox ("Fehler: " & Err.Description)
End Sub
Private Function eingabekontrolle(ByVal eingabe As String) As Integer
eingabekontrolle = True
If Not IsNumeric(eingabe) Then
Err.Raise 5001, "eingabekontrolle", "Der von Ihnen eingegebene Wert muß eine Zahl sein! "
End If
eingabekontrolle = CInt(eingabe)
If (eingabekontrolle < 0) Then
Err.Raise 5002, "eingabekontrolle", "Der von Ihnen eingegebene Wert muß größer oder gleich Null sein! "
End If
End Function
Private Sub plausikontrolle(ByVal Erwachsene As Integer, ByVal Jugendliche As Integer, _
ByVal Kinder As Integer, ByVal Naechte As Integer)
Const AnzahlBetten As Integer = 30
Const MaxKinderProErwachsener As Integer = 6
Const MinErwachsene As Integer = 2
If Naechte <= 0 Then
Err.Raise 5003, "plausikontrolle", "Sie müssen mindestens eine Nacht buchen."
End If
If Erwachsene < MinErwachsene Then
Err.Raise 5004, "plausikontrolle", "Es müssen mindestens zwei Erwachsene mitfahren."
End If
If (Erwachsene * MaxKinderProErwachsener) < (Kinder + Jugendliche) Then
Err.Raise 5005, "plausikontrolle", "Es muss mindestens 1 Erwachsener je 6 Minderjährige mitfahren."
End If
If (Erwachsene + Jugendliche + Kinder) > AnzahlBetten Then
MsgBox ("Denken Sie daran, Luftmatratzen und Schlafsäcke mitzubringen.")
End If
End Sub
Private Function BerechneKosten(ByVal Erwachsene As Integer, ByVal Jugendliche As Integer, _
ByVal Kinder As Integer, ByVal Naechte As Integer) _
As Double
Const Mindestbetrag As Double = 50
Const RabattKinderreich As Double = 7 / 100
Const RabattGrossgruppe As Double = 5 / 100
Const GrenzeGrossgruppe As Integer = 30
Const PreisErwachsener As Integer = 12
Const PreisJugendlicher As Integer = 6
Const PreisKind As Integer = 3
Dim Betrag As Double
Betrag = Erwachsene * PreisErwachsener + Jugendliche * PreisJugendlicher + Kinder * PreisKind
If Erwachsene < (Kinder + Jugendliche) Then
Betrag = Betrag * (1 - RabattKinderreich)
ElseIf (Erwachsene + Jugendliche + Kinder) > GrenzeGrossgruppe Then
Betrag = Betrag * (1 - RabattGrossgruppe)
End If
If Betrag < Mindestbetrag Then
Betrag = Mindestbetrag
End If
Betrag = Betrag * Naechte
BerechneKosten = Betrag
End Function