23 Kasım 2011 Çarşamba

C# Sayıyı Yazıya Çevirme(Sayının yazı karşılığı)

Merhaba arkadaşlar.Bugün paylaşacağım şey mantık oluşturması açısından önemli bir örnek.Basit şekilde yapılmış bu program ileride yapacağımız bir fatura programında kullanılabilir.Bildiğiniz gibi faturalarda Toplam Tutar yazar.Hemen yanında veya altında Toplam Tutarın yazıyla basılmış halini görürüz.Bu yaptığımızı programda bunu tam olarak yapmasakta mantık oluşturması bakımından iyi olacaktır. Biz burada sadece 0 ile 1000 arasında girilen tam sayıları yazıya çevireceğiz.Geliştirmesi size kalmış:)

Öncelikli aşağıdaki formu hazırlıyoruz.






























Gördüğünüz gibi formumuzda 1 adet Textbox 1 adet button 2 adet Label var.Bu formu oluşturduktan sonra button'a çift tıklayarak click olayına aşağıdaki kodları yazıyoruz.



private void button1_Click(object sender, EventArgs e)
        {
            int yuzler = 0, onlar = 0, birler = 0, girilen;
            string sonuc = "";
            girilen = Convert.ToInt32(textBox1.Text);
            if (girilen <= 0 || girilen >= 1000)
                MessageBox.Show("Lütfen 0 ile 1000 arasında bir sayı giriniz", "HATA", MessageBoxButtons.OK, MessageBoxIcon.Error);
            if (girilen > 99)
            {
                yuzler = girilen / 100;
                if (girilen - (yuzler * 100) == 0) goto ifSonu;
                onlar = (girilen - (yuzler * 100)) / 10;
                birler = girilen - ((yuzler * 100) + (onlar * 10));
            }
            else if (girilen > 9)
            {
                onlar = girilen / 10;
               
                birler = girilen - (onlar * 10);






            }
            else
                birler = girilen;




        ifSonu:
            


            if (yuzler > 0)
            {
               
                switch (yuzler)
                {
                    case 1:
                        sonuc = "yüz";
                        
                        break;
                    case 2:
                        sonuc = "ikiyüz";
                        break;
                    case 3:
                        sonuc = "üçyüz";
                        break;
                    case 4:
                        sonuc = "dörtyüz";
                        break;
                    case 5:
                        sonuc = "beşyüz";
                        break;
                    case 6:
                        sonuc = "altıyüz";
                        break;
                    case 7:
                        sonuc = "yediyüz";
                        break;
                    case 8:
                        sonuc = "sekizyüz";
                        break;
                    case 9:
                        sonuc = "dokuzyüz";
                        break;
                }
            }
            if (onlar > 0)
            {
                switch (onlar)
                {
                    case 1:
                        sonuc = sonuc + "on";
                        break;
                    case 2:
                        sonuc = sonuc + "yirmi";
                        break;
                    case 3:
                        sonuc = sonuc + "otuz";
                        break;
                    case 4:
                        sonuc = sonuc + "kırk";
                        break;
                    case 5:
                        sonuc = sonuc + "elli";
                        break;
                    case 6:
                        sonuc = sonuc + "altmış";
                        break;
                    case 7:
                        sonuc = sonuc + "yetmiş";
                        break;
                    case 8:
                        sonuc = sonuc + "seksen";
                        break;
                    case 9:
                        sonuc = sonuc + "doksan";
                        break;
                }
            }
            if (birler > 0)
            {
                switch (birler)
                {
                    case 1:
                        sonuc = sonuc + "bir";
                        break;
                    case 2:
                        sonuc = sonuc + "iki";
                        break;
                    case 3:
                        sonuc = sonuc + "üç";
                        break;
                    case 4:
                        sonuc = sonuc + "dört";
                        break;
                    case 5:
                        sonuc = sonuc + "beş";
                        break;
                    case 6:
                        sonuc = sonuc + "altı";
                        break;
                    case 7:
                        sonuc = sonuc + "yedi";
                        break;
                    case 8:
                        sonuc = sonuc + "sekiz";
                        break;
                    case 9:
                        sonuc = sonuc + "dokuz";
                        break;
                }


                }


            label1.Text = sonuc;
        }






En başta "girilen" diye bir değişken tanımladık.Bu int tipindeki değişkene klavyeden girdiğimiz sayıyı atıyoruz:
 girilen = Convert.ToInt32(textBox1.Text);


Burada bu değişkeni int olarak tanımladık çünkü bizim küsüratlı sayılarla işimiz yok ve int kullanmamız burada  bize büyük avantaj sağlayacak.Bunu programın gidişatında anlayabilirsiniz.


 if (girilen <= 0 || girilen >= 1000)
  MessageBox.Show("Lütfen 0 ile 1000 arasında bir sayı giriniz", "HATA", MessageBoxButtons.OK, MessageBoxIcon.Error);


Bu iki satıda girilen değerlerin kontrolünü yapıyoruz.0 ile 1000 arasındaki sayıları kabul ediyoruz sadece.Eğer bu koşula uymayan bir durum varsa messagebox nesnemiz çalışıyor.Messagebox'ın içine girilen ilk ifade göstermek isteğimiz uyarı mesajı ikinci ifade mesaj başlığımız üçüncüsü kullanılan button dördüncüsü ise messagebox içerisinde kullandığımız icon.Messagebox'ın birçok şekilde kullanımı vardır.



  if (girilen > 99)
            {
                yuzler = girilen / 100;
                if (girilen - (yuzler * 100) == 0) goto ifSonu;
                onlar = (girilen - (yuzler * 100)) / 10;
                birler = girilen - ((yuzler * 100) + (onlar * 10));
            }


Girilen sayı üç basamaklı ise yukarıdaki bu kod parçacığı çalışacaktır.Örnek olarak 115 sayısını ele alalım.Bu 3 basamaklı bir sayı olduğu için burada işleme sokuyoruz.Bu sayıyı 100'e böldüğümüzde 1.15 çıkıyor.Ama biz değişken tiplerimizi int olarak belirttiğimiz için bunun sadece tam kısmını alıyoruz.Int olarak tanımlamamızın avatajı burada.yuzler=1 oldu.İkinci kısımda aynı şekilde onlar=1 diğerinde ise birler=5 çıkıyor.Buradaki mantık sayıyı tamamen parçalamak.Basamaklarına ayırdık ki daha kolay bir şekilde yazıya dökebilelim.  if (girilen - (yuzler * 100) == 0) goto ifSonu; Bu cümlenin anlamı şudur.Girdiğimiz sayı düzse yani 100 200 300 gibi sayılarsa başka hiçbir işlem yapmadan goto ile gösterilen yere dallanıyor.Burada ifsonu diye bir etiket tanımlamışız.Eğer sayı böyle gelirse bütün işlemleri durdurup etiketin olduğu yerden devam ediyor.Bunu da programın bütününe bakarsanız göreceksiniz.



  else if (girilen > 9)
            {
                onlar = girilen / 10;
               
                birler = girilen - (onlar * 10);
}


Bu kısımda da aynı şekilde eğer 2 basamaklı bir sayı girilirse basamaklara bölüyoruz.


        else


                birler = girilen;


Zaten girilen tek basamaklı bir sayı ise bölmeye gerek yok direk birler değişkenimizin içine atıyoruz.

Son kısımda sayımızı basamaklara böldükten sonra herbir sayıya denk gelen yazılara isim veriyoruz. yuzler=1 ise bunun yazı karşılığı yüz olacaktır.Önemli nokta basamaklarımız 0 dan büyük ise isim verme olayı gerçekleşecektir.(if (onlar > 0))


Şart gerçekleştikten sonra switch case yapısıyla değişkenimizin hangi değerde olduğunu buluyoruz ve string tipindeki sonuc değişkenimizin içerisine ne yazması gerektiğini atıyoruz.Diğer yerlerdede aynısını yapıyoruz.Bu kısımda stiring ifadeleri toplamış oluyoruz. sonuc="yüz" ise sonuc=sonuc+"elli" dersek sonucu yazdığımız zaman "yüzelli" şeklinde olacaktır.En sonunda zaten label'a sonuc değişkenimizi atayıp olayı bitiriyoruz.





21 Kasım 2011 Pazartesi

C# Hesap Makinesi(Basit)

Merhaba arkadaşlar.Bu yazımda c#'ta basit bir hesap makinesi nasıl yapılır onu anlatacağım.Çok basit bir program yazacağımız için bu yazının yeni başlayanlar için iyi olacağını düşünüyorum.

İlk olarak aşağıdaki formu hazırlayalım












Programımızın nasıl çalıştığından bahselim biraz.Formumuzda 3 adet Textbox 4 adet radiobutton 1 adet checkbox ve 1 adet button var.Sayı 1 ve sayı 2 kısmına rakam girip işlem seçiniz menüsünden seçtiğimiz işleme göre sonuç üretiyoruz.Eğer "Dialogta göster" checkbox'ı seçiliyse sonucu bir mesaj penceresiyle göstereceğiz.Eğer seçili değilse Textbox içerisinde göstereceğiz.Program çalıştıktan sonraki görüntü aşağıdaki gibi olacaktır.
















Eğer checkbox seçili olursa butona bastığımızda görüntü aşağıdaki gibi olacaktır.














Radiobutton ile checkbox arasında büyük fark vardır.Formda 3 adet checkbox olduğunu düşünürsek hepsini bağımsız bir şekilde seçebiliriz.Ama radiobutton'da ise tek bir tanesini seçme şansımız vardır.Yani kullanıcıya sadece verdiğimiz seçeneklerden bir tanesi seçme şansı veriyoruz.Girdiğimiz iki değeri radiobutton'da seçilen değere göre işleme sokuyoruz ve ve sonucun nasıl gösterileceğini seçiyoruz.Tabiki bunların hepsini button'nun click olayına yazıyoruz.Kodlar aşağıdaki gibi olacak.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace hesap_makinesi
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public double toplam;

        private void button1_Click(object sender, EventArgs e)
        {
            if (r_topla.Checked == true)
            {
                toplam = Convert.ToInt32(txt_ilk.Text) + Convert.ToInt32(txt_ikinci.Text);
             
           
            }
            else if (r_cikar.Checked==true)
            {
                toplam = Convert.ToInt32(txt_ilk.Text) - Convert.ToInt32(txt_ikinci.Text);
           
            }
            else if (r_carp.Checked==true)
            {
                toplam = Convert.ToInt32(txt_ilk.Text) * Convert.ToInt32(txt_ikinci.Text);

            }
            else if (r_bol.Checked==true)
            {
                toplam = Convert.ToDouble(txt_ilk.Text) / Convert.ToDouble(txt_ikinci.Text);

            }

            if (cb_isaret.Checked == true)
            {
                MessageBox.Show("Sonuc :"+toplam.ToString(),"Hesap Makinesi");

            }
            else
            {
                txt_sonuc.Text = toplam.ToString();
            }
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            r_topla.Checked = true;
        }

      
    }
}


Arkadaşlar formu hazırladıktan sonra sağdaki properties kısmından nesne isimlerini değiştirmek işinizi kolaylaştıracaktır.Bu örnek nesnelerin adı ilk geldiği gibi değil.Mantıklı isimler vermeye çalıştım.Böyle yapmak nesneler çok olduğunda hangi nesne ne işe yarıyordu ne yapıyordu anlamamızı kolaylaştıracaktır.Programımızın kod bölümünü anlatayım biraz.


Button'un click olayına yazdığımızı daha önce söyledik.Bütün olaylar butona tıklanınca gerçekleşiyor.İlk olarak toplam diye bir double değişken tanımladık.Burada int olarak değilde double tanımlamamızın nedeni bölme işleminde sonucun küsüratlı olma ihtimali.Int olarak tanımlasaydık küsüratı göremezdik.

ikinci kısımda if (r_topla.Checked == true) bu ifadelerle hangi radiobutton'un seçili olduğunu bulmaya çalışıyoruz.Örnek r_topla seçeneği seçili ise onun altındaki kod parçacığı çalışacaktır.Bu if kontrollerini yaptıktan sonra içerisine hangi fonksiyonda ne çalışması gerekiyorsa o işlemi yaptırıyoruz.Textboxları convert ettikten sonra toplam değişkenin içine atıyoruz.Bu kod çalıştıktan sonra toplam değişkenimizin içi radioButton'un seçilmesine göre değer alacaktır.

Son kısımda ise toplam değişkenini yazdırmak kalıyor.Yani sonucu.Burada dikkat edilmesi gereken nokta checkbox seçilimi değil mi ?Eğer seçiliyse yani cb_isaret.Checked == true ise Messagebox ile ekrana gösterecek sonucu.Eğer seçili değilse textbox'a yazacak sonucu.MessageBox.Show("Sonuc :"+toplam.ToString(),"Hesap Makinesi"); bu fonksiyonla message olarak ekrana gösterebiliyoruz.Değilse txt_sonuc.Text = toplam.ToString(); bu kodla Textbox'a yazacak.

Son olarak radiobuttonlardan birinin forma açılırken seçili gelmesini istiyorsak  formun load kısmına şu kodu yazdık :   r_topla.Checked = true;

Bu yazımız bu kadar arkadaşlar.Umarım işinize yarar.Sorularınız olursa cevaplandırabilirim.

20 Mayıs 2011 Cuma

C# TextBox'a sadece sayı girişi(KeyPress(Tuş Bilgisi Okuma))

Merhaba arkdaşlar.Bugün C#'ta textbox'a sadece sayı girilmesini sağlayacak bir program yazacağız.Bu küçük ama çok kullanışlı bir fonksiyon birçok yerde karşımıza çıkacaktır.

C#' ta  klavye tuşlarını kontrol etme olayları vardır.Bunlar KeyDown olayı,KeyPress olayı,KeyUp olayı.Bu olaylara ulaşmak için yapmamız gereken şey çok basit.Üzerinde kontrol yapmak istediğiniz kontole tıklayın ve properties pencerisinde En üstte Şimşek iconlu Events bölümü var oraya tıklıyoruz.Ve daha sonra aşağısında bulunun KeyPress olayını buluyoruz ve karşısına gelip çift tıklıyoruz ve artık Keypress olayının içine kodlarımızı yazabiliriz.























Keyprese tıladıktan sonra içerisine kod yazacağımız events geliyor.












Bu olay arasına kodlarımı yazmaya başlıyoruz.

  private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
  if ((int)e.KeyChar >= 47 && (int)e.KeyChar <= 57)
            {

                e.Handled = false;//eğer 47 -58 arasındaysa tuşu yazdır.

            }

            else if ((int)e.KeyChar == 8)
            {

                e.Handled = false;//eğer basılan tuş backspace ise yazdır.

            }

            else
            {

                e.Handled = true;//bunların dışındaysa hiçbirisini yazdırma
          
        }
e.KeyChar fonksiyonu C#'ın kendi fonsiyonudur.Herhangi bir tuşun kodunu kontrol eder.Burada yaptığı görev belirtilen değerler arasında tuşu kabul edecek yada etmeyecek.Burada kodu 47 ile 57 kodları arası tuşları kabul ettik.Çünlü bu aralık sadece rakamları kapsıyor.Bizim istediğimiz texbox'a sadece rakam girebilmekti.

Eğer basılan tuş 47 ile 57 arasında ise e.Handled=false yani basılan tuşu kabul et diyoruz.
Burada atlamamamız gereken bir konu var.Sadece rakam yazdıracağız dedik ama bir de yanlış yazdığımız rakamı silmek var.Yani backspace tuşunuda kullanıma açmamız gerekiyor. onun içinde Kodu 8 olan karakteride kabul etmiş olduk.Onuda e.Handled=false olarak geri döndürdük.

Son olarak eğer bu tuşlar dışında başka bir tuşa basılmışsa bunu kabul etmiyoruz.Bunu yapmak içinde e.Handled=true olarak döndürdük.

13 Mayıs 2011 Cuma

Temel C# Konuları 2.(Combobox Kullanımı(KDV programı))

Merhaba arkadaşlar.Bugün C#'ta combobox,textbox,label ve button kullanarak basit bir fiyat hesaplayıcı programı yapacağız.Öncelikle aşağıdaki formu hazırlayalım.











Yapmak istediğimiz şey butona bastığımızda girilen fiyatı adet ve kdv oranıyla çarpıp ödenecek tutar kısmına sonucu yazması.Butona bastığımızda işlem yapılacağı için butonun click olayına kodları yazmamız gerekiyor ama kdv oranlarının form açıldığı anda combobox'a yüklenmesini sağlamak için form'un load kısmına da bi kaç kod yazmamız gerekiyor.Form'da herhangi bir boş yere çift tıklayıp form'un load kısmına gelip aşağıdaki kodları yazalım.

private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Add("8");
            comboBox1.Items.Add("18");
            comboBox1.Items.Add("25");
        }

Bu kodu eklediğimizde form açıldığı anda combobox'ın içerisini belirlediğimiz kdv oranlarıyla doldurmuş oluyoruz.Bu işlemi manual olarakta yapabiliriz.Combobox seçiliyken properties pencerisinde items özelliğine tıklayarak oraya direkt kdv oranlarını ekleyebiliriz.Bunları yaptıktan sonra artık asıl işi yapacak kodumuzu butonun içerisine yazıyoruz.


  private void button1_Click(object sender, EventArgs e)
        {
            textBox3.Text = Convert.ToString((Convert.ToDouble(textBox1.Text) + ((Convert.ToDouble(textBox1.Text) * Convert.ToInt32(comboBox1.SelectedItem)) / 100)) * Convert.ToInt32(textBox2.Text));
        }


Bu kodu yazdığımızda olan olay şu:

Textboxlar string tipinde değer tutarlar.Bu yüzden textboxların içerisine direkt olarak sayısal değer atayamayız yani double,int gibi.Öncelikle textbox'ın içindekini convert etmemiz gerekir.Eğer ondalıklı bir sayı tutacaksak convert.todouble ifadesini kullanırız.Eğer ondalıklı olmayan bir sayı tutacaksak convert.toint32 işimizi görür.

Dikkat ederseniz textboxlarımızı comboboxları hep convert ederek işlem yaptık.Çünkü öbür türlü işlem sonucu alamayız sadece string olarak toplamış olursunuz.Buda bizim işimize şuan yaramaz.

Combobox içerisindeki değeri combobox.text olarakta alabiliriz.Ama ileride bu yöntem bize lazım olacağı için combobox1.selecteditem olarak aldık.

En sonda bütün işlemlerin sonucunu textbox'a yazmak için convert.tostring özelliğini kullanmamız gerekiyor çünkü Textbox sadece string değer alıyordu hatırlarsanız.Biz bütün işlemleri sayısal olarak yaptıktan sonra string'e çevirip atmamız gerekiyor.Textbox3.text bizim sonucumuzun görünecek kısmı.

Yaptığımız işlem ise şu
( girilenpara+ ( ( girilenpara * kdvoranı) / 100 ) ) * adet   sonucu git Textbox3.text'e yaz.

girilenpara=Texbox1.text
kdvoranı=Combobox1.selecteditem veya Combobox1.text
adet=Textbox2.text


Girilen tüm bilgileri convert ederek işlem yaptık ve sonucunu bir textbox'a yazdırdık.











eğer convertleri karıştırıyorum diyorsanız aynı işi yapan şu kodlarıda kullanabilirsiniz :

private void button1_Click(object sender, EventArgs e)
        {
            double fiyat =Convert.ToDouble( textBox1.Text);
            int adet = Convert.ToInt32(textBox2.Text);
            int kdv = Convert.ToInt32(comboBox1.SelectedItem);
            textBox3.Text = Convert.ToString ( fiyat + ( ( fiyat * kdv ) / 100 ) * adet );
        }

Burada girilen değerleri direkt olarak çevirip değişkenlerimizin içine atıyoruz.ve sonrasında normal işlemleri yapıp en son yine string'e çevirerek sonucu basıyoruz.Dikkat etminiz gereken yer değişkene atama yaparken değişken hangi tipteyse ona göre convert etmeniz gerekir.Bütün kodlar aşağıdadır.


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace _2.ders_kdv
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            comboBox1.Items.Add("8");
            comboBox1.Items.Add("18");
            comboBox1.Items.Add("25");
        }

        private void button1_Click(object sender, EventArgs e)
        {
            textBox3.Text = Convert.ToString((Convert.ToDouble(textBox1.Text)+((Convert.ToDouble(textBox1.Text)*Convert.ToInt32(comboBox1.Text))/100))*Convert.ToInt32(textBox2.Text));
        }
    }
}

10 Mayıs 2011 Salı

Temel C# Konuları 1.(TextBox,Label ve Buton Kullanımı)

Merhaba arkadaşlar.Bu ilk konumuz olacak.Bir süre C# ile ilgili araçların kullanımdan bahsetmeye çalışacağım.Daha sonra C# ta yararlı ve öğretici uygulamalar yapacağız.Bugünkü konumuz TextBox ve buton kullanımı.

Textbox ve Buton C#'ın vazgeçilmez iki bileşenidir. Genelde Texbox içerisindeki veriyi butonla kontrol ederiz.Bunu örneklerle daha iyi anlayacaksınız.
Öncelikle visual studio açalım.Sırasıyla File-New-Project tıklayalım.















Daha sonra gelen ekranda Sol sekmede C# altında Windows'u seçelim ve sağ tarafta Windows Form Application'ı seçelim.















Burada Projemize bir isim verip nereye kaydedeceğimiz seçip OK tuşuna basalım.Şuan bulunduğumuz form projemizi şekillendireceğimiz yerdir.Bu form üzerine elemanlarımızı ToolBox üzerinden yerleştiririz.






















Kullanacağımız bütün elemanlar ToolBox içindedir.Herhangi bir elemanı sürükleyerek yada çift tıklayarak formumuza ekleyebiliriz.Bu örneğimizde bir adet Textbox,bir adet Button ve bir adet Label  kullanacağız.Bunları sayfamıza ekleyelim.Aşağıdaki gibi bir görünüm elde edeceğiz.













Şimdi yapmak istediğimizi anlatayım.Çok basit bir uygulama yapacağız.TextBox ' a girilen içeriği buttona basıldığı anda label'a yazacağız.Bunu yapmak için button1'e çift tıklayıp click özelliğine giriyoruz.Click'in anlamı   butona basıldığı zaman içerisindeki kodları çalıştır olarak düşünebilirsiniz.Bunu ilerleyen derslerde daha detaylı bir şekilde yapacağız.Çift tıklayıp butonun içerisine girdik.Aşağıdaki gibi bir görüntü elde edeceğiz.











Bu ekran bizim kod kısmımız.Diğer taraf Desing kısmımızdı istediğimiz anda diğer tarafa geçebiliriz.Burada button1_Click'e ait iki tane süslü parantez var.Butona tıklanınca çalıştırmak istediğimiz kodları buraya yazacağız.Aşağıda yazdığım kodları oraya ekleyin.Buarada buarada yazdığım kodları kopyala yapıştır yoluyla almazsanız sizin açınızdan daha iyi olur kod yazmada alışkanlık kazanmış olursunuz.


label1.Text = textBox1.Text;

bu kodu ekledik ve yukarıdaki yeşil play düğmesinden programımızı çalıştırıyoruz.TextBox'a herhangi birşey yazın ve buton'a basın.TextBox'a yazmış olduğunuz yazının label1'e yazıldığını göreceksiniz.

 










Programı kısaca anlatmaya çalışacağım.TextBoxlar ve Label'lar her zaman string ifade tutar.Sayısal rakamlarda tutarlar ancak yinede içerisinde gösterebilmemiz için string'e çevirmemiz gerekir.Mesela bu örnekte TextBox'ın textine yazığımız ifayi label'ın textinde gördük.Yani text dediğimiz şey aslında görünen kısımdır.Yani bir elemanın içerisinde ne görmek istiyorsak onun  text özelliğine yazarız.

Burada Butona basdığımız anda(Click Olayı) Textbox'ın içindeki veriyi alıp Label'ın Text'ine atıyor.Yani görünen kısmına atıyor.

Bu konumuz bu kadardı.Biraz basit bir konu oldu ileride daha iyi şeyler yapacağız.