Programmbeispiel Waggonbedarf 

Aufgabe (Fiktive Werte!): Ein modernes GUD-Elektrizitätswerk mit einem Wirkungsgrad von 49% soll eine Dauerleistung von 2,8 GW abgeben. Die Dichte der Kohle beträgt 1300 kg/m3 und ihr Heizwert8 GJ/t. Der später als Schlacke verbleibende Rest beträgt 36 Masse%, die Dichte 3,2 g/cm3.  Die Spezialwaggons haben einen nutzbaren Innenraum von 2,8 m Breite, 13 m Länge und 3,5 m Höhe (= 127,4 m3) und eine Tragfähigkeit von 0,205 *106 kg, wieviele Waggons werden täglich für den Transport der Kohle, wieviele für die Schlacke benötigt?

(Ergebnisse: Kohlemenge täglich 61.714 kt, Asche täglich 22.217 kt, Kohlewaggons 372,62, Aschewaggons 108,38)

In der Praxis werden sich einige Werte von Zeit zu Zeit ändern. Wenn Sie den Waggonbedarf täglich berechnen müssen, ist eine Berechnungshilfe nützlich.


Das Formular

UserForm gestalten, Anfangswerte eintragen


 Der Programmcode

'Deklarationsteil
Option Explicit
Dim Leistung As Single, Wirkungsgrad As Single, Brennwert As Single
Dim Kohledichte As Single, Aschegehalt As Single, Aschedichte As Single
Dim Tragfähigkeit As Single, Volumen As Single
Dim Kohlewaggons As Single, Aschewaggons As Single
Dim Kohlenmenge As Single, Aschenmenge As Single


'Auswertung des Klick-Ereignisses auf dem Button "Rechne"
Private Sub Command1_Click()
'Auslesen der vom Nutzer evtl. veränderten Zahlenwerte
   Leistung = Text1.Text
   Wirkungsgrad = Text2.Text
   Brennwert = Text3.Text
   Kohledichte = Text4.Text
   Aschegehalt = Text5.Text
   Aschedichte = Text6.Text
   Tragfähigkeit = Text7.Text
   Volumen = Text8.Text
'Rechenbasis Tag:
   Kohlenmenge = Leistung * 1000000000# * 24 * 3600 / Brennwert / 1000 / (Wirkungsgrad / 100)
   Label9.Caption = "Kohlemenge = " & Format$(Kohlenmenge, "Standard") & " t" & vbCrLf
   Aschenmenge = Kohlenmenge * Aschegehalt / 100
   Label9.Caption = Label9.Caption + "Aschenmenge = " & Format$(Aschenmenge, "Standard") & " t" & vbCrLf
   Label9.Caption = Label9.Caption + vbCrLf
'Kohlewaggons
   If Volumen * Kohledichte < Tragfähigkeit * 1000 Then
      Kohlewaggons = Kohlenmenge / (Kohledichte / 1000) / Volumen
   Else
      Kohlewaggons = Kohlenmenge / Tragfähigkeit
   End If
   Label9.Caption = Label9.Caption & "Kohlewaggons = " & Format(Kohlewaggons, "Standard") & vbCrLf
'Aschenwaggons
   If Volumen * Aschedichte < Tragfähigkeit * 1000 Then
      Aschewaggons = Aschenmenge / (Aschedichte / 1000) / Volumen
   Else
      Aschewaggons = Aschenmenge / Tragfähigkeit
   End If
   Label9.Caption = Label9.Caption & "Aschewaggons = " & Format$(Aschewaggons, "Standard")
End Sub


'Auswertung des Klick-Ereignisses auf dem Button "Ende"
Private Sub Command2_Click()
   End
End Sub

Anmerkung für (einige) Studenten der TFH Wildau: Das Wort 'Standard' schreibt sich auch nach den neuen Rechtschreibregeln hinten mit 'd', sonst klappt nämlich die Formatierung nicht.


Verbesserungen

Da es bestimmt mehrere Waggontypen gibt, deren Kennwerte feststehen, ist es günstiger, unter Typen auszusuchen und die Kennwerte der Typen vom Programm verwalten zu lassen.

Es empfehlen sich "Option-Buttons":

Zusätzlich vorgesehen ist ein neuer CommandButton, der den Druck einer Waggonbestellung auslösen soll. Er ist anfänglich deaktiviert, weil noch keine Berechnung erfolgt ist. Nach Berechnung soll er aktiviert werden.
 
 

Es gibt einige Veränderungen im Programmcode, zunächst im Deklarationsteil:
 
Dim Typ As Integer 'ergänzende Dimensionierung

Veränderung in der Procedur PrivateSub CommandButton1_Click():
 
   Aschedichte = TextBox5.Text 'alter Programmtext
'neuer Programmcode
   If Option1.Value Then Typ = 1 'die Auswahl einer Variablen zuweisen
   If Option2.Value Then Typ = 2
   If Option3.Value Then Typ = 3
   If Option4.Value Then Typ = 4
   Select Case Typ 'Auswahlstruktur zur Zuweisung der Parameterwerte
   Case 1
      Tragfähigkeit = 205
      Volumen = 127,4
   Case 2
      Tragfähigkeit = 55
      Volumen = 136
   Case 3
      Tragfähigkeit = 43
      Volumen = 114
   Case 4
      Tragfähigkeit = 88
      Volumen = 232
   End Select
'Erweiterung mit Druckoption
   Command3.Enabled = True 'Druck kann erfolgen, Druckroutine hier nicht ausgeführt!