반응형

*C# 공공데이터를 이용한 코로나 확진자 현황...

 

Main

- 사용한 컨트롤 : Label 17 개 , Panel 7 개 

 

전체 소스 코드

Form1.cs

 

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;


using System.Net;
using System.IO;
using System.Xml;
using System.Collections;
using System.Runtime.InteropServices;

namespace WindowsFormsApp2
{
    public partial class Form1 : Form
    {
        [DllImport("gdi32.dll")] private static extern IntPtr CreateRoundRectRgn(int x1, int y1, int x2, int y2, int cx, int cy);
        [DllImport("user32.dll")] private static extern int SetWindowRgn(IntPtr hWnd, IntPtr hRgn, bool bRedraw);

        public Form1()
        {
            InitializeComponent();

            //Round Control
            SetRoundControl(15, panel4);
            SetRoundControl(15, panel5);
            SetRoundControl(15, pnl1);
            SetRoundControl(15, pnl2);
            SetRoundControl(15, pnl3);
            SetRoundControl(15, pnl4);
            SetRoundControl(15, pnl5);

            //코로나 현황 
            //코로나 발생 현황
            try
            {
                DateTime dtNow = DateTime.Now;
                SetCorona(dtNow);
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message.ToString(), "확 인", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

        }
        private void Form1_Resize(object sender, EventArgs e)
        {
            this.Size = new Size(708, 443);
        }

        private void SetCorona(DateTime dt)
        {
            string strURL = "http://openapi.data.go.kr/openapi/service/rest/Covid19/getCovid19InfStateJson";
            strURL += "?ServiceKey=" + // Service Key
            strURL += "&pageNo=1";
            strURL += "&numOfRows=10";
            strURL += "&startCreateDt=" + dt.AddDays(-1).ToString("yyyyMMdd");               //하루 전
            strURL += "&endCreateDt=" + dt.ToString("yyyyMMdd");                             //오늘

            HttpWebRequest hwr = (HttpWebRequest)WebRequest.Create(strURL);
            hwr.Method = "GET";

            using (HttpWebResponse hwrResult = hwr.GetResponse() as HttpWebResponse)
            {
                //StreamReader sr = new StreamReader(hwrResult.GetResponseStream(), Encoding.UTF8, true );
                //strResult = sr.ReadToEnd();

                Stream sr = hwrResult.GetResponseStream();
                //XML Read...
                XMLToRead(sr);

                sr.Close();
                hwrResult.Close();

            }
        }

        private void SetRoundControl(int iValue, Control ct)
        {
            IntPtr ip = CreateRoundRectRgn(0, 0, ct.Width, ct.Height, iValue, iValue);
            int i = SetWindowRgn(ct.Handle, ip, true);
        }

        private void  XMLToRead(Stream  st)
        {
            //=========================nodeList Comment===================================
            //기준일 STATEDT
            //기준시간 STATETIME

            //확진자수 DECIDECNT
            //격리해제수 CLEARCNT
            //검사진행수 EXAMCNT
            //사망자수 DEATHCNT
            //치료중 환자수 CARECNT
            //결과음성 수 RESUTLNEGCNT
            //누적검사수 ACCEXAMCNT
            //누적검사완료수 ACCEXAMCOMPCNT
            //누적확진률 ACCDEFRATE

            //등록일시 CREATEDT
            //수정일시 UPDATEDT

            XmlDocument xd = new XmlDocument();
 
            //XML 문서로...
            xd.Load(st);
            XmlNodeList xnl = xd.GetElementsByTagName("item"); //접근할 노드 (대소문자 구분 해야 됨.)

            int idecideCnt = 0;
            int iExamCnt = 0;
            int iclearCnt = 0;
            double dbAccDefRate = 0.0;
            int ideathCnt = 0;
            int icareCnt = 0;

            //전날 누적 확진자 수
            int iBeforeDec = 0;

            foreach (XmlNode xn in xnl)
            {
                if (xn["stateDt"].InnerText == DateTime.Now.ToString("yyyyMMdd"))
                {
                    //기준 일시
                    lblDate.Text = xn["stateDt"].InnerText + " " + xn["stateTime"].InnerText;
                    //확진자 수
                    idecideCnt = Convert.ToInt32(xn["decideCnt"].InnerText);
                    //검사 진행
                    iExamCnt = Convert.ToInt32(xn["examCnt"].InnerText);
                    //격리 해제
                    iclearCnt = Convert.ToInt32(xn["clearCnt"].InnerText);
                    //누적 확진률
                    dbAccDefRate = Convert.ToDouble(xn["accDefRate"].InnerText);
                    //사망자
                    ideathCnt = Convert.ToInt32(xn["deathCnt"].InnerText);
                    //치료중인환자
                    icareCnt = Convert.ToInt32(xn["careCnt"].InnerText);
                }//if
                else
                {
                    //어제 까지 누적 확진자 수
                    iBeforeDec = Convert.ToInt32(xn["decideCnt"].InnerText);

                }//else

            }//foreach

            //오늘까지 누적 확진자 수  - 어제까지 누적 확진자 수 
            lblDec.Text = string.Format("{0:#,###,000}", idecideCnt - iBeforeDec);
            lbl1.Text = string.Format("{0:#,###,000}", iExamCnt);
            lbl2.Text = string.Format("{0:#,###,000}", iclearCnt);
            lblAccDefRate.Text = string.Format("{0:0.00}", dbAccDefRate) + " %";
            lbl3.Text = string.Format("{0:#,###,000}", ideathCnt);
            lbl4.Text = string.Format("{0:#,###,000}", icareCnt);
            lbl5.Text = string.Format("{0:#,###,000}", idecideCnt);
        }

    }
}

 

[C#] [API] 컨트롤 (Control) 모서리 둥글게 만들기 :: 삽질하는 개발자... (tistory.com)

 

[C#] [API] 컨트롤 (Control) 모서리 둥글게 만들기

* C# API 이용 컨트롤 (Control) 모서리 둥글게 만들기 예제... 전체 소스 코드 Form1.cs using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Draw..

kdsoft-zeros.tistory.com

 

컨트롤 모서리를 둥글게 하기 위해 API 선언 후 이용

아래의 함수 내용을 보면 공공데이터 이용할 URL 및 서비스키(인증키 앞서 말한 Encoding 일반인증키 사용)

조회 시작할 날짜와 끝 날짜를 입력 할 수 있게 되어 있습니다.

 

현재 날짜와 하루 전 날짜 데이터를 불러 오는 이유는 확진자 수가 누적 확진자 수 로 불러 오기 때문에

현재 누적 확진자 수 - 하루 전 누적 확진자 수 를 구하면 현재 확진자 수가 나오기 때문

 

공공데이터를 이용해 코로나 확진자 현황 예제를 만들어 봤으며 

코로나 집계에 관련된 버그라 소스코드 작성 하시는 분들이 테스트 해 보시고 맞게 코드를 최적화 하시면 

되겠습니다. (일요일 같은 주말에 테스트 해보시길...)

 

[C#] [공공데이터] 가입 및 활용 신청... (1) :: 삽질하는 개발자... (tistory.com)

 

[C#] [공공데이터] 가입 및 활용 신청... (1)

* 공공데이터를 활용 하여 코로나 확진자 및 현황을 알아 보겠습니다. 먼저 앞서 작업을 해야 될 부분이 있습니다. 공공데이터포털 (data.go.kr) 공공데이터 포털 국가에서 보유하고 있는 다양한 데

kdsoft-zeros.tistory.com

 

반응형

+ Recent posts