Yeni başlıyanlar için kompleks hesap makinası

Selamlar;

Bugün ekranı runtime’da oluşan çoklu hesap işlemi yapabilen bir hesap makinası yazıcağız. Herşey bilgisayar mühendisliğinde okuyan stajyer arkadaşın isteği ile başladı. Madem yapıyoruz biraz farklı yapalım dedik:)

Design ekranı aşağıdaki gibidir. Görüldüğü üzere rakamlar ve işlem buttonları yoktur. Sadece silme, geri tuşu ve bir de sonuç ekranı bulunmaktadır.

calc2png

Aşağıda görüldüğü gibi CreateScreen methodu işlem yapılacak 10 rakamı runtime’da btn_Click event’ine bağlayıp isim,boyut,kordinat ve text bilgilerini döngü ile atayıp, pnlKeyboard paneline sıra ile eklemektedir.

Form1.cs :

 CustomButton.cs : Aşağıdaki custom button’da, operatör butonlarının text’leri ve soldan boşlukları parametre dizisi olarak verilmiştir. Runtime’da bu butonların textleri,boyutları,konumu,arka rengi ve Click eventinde çağrılacak method’u belirlenmiştir.”=” operatörü bnt_Calc method’una diğerleri btn_Click method’una bağlanmıştır.

 btn_Click() :  Burada ekrana bir operatör basılmış ise yani (‘+’, ‘-‘, ‘x’, ‘/’) den biri ise yanına bir başka operatörün basılmaması kontrol edilip, duruma göre var olan operatör ile değiştirilmesi sağlanmıştır. Eğer son basılan tuş operatör değilse işlem sırasına yani ekrana eklenir.

 Extension.cs: Aşağıdaki GetLast extension’ında string ifadenin son karakteri alınmaktadır. IsNumeric’de adından anlaşılacağı gibi string ifadenin sayısal olup olmadığına bakılır.

Uygulama çalıştırıldıktan sonra buttonlar aşağıda görüldüğü gibi ekrana runtime’da basılır:

buttons

Şimdi gelelim ekrana girilen komut kümesini işleyerek sonuca gitmeye. İlk başta interpreter design pattern bu durum için uygun gözükse de işlem sırasının düzenli olmaması, expression tanımlamada sorunlar çıkarmaktadır.

Interpreter Design Pattern: Düzgün sıralı  ifadelerin sayısal veya mantıksal olarak işlenip bundan ilgili sonuçlara ulaşılması için kullanılan design patterndır.

interpreter

 btn_Clac: Aşağıda görüldüğü gibi txtScreen’deki tüm karakterler tek tek alınmaktadır. Eğer numeric ise num değişkenine operator ise match değişkenine atılır.Kısaca sayılar ve operatorler  bir listeye atılır.

Daha sonra atılan bu listede önce çarpma ve bölme operatörleri işleme alınıp finalMatch dizisine atılır. Daha sonra toplama ve çıkarma operatörleri finalMatch dizisi üzerinden işleme alınır ve sonuca ulaşılır.

Ayrıca aşağıda tüm sonuç ekranını temizleme ve son karakteri silme butonlarının kodlarını da görmekteyiz.

Sonuç olarak ilgili sayısal ve işlem buttonları için ayrı ayrı kod yazılmamış hepsi tekil method’lara  bağlanmıştır. Ayrıca butonların runtime’da oluşturulması performans anlamında ciddi bir artış sağlamıştır. Mantıksal operatörlerde toplu işlem belli bir quee’ye alınmış daha sonra önceliklendirmeye göre işletilip sonuca gidilmiştir. Bu durum roma rakamlarının okunması, cryptography gibi daha birçok sıralı ifadelerin çözüm yöntemleri ile benzerlik göstermektedir.

calc1  calc2

Source Code:http://www.borakasmer.com/projects/yeni.rar

Bir sonraki makalede görüşmek üzere hoşçakalın.

 

Herkes Görsün:

Sevebilirsin...

2 Yanıt

  1. Romario diyor ki:

    Tuşların dinamik oluşturulması ve bir design patterndan esinlenerek yorumlanması açısından çok güzel bir kod.

  2. borsoft diyor ki:

    Teşekkürler…

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir