C# ile Anlık Döviz Kuru Hesaplama



Selamlar, B2B, B2C v.b projelerde anlık döviz kurlarına ihtiyacımız olabilir. C# programlama dili ile anlık döviz kuru hesabı yapacağız.
Bununla ilgili proje linki : İndirmek için tıklayınız
Projeyi açtığınızda görüceksiniz. Döviz hesaplamaları için SC.Exchange adında yeni bir proje açtım. Bu kendine başına bir küpüthane olucak. Bunu istediğimiz projede referans edip kullanacağız. İlk olarak projemizde temel bir sınıf tanımlıyoruz. Bunun adına BaseController diyelim. Bunun içerisinde private ve public methodlarımız olucak. Private methodlarımız sadece Exchange projesi içerisinde kullanıcak olan methodlar. Public method ise dışarıya referans edildiğinde erişilebilecek olan methodlar. Anlık döviz bilgisini çekmek için "Türkiye Merkez Bankası" bilgilerini kullanacağız. İlgili url bilgilerini aşağıdaki kod bloğunda görüceksiniz.

 private static decimal GetRate(string code)
        {
            string url = string.Empty;
            var date = DateTime.Now;
            if (date.Date == DateTime.Today)
                url = "http://www.tcmb.gov.tr/kurlar/today.xml";
            else
                url = string.Format("http://www.tcmb.gov.tr/kurlar/{0}{1}/{2}{1}{0}.xml", date.Year, addZero(date.Month), addZero(date.Day));

            System.Xml.Linq.XDocument document = System.Xml.Linq.XDocument.Load(url);
            Dictionary dic = new Dictionary();
            var result = document.Descendants("Currency")
                .Where(v => v.Element("ForexBuying") != null && v.Element("ForexBuying").Value.Length > 0)
                .Select(v => new Currency
                {
                    Code = v.Attribute("Kod").Value,
                    Rate = decimal.Parse(v.Element("ForexBuying").Value.Replace('.', ','))
                }).ToList();
            return result.FirstOrDefault(s => s.Code == code).Rate;
  }

Burda görüldüğü üzere methodumuza belirtilen kodlar içerisinden bir tanesini gönderiyoruz. Ve gelen datayı okuduktan sonra "Currency" tipinde bir list oluşturuyoruz. Bu class ise şu şekilde ;

  public class Currency
    {
        public string Code { get; set; }
        public decimal Rate { get; set; }
    }

Tüm döviz kurlarını çektik ve paremetreden aldığımız koda göre kur oranını geri döndük. Bu tüm kurları çektiğimiz bölümde kurları istediğimiz yere kayıt etmekte özgürüz. Her fiyat hesaplamasında döviz datalarını çekmek zorunda değiliz. Burda ki optimize size kalmış. Aynı zamanda burda "addZero" adında yardımcı bir methodumuz var. Merkez bankası "01, 09" v.b ay ve günü iki haneli istediği için bu tarzda basit bir method kullandık. Methodumuz şu şekilde ;


        private static string addZero(int p)
        {
            if (p.ToString().Length == 1)
                return "0" + p;
            return p.ToString();
        }

Döviz oranını hesapladıktan sonra şimdi vericeğimiz TL fiyatina göre bize direk verdiğimiz döviz kodu karşılığını dönücek public bir method yazalım. Bu method Exchange projesini referans eden projeler tarafından kullanılabilecek.

        public static decimal GetPrice(this decimal price, string code)
        {
            var rate = GetRate(code);
            var result = price / rate;
            return decimal.Round(result, 0);
        }

Açıklayıcı olması açısından kodlar içerisinde sürekli yorumlar yazdım. Bunları da okumanızda fayda var. Projemizi derledikten sonra çıktısını yani SC.Exchange.dll'i istediğimiz projeye referans edip kullanabiliriz. Ben kendi projeme referans ettim. Kullanımına geçmeden önce bir şey daha belirtmek istiyorum. GetPrice methodunu kullanırken istersek direk olarak parametre verebilir. Yada "this decimal" yazdığımız için extension olarakda kullanabiliriz. Kullanımı şu şekilde ; SC.Exchange.dll'ini referans ettiğimiz projede kullanacağımız bölümde sayfanın en üstüne register etmemiz gerekiyor. Böylece extension olarak kullanabiliriz. Yani namespace olarak ekleyeceğiz.

using SC.Exchange;

Bu tarzda ekledikten sonra ilgili kod sayfasında her hangi bir decimal değişkenin overload'larına gittiğinizde ToString() gibi GetPrice() methodunuda görüceksiniz. Bu method "code" parametresi alıyor.

 decimal price = 12.5M;
 var result = price.GetPrice("USD")

Tarzında kullandığımızda result olarak dönen sonucun kur hesaplamasından dönen sonuç olduğunu görüceksiniz. Böylece döviz kur hesaplama konusunu C# programlama dilinde tamamen anlatmış olduk.

Yorumlar

  1. okan erdemir 20.2.2017

    çok güzel kod yazıyorsun birde biz aldığımızda çalışsa

Yorum Yaz