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:

Related Posts:

  • C# 하위 폼에서 상위 폼의 매서드 호출시키기 (대리자 선언)하나의 폼 안에 많은 자식 폼들을 생성하여 각각 팝업이나 화면 일부분을 구현 하는 경우가 많습니다. 부모 폼에서는 생성한 자식 폼들의 인스턴스를 가지고 있기 때문에 자식 폼을 컨트롤 하고 객체에 접근하기가 매우 간단합니다. 하지만 반대로 자식 폼 입장에서는 부모 폼의 인스턴스를 가지고 있지 않을 경우엔… Read More
  • 온라인 등록이나 프로그램 설치 없이 mp3 파일 합치는 프로그램 mp3mergeMP3파일 합치는데 웹사이트에 등록하는 방법은 보안이 찜찜하고, 중간에 잘못되면 업데이트 시간을 처음부터 다시 해야하는 번거러움이 있습니다. 그래서 이번엔 MP3 파일을 합치는데 설치가 필요 없는 보조 프로그램을 소개 합니다. (프로그램 다운로드 : MP3 Merger 다운로드) MP3 Merger… Read More
  • 이미지 파일(png, jpg 등등)을 ico로 변환해주거나 사이즈 변경해주는 웹페이지 소개이미지 파일 변환은 자주 필요한 일인데 자유롭고 편하게 변환을 해주는 웹 사이트를 소개 합니다. https://converticon.com/ 해당 웹 사이트에서는 이미지 파일과 ico 파일간 자유로운 변환이 가능합니다. 그러나 변환 과정에서 이미지 파일을 서버로 업데이트를 시키는 과정이 있기 때문에 작업할 … Read More
  • 구글 블로그스팟에 템플릿을 적용, 백업, 복원 하는 방법 (Defqwop - Heart Afire) 구글 블로그를 시작하며 가장 처음으로 맞이하는 문제는 아마 템플릿일 거 같은데요. 이번 포스트에선 전문가가 만든 완성도 높은 무료 템플릿을 다운로드해 내 블로그에 적용하고, 블로그의 템플릿을 백업, 복원하는 과정을 시작하겠습니다. 1. 실험 대상 오늘의 포… Read More
  • C# 폼 이름으로 (String 형태) 해당 객체를 찾아 인스턴스 만드는 방법디비 조회 결과에서든지 하드 코딩이든 문자열로 된 폼이나 원하는 객체의 이름만 가지고 있는 상황에서 해당 객체(폼)을 찾아 인스턴스를 만들어야 할 경우가 많습니다. 자바의 리플렉션(Reflection)과 똑같이 C#에서도 프로그램이 실행되면서 선언되었거나, 실행에 필요한 모든 객체에 대하여 어셈블리를 통해 정보… Read More

댓글 2개:

  1. url가 에러나네요..

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

      삭제