/ / Anfänger in Visual Basic Project - vb.net, klicken Sie auf

Anfänger für Visual Basic Project - vb.net, klicken Sie auf

Ich mache ein kleines Projekt mit vb.net und habe Probleme, die Heizkosten auf einen nicht schwebenden Punkt zurückzuführen.

  • Rufen Sie eine Funktion auf, um zu berechnen, ob der Pool vorhanden istklein, mittel oder groß. Verwenden Sie eine geeignete Verzweigungsstruktur in der Funktion und geben Sie einen String zurück Angabe der Poolkategorie. Der Ereignishandler weist diesen String dem zu Die Texteigenschaft der Kategoriebeschriftung. Jetzt mit diesem hier habe ich ein Label namens lblCategory.

  • Fügen Sie schließlich eine Schleifenstruktur in das Ereignis einHandler zur Berechnung des Dollar-Monat-Wertes der Heizung. Benötigen Sie eine Schleife, um die Temperaturvariable (die ein Gleitkomma-Typ sein muss) von 5 bis 23 Zoll zu variieren Schritte von 1,5.

    Fügen Sie innerhalb dieser Schleife den Wert der Temperaturvariablen zum Textfeld Durchschnittstemperatur hinzu und fügen Sie einen entsprechenden Wert hinzu Rufen Sie im Textfeld $ Per Month eine Funktion auf, die die folgende Formel verwendet:

    Heizkosten = (25 - Temperatur) * Volumen / 32500

    Dadurch werden die Heizkosten berechnetder Pool auf 25 Grad, durch Multiplikation der Temperaturdifferenz durch das Volumen des Pools und Anpassung um einen vorgegebenen Wert. Stellen Sie sicher, dass die Funktion einen Nicht-Gleitkomma-Datentyp zurückgibt, um alle zu entfernen Gleitkommawerte aus dem Ergebnis.

Dies ist mein Code bisher ...

Public Class Form1

Const MinLength As Integer = 5
Const MaxLength As Integer = 50
Const MinWidth As Integer = 2
Const MaxWidth As Integer = 20
Const MinDepth As Integer = 2
Const MaxDepth As Integer = 4


Private Function ValidLength(ByVal TestLength As String) As Boolean
"Length of the pool
Dim i As Double
Dim Message As String = ""
If Double.TryParse(TestLength, i) Then
If i >= MinLength AndAlso i <= MaxLength Then
Return True
End If
End If
Message = "Length measurement is not valid." & vbCrLf & vbCrLf & "Please enter a value between 5 and 50"
MessageBox.Show(Message, "Data Invalid", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
End
End Function

Private Sub btnCalculate_Click(sender As Object, e As EventArgs) Handles btnCalculate.Click
Dim Volume As Double
Dim Temp As Double
Dim SA As Double
Dim HeatingCostInt As Integer
If Not ValidLength(txtLength.Text) Then
Exit Sub
End If
If Not ValidWidth(txtWidth.Text) Then
Exit Sub
End If
If Not ValidDepth(txtAvgDepth.Text) Then
Exit Sub
End If
"SurfaceArea Function
SA = Val(SurfaceArea(txtLength.Text, txtWidth.Text))
txtSurfaceArea.Text = SA
"Volume Function
Volume = Val(Vol(txtLength.Text, txtWidth.Text, txtAvgDepth.Text * 1000))
txtVolume.Text = Volume
If PoolVolume(Volume) Then
End If
"Temperature Function
For Temp = 5 To 23 Step 1.5
txtTableAvgTemp.AppendText(Temp & Environment.NewLine)
HeatingCost(Temp, Volume)
Next
End Sub

Private Function ValidWidth(ByVal TestWidth As String) As Boolean
"Width of the Pool
Dim Message As String = ""
Dim i As Double
If Double.TryParse(TestWidth, i) Then
If i >= MinWidth And i <= MaxWidth Then
Return True
End If
End If
Message = "Width measurement is not valid." & vbCrLf & vbCrLf & "Please enter a value between 2 and 20"
MessageBox.Show(Message, "Data Invalid", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
End
End Function

Private Function ValidDepth(ByVal TestDepth As String) As Boolean
"Depth of the pool
Dim Message As String = ""
Dim i As Double
If Double.TryParse(TestDepth, i) Then
If i >= MinDepth And i <= MaxDepth Then
Return True
End If
End If
Message = "Depth measurement is not valid." & vbCrLf & vbCrLf & "Please enter a value between 2 and 4"
MessageBox.Show(Message, "Data Invalid", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
End
End Function

Private Function SurfaceArea(ByVal Value1 As Double, ByVal Value2 As Double) As Double
"Calculation for SurfaceArea
SurfaceArea = Value1 * Value2
Return SurfaceArea
End Function

Private Function Vol(ByVal Value1 As Double, ByVal Value2 As Double, ByVal Value3 As Double) As Double
"Calculation for Volume
Vol = Value1 * Value2 * Value3 * 1000
Return Vol
End Function

Private Function PoolVolume(ByVal Value1 As Double) As Boolean
"Pool Volume size that isn"t working correctly and I don"t know why
If (Value1 <= 500000) Then
lblCategory.Text = "Pool Category: Small"
ElseIf (Value1 > 500000 <= 1500000) Then
lblCategory.Text = "Pool Category: Medium"
Else
lblCategory.Text = "Pool Category: Large"
Value1 = lblCategory.Text
End If
Return PoolVolume
End Function

Private Sub btnExit_Click(sender As Object, e As EventArgs) Handles btnExit.Click
"Ends the program
End
End Sub

Private Sub txtSurfaceArea_TextChanged(sender As Object, e As EventArgs) Handles txtSurfaceArea.TextChanged
"Changes text of SurfaceArea
txtSurfaceArea.Text = txtLength.Text * txtWidth.Text
End Sub

Private Sub txtVolume_TextChanged(sender As Object, e As EventArgs) Handles txtVolume.TextChanged
"Changes text of Volume
txtVolume.Text = txtLength.Text * txtWidth.Text * txtAvgDepth.Text * 1000
End Sub

Private Function HeatingCost(ByVal Value1 As Double, ByVal Value2 As Double) As Double
"Calculation for Heating Cost that isn"t returning as a non-floating point. Main issue right here!!!
Dim Value3 As Double = 32500
HeatingCost = (25 - Value1) * Value2 / Value3
txtTableDollars.AppendText(HeatingCost & Environment.NewLine)
End Function

End Class

Jede Hilfe wäre sehr nett und hilfreich für mich, um diese Sache zu beenden, danke, dass ich sie durchgesehen und mir die Zeit genommen habe, sie durchzugehen

Antworten:

0 für die Antwort № 1

Sie haben ein Exit Sub zu viel in Ihrem Code. Nach Ihren drei Bedingungsblöcken steht ein Exit Sub, das Ihr Sub in dieser Zeile immer verlässt.

If Not ValidLength(txtLength.Text) Then
Exit Sub
End If
If Not ValidWidth(txtWidth.Text) Then
Exit Sub
End If
If Not ValidDepth(txtAvgDepth.Text) Then
Exit Sub
End If
Exit Sub

Entfernen Sie dieses letzte "Exit Sub" ^^


0 für die Antwort № 2

Ihre ValidXXX () -Funktionen erfordern einige Arbeit. Wenn der Benutzer beispielsweise "ChokeOnThis" in die TextBox eingibt, stürzt das Programm ab und brennt. Dies liegt daran, dass Sie einen String übergeben, an dem ein Single erwartet wird. Dies führt zu einer impliziten (automatischen) Konvertierung von String zu Single. Wenn der String keine gültige Single ist (wie im Beispiel "ChokeOnThis"), wird eine Ausnahme ausgelöst und das Programm stürzt ab.

Der richtige Weg, dies zu tun, wäre, eine zu erhaltenString in die ValidXXX () -Funktionen und dann intern die Integer.TryParse () -Funktion wie folgt verwenden. Beachten Sie erneut, dass der Parameter "TestLength" für die Funktion ein String ist:

Private Function ValidLength(ByVal TestLength As String) As Boolean
"Length of the pool
Dim i As Single
If Single.TryParse(TestLength, i) Then
If i >= MinLength AndAlso i <= MaxLength Then
Return True
End If
End If

Dim Message As String = _
"Length measurement is not valid." & vbCrLf & vbCrLf & _
"Please enter a value between 5 and 50"
MessageBox.Show(Message, "Data Invalid", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
Return False
End Function

Sie würden ähnliche Änderungen an den anderen ValidXXX () -Funktionen vornehmen.

Das gleiche Problem besteht für Ihre SurfaceArea ()und andere Berechnungsfunktionen, da sie Integer-Parameter erwarten, Sie diese jedoch weitergeben. String-Werte. Da die Strings zu diesem Zeitpunkt validiert wurden, stürzt das Programm jedoch nicht ab. Es ist nur ein schlechtes Design, wenn diese Konvertierungen mehrmals durchgeführt werden. Ein besseres Design würde die Eingaben validieren und die konvertierten Integer-Werte in lokalen Variablen speichern, damit sie an die Berechnungsfunktionen übergeben werden können.