반응형
*C# Json 을 이용한 간단한 로또 당첨번호 확인 예제...
- 사용한 컨트롤 : Button 1개, Label 3개, TextBox 8개, GroupBox 1개
- 참조 소스
[C#] Json Read 를 이용한 로또(Lotto) 당첨 번호 읽기 예제 :: 삽질하는 개발자... (tistory.com)
전체 소스 코드
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
//json 참조 추가
using System.Net.Json;
using System.Net;
using System.IO;
namespace Lotto_1
{
public partial class Form1 : Form
{
int iCount = 0;
List<int> ltResult = new List<int>();
public Form1()
{
InitializeComponent();
}
#region 사용자 정의함수...
private bool IsNullString(string str)
{
return string.IsNullOrEmpty(str);
}
private int IsInt(object ob)
{
if (ob == null) return 0;
int iCheck = 0;
bool bCheck = int.TryParse(ob.ToString(), out iCheck);
if (!bCheck)
{
return 0;
}
return iCheck;
}
private string GetHttpLottoString(string strUri)
{
string strResponseText = string.Empty;
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUri);
request.Method = "GET";
//웹리퀘스트 타임아웃
request.Timeout = 20 * 1000; // 20초
//request.Headers.Add("Authorization", "BASIC SGVsbG8="); // 헤더 추가 방법
//응답 받기
using (HttpWebResponse hwr = (HttpWebResponse)request.GetResponse())
{
//응답이 정상적으로 이루어 졌으면...
if (hwr.StatusCode == HttpStatusCode.OK)
{
Stream respStream = hwr.GetResponseStream();
using (StreamReader sr = new StreamReader(respStream))
{
strResponseText = sr.ReadToEnd();
}
}
else
{
strResponseText = "";
}
}
return strResponseText;
}
private bool isCheck()
{
//Lotto Number 당첨 번호 읽어 오기...
if (IsNullString(textBox1.Text) && IsNullString(textBox2.Text) && IsNullString(textBox3.Text) && IsNullString(textBox4.Text)
&& IsNullString(textBox5.Text) && IsNullString(textBox6.Text) )
{
MessageBox.Show("빈 값일 순 없습니다.");
return false ;
}
//숫자가 아니면...
if (IsInt(textBox1.Text) == 0 && IsInt(textBox2.Text) == 0 && IsInt(textBox3.Text) == 0 && IsInt(textBox4.Text) == 0 &&
IsInt(textBox5.Text) == 0 && IsInt(textBox6.Text) == 0 )
{
MessageBox.Show("숫자만 입력 해 주세요.");
return false;
}
//회차 번호 체크
if (IsInt(textBox8.Text) == 0 && IsNullString(textBox8.Text))
{
MessageBox.Show("숫자만 입력 또는 빈 값일 순 없습니다.");
textBox8.Text = "";
textBox8.Focus();
return false;
}
return true;
}
private void Check_Result(int iNumber )
{
//-2 한 값은 마지막 보너스 넘버 는 체크 안함...
for (int i = 0; i <= ltResult.Count - 2; i++)
{
if(iNumber == ltResult[i])
{
iCount++;
return;
}
}
}
private void MessageResult(int iBonus)
{
switch(iCount )
{
case 6:
{
lblResult.Text ="축하 드립니다. 1등에 당첨 되셨습니다.";
break;
}
case 5:
{
if (iBonus == 1)
{
lblResult.Text = "축하 드립니다. 2등에 당첨 되셨습니다.";
}
else
{
lblResult.Text = "축하 드립니다. 3등에 당첨 되셨습니다.";
}
break;
}
case 4:
{
lblResult.Text = "축하 드립니다. 4등에 당첨 되셨습니다.";
break;
}
case 3:
{
lblResult.Text = "축하 드립니다. 5등에 당첨 되셨습니다.";
break;
}
default:
{
lblResult.Text = "꽝 입니다. 다음 기회에...반드시 성공을...";
break;
}
}
}
#endregion
private void button1_Click(object sender, EventArgs e)
{
List<int> ltLottoNumber = new List<int>();
int iBonus =0;
ltResult.Clear();
//Count 값 초기화...
iCount = 0;
//체크
if(!isCheck ())
{
return;
}
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()));
//로또 회차 넘버 불러오기...
string strReturnValue = GetHttpLottoString("https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + textBox8.Text);
if (strReturnValue == "")
{
MessageBox.Show("Lotto Number 불러오기 실패...");
return;
}
//Json 으로 바꾸기...
JsonTextParser jtr = new JsonTextParser();
JsonObject jo = jtr.Parse(strReturnValue);
JsonObjectCollection jac = (JsonObjectCollection)jo;
//불러오기가 성공 하면...
if (jac["returnValue"].GetValue().ToString() == "success")
{
//담기...
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();
}
//Check Result
for (int i = 0; i <= ltLottoNumber.Count - 1; i++)
{
Check_Result(ltLottoNumber[i]);
if(ltLottoNumber[i] == ltResult[ltResult.Count-1])
{
iBonus = 1;
}
}
//Result
MessageResult(iBonus );
}
private void textBox8_KeyDown(object sender, KeyEventArgs e)
{
if(e.KeyCode == Keys.Enter )
{
button1_Click(null, null);
}
}
}
}
* 예제 결과
반응형
'C# Programming' 카테고리의 다른 글
[C#] [Control] Listview - Column Auto Size (컬럼 사이즈 자동 조절) 예제 (0) | 2021.06.30 |
---|---|
[C#] [IronPython] 파이썬(Python) 연동 하기 (0) | 2021.03.31 |
[C#] 랜덤(Random) 클래스 를 이용한 간단한 로또(Lotto) 숫자 생성 (0) | 2021.02.01 |
[C#] 프로그램 버전 확인 (Program Version Check) (0) | 2020.11.30 |
[C#] 노트북 배터리 정보(Notebook Battery) (0) | 2020.10.31 |