Anasayfa / Yazılım / C# / Switch Deyimi

Switch Deyimi

C#’ta farklı koşul durumlarında kullanabileceğimiz deyimlerden biri de Switch deyimidir. Özellikle ikiden fazla koşullu durumlarda ve her koşulun karşılığında ne yapılması gerektiği durumlarda oldukça sık başvurulan yöntemdir. Örneğin şöyle bir durum düşünelim, bir öğrencinin almış olduğu sayısal notları karşılığında öğrencinin not karşılığına gelen harfsel ifadeyi yazmak için switch kullanabiliriz. Bunu iç içe if else blokları ile de yapmamız mümkündür ancak burada switch kullanmak çok daha mantıklı ve basittir. Şimdi basit bir proje üzerinden bu konuyu anlatmaya devam edelim. VisualStudio üzerinde bir ConsoleApplication projesi oluşturalım. Bu projemize hemen bir class ekleyelim, bunun için sağda yer alan solution explorer alanında projemize sağ tıklıyoruz ve add >> class diyoruz. Sınıfımızın adını ben Notlar.cs veriyorum. Şimdi yapmak istediğim şu bir öğrencinin rakamsal notları karşılığı bu öğrencinin notunun harfsel olarak ifade edilmesini sağlamak. Yani A,B,C,D,E,F şeklinde göstermek istiyorum. Ayrıca bu notları kaçar öğrenci almış bunu da yapmak istiyorum.

Öncelikle projemizdeki Notlar.cs sınıfı içinde ilgili kodlarımızı yazalım. Açıklamaları daha çok kod içinde yapıyorum, daha sonra genel açıklamalar yapacağım.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10
{
    class Notlar
    {
        private int Nottoplami; //Notların toplamı
        private int NotSayisi;  //Girilen not sayısı
        //Aşağıdaki değişkenlerde ilgili notların sayısını tutacak
        private int aNotuSayisi;
        private int bNotuSayisi;
        private int cNotuSayisi;
        private int dNotuSayisi;
        private int fNotuSayisi;

        //KursAd için otomatik property tanımladım
        public string KursAd { get; set; }

        //otomatik property KursAd'ı çalıştıracak constructor oluşturuluyor
        public Notlar(string Ad)
        {
            KursAd = Ad; //KursAd'ı Ad ile set ediyoruz
        } //Constructor bitiyor

        //Kullanıcıya mesaj gösterme metodumuz
        public void MesajGoster()
        {
            //KursAd ile adı çekiyorum ve ekrana hoşgeldiniz mesajı yazdırıyorum
            Console.WriteLine("{0} dersi için not hesaplama programına hoşgeldiniz.", KursAd);
        } //metod sonu

        //Aşağıdaki metod ile kullanıcıdan notları alıyoruz.
        public void NotGirisi()
        {
            int Not; //Kullanıcıdan alacağımız not değeri için değişkenimiz
            string giris; //Kullanıcıdan alacağımız string veri

            //Kullanıcıya bilgi mesajını yazıyoruz, ve not girmesini istiyoruz
            Console.WriteLine("{0}\n{1}", "0-100 arasında tam sayı olmak üzere notu giriniz: ",
                "Not girişini sonlandırmak için  ve z tuşlarına basıp, enter tuşlayınız");

            giris = Console.ReadLine(); //Kullanıcının girmiş olduğu değeri okuyorum

            //döngümü tanımlıyorum, döngüm kullanıcı ctrl Z'ye basana kadar devam edecek
            while (giris != null)
            {
                Not = Convert.ToInt32(giris); //Kullanıcının girdiği veriyi int tipine çeviriyorum
                Nottoplami += Not;  //Notların toplamı için yaptığım işlem
                ++NotSayisi; //Kaç not girildiğini bulmak için yaptığım işlem
                //Harfli notların her birinin sayısını bulmak için kullanacağım metodu çağırıyorum
                HarfliNotlarinSayisi(Not);
                giris = Console.ReadLine(); //Kullanıcı girişini okuyorum
            } //while döngüsü burada sonlanıyor

        } //NotGiris metodu burada sonlanıyor

        //Harfli notların sayısını bulmak için kullanacağım metod
        private void HarfliNotlarinSayisi(int Not)
        {
            //Hangi notun girildiğine karar verilip,
            //ilgili nota karşılık gelen harfsel not sayısı arttırılıyor
            switch (Not / 10)
            {
                case 9: // Not 90 ve 99 dahil arası ise
                case 10: // Not 100 ise
                    ++aNotuSayisi; // aNotuSayisi değerini 1 arttır
                    break; // bu koşulun ardından çık
                case 8: // Not 80 ve 89 dahil arası ise
                    ++bNotuSayisi; // bNotuSayisi değerini 1 arttır
                    break; // bu koşulun ardından çık
                case 7: // Not 70 ve 79 dahil arası ise
                    ++cNotuSayisi; // cNotuSayisi değerini 1 arttır
                    break; // bu koşulun ardından çık
                case 6: // Not 60 ve 69 dahil arası ise
                    ++dNotuSayisi; // dNotuSayisi değerini 1 arttır
                    break; //bu koşulun ardından çık
                default: // grade was less than 60
                    ++fNotuSayisi; // fNotuSayisi değerini 1 arttır
                    break; // bu koşulun ardından çık
            } // switch sonu
        } //metodun sonu

        //Kullanıcı tarafından girilen notlara göre en sonda
        //raporlama yapmak için kullanacağımız metot
        public void NotRaporunuGoster()
        {
            Console.WriteLine("\nNot Raporu:");
            //En az 1 not girilip girilmediğinin kontrolü, eğer hiç not girilmedi ise
            //burdan sonrası çalışmaz
            if (NotSayisi != 0)
            {
                //girilen tüm notların toplamı, girilen not sayısına bölünür
                double ortalama = (double)Nottoplami / NotSayisi;

                //Raporlama sonuçlarını yazdırıyorum
                Console.WriteLine("Girilen Not Sayısı: {0}, Girilen Notların Toplamı: {1}",
                    NotSayisi, Nottoplami);

                Console.WriteLine("Sınıf ortalaması: {0:F}", ortalama);

                Console.WriteLine("{0}A: {1}\nB: {2}\nC: {3}\nD: {4}\nF: {5}",
                    "İlgili Harf Notu Sayıları:\n", aNotuSayisi, bNotuSayisi, cNotuSayisi,
                    dNotuSayisi, fNotuSayisi);
            } //if sonu

            //Herhangi bir not girişi yapılmadı ise verilecek mesaj
            else
            {
                Console.WriteLine("Herhangi bir not girişi yapılmadı!");
            } //else sonu
        } //NotRaporunuGoster() metodu sonu

    }
}

Bu sınıf içinde bir takım değişkenler oluşturdum. NotToplami, NotSayisi gibi değişkenler ile sınıfa başladık. NotToplamı kullanıcıdan alacağımız notların toplamı için, NotSayisi ise kullanıcıdan kaç adet not bilgisi aldığımızı saymak için kullandığımız değişkenler. Ayrıca her harf notu içinde birer değişken oluşturdum. (aNotuSayisi, bNotuSayisi gibi) Bunlarla da bu notların hangi harflere karşılık geldiğini bulduktan sonra, hangi harf notundan kaçar tane olduğunu bulmak için oluşturdum.

KursAd property ve MesajGoster metodu ise kullanıcı programa başladığında bir hoşgeldiniz mesajı versin diye oluşturduğum property ve metot. Ve ayrıca birde KursAd’a bağlı bir constructor mevcut.

NotGirisi metodu ise kullanıcının girmiş olduğu notları okumak için ve ne zaman sonlanacağını belirlemek için kullandığım bir metot. Bu metot içinde ayrıca HarfliNotlarinSayisi adında bir metodum var. Kullanıcı tüm notları girdikten ve ctrl Z’ye basmasının ardından bu metot çalışcak ve bu metot içinde de girilen notların karşılığındaki harfsel not değeri bulunup, bunların kaç adet olduğu hesaplanacak. NotRaporunuGoster metodu ise girilen tüm notların akabinde notların toplamını, harfli notların sayısını ve notların ortalamasını bana gösteren metodum.

NotGirisi metodumda iki tane değişken tanımladım. Birisi Giris diğeri Not. Giris değeri kullanıcının girmiş olduğu değeri string olarak tutar. Daha sonra bu değeri int tipine çeviririz ve Not değişkeni içinde alırız. Kullanıcı not girişini kesmek için ctrl Z ye basmalı ve ardından Enter’ı tuşlamalıdır. Bunu yaptıktan sonra artık not girişi kesilir ve diğer metotlar çalışır. Yani Ctrl Z ile ben veri girişini sonlandırıyorum. Metot içindeki While döngüsü ile kullanıcı null bir veri girmediği sürece kullanıcıdan not girmesini istiyorum. Her not girişi yapıldığında Notları topluyorum ve kaç not girildiğini sayıyorum.

HarfliNotlarinSayisi metodu içinde, switch ile girilen notun hangi harfli not değerine karşılık geldiğini buluyorum. Buradaki örnekte 0 ile 100 arasında tam sayı değerleri giriliyor. Ben girilen not eğer 90 ve 100 dahil olmak üzere bu aralıkta ise A, 80 ve 89 dahil bu aralıkta ise B, 70 ve 79 dahil bu aralıkta ise C, 60 ve 69 dahil bu aralıkta ise D 60’dan düşükse F kabul ettim. Burada girilen notu 10’a böldüm ve ilgili durumları yani caseleri belirledim. Bölüm sonucu işte caseleri oluşturdu, case 10, case 9, case 8, case 7, case 6 gibi.. Bunların dışında kalan ise default oldu. Daha sonra ilgili case değerini bulunca her case’e göre işlem yaptırdım. Yani Case örneğin 8 ise bNotuSayisi değerini 1 arttırdım. Bunun gibi her bir durum için işlemimi gerçekleştirdim.

Şimdi program.cs’ye dönelim ve sınıfımızı kullanalım :

program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication10
{
    class Program
    {
        static void Main(string[] args)
        {
            //Oluşturduğumuz Notlar sınıfından bir instance alıyorum
            Notlar Notlarimiz = new Notlar("Not Raporlama Programına Hoşgeldiniz");

            Notlarimiz.MesajGoster(); //Hoşgeldiniz kısmı için mesajı gösterme metodunu çağırdım
            Notlarimiz.NotGirisi(); //Not girişi için metodumu çağırdım
            Notlarimiz.NotRaporunuGoster(); //Raporlama için metodumu çağırdım

            Console.ReadLine();
        }
    }
}

Burada sıra ile anlatırsak öncleikle sınıfımdan bir instance yani bir örnek oluşturdum. Daha sonra bu örnek ile sıra ile metotlarımı çağırdım. Öncelikle bir hoşgeldiniz mesajı verdirdim. Daha sonra kullanıcıdan notları girmesini istedim ve kullanızı ctrl Z ile sonlandırdıktan sonra da NotRaporunuGoster metodumu çağırdım.

2013051111

Bu yazı ile birlikte switch kontrolünün nasıl yapıldığını, bir sınıf içinde nasıl kullanılabileceğini, bir sınıf içindeki metodun nasıl çağrıldığını, bir while döngüsünün nasıl yazıldığını vb bir çok csharp yapısını gördük aslında.

Şimdi swtich için UML gösterimi nasıl olur buna da deyinip konuyu bitirelim.

2013051112

İndirmek için aşağıdaki linki kullanınız.

Bir cevap yazın

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