반응형
*VBNET Json 을 이용한 간단한 로또 당첨번호 확인 예제...
- 사용한 컨트롤 : Button 1개, Label 3개, TextBox 8개, GroupBox 1개
- 참조 소스
https://kdsoft-zeros.tistory.com/100
전체 소스 코드
Form1.vb
Imports System.Net.Json
Imports System.Net
Imports System.IO
Public Class Form1
Dim iCount As Integer = 0
Dim ltResult As List(Of Integer) = New List(Of Integer)()
Private Function IsNullString(ByVal str As String) As Boolean
Return String.IsNullOrEmpty(str)
End Function
Private Function IsInt(ByVal ob As Object) As Integer
If ob Is Nothing Then
Return 0
End If
Dim iCheck As Integer = 0
Dim bCheck As Boolean = Integer.TryParse(ob.ToString(), iCheck)
If Not bCheck Then
Return 0
End If
Return iCheck
End Function
Private Function IsCheck() As Boolean
'문자열 체크.
If IsNullString(TextBox1.Text) And _
IsNullString(TextBox2.Text) And _
IsNullString(TextBox3.Text) And _
IsNullString(TextBox4.Text) And _
IsNullString(TextBox5.Text) And _
IsNullString(TextBox6.Text) Then
MessageBox.Show("빈 값일 순 없습니다.")
Return False
End If
'숫자 체크...
If IsInt(TextBox1.Text) And _
IsInt(TextBox2.Text) And _
IsInt(TextBox3.Text) And _
IsInt(TextBox4.Text) And _
IsInt(TextBox5.Text) And _
IsInt(TextBox6.Text) Then
MessageBox.Show("숫자만 입력 해 주세요.")
Return False
End If
'회차 번호 체크...
If IsInt(TextBox8.Text) = 0 And IsNullString(TextBox8.Text) Then
MessageBox.Show("숫자만 입력 또는 빈 값일 순 없습니다.")
TextBox8.Text = ""
TextBox8.Focus()
Return False
End If
Return True
End Function
Private Function GetHttpLottoString(ByVal strUri As String) As String
Dim strResponseText As String = String.Empty
Dim request As HttpWebRequest = CType(WebRequest.Create(strUri), HttpWebRequest)
request.Method = "GET"
'웹리퀘스트 타임아웃
request.Timeout = 20 * 1000 ' 20초
'request.Headers.Add("Authorization", "BASIC SGVsbG8="); // 헤더 추가 방법
'응답 받기
Using hwr As HttpWebResponse = CType(request.GetResponse(), HttpWebResponse)
'응답이 정상적으로 이루어 졌으면...
If hwr.StatusCode = HttpStatusCode.OK Then
Dim respStream As Stream = hwr.GetResponseStream()
Using sr As StreamReader = New StreamReader(respStream)
strResponseText = sr.ReadToEnd()
End Using
Else
strResponseText = ""
End If
End Using
Return strResponseText
End Function
Private Sub Check_Result(ByVal iNumber As Integer)
'-2 한 값은 마집막 보너스 넘버는 체크 안함...
For i As Integer = 0 To ltResult.Count - 2
If iNumber = ltResult(i) Then
iCount = iCount + 1
Return
End If
Next
End Sub
Private Sub MessageResult(ByVal iBonus As Integer)
Select Case iCount
Case 6
lblResult.Text = "축하 드립니다. 1등에 당첨 되셨습니다."
Case 5
If iBonus = 1 Then
lblResult.Text = "축하 드립니다. 2등에 당첨 되셨습니다."
Else
lblResult.Text = "축하 드립니다. 3등에 당첨 되셨습니다."
End If
Case 4
lblResult.Text = "축하 드립니다. 4등에 당첨 되셨습니다."
Case 3
lblResult.Text = "축하 드립니다. 5등에 당첨 되셨습니다."
Case Else
lblResult.Text = "꽝 입니다. 다음 기회에...반드시 성공을..."
End Select
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim ltLottoNumber As List(Of Integer) = New List(Of Integer)
Dim iBonus As Integer = 0
'초기화...
ltResult.Clear()
iCount = 0
'텍스트 박스들 체크...
If Not IsCheck() Then
Return
End If
ltLottoNumber.Add(Convert.ToInt32(TextBox1.Text.Trim()))
ltLottoNumber.Add(Convert.ToInt32(TextBox2.Text.Trim()))
ltLottoNumber.Add(Convert.ToInt32(TextBox3.Text.Trim()))
ltLottoNumber.Add(Convert.ToInt32(TextBox4.Text.Trim()))
ltLottoNumber.Add(Convert.ToInt32(TextBox5.Text.Trim()))
ltLottoNumber.Add(Convert.ToInt32(TextBox6.Text.Trim()))
'로또 회차 넘버 불러오기...
Dim strReturnValue As String = GetHttpLottoString("https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + TextBox8.Text)
If strReturnValue = "" Then
MessageBox.Show("Lotto Number 불러오기 실패...")
Return
End If
'json 파싱
Dim jtr As Json.JsonTextParser = New Json.JsonTextParser()
Dim jo As Json.JsonObject = jtr.Parse(strReturnValue)
Dim jac As Json.JsonObjectCollection = jo
'불러오기가 성공 하면...
If jac("returnValue").GetValue().ToString() = "success" Then
ltResult.Add(Convert.ToInt32(jac("drwtNo1").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("drwtNo2").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("drwtNo3").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("drwtNo4").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("drwtNo5").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("drwtNo6").GetValue().ToString().Trim()))
ltResult.Add(Convert.ToInt32(jac("bnusNo").GetValue().ToString().Trim()))
TextBox7.Text = jac("bnusNo").GetValue().ToString().Trim()
End If
'Check Result
For i As Integer = 0 To ltLottoNumber.Count - 1
Check_Result(ltLottoNumber(i))
If ltLottoNumber(i) = ltResult(ltResult.Count - 1) Then
iBonus = 1
End If
MessageResult(iBonus)
Next
End Sub
Private Sub TextBox8_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles TextBox8.KeyDown
If e.KeyCode = Keys.Enter Then
Button1_Click(Nothing, Nothing)
End If
End Sub
End Class
* 예제 결과
반응형
'VB.NET Programming' 카테고리의 다른 글
[VBNET] String Byte Char 변환 예제 (0) | 2021.08.30 |
---|---|
[VBNET] [Control] Listview - Column Auto Size (컬럼 사이즈 자동 조절) 예제 (0) | 2021.07.16 |
[VBNET] 랜덤(Random) 클래스 를 이용한 간단한 로또(Lotto) 번호 생성 (0) | 2021.05.31 |
[VBNET] 이미지 밝기 조절(Image Brightness) (0) | 2021.05.17 |
[VBNET] 프로그램 버전 확인 (Program Version Check) (0) | 2021.01.18 |