2017년 9월 18일 월요일

자동으로 환율 정보를 업데이트 하는 환율 계산기 만들기 (C# )

요즘 여행 계획을 짜다 보니 생각보다 환율 정보를 자주 찾게 되더라구요

간편하게 네이버 환율 계산기에 접속하여 사용할 수 있으나

필요성도 느끼고 생각이 난김에 C#으로 간단한 환율 계산기를 만들어 보겠습니다.

1. 환율 계산기에 필요한 기능

- 인터넷이 연결되면 최신 환율 정보를 가져와서 계산에 적용하는 기능
  원, 달러, 유로, 엔, 위안 5가지 환율 계산 기능 제공
  실시간 환율 정보 조회 기능
  환율 계산 결과는 숫자를 입력하면 즉시 환율 계산 결과를 볼 수 있도록 함

2. 준비물

- C# 개발 환경이 구비된 Visual Studio, 계산기에 들어갈 귀여운 사진 몇장

3. 레이아웃
- 원래 만들기 전의 레이아웃 그린걸 올릴려고 했으나 완성품을 보시는게 편할꺼 같아서 완성된 계산기를 올렸습니다.

Clear 버튼은 계산기의 모든 텍스트 박스의 내용을 삭제하는 기능 입니다.
환율 버튼은 계산기 하단부인 환율 정보를 보여주는 기능 입니다
Close 버튼은 닫기 프로그램 종료 기능입니다.


4. 개발

ⅰ환율 정보

- 환율 정보를 인터넷으로 요청하여 정보를 응답받는 기능이 필요 합니다.
  환율 정보를 XML이나 JSON으로 제공해주는 서비스는 매우 많은 편입니다 그중에서 저는 야후 API를 이용해 보도록 하겠습니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/// </summary>
/// <param name="FromCurrency">환율 변환할 국가</param>
/// <param name="ToCurrency"> 환율 적용되는 국가 </param>
/// <returns></returns>
public string getRario(string FromCurrency, string ToCurrency)
{
    string strISO = FromCurrency + ToCurrency;
    string strRate = string.Empty;
    string url = String.Format("http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%3D%22{0}%22&format=xml&diagnostics=true&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys", strISO);
    XmlDocument xml = new XmlDocument();
    xml.Load(url);
    XmlNodeList xl = xml.GetElementsByTagName("Rate");
    if (xl != null)
    {
    strRate = xl[0].InnerText;
    }
    return strRate;
}
해당 매서드는 환율 기준 국가 코드와 환율 변환 국가 코드를 입력하면 야후 API를 이용하여 환율 비율값을 리턴하는 기능 가지고 있습니다.

국가 코드는 ISO 국가 코드 알파-3을 사용하고 있으며 모든 국가 코드는 아래 링크에서 자세히 조회 할 수 있습니다.
(ISO 국가 코드 (위키백과) - https://ko.wikipedia.org/wiki/ISO_3166-1)
이중에서 환율 계산에 필요한 국가 코드는 한국 : KRW, 일본 : JPY, 미국 : USD, 유럽 : EUR, 중국 : CHY 입니다.

만약에 원화를 미화로 바꾸는 비율을 알고 싶으면 FromCurrency에는 KRW, ToCurrency에는 USD를 넣으시면 됩니다.


ⅱ텍스트 박스 컨트롤

- 텍스트 박스는 총 5개가 있으며 각국 화폐의 액수를 입력받고 출력하는 곳입니다
  따라서 숫자만 입력 받도록 되어야 하며, 구분이 쉽도록 천 단위 마다 콤마(,) 표시를 해야 합니다 그리고 소수점 2자리 까지 표현하도록 하겠습니다.

1
2
3
4
5
6
7
8
//숫자 입력
private void tbWon_KeyPress(object sender, KeyPressEventArgs e)
{
    if (!(char.IsDigit(e.KeyChar) || e.KeyChar == Convert.ToChar(Keys.Back)))
    {
    e.Handled = true;
    }
}
텍스트 박스의 KeyPress 이벤트를 받은 후 사용자에게 숫자만 입력 받도록 문제를 제한 했습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//콤마
private void tbWon_TextChanged(object sender, EventArgs e)
{
    if (!boolWon)
    {
    string strText = this.tbWon.Text;
    if (strText != "")
    {
        string lgsText;
        lgsText = tbWon.Text.Replace(",", ""); //** 숫자변환시 콤마로 발생하는 에러방지...
        tbWon.Text = String.Format("{0:#,##0.##}", Convert.ToDouble(lgsText));
        tbWon.SelectionStart = tbWon.TextLength; //** 캐럿을 맨 뒤로 보낸다...
        tbWon.SelectionLength = 0;
        calExchangeWon();
    }
    }
    else
    {
    boolWon = false;
    }
}
텍스트 박스의 TextChanged 이벤트를 받은 후 텍스트의 숫자가 변경될때 마다 천단위 콤마를 찍어 주도록 설정 했습니다.


5. 결과

- 위 기능들을 참조하여 만든 환율 계산기는 다음과 같습니다

완성된 환율 계산기 실행 영상 입니다

환율 계산기 실행 파일도 올렸습니다 - 실행파일 다운

환율 계산기 전체 소스코드는 매우 길어져서 디자인 파일과 함께 올렸습니다
환율 계산기 소스코드 다운 - 소스코드 다운로드


6. 후기

- 처음엔 혼자 필요할때 사용할 목적으로 만든거기 때문에 에비츄 짤들을 가져와 사용하였습니다. 문제가 된다면 소스코드랑 실행파일 링크는 삭제하도록 하겠습니다.

- 지금 환율 계산기는 인터넷이 연결되지 않은 환경에서 실행될 경우 환율 정보를 초기값으로 사용하도록 되어 있습니다 좀 더 공을 들인다면 환율 정보를 받을때마다 내문서 폴더 같은 곳에 환율 정보를 백업해두는 기능을 추가하는걸 생각해 볼 수 있겠습니다

- 비주얼스튜디오를 통한 결과물이라서 윈도우 전용이지만 리눅스에서 와인(WINE)을 설치한 뒤 실제로 실행해본 결과 애비츄 짤들 색상이 이상해진거 외엔 문제없이 실행됩니다.

부족한글 봐주셔서 감사합니다 오타와 잘못된 내용, 질문들은 언제나 환영입니다 ^^

Share:

댓글 2개:

  1. url가 에러나네요..

    답글삭제
    답글
    1. 에러의 내용을 좀 더 정확하게 알려주셔야 뭐가 잘못되었는지 파악할수있습니다. 대부분 URL 에러의 경우 오타이거나 특수문자 처리에 관련해서일껍니다..

      삭제