Tugas 3 PBKK A - Currency Converter Menggunakan API
Tugas 3 meminta kita menggunakan API untuk membuat sebuah aplikasi Currency Converter dinamis. Untuk mengambil nilai - nilai konversi secara dinamis, kita menggunakan API dari bank eropa untuk nilai - nilai yang dibutuhkan. Berikut merupakan kode dari aplikasi yang telah kita buat:
using System; using System.Globalization; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace MyFirstWinFormsApp { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static string[] GetCurrencyTags() { // Hardcoded currency tags neccesairy to parse the ecb xml's return new string[] {"eur", "usd", "jpy", "bgn", "czk", "dkk", "gbp", "huf", "ltl", "lvl" , "pln", "ron", "sek", "chf", "nok", "hrk", "rub", "try", "aud", "brl", "cad", "cny", "hkd", "idr", "ils" , "inr", "krw", "mxn", "myr", "nzd", "php", "sgd", "zar"}; } private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) { } private void numericUpDown1_ValueChanged(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { } private void Form1_Load(object sender, EventArgs e) { this.comboBox1.SelectedItem = "IDR"; this.comboBox2.SelectedItem = "IDR"; this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList; this.comboBox2.DropDownStyle = ComboBoxStyle.DropDownList; } private void label1_Click(object sender, EventArgs e) { } private void label2_Click(object sender, EventArgs e) { } private void label3_Click(object sender, EventArgs e) { } public static float GetCurrencyRateInEuro(string currency) { if (currency.ToLower() == "") throw new ArgumentException("Invalid Argument! currency parameter cannot be empty!"); if (currency.ToLower() == "eur") throw new ArgumentException("Invalid Argument! Cannot get exchange rate from EURO to EURO"); try { // Create valid RSS url to european central bank string rssUrl = string.Concat("http://www.ecb.int/rss/fxref-", currency.ToLower() + ".html"); // Create & Load New Xml Document System.Xml.XmlDocument doc = new System.Xml.XmlDocument(); doc.Load(rssUrl); // Create XmlNamespaceManager for handling XML namespaces. System.Xml.XmlNamespaceManager nsmgr = new System.Xml.XmlNamespaceManager(doc.NameTable); nsmgr.AddNamespace("rdf", "http://purl.org/rss/1.0/"); nsmgr.AddNamespace("cb", "http://www.cbwiki.net/wiki/index.php/Specification_1.1"); // Get list of daily currency exchange rate between selected "currency" and the EURO System.Xml.XmlNodeList nodeList = doc.SelectNodes("//rdf:item", nsmgr); // Loop Through all XMLNODES with daily exchange rates foreach (System.Xml.XmlNode node in nodeList) { // Create a CultureInfo, this is because EU and USA use different sepperators in float (, or .) CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone(); ci.NumberFormat.CurrencyDecimalSeparator = "."; try { // Get currency exchange rate with EURO from XMLNODE float exchangeRate = float.Parse( node.SelectSingleNode("//cb:statistics//cb:exchangeRate//cb:value", nsmgr).InnerText, NumberStyles.Any, ci); return exchangeRate; } catch { } } return 0; } catch { return 0;} } private void convertCurrency() { double inputNum = (double)(this.numericUpDown1.Value); string in_currency = this.comboBox1.SelectedItem.ToString().ToLower(); string out_currency = this.comboBox2.SelectedItem.ToString().ToLower(); double outnum = inputNum; // Convert Euro to Other Currency if (in_currency == "eur") { outnum = inputNum * GetCurrencyRateInEuro(out_currency); } // Convert Other Currency to Euro if (out_currency == "eur") { outnum = inputNum / GetCurrencyRateInEuro(in_currency); } // Get the exchange rate of both currencies in euro float toRate = GetCurrencyRateInEuro(out_currency); float fromRate = GetCurrencyRateInEuro(in_currency); // Calculate exchange rate From A to B outnum = (inputNum * toRate) / fromRate; if (in_currency == out_currency) outnum = inputNum; this.label2.Text = out_currency.ToUpper() + " " + Math.Round(outnum, 6); } private void comboBox2_SelectedIndexChanged(object sender, EventArgs e) { } private void Convert_Click(object sender, EventArgs e) { convertCurrency(); } } }
Pada Tugas 3, dilakukan revisi pada fungsi ConvertCurrency( ), yang sebelumnya menggunakan static value dirubah menjadi menggunakan dynamic value yang diambil melalui API yang diperoleh melalui:
https://www.ecb.europa.eu/stats/html/index.en.html
Sedangkan, untuk komparasi dengan project sebelumnya, dapat dilihat melalui link berikut:
https://dafaberlian123.blogspot.com/2021/03/tugas-2-pbkk-membuat-aplikasi.html
Untuk pertama kali, kita akan listing mata uang yang akan dikonversi. Kemudian, kita akan mengakses API melalui format xml document yang telah diperoleh dari website Bank Eropa.
Pada aplikasi ini, kita akan menerima input dari user berupa dua pilihan mata uang yang akan di konversi dalam bentuk: Mata uang awal - Mata Uang Akhir beserta nominal mata uang yang akan di-konversikan.
Kemudian, fungsi GetCurrencyRateInEuro( ) digunakan untuk merubah semua mata uang input maupun output menjadi Euro. Kemudian, untuk memperoleh konstanta perkalian konversi, diperoleh melalui rasio antara dua mata uang yang telah dikonversikan ke Euro. Sehingga, hasil output cukup dilakukan perkalian antara nilai awal dengan nilai rasio.
Demo pendek Aplikasi:
Komentar
Posting Komentar