IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Visual Basic - Durchschnitt mit Visual Basic berechnen



Durchschnitt mit Visual Basic berechnen

Dieses Programm soll beliebig viele Zahlen vom Benutzer entgegennehmen und den Durchschnitt davon berechnen.


Autor: Patrick Bucher (paedubucher)
Datum: 14-05-2004, 23:15:21
Referenzen: paedubuche@bluewin.ch
Schwierigkeit: Anfänger
Ansichten: 14201x
Rating: 8.67 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Programm allgemein

Ziel

Das Ziel ist ein Programm zu schreiben, welches beliebig viele Zahlen entgegennimmt und dann den Durchschnitt berechnet. Es dürfen keine Fehler auftreten!

Lösungsansatz

Das ganze Programm soll auf einer Liste basieren. Der Benutzer kann beliebig viele Werte eingeben. Per Klick auf die Schaltfläche soll der Benutzer den Durchschnitt ausrechnet bekommen.

Formular

Steuerelemente

Name

Typ

Zweck

Nummer

cmdZahl(0 bis 9) Command-Button Eingabe von Zahlen 1
cmdPunkt Command-Button Einfügen von Dezimaltrennzeichen 2
lblNeueZahl Label Beschriftung von txtNeueZahl 3
txtNeueZahl TextBox Zwischenspeicher für neue Zahl 4
cmdHinzufügen Command-Button Fügt neue Zahl in die Liste ein 5
lblZahlenfeld Label Beschriftung von lstZahlen 6
lstZahlen Listenfeld Beinhaltet alle hinzugefügten Zahlen 7
lblDurchschnitt Label Beschriftet cmdDurchschnitt bzw. txtDurchschnitt 8
cmdDurchschnitt Command-Button Berechnet den Durchschnitt 9
txtDurchschnitt TextBox Zeigt den Durchschnitt nach der Berechnung an 10
txtTemp TextBox Dient zur Umwandlung von Strings zu Double 11
cmdItemLöschen Command-Button Löscht markierte Zahl aus der Liste heraus 12
cmdAlleLöschen Command-Button Leert alle Textfelder und die Zahlenliste 13


Die Anordnung sollte etwa so aussehen:




Der Nummernblock wird erst mit einer Prozedur beschriftet, er ist also zur Entwurfszeit noch leer.

Programm

FormLoad

Gleich zu Beginn müssen einige Dinge eingestellt werden.

Private Sub Form_Load()
'Beschriftung des Nummernblocks
Dim n As Integer
For n = 0 To 9 Step 1
cmdZahl(n).Caption = n
Next
'--------------------
'Deaktivierung von 2 Buttons
cmdHinzufügen.Enabled = False
cmdDurchschnitt.Enabled = False
'--------------------
End Sub
Die Beschriftung des Nummernblocks kann man am besten mit einer Schleife lösen. Da der Index des Feldes von 0 bis 9 geht, und ebenfalls Ziffern von 0 bis 9 verwendet werden, kann man n auch von 0 bis 9 laufen lassen. Der Benutzer sollte keine Buttons Anwählen dürfen, wenn noch keine Werte erfasst wurden, was vom 2. Teil geregelt wird.

Fehlerbehandlung

Alle Prozeduren, die Fehleranfällig sind, wurden durch eine Fehlerbehandlungsroutine abgesichert. Bei einem Laufzeitfehler wird folgende Funktion aufgerufen.

Private Function Fehlerbehandlung(Err_Number As Integer)
Select Case (Err_Number)
Case Is = 5:
MsgBox Title:="Fehler",
Prompt:="Sie haben keinen Eintrag ausgewählt!"
Case Is = 6:
MsgBox Title:="Fehler",
Prompt:="Die Zahl ist zu groß! Eingabe korrigieren!"
Case Is = 7:
MsgBox Title:="Fehler",
Prompt:="Zu wenig Hauptspeicher vorhanden!"
Case Is = 9:
MsgBox Title:="Fehler",
Prompt:="Indexverletzung, wenden sie sich an den Programmierer!"
Case Is = 11:
MsgBox Title:="Fehler",
Prompt:="Division durch 0. Eingabe prüfen"
Case Is = 13:
MsgBox Title:="Fehler",
Prompt:="Ungültiger Wert eingegeben!"
txtNeueZahl.Text = ""
Case Is = 94:
MsgBox Title:="Fehler",
Prompt:="Kein Wert vorhanden! Eingabe korrigieren"
Case Else
MsgBox Title:="Fehler",
Prompt:="Ein unbekannter Fehler ist aufgetreten!"
End Select
End Function
Der Funktion wird das Argument Err.Number übergeben. Diese Konstante beinhaltet die Nummer des aufgetretenen Laufzeitfehlers. Je nach Laufzeitfehler wird dann eine andere Mitteilungsbox geöffnet.

Cmd(Zahl|Punkt)_Click

Diese Steuerelemente dienen nur zur Eingabe von Werten. Wenn man auf einen Zahlenbutton oder auf den Punktbutton klickt, wird das Textfeld mit der neuen Zahl um die Caption Eigenschaft des angeklickten Buttons erweitert.

Private Sub cmdPunkt_Click()
txtNeueZahl.Text = txtNeueZahl.Text & "."
End Sub

Private Sub cmdZahl_Click(Index As Integer)
txtNeueZahl.Text = txtNeueZahl.Text & Index
End Sub
Hier können eigentlich keine Laufzeitfehler auftreten, deshalb fehlt die Fehlerbehandlungsroutine.

cmdHinzufügen_Click

Als nächstes wird der Benutzer, die eingegebene Zahl in die Liste hinzufügen wollen. Für diese kleine Aktion ist der Programmcode, aber dennoch recht umfassend. Weil noch überprüft wird, wie viele Elemente in der Liste sind, damit der Button für die Berechnung freigeschaltet werden kann. Die Fehlerbehandlung befindet sich ebenfalls in jeder Prozedur, was noch einmal 4 Zeilen benötigt.

Private Sub cmdHinzufügen_Click()
On Error GoTo Fehlerbehandlung:
Dim dblTmpZahl As Double
dblTmpZahl = txtNeueZahl.Text
lstZahlen.AddItem (dblTmpZahl)
'Wenn die Liste leer ist, kann man nicht rechnen
If lstZahlen.ListIndex = 0 Then
cmdDurchschnitt.Enabled = False
Else
cmdDurchschnitt.Enabled = True
End If
'Zahlenfeld wird geleert und erhält Fokus
txtNeueZahl.Text = ""
txtNeueZahl.SetFocus
Exit Sub
Fehlerbehandlung:
Fehlerbehandlung (Err.Number)
End Sub
cmdItemLöschen_Click

Bei dieser Prozedur wird nur der markierte Eintrag der Liste gelöscht, alle anderen bleiben in der Liste. Zusätzlich wird überprüft, ob die Liste überhaupt noch Elemente enthält. Wenn das nicht der Fall ist, kann der Benutzer die Schaltfläche zur Berechnung des Durchschnitts nicht anklicken.

Private Sub cmdItemLöschen_Click()
On Error GoTo Fehlerbehandlung:
lstZahlen.RemoveItem (lstZahlen.ListIndex)
If lstZahlen.ListCount = 0 Then
cmdDurchschnitt.Enabled = False
End If
Exit Sub
Fehlerbehandlung:
Fehlerbehandlung (Err.Number)
End Sub
Die Fehlerbehandlung wurde zur Sicherheit auch miteinbezogen.

cmdAlleLöschen_Click

Hier werden nicht nur alle Einträge aus der Liste entfernt, sondern auch die Inhalte der Textfelder gelöscht. Die Schaltfläche um den Durchschnitt zu berechnen wird ebenfalls deaktiviert:

Private Sub cmdAlleLöschen_Click()
lstZahlen.Clear
cmdDurchschnitt.Enabled = False
txtDurchschnitt.Text = ""
txtNeueZahl.Text = ""
End Sub
cmdDurchschnittBerechnen_Click

Zum Schluss noch die Kernprozedur des Programms, die Berechnung des Durchschnitts aller Listeneinträge.

Zuerst werden folgende Variabeln benötigt:

Dim n As Integer
Dim dblSumme As Double
Dim dblTemp As Double
Dim dblDurchschnitt As Double
Das größte Problem ist, dass alle Listeneinträge in Form eines Strings vorliegen. Diese können nicht ganz so einfach in Double Werte umgewandelt werden. Die beste Möglichkeit wäre es, das Listenelement herauszulesen, in ein Textfeld zu speichern und den Wert an eine Double Variable abgeben. In einer for-Schleife wird so jedes Element durchgegangen und aufsummiert.

For n = 0 To lstZahlen.ListCount - 1 Step 1
txtTemp = lstZahlen.List(n)
dblTemp = txtTemp.Text
dblSumme = dblSumme + dblTemp
Next
Jetzt muss nur noch der Durchschnitt berechnet werden. Hierzu muss man bekanntlich nur die Summe der Zahlen durch ihre Anzahl teilen. Das Resultat kann nun ausgegeben werden und ist komplett.

dblDurchschnitt = dblSumme / lstZahlen.ListCount
txtDurchschnitt = dblDurchschnitt


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0