/ / Начинаещ, който прави Visual Basic Project - vb.net, щракнете

Начинаещ прави Visual Basic Project - vb.net, щракнете

Правя малък проект с vb.net и имам проблеми с връщането на разходите за отопление до неподвижна точка.

  • Обадете се на функция, за да изчислите дали пулът емалък, среден или голям. Използвайте подходяща структура на разклоняване във функцията и върнете String посочва категорията на басейна. Обработващият събитията ще присвои този низ на Свойство Text на етикета на категорията. Сега с този тук имам етикет, наречен lblCategory.

  • И накрая, вмъкнете структура на цикъл в събитиетоманипулатор за изчисляване на стойността на долара на Permonth за отопление. Нуждаете се от контур за промяна на температурната променлива (която ще трябва да бъде тип с плаваща запетая) от стойностите от 5 до 23 инча стъпки от 1.5.

    Вътре в този цикъл добавете стойността на температурната променлива в текстовото поле Avg Temp и добавете съответна стойност до текстовото поле $ на месец, извиква функция, която използва следната формула:

    Разход за отопление = (25 - температура) * Обем / 32500

    Това ще изчисли разходите за отоплениебасейна до 25 градуса, като се умножи разлика в температурата според обема на басейна и регулиране по предварително зададена стойност. Уверете се, че функцията връща тип данни с неплаваща точка, така че да премахнете всички стойности с плаваща запетая от резултата.

Това е моят код досега ...

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

Всяка предоставена помощ ще бъде много приятна и полезна за мен да завърша това нещо, благодаря, че разгледах и отделих време да го прегледам.

Отговори:

0 за отговор № 1

Имате един изход Sub на много във вашия код. След вашите три блока на състоянието стои изход Sub, който винаги ще излезе от вашия sub на този ред.

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

Премахнете това последно „Излезте от Sub“ ^^


0 за отговор № 2

Вашите функции ValidXXX () се нуждаят от известна работа. Ако потребителят въведе „ChokeOnThis“ в TextBox, например, програмата ще се срине и ще изгори. Това е така, защото предавате струна, където се очаква Single. Това води до неявно (автоматично) преобразуване от String в Single. Ако String не е валиден Single (като пример "ChokeOnThis"), тогава се хвърля изключение и програмата се срива.

Правилният начин да направите това би било да получите аНанижете във функциите ValidXXX () и след това използвайте вътрешно функцията Integer.TryParse () като тази. Отново обърнете внимание, че параметърът "TestLength" към функцията е String:

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

Ще направите подобни промени в другите функции ValidXXX ().

Същият проблем съществува и за вашия SurfaceArea ()и други функции за изчисление, тъй като очакват параметрите на Integer, но вие ги предавате String стойности. Тъй като Strings ще бъдат валидирани в този момент, програмата обаче няма да се срине. Просто е лош дизайн тези преобразувания да се случват многократно. По-добрият дизайн би утвърдил входовете и преобразуваните стойности на Integer се съхраняват в локални променливи, за да могат да бъдат предадени на изчислителните функции.