2011-12-17 2 views
-4

특정 변수의 값이 여러 개인 다음과 같은 내용이 많아 최대 IF ELSE 문을 처리하지 않으려 고하므로 어떤 사람이 SELECT CASE 문을 사용하여 코드를 친절하게 수정할 수 있다면 감사하게 생각합니다.IF 문을 선택하는 방법을 변경하는 중 .... 사례

또한 dgMarksEntry.Item(7, i).ValuedgMarksEntry.Item(8, i).Value을 입력하여 각각 RANKCOUNT을 입력하고 싶습니다.

For i = 0 To 100 
     dgMarksEntry.Item(4, i).Value = Val(dgMarksEntry.Item(3, i).Value) + Val(dgMarksEntry.Item(2, i).Value) 

     If dgMarksEntry.Item(4, i).Value >= 80 Then 
      dgMarksEntry.Item(5, i).Value = "A1" 
      dgMarksEntry.Item(6, i).Value = "Excellent" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 75 Then 
      dgMarksEntry.Item(5, i).Value = "B2" 
      dgMarksEntry.Item(6, i).Value = "Very good" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 70 Then 
      dgMarksEntry.Item(5, i).Value = "B3" 
      dgMarksEntry.Item(6, i).Value = "Good" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 65 Then 
      dgMarksEntry.Item(5, i).Value = "C4" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 60 Then 
      dgMarksEntry.Item(5, i).Value = "C5" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 55 Then 
      dgMarksEntry.Item(5, i).Value = "C6" 
      dgMarksEntry.Item(6, i).Value = "Credit" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 50 Then 
      dgMarksEntry.Item(5, i).Value = "D7" 
      dgMarksEntry.Item(6, i).Value = "Pass" 
     ElseIf dgMarksEntry.Item(4, i).Value >= 40 Then 
      dgMarksEntry.Item(5, i).Value = "E8" 
      dgMarksEntry.Item(6, i).Value = "Weak pass" 
     ElseIf dgMarksEntry.Item(4, i).Value <= 39 Then 
      dgMarksEntry.Item(5, i).Value = "F9" 
      dgMarksEntry.Item(6, i).Value = "Fail" 
     End If 
    Next 
+3

* * * * * *를 (를) 코딩 하시길 바랍니다! – Marlon

+1

SQL을 보여주십시오 ... 당신은 무엇을 시도 했습니까? 작동하지 않는 것은 무엇입니까? – Yahia

답변

1

나는 완전히 다른 접근 방법을 선택할 것. 첫째, 평가 정보를 포함 할 수있는 클래스를 선언

Public Class CreditRating 
    Private m_Limit As Integer 
    Public Property Limit() As Integer 
     Get 
      Return m_Limit 
     End Get 
     Set(ByVal value As Integer) 
      m_Limit = value 
     End Set 
    End Property 

    Private m_Rating As String 
    Public Property Rating() As String 
     Get 
      Return m_Rating 
     End Get 
     Set(ByVal value As String) 
      m_Rating = value 
     End Set 
    End Property 

    Private m_Appreciation As String 
    Public Property Appreciation() As String 
     Get 
      Return m_Appreciation 
     End Get 
     Set(ByVal value As String) 
      m_Appreciation = value 
     End Set 
    End Property 
End Class 

그런 다음에 논리를 변경 :이 방법

Dim ratings As New List(Of CreditRating) 

ratings.Add(New CreditRating With {.Limit = 80, .Rating = "A1", .Appreciation = "Excellent"}) 
ratings.Add(New CreditRating With {.Limit = 75, .Rating = "B2", .Appreciation = "Very good"}) 
ratings.Add(New CreditRating With {.Limit = 70, .Rating = "B3", .Appreciation = "Good"}) 
ratings.Add(New CreditRating With {.Limit = 65, .Rating = "C4", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 60, .Rating = "C5", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 55, .Rating = "C6", .Appreciation = "Credit"}) 
ratings.Add(New CreditRating With {.Limit = 50, .Rating = "D7", .Appreciation = "Pass"}) 
ratings.Add(New CreditRating With {.Limit = 40, .Rating = "E8", .Appreciation = "Weak pass"}) 
ratings.Add(New CreditRating With {.Limit = 0, .Rating = "F9", .Appreciation = "Fail"}) 

For i As Integer = 0 To 100 
    Dim value As Double = Conversion.Val(dgMarksEntry(3, i).Value) + Conversion.Val(dgMarksEntry(2, i).Value) 
    dgMarksEntry(4, i).Value = value 
    For Each rating As CreditRating In ratings 
     If value >= rating.Limit Then 
      dgMarksEntry(5, i).Value = rating.Rating 
      dgMarksEntry(6, i).Value = rating.Appreciation 
      Exit For 
     End If 
    Next 
Next 

, 당신은 또한 파일이나 데이터베이스에서 등급 정보를 읽을 수 있습니다. 따라서 제한을 쉽게 변경할 수 있습니다. 또한 로직이 한 번만 프로그래밍되고 모든 한계에 대해 동일하기 때문에 오류 발생 가능성이 적습니다.

+0

고마워요. 나는 당신의 코드를 완벽하게 이해합니다. 그것은 아주 잘 작동합니다. – Akaglo

1

당신이해야 할 일은 시작하기위한 몇 가지 예를 포함하여이 페이지에 있습니다.

http://msdn.microsoft.com/en-us/library/cy37t14y.aspx

+0

링크를 확인했지만 여전히 잘 이해할 수 있습니다. 내 IF ELSE 문을 SELECT CASE로 변경하십시오. 저를위한 몇몇보기를 운동하십시오. – Akaglo

+0

@Akaglo : If dgMarksEntry.Item (4, i) .Value> = 80 Then' 대신'Case dgMarksEntry.Item (4, i) .Value Is> = 80'을 써 보았습니까? 그리고 이렇게 ... –