티스토리 뷰

때에 따라서는 환율을 다루는 경우도 생길 것이다. 이 경우 최대한 정확하게 계산되도록 해야 한다.

환율을 변환하는 프로그램을 작성하라. 여기에서는 유로에서 미국 달러로 변환시킨다.

먼저 유로 금액을 입력 받은 다음 유로 환율을 입력 받는다.

그리고는 유로에 해당하는 미국 달러 값을 출력한다. 환율 변환식은 다음과 같다.

  • amount to는 변환될 미국 달러 가격이다.
  • amount from은 유로 가격이다.
  • rate from은 현재의 유로 환율이다.
  • rate to는 현재의 미국 달러 환율이다.

#출력 예 How many Euros are you exchanging? 81

What is the exchange rate? 137.51

81 Euros at an exchange rate of 137.51 is

111.38 dollars

#제약 조건

  • 센트를 기준으로 하는 소숫점 다음에 숫자가 있을 때는 센트를 기준으로 올림 처리를 할 것
  • 한 개의 출력문만 사용할 것

#도전 과제

  • 환율표를 프로그램에 넣은 다음 환율 대신 국가 이름을 입력 받도록 프로그램을 수정해보자.
  • 애플리케이션에 별도의 API를 적용하여 현재의 업데이트된 환율을 적용하는 프로그램으로 수정해보자.




My code


도전과제 2번을 위해,

한국수출입은행사이트에서 무료로 제공하는 API 사용함.

API를 사용하기 위한 인증키는 가렸음.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
 
namespace Exam._11
{
    public partial class Form1 : Form
    {
        // 각 환율 변수
        public string CNH = "";
        public string JPY = "";
        public string USD = "";
        public string EUR = "";
        public string KRW = "1";
 
        public Form1()
        {
            InitializeComponent();
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            // json parse
            using (WebClient wc = new WebClient())
            {
                wc.Encoding = Encoding.UTF8;
                string jsonURL = "https://www.koreaexim.go.kr/site/program/financial/exchangeJSON?authkey=인증키값&searchdate="
                                + DateTime.Now.ToString("yyyyMMdd"+ "&data=AP01";
                string json = wc.DownloadString(jsonURL); // API 사이트에서 json 받아옴
                JArray array = JArray.Parse(json);
                foreach (JObject jobj in array)
                {
                    // deal_bas_r = 매매기준
                    if (jobj["cur_unit"].ToString() == "CNH")
                        // 위완화
                        CNH = jobj["deal_bas_r"].ToString();
 
                    if (jobj["cur_unit"].ToString() == "USD")
                        // 달러
                        USD = jobj["deal_bas_r"].ToString();
 
                    if (jobj["cur_unit"].ToString() == "JPY(100)")
                        // 엔화
                        JPY = (double.Parse(jobj["deal_bas_r"].ToString())/100).ToString();
 
                    if (jobj["cur_unit"].ToString() == "EUR")
                        // 유로화
                        EUR = jobj["deal_bas_r"].ToString();
                }
            }
 
            cbStandard.SelectedIndex = 1;
            cbChange.SelectedIndex = 0;
        }
 
        // 콤보박스1의 값이 바뀔때 환율 변환
        private void cbStandard_SelectedIndexChanged(object sender, EventArgs e)
        {
            string tValue = cbStandard.Text.Substring(cbStandard.Text.Length - 3);
 
            ExchangeRate();
 
            switch (tValue)
            {
                case "CNH":
                    lblStandard.Text = "위안";
                    break;
                case "JPY":
                    lblStandard.Text = "엔";
                    break;
                case "USD":
                    lblStandard.Text = "달러";
                    break;
                case "EUR":
                    lblStandard.Text = "유로";
                    break;
                default:
                    lblStandard.Text = "원";
                    break;
            }
        }
 
        // 콤보박스2의 값이 바뀔때 환율 변환
        private void cbChange_SelectedIndexChanged(object sender, EventArgs e)
        {
            string tValue = cbChange.Text.Substring(cbChange.Text.Length - 3);
 
            ExchangeRate();
 
            switch (tValue)
            {
                case "CNH":
                    lblChange.Text = "위안";
                    break;
                case "JPY":
                    lblChange.Text = "엔";
                    break;
                case "USD":
                    lblChange.Text = "달러";
                    break;
                case "EUR":
                    lblChange.Text = "유로";
                    break;
                default:
                    lblChange.Text = "원";
                    break;
            }
        }
 
        // 텍스트박스의 값이 바뀔 때 환율 변환
        private void txtStandard_TextChanged(object sender, EventArgs e)
        {
            if (txtStandard.Text == "")
            {
                txtStandard.Text = "1";
            }
 
            ExchangeRate();
        }
 
        // 환율계산
        private void ExchangeRate()
        {
            if (cbChange.Text != "")
            {
                string t1Value = cbStandard.Text.Substring(cbStandard.Text.Length - 3);
                string t2Value = cbChange.Text.Substring(cbChange.Text.Length - 3);
                double t1 = double.Parse(GetType().GetField(t1Value).GetValue(this).ToString());
                double t2 = double.Parse(GetType().GetField(t2Value).GetValue(this).ToString());
                double value = double.Parse(txtStandard.Text);
                double result = (t1 * value) / t2;
 
                txtChange.Text = result.ToString();
            }
        }
    }
}
 
cs





Result



댓글
글 보관함
최근에 올라온 글
최근에 달린 댓글