Tugas 3 - Membuat Aplikasi Currency Converter dengan .NET Framework

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 senderEventArgs e)
        {
        }
 
        private void numericUpDown1_ValueChanged(object senderEventArgs e)
        {
        }
 
        private void button1_Click(object senderEventArgs e)
        {
        }
 
        private void Form1_Load(object senderEventArgs e)
        {
            this.comboBox1.SelectedItem = "IDR";
            this.comboBox2.SelectedItem = "IDR";
            this.comboBox1.DropDownStyle = ComboBoxStyle.DropDownList;
            this.comboBox2.DropDownStyle = ComboBoxStyle.DropDownList;
        }
 
        private void label1_Click(object senderEventArgs e)
        {
        }
 
        private void label2_Click(object senderEventArgs e)
        {
        }
 
        private void label3_Click(object senderEventArgs 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_currencyoutnum = inputNum;
 
            this.label2.Text = out_currency.ToUpper() + " " + Math.Round(outnum6);
        }
 
        private void comboBox2_SelectedIndexChanged(object senderEventArgs e)
        {
        }
 
        private void Convert_Click(object senderEventArgs 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:





Comments

Popular posts from this blog

Tugas 2 - Membuat Program Menggunakan .NET Framework

PBKK Final Project - Toko Online menggunakan CodeIgniter

Tugas 6 - Pengenalan Framework CodeIgniter