簡體   English   中英

我在Visual Basic中遇到了課堂成績計算器的問題

[英]I'm having trouble in Visual Basic with a grade calculator for class

 Public Class convertGrades
'Here is where I declare my variables
Dim numbergrade As Integer
Dim lettergrade As Char

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    'This is an If/Else statement that allows the user to
    'convert their number grade into a letter grade
    txtNumberGrade.Text = numbergrade
    lblLetterGrade.Text = lettergrade

    If (numbergrade >= 90 Or numbergrade <= 100) Then
        lettergrade = "A"
    ElseIf (numbergrade >= 80 Or numbergrade <= 79) Then
        lettergrade = "B"
    ElseIf (numbergrade >= 70 Or numbergrade <= 89) Then
        lettergrade = "C"
    ElseIf (numbergrade >= 60 Or numbergrade <= 69) Then
        lettergrade = "D"
    ElseIf (numbergrade >= 50 Or numbergrade <= 59) Then
        lettergrade = "F"
    End If
    txtNumberGrade.Focus()
End Sub

這是我所擁有的確切代碼,我正在使用Visual Basic 2012,並且無法將這些數字轉換為字母等級。 VB表示我沒有錯誤,但是運行它時,程序不會將數字轉換為字母。 有什么建議么?

您將較高的數字換成B和C等級。 另外,您可能希望AndAlso進行這些檢查,而不是Or 當我在這里時,作為良好的程序設計,您應該將其抽象為一個單獨的方法。 最終結果:

Public Function LetterGradeFromScore(ByVal score As Integer) As Char
    If numbergrade >= 90 Then
         Return "A"c
    ElseIf numbergrade >= 80 AndAlso numbergrade <= 89 Then
        Return "B"c
    ElseIf numbergrade >= 70 AndAlso numbergrade <= 79 Then
        Return "C"c
    ElseIf numbergrade >= 60 AndAlso numbergrade <= 69 Then
        Return "D"c
    Else
        Return "F"c
    End If
End Function

'The only code that lives in this method is code that directly updates or responds to the UI
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click   
    txtNumberGrade.Text = numbergrade
    lblLetterGrade.Text = LetterGradeFromScore(numbergrade)
    txtNumberGrade.Focus()
End Sub

另一件事:VB.Net具有一個非常好的Select Case語法,您可以使用此語法:

Public Function LetterGradeFromScore(ByVal score As Integer) As Char
    Select Case score
        Case >= 90
            Return "A"c
        Case 80 to 89
            Return "B"c
        Case 70 to 79
            Return "C"c
        Case 60 to 69
            Return "D"c
        Case Else
           Return "F"c
    End Select
End Function

最后,通過將其轉換為一種表查找,可以避免諸如交換上述數字之類的問題,並可以改進代碼。

Public Function LetterGradeFromScore(ByVal score As Integer) As Char 

    'This could be a Shared Member somewhere, or even stored in a DB and populated on load
    Dim gradeMap As New SortedList(Of Integer, Char)(5)
    gradeMap.Add(90, "A"c)
    gradeMap.Add(80, "B"c)
    gradeMap.Add(70, "C"c)
    gradeMap.Add(60, "D"c)
    gradeMap.Add( 0, "F"c)

    Return gradeMap.Last(Function(m) m.Key < score).Value
End Function

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM