C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (4)

   C# (WPF)으로 로또 번호 생성 프로그램을 만들어 보자 (4)


이전(이전포스트)엔 선택한 버튼의 숫자를 텍스트 박스에 넣어주는 것과, 6개의 번호를 다 랜덤으로 만들어 주는 메소드를 만들었었다. 

이번엔 몇개의 특정 번호는 내가 선택하고 나머지 숫자들을 랜덤으로 만들어 주는 버튼의 이벤트 메소드를 만들어야 겠다.

근데 저번에 만든 소스에서 조건만 넣어주면 될 것 같아서 메소드에 매개변수를 추가 해서 조건만 넣어 주었다.

private void rand_num_create(bool bAll_rand)
{
	Random cRandomobj = new Random();
	int[] iaRand_num = new int[6];                        
	int iRandbuff = 0;            
	int iBoxCount = 1;
	if(bAll_rand==true)
	{
		button_clear();
		iCount = 0;
	}
	else if(iCount<6)
	{
		int iRandA_count_buff = 0;
		for (int k = 1; k < 46; k++)
		{
			if (baLotto_number[k] == true)
			{
				iaRand_num[iRandA_count_buff++] = k;
			}
		}
	}
	while (iCount < 6)
	{
		iRandbuff = cRandomobj.Next(1,46);
		if (!Array.Exists(iaRand_num, x => x == iRandbuff))
		{
			iaRand_num[iCount++] = iRandbuff;
			baLotto_number[iRandbuff] = true;
			caButton[iRandbuff].Background = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFE67474"));
		}                
	}
	for (int k = 1; k < 7; k++)
	{
		caBox[k].Text = "";
	}
	for (int k = 1; k < 46; k++)
	{
		if (baLotto_number[k] == true)
		{
			caBox[iBoxCount++].Text = string.Format("{0}", k);
		}
	}
}

버튼 초기화랑 전역변수 초기화만 if 문 안으로 넣어주고, 랜덤 숫자 배열에 이전 숫자를 넣어 주기 위한 부분도 추가했다. 

그리고 메소드엔 매개변수를 추가해 이벤트 메소드에서 위의 메소드를 불러줄때 bool 값만 변경해 줬다.


이젠 analysis 쪽을 구상해 봐야겠다.

이전 회차의 당첨번호들을 불러와서 어떤 번호들이 얼만큼 나왔는지 알아봐야겠다.

일단은 이전회차를 불러오는 것 부터 해봐야겠지 구글링 ㄱㄱㄱ


http프로토콜 중 request를 이용해 아래 주소로 요청을 하면 json 데이터 형식으로 당첨 정보가 나오나 부다. 

https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=로또회차번호 일단 테스트를 해보자.


분석탭에 버튼과 텍스트박스를 넣고 인터넷에 떠도는 예제로 돌려보자

private void button_Click(object sender, RoutedEventArgs e)
{
	if ( (!string.IsNullOrEmpty(textBox_num.Text)) && (int.TryParse(textBox_num.Text,out _)))
	{
		string strBuff = GetHttpString("https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + textBox_num.Text);
		textBox_json.Text = strBuff;
	}
	else
	{
		textBox_json.Text = "제대로된 값을 입력하슈";
	}
	
}

private string GetHttpString(string strUri)
{
	string strRspText = string.Empty;

	HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strUri); // request 선언
	request.Method = "GET"; // 메소드 방식 설정 /get or post

	request.Timeout = 5 * 1000; // 타임아웃 설정 기본 ms 단위

	using (HttpWebResponse hwr = (HttpWebResponse)request.GetResponse()) // response 메소드로 전송및 응답 요청.
	{
		if(hwr.StatusCode == HttpStatusCode.OK) // 정상 동작
		{
			Stream respStream = hwr.GetResponseStream(); // 스트림을 생성
			using(StreamReader sr = new StreamReader(respStream)) // 스트림 리더로 데이터 읽을 준비 using 을 사용하는 이유는 자동으로 스트림을 닫기 위해
			{
				strRspText = sr.ReadToEnd(); // 텍스트 데이터를 얻음
			}
		}
		else
		{
			strRspText = "";
		}
	}
		return strRspText;
}

항상 예제를 쓸땐 무슨 동작을 하는건지 알아보고 찾아보고 쓰는 습관을 들여야 하는것 같다.

제대로 찾고 이해한건지 모르겠지만 ㅠㅠ ㅋㅋ


일단 이벤트가 발생하면 회차 입력 칸에 아무것도 안쓰거나 제대로된 숫자를 입력 안하면 동작 못하게 하고, http request 로 값을 읽어온걸  json 으로 변경 안하고 바로 아래 텍스트 박스에 넣어봤다.


일단 제대로 동작 하니 위의 데이터를 가공을 좀 해줘야 겠다. 

스트링에서 바로 특정 글씨의 위치를 확인하여 데이터를 뽑아내도 되지만, json형식이니 그냥 변환해서 뽑아보자잉
private void button_Click(object sender, RoutedEventArgs e)
{
	if ( (!string.IsNullOrEmpty(textBox_num.Text)) && (int.TryParse(textBox_num.Text,out _)))
	{
		string strBuff = GetHttpString("https://www.dhlottery.co.kr/common.do?method=getLottoNumber&drwNo=" + textBox_num.Text);

		if(strBuff == "")
		{
			textBox_json.Text = "불러오기 실패";
			return;
		} 
		
		textBox_json.Text = "";
		JObject obj = JObject.Parse(strBuff);

		if (obj["returnValue"].ToString() == "success")
		{
			textBox_json.Text += "날짜: " + obj["drwNoDate"].ToString() + "\n";
			textBox_json.Text += "당첨번호: " + obj["drwtNo1"].ToString() + ", " + obj["drwtNo2"].ToString() + ", "
				+ obj["drwtNo3"].ToString() + ", " + obj["drwtNo4"].ToString() + ", " + obj["drwtNo5"].ToString() + ", "
				+ obj["drwtNo6"].ToString()  + "\n"; 
		}
		else
		{
			textBox_json.Text = "불러오기 실패"
		}
	}
	else
	{
		textBox_json.Text = "제대로된 값을 입력하슈";
	}
}

버튼쪽 이벤트 메소드만 변경해서 실패 조건 및 json 오브젝트 파싱후 , 필요한 정보만 뽑아서 출력해봤다.


이제 다음엔 이러한 자료를 기반으로 당첨번호 분포를 알아봐야겠다.

4탄 끝.

다음글

댓글

이 블로그의 인기 게시물

T-PICOC3(MICROPYTHON)으로 WIFI 를 연결해보자. (1)

Raspberry Pi pico W 로 시계 및 날씨 확인 제품을 만들어 보자. (1) 구상 단계

Raspberry Pi Pico W로 시계 및 날씨 확인 제품을 만들어 보자. (4) ws2812 test 및 WIFI 시간 테스트