2 Ocak 2014 Perşembe

Veritabanı Ders Uygulamaları - 11... Structın Veritabanı Bağlantılarında Kullanımı...

Yaptığımız uygulamalarda veritabanı bağlantılarını metodlar kullanarak yapabiliyoruz... İşlem kolaylığı açısından metodlar her zaman kullanışlı olmaktadır... Ama unutmamak lazım ki struct kullanarak bilgisayarımızın performansını artırabiliriz... 100 - 200 satırın olduğu bir veritabanı için çok bir farklılık göremeyebilirsiniz... Ama 10000 - 20000 verinin olduğu bir programda performans önemlidir... Struct tam da veritabanı bağlantıları için istediğimiz olay değildir aslında... Classları kullanmak daha mantıklı olacaktır... Kod kalabalıklığını kaldırmak ve erişilebilirliği daha rahat sağlamak için Classları daha sonraki örneklerimizde kullanacağız... 
Bu örneğimizde ise struct kullanımına bir örnek daha vermiş olacağız... Dosya açma, kapatma, silme gibi temel işlemleri struct üzerinden yapacağımız gibi, aynı zamanda struct içerisinde metodları kullanacağız... 

1 - Öncelikle okul adında aşağıdaki veritabanımızı hazırlıyoruz... Bu veritabanını daha önce defalarca kullandık...










2 - Form tasarımımız sol taraftaki gibi olacaktır... Program çalıştığında da sağ taraftaki gibi olacaktır...

3 - Database komutlarımız için using kısmında oledb tanımlamasını yapınız...

4 - Veritaban adında bir tane struct tanımlaması yapınız... 4-9 arasındaki maddelerde yazan bütün komutları struct içerisinde yapacaksınız...  baglanti ve komut adında iki tane public erişim türünde değişkenimizi tanımlayınız... baglanti oledbconnection, komut oledbcommand sınıf türünde olacaktır... 

5 - Structımızın ilk metodu olarak ac adında veritabanını çağıracağımız ve açacağımız bir metod tanımlayacağız... Bu metodu string bir parametre alacak şekilde tanımlayınız... Bağlantıları kullandığınız değişkenlere göre ayarlanacak şekilde aşağıdaki gibi yapabilirsiniz...

baglanti = new OleDbConnection("Provider=Microsoft.Jet.Oledb.4.0; Data Source="+veritabanadi+".mdb");
komut  = new OleDbCommand();
baglanti.Open();

Burada daha önce kullanmadığımız bir işlem yapıyoruz... Parametre ile gelen değişkenimizin içerisinde veritabanı dosyasının adını veriyoruz ve bunu veritabanıadı parametre değişkeni ile çağırıyoruz... Bu şu anlama geliyor... Farklı veritabanı dosyalarımızı da çağırabiliriz...  

6 - Bağlantıları ac adında bir metod ile struct içerisinde açtığımız gibi kapat adında bir metod ile de kapatacağız... Aşağıdaki metodu struct içerisinde yazınız...
public void kapat()
            {
                baglanti.Close();
            }

7 - Veritabanından silmek istediğimiz kişiler için bilgisil adında bir metodu struct içerisinde hazırlayacağız... Bunun için yine bir string parametre tanımlayacağız ve bu parametreye sorguyu göndereceğiz... Bu metodun içeriği aşağıdaki gibi olacaktır... Yalnız metodun  parametre değişkenini, commandTexte atamayı unutmayın...

komut.Connection = baglanti;
komut.CommandText = // Buraya parametre değişkenini yazınız...
komut.ExecuteNonQuery();


8 - Aşağıdaki metod tanımlamasını yapınız... Bu metod bize girdiğimiz isme karşılık diğer bilgilerini verdirecek... 
public void bilgiver ( string sorgu, string gelenisim, ListBox gelenlist)
            {

            }

Bu tanımlamada önemli bir kısım vardır... O da ListBox gelenlist parametre tanımlamasıdır... Daha önce böyle bir tanımlama yapmamıştık... Metodların, Classların, Structların içerisinde C# nesnelerini direkt adları ile kullanamıyoruz... Bir metodun içerisinde listbox1.items.add yazmaya çalıştığınızda hata verecektir... Çünkü bunlar ana programın parçalarıdır ve bu kısımlar da kullanılmalarına izin verilmemektedir... Ama kullanmak istediğimiz elemanı kendi sınıfında parametre olarak tanımladıktan sonra istediğimiz gibi kullanabiliyoruz... Burada Form1 de kullanmış olduğumuz listbox1 i istediğimiz gibi çağırıp kullanabileceğiz... gelenlist aslında bizim listbox1 nesnemiz olacaktır... 

9 - bilgiver metodumuzun içerisinde girilen ismi arattırıp veritabanından gelen isimler ile kıyaslayacağız... Eğer isim var ise gelenlist adındaki listbox parametremize ekleyeceğiz... Bu sayede ismin bilgileri listbox1 in içerisinde gözükmüş olacaktır...  Bunu daha önceki örneklerimizde defalarca yaptık... Yinede aşağıdakine benzer bir örnek ile işlemimizi yapabiliriz... 

komut.CommandText = // Buraya veritabanını sorgulayacak olan parametreyi yazın; 
komut.Connection = baglanti;
OleDbDataReader oku = komut.ExecuteReader();
while (oku.Read())
{
         if (// Buraya gelenisim ile veritabanındaki ismi kıyaslayacak komutu yazınız...)
        {  
               // gelenisim veritabanında var ise buraya listboxa eklenecek bilgileri sırası ile ekleyin...
               // ad, soyad, yas, numara bilgileri sırası ile eklensin...

        }
}
oku.Close();


10 - Structımızın içeriği bu metodla beraber bitmiş oldu... Şimdi sıra ara ve sil butonlarımızın içeriğini hazırlamakta... Bunun içinde ilk olarak ara butonumuzu hazırlayacağız... Veritaban adındaki structımızı bir değişken ile çağıralım... 
Örneğin veritaban veri = new veritaban();

11 - Veritabanımızı açmak için aşağıdaki komutu kullanalım... Benim veritabanı dosyamın adı okul olduğu için aşağıdaki komut ile bağlantıları açıyorum... 
veri.ac("okul");

12 - Aşağıdaki sorguyu bilgiver adındaki struct metoduna gönderelim... bilgiver isimli metoda 3 tane parametre tanımlamıştık... 
* Select * From ogrenci sorgusu ilk parametre olacaktır... 
* İsmi girdiğimiz textbox ikinci parametre olacaktır... İsmi büyük harfler ile gönderelim ki küçük - büyük harf karışımı olmasın...
* listbox1 de üçüncü parametremiz olacaktır... 

13 - Aşağıdaki komut ile de veritabanımızı kapatalım...
veri.kapat();

14 - Sil butonumuzu hazırlayalım... 10, 11 ve 13. maddelerdeki komutlar aynen bu buton içinde geçerli olacaktır... Yalnız 12. maddedeki gibi sorgumuzu göndermemiz gerekecektir... Bunun içinde textboxa girilen ismi silecek olan bir sorgu gönderiniz... 

15 - Uygulama bu işlem ile birlikte bitmiştir... Sizde bu uygulamaya veri ekleyecek ve veri düzenleyecek bir çalışma yapınız... 

31 Aralık 2013 Salı

Veritabanı Ders Uygulamaları - 10... Struct Kullanımı...

1 - isyeri adında aşağıdaki veritabanını oluşturun... 
Bu veritabanı için sadece yas alanını sayı olarak tanımlayınız... 

2 - Aşağıdaki gibi form sayfası oluşturunuz... 

3 - Program çalıştığı zaman aşağıdaki gibi bir sonuç verecektir... Bu sonucu struct kullanmadan da yapabiliriz ama struct bize performans açısından artı sağlamaktadır... Struct ile ilgili genel bilgi almak için tıklayınız...













4 - Kod kısmına geçelim... Veritabanı komutlarını kullanabilmek için Data.OleDb sınıfını çağıralım...

5 - isyeri adındaki veritabanımızı çağıralım... oledbconnection sınıfını kullanarak baglanti adında bir değişken tanımlayalım...

6 - Sql sorgulaması yaptırabilmek için komut adında oledbcommand sınıfına ait bir değişken tanımlayalım...

7 - Bir tane struct tanımlayalım... ad,soyad,sehir,yas,ulke adında değişkenler tanımlayalım...
Struct tanımlanırken aşağıdakine benzer bir örnek kullanılabilir... Bu yapı her yerde kullanılabilecek şekilde tanımlanmalıdır...
Struct agac
{
          public string yaprak;
          public string govde;
          public int meyvesayisi;
}

8 - Program açıldığın da listboxın içeriğini doldurabilmek için Form Load da komutları yazıyoruz...

9 - Veritabanı bağlantısını açıyoruz...

10 - Veritabanından bütün bilgileri, oku adında  oledbdatareader sınıfından tanımladığımız değişkene getiriyoruz...

11 - Bir while döngüsü ile oku değişkenimiz içindeki verileri okutuyoruz...
While (oku.Read) 
{
            // işlemler
}

12 - Bu while döngüsünün içerisinde işlemler kısmında öncelikle bir değişken tanımlayacağız... Bu değişken struct yapısını çağıracak ve onun özelliklerini kullanacaktır... 
Örneğin yukarıdaki struct için Agac govde = new Agac(); şeklinde tanımlanabilir...

13 - Oku değişkenimize almış olduğumuz bilgileri sırası ile structta tanımlamış olduğumuz değişkenlere atayacağız... 
Örneğin govde.yaprak = oku[0].ToString();  gibi...

14 - Yine bu while döngüsü içerisinde atamış olduğumuz değişkenleri listboxa ekliyoruz...
Örneğin listBox1.Items.Add(govde); gibi...

15 - Veritabanı bağlantısını kapatıyoruz... 

16 - Aşağıdaki metodu struct içerisine yazarak ToString metodunu eziyoruz... Çünkü struct a bilgiler alınırken nesne olarak alınıyor ve veritabanındaki bütün veriler ekleniyor... Bu durumda yazdırabilmek için metodu bir daha tanımlıyoruz... Çünkü sadece listbox içerisinde adları görmek istiyoruz...
public override string ToString()
            {
                return Ad; // listboxda etiketlenirken sadece Ad alanı ile etiketleniyorlar... 
            }

17 - Listboxda seçilenleri görmek için listboxın selectedindexchanged olayını kodlayacağız... 

18 - Seçili olan elemana ait verileri getirebilmek için aşağıdaki kodu listboxın içerisine yazıyoruz...
Agac secilinesne = (Agac)listBox1.SelectedItem;

19 - Labellarımıza sırası ile seçili olan nesnemizin değerlerini aktarıyoruz... 
label1.Text = secilinesne.yaprak;

Programımızı çalıştırıyoruz... Bu örnek ile struct yapısının neden kullanılması gerektiğini de öğrenmiş oluyoruz...
* Performans açısından avantajlı...
* Veritabanını sürekli olarak aç kapa yapmak zorunda değiliz...
* Struct ile tanımladığımız nesneleri istediğimiz gibi kullanabiliyoruz...  

Veritabanı Ders Uygulamaları - 3


30 Aralık 2013 Pazartesi

1 - Struct - Giriş...


Modülde ki teorik anlatımı ile struct yapısı aşağıdaki gibidir...
Nesne tabanlı programlama beş veri tipini destekler. Bunlar Class, Struct, Enum, Interface ve Delegate tipleridir. Bu öğrenme faaliyetinde Yapı (struct) veri tipini ele alacağız.

Aralarında mantıksal bir ilişki bulunan ama farklı türdeki verilerin bir arada bulunması gereken durumlarla karşılaşılabilir. İşte bu durumlarda belli bir grup verinin bir arada tutulması için oluşturulan yeni birime yapı (struct) denir.

Yapılar değer türündedir. Dolayısıyla belleğin yığın (stack) bölümünde tutulurlar.

Bellek kullanım bakımından yığın (stack) ve öbek (heap) olmak üzere ikiye ayrılır.

Yığın bölümünde veriler üst üste gelecek şekilde depolanırlar. Yeni bir veri eklendiğinde bu belleğin en üst bölgesine yerleştirilir. LIFO (Last In First Out) mantığına göre çalışır. Yani son giren ilk çıkar. Verilere erişim basit olduğu için hızlıdır.

Öbek kısmında ise boş bir alan oluşturulur ve veriler rastgele yerleştirilir. Verilere erişim karmaşık olduğundan daha yavaştır.

Değer türleri belleğin yığın (stack) bölümünde tutulurken; referans türler belleğin öbek (heap) bölümünde tutulur. Örneğin sınıflar(class) referans türünde olduklarından dolayı belleğin öbek (heap) bölümünde tutulur.

Yapıları tanımlamak için ‘struct’ anahtar sözcüğünü kullanırız. Bir yapının genel tanımlanma şekli aşağıdaki gibidir.
struct yapi-ismi
{
    yapi-elemanlari-listesi;
}

Genel tanımdan sonra söylenebilecek olan durum şudur... Structlar çok yoğun bir şekilde işlemciyi veya belleği yoracak olan durumlarda kullanılır... Çünkü kullanıldıktan sonra bellekten silinir... Böyle olunca sistemi yormaz... Onun dışında aslında classlardan her hangi bir farklılıkları yoktur... Hatta class kullananlar için struct kullanımı performans istemiyorsa gerekmektedir... 

Aşağıda basit bir örnek yapılmıştır... Bu örnek normalde struct kullanılmadan da rahatlıkla yapılabilir... Veri girişi için giris adında bir adet struct tanımlanmıştır... Structların içerisinde değişkenler tanımlanabildiği gibi metodlarda tanımlanabilir... 

Giris structın da tanımlanan goster adındaki metoda gelen bilgiler ekranda sonuc olarak gösterilmektedir... Structı çağırmak için yeni nesne tanımlaması kullanılmalıdır... 

giris gondermesaj = new giris();

using System;
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 WindowsFormsApplication5
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        struct giris
        {
            // Tanımlama sırasında public erişim seçeneği kullanılarak her yerden ulaşılması sağlanmaktadır... 
            public string goster(int no, string ad, string soyad, int yas)
            {
                string mesaj = "Numarası = " + no + "... Adı = " + ad + "... Soyadı = " + soyad + "... Yaşı =  " + yas + "..."; 
                return mesaj; // Structan geri dönecek olan bilgidir... 
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            giris gondermesaj = new giris(); // Bir nesneyi çağırır gibi gondermesaj adında bir tanımlama yapıyoruz... 
            MessageBox.Show(gondermesaj.goster(int.Parse(textBox1.Text), textBox2.Text, textBox3.Text,    int.Parse(textBox4.Text))); // Bilgiler içerisinde sayı olanlar structa, int.parse ile gönderilmektedir...
        }
    }
}

Yine aynı şekilde yapılmış olan aşağıdaki örnekte ise struc içerisinde değişkenler tanımlanmıştır... Bu yapı içerisindeki değişkenlerde sırası ile çağrılmıştır... Bu kullanıma bakılırsa daha çok değişkenlerin karmaşasını ortadan kaldıran bir yapıdadır...

struct ogrenci
        {
            public string ad; // Her yerde kullanılması için Public tanımlama yapılmıştır... 
            public string soyad;
            public string sınıf;
            public int no;
          }
        ogrenci ogren = new ogrenci(); // ogren adında structı kullanacak yapı tanımlanıyor...
        private void Form1_Load(object sender, EventArgs e)
        {
            ogren.ad = "ibrahim"; // Structa bilgiler gönderiliyor...
            ogren.soyad = "delibalta";
            ogren.sınıf = "2-c";
            ogren.no = Convert.ToInt16("1453");
        }
        private void button1_Click(object sender, EventArgs e)
        {
            listBox1.Items.Add(ogren.ad);// Structa gönderilen bilgiler listboxda gösteriliyor...
            listBox1.Items.Add(ogren.soyad);
            listBox1.Items.Add(ogren.sınıf);
            listBox1.Items.Add(ogren.no);
        }

15 Aralık 2013 Pazar

Veritabanı - 12... Comboboxdan DataGridViewe Bilgi Getirmek...

Comboboxda yaptığımız tercihler önemlidir... Yaptığımız tercih işlemine göre programda bir şeylerin değişmesini isteriz... Hatta veritabanından bazı bilgilerin gelmesi veya veritabanına bilgi kaydetmeyi bile isteyebiliriz... Bu program parçasında veritabanın da olan tarih verilerine göre garanti süresi devam eden bilgisayar parçalarını göstereceğiz... Bunun için aşağıdaki veritabanını kullanacağız... 



Veritabanımızın adı bilsay, tablomuzun adı ise Stok olacaktır... 

Burada Alınan Tarih ve Garanti alanları bizim için önemli olacaktır... Alınan Tarih üzerine garanti süresini yıl olarak ekleyeceğiz... Çıkan tarih eğer şu anki tarihden daha büyük ise garanti süresi devam ettiği için datagridview de göstereceğiz... Ama bunu sadece stokta kalan ürünler için göstereceğiz... Bu durumda Kalan alanı = 0 olanlar için garanti süresine bakmayacağız... 

Programımızın Form sayfası aşağıdaki gibi olacaktır... Comboboxın listelerine program açılmadan Hepsi ve Garanti seçeneklerini ekleyelim... 

Program çalıştığı zaman aşağıdaki gibi bir görüntü olacaktır... 

Garanti seçimi yapıldıktan sonra aşağıdaki gibi gözükecektir... 

Programımızın kodları aşağıdaki gibidir;

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;
using System.Data.OleDb;

namespace WindowsFormsApplication4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bilsay.accdb");
        OleDbCommand komut = new OleDbCommand();
        OleDbDataAdapter da;
        DataSet ds = new DataSet();

        void doldurdatagridview1(string sorgu)
        {
            ds.Clear(); // Datagridview her doldurulduğunda bir önceki veriler gözükmemesi için temizleniyor...

            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            da = new OleDbDataAdapter(komut);
            da.Fill(ds,"StokTablo"); // Burada kullanılan "StokTablo" ismi datagridview olaylarının hepsinde kullanılır...
            dataGridView1.DataSource = ds;
            dataGridView1.DataMember = "StokTablo";
            dataGridView1.Columns["Kimlik"].Visible = false; // Kimlik alanı datagridviewde gözükmesin...
            dataGridView1.Columns["Kalan"].Visible = false; // Kalan miktarı datagridviewde gözükmesin...
            baglanti.Close();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            doldurdatagridview1("Select * From Stok"); // Veritabanındaki bütün veriler gösteriliyor...
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (comboBox1.Text == "Garanti") // Garanti süresi devam edenler
                doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
            else if (comboBox1.Text == "Hepsi") // Stokta olan ve olmayan hepsi gözüküyor...
                doldurdatagridview1("Select * From Stok"); 
        }

        private void button4_Click(object sender, EventArgs e)
        {
            Application.Exit(); // Programı tamamen sonlandırmak için kullanılır... 
        }
    }
}

Program kod satırında bazı önemli noktalar vardır. 
*  ds.Clear();
DataGridView içerisini temizleyen komuttur... Çünkü combobox her seçim yapıldığında DataGridView temizlenmelidir... Aksi takdirde veriler üst üste binecek ve hepsi gözükecektir...

*  dataGridView1.Columns["Kimlik"].Visible = false; 
DataGridView içerisinde verintabanın da olan alanlardan göstermek istemediğimiz olursa bu komut satırı ile göstermeyebiliriz... Kimlik alanı ve Kalan alanı veritabanın da olmasına rağmen DataGridView de gösterilmemektedir... 

* doldurdatagridview1("Select *  From Stok Where DateAdd('yyyy',[Garanti],[Alınan Tarih])>Now()  And [Kalan]<>0");
DateAdd komutu verilen tarihin üstüne istenilen kadar tarih eklemektedir... Buradan yyyy ifadesi yerine m veya d ifadesi kullanılırsa yıl yerine, ay veya gün eklenerek yeni tarih bulunabilmektedir... Now() ise bilgisayarın tarihini göstermektedir... Çıkan tarih ile bilgisayarın tarihi kıyaslanmaktadır... 

And ifadesi birden fazla şart olması durumunda kullanılmaktadır... Biz burada Stokta olmayan ürünleri göstermek istemediğimiz için [Kalan]<>0 ifadesini kullanmaktayız... <> ifadesi eşit değil anlamındadır... 

14 Aralık 2013 Cumartesi

Veritabanı - 11... Veritabanından Combobox a Bilgi Almak...

Access veri tabanında kayıtlı olan verilerimizden bazılarını Combobox a ekleyebiliriz... Yapmak istediğimiz uygulamada Access de bulunan sütunlardan bir tanesini tamamen Comboboxa ekleyeceğiz... Aynı zamanda Comboboxdan seçim yapıldığında da Richtextboxa seçime göre diğer sütundaki bilgilerin gelmesini sağlayacağız...  

Access veritabanını aşağıdaki gibi oluşturun... Tablomuzun ismi Yeniurun olacaktır... Veritabanı adımız ise Bilsay olacaktır... 


Aşağıdaki formu oluşturunuz... Formda bir tane Combobox, bir tane Richtextbox olacaktır... 

Kodlarımıza Form_Load olayından başlayacağız... Bu sayede form açıldığında Comboboxa veriler eklenmiş olacaktır... Bu işlemleri yaparken hem comboboxa verilerin çağrılması kısmında hemde richtextboxa verilerin çağrılması kısmında benzer işlemleri kullanacağımız için metod yöntemi ile bilgileri alacağız... 

Program çalıştığı zaman aşağıdaki gibi olacaktır... Comboboxa veritabanındaki bilgiler gelecektir... Comboboxdan seçim yapıldığında ise Richtextboxa bilgiler gelecektir...

Programımızın kodları aşağıdaki gibidir;

using System;
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;
using System.Data.OleDb;

namespace WindowsFormsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
         OleDbConnection baglanti = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=bilsay.accdb");
        OleDbCommand komut = new OleDbCommand();

        void veritabanisorgu(int gelenindex, string sorgu) // Metodumuz...
        {
            baglanti.Open();
            komut.CommandText = sorgu;
            komut.Connection = baglanti;

            OleDbDataReader oku = komut.ExecuteReader(); //Aldığımız bilgilerimizi depomuza atıyoruz...

            if (gelenindex==0) // Combobox için 0, Richtextbox için 1 değerini gönderiyoruz... 
            {
                while (oku.Read()) //Comboboxa verileri ekliyor...
                    comboBox1.Items.Add(oku[0].ToString());
            }
            else if (gelenindex==1) // Richtextbox için çalışacak kısım... 
            {
                while (oku.Read()) // Richtextbox a verileri ekliyor... 
                   richTextBox1.Text= oku[1].ToString();
            }
            oku.Close();
            baglanti.Close(); 
        }
        private void Form1_Load(object sender, EventArgs e) // Formun hemen girişinde comboboxa verileri ekliyoruz...
        {  // Metoda gönderirken sorgu ile birlikte bir de sütun numarasını gönderiyoruz... 
            veritabanisorgu(0,"SELECT * FROM Yeniurun");
        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        { // comboboxdan seçim yapıldıktan sonra sorguyu gönderiyoruz... 
            veritabanisorgu(1,"SELECT * FROM Yeniurun Where [Adı]='" + comboBox1.Text + "'"); 
        }
    }
}

13 Kasım 2013 Çarşamba

Akış Diyagramları - 9... Girilecek İki Sayıya Dört İşlemi Uygulayacak Program...

Soru: Girilecek olan iki sayıya dört işlemi yaptıracak olan program?



Bu işlemin sonucunda program çalıştığı zaman sonuç aşağıdaki gibi olacaktır... İki Sayı Giriniz:40, 2060, 20, 800, 2