Alıştırma - C# konsol uygulamasında özel durumları oluşturma ve yakalama

Tamamlandı

Bu alıştırmada, üst düzey deyimlerde bir try kod bloğu ve catch yan tümcesi geliştirecek, yönteminde MakeChange özel durumlar oluşturup oluşturacak ve ardından bir özel durum nesnesi kullanarak kod bloğunu catch tamamlayacaksınız. Bu alıştırma sırasında aşağıdaki görevleri tamamlarsınız:

  1. Üst düzey deyimleri güncelleştirme: Üst düzey deyimlerde bir try-catch desen uygulayın. Kod try bloğu çağrısı MakeChangeiçerir.
  2. Güncelleştirme MakeChange yöntemi: "Süre yetersiz" ve "Yetersiz ödeme" sorunları için özel durumlar oluşturun ve oluşturun.
  3. Kod bloğunu catch , oluşan özel durumun özelliklerini kullanacak şekilde güncelleştirin.
  4. Doğrulama testi: Bu alıştırmada geliştirdiğiniz kod için doğrulama testleri gerçekleştirin.

Üst düzey deyimlere desen try-catch ekleme

Bu görevde, çağrıyı yöntemine bir MakeChange deyiminin try içine alır ve karşılık gelen catch yan tümcesini oluşturursunuz.

  1. Program.cs dosyasının Visual Studio Code Düzenleyicisi'nde açık olduğundan emin olun.

  2. Aşağıdaki kod satırlarını bulun:

    // MakeChange manages the transaction and updates the till 
    string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes);
    
    // Backup Calculation - each transaction adds current "itemCost" to the till
    if (transactionMessage == "transaction succeeded")
    {
        Console.WriteLine($"Transaction successfully completed.");
        registerCheckTillTotal += itemCost;
    }
    else
    {
        Console.WriteLine($"Transaction unsuccessful: {transactionMessage}");
    }
    
  3. Bu kodun amacını göz önünde bulundurmak için bir dakika bekleyin.

    Bir dize değeri döndürdüğüne MakeChange dikkat edin. Dönüş değeri adlı transactionMessagebir değişkene atanır. "İşlem başarılı" değerine eşitse transactionMessage , satın alınan öğenin maliyeti öğesine registerCheckTillTotaleklenir. değişkeni registerCheckTillTotal , yöntemi tarafından hesaplanan till bakiyesini MakeChange doğrulamak için kullanılır.

  4. yöntemine yapılan çağrıyı MakeChange bir try deyim kodu bloğuna almak için kodunuzu aşağıdaki gibi güncelleştirin:

    try
    {
        // MakeChange manages the transaction and updates the till 
        string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes);
    }
    
  5. Deyim kodu bloğundan sonra aşağıdaki catch yan tümceyi try ekleyin:

    catch
    {
    }
    

    Özel durumları oluşturup oluşturduktan sonra yan tümcesini geliştirmeyi catch tamamlayacaksınız.

yönteminde MakeChange özel durumlar oluşturma ve oluşturma

Bu görevde, bir işlem tamamlanamazken özel özel durumlar oluşturacak ve oluşturacak şekilde güncelleştireceksiniz MakeChange .

yöntemi, MakeChange özel durumlara neden olması gereken iki sorun içerir:

  • Yetersiz ödeme sorunu: Bu sorun, müşteri madde maliyetinden daha düşük bir ödeme sunduğunda oluşur. Müşteri yeterli ödeme önermediyse bir MakeChange özel durum oluşturmalıdır.

  • Kasa yetersizliği sorunu: Bu sorun, kasa tam değişikliği sağlayacak gerekli banknotları içermediğinde oluşur. Eğer till tam olarak değişiklik yapamazsa, MakeChange oluşturmalı ve özel durum oluşturmalıdır.

  1. Ekranı aşağı kaydırarak MakeChange yöntemine gelin.

  2. Aşağıdaki kod satırlarını bulun:

    if (changeNeeded < 0)
        transactionMessage = "Not enough money provided.";
    
  3. Bu kodun ele alma sorununu göz önünde bulundurmak için bir dakika bekleyin.

    Sıfırdan küçükse changeNeeded , müşteri satın aldığı ürünün satın alma fiyatını karşılamak için yeterli para sağlamamıştır. Satın alma fiyatı ve müşteri tarafından sağlanan para yöntemin MakeChange parametreleridir. Müşteri yeterli para sağlamadığında yöntemi işlemi tamamlayamıyor. Başka bir deyişle işlem başarısız olur.

    Bu koşullara uyan iki özel durum türü vardır:

    • InvalidOperationException: Özel InvalidOperationException durum, yalnızca bir yöntemin çalışma koşulları belirli bir yöntem çağrısının başarıyla tamamlanmasını desteklemediğinde oluşturulmalıdır. Bu durumda, çalışma koşulları yöntemine sağlanan parametrelerle oluşturulur.
    • ArgumentOutOfRangeException - Özel ArgumentOutOfRangeException durum, yalnızca bir bağımsız değişkenin değeri çağrılan yöntem tarafından tanımlanan izin verilebilen değer aralığının dışında olduğunda oluşturulmalıdır. Bu durumda, sağlanan para öğenin maliyetinden daha büyük olmalıdır.

    Her iki özel durum türü de çalışabilir, ancak InvalidOperationException bu uygulama bağlamında biraz daha iyi bir eşleşmedir.

  4. Kodu aşağıdaki gibi güncelleştirin:

    if (changeNeeded < 0)
        throw new InvalidOperationException("InvalidOperationException: Not enough money provided to complete the transaction.");
    
  5. Aşağıdaki kod satırlarını bulmak için aşağı kaydırın:

    if (changeNeeded > 0)
        transactionMessage = "Can't make change. Do you have anything smaller?";
    
  6. Bu kodun ele alma sorununu göz önünde bulundurmak için bir dakika bekleyin.

    Değişikliği hazırlayan döngülerden sonra changeNeeded sıfırdan büyüksewhile, till'de değişiklik yapmak için kullanılabilecek faturalar tükenmiştir. Yöntemi, till değişiklik yapmak için gereken faturalar eksik olduğunda işlemi tamamlayamaz. Başka bir deyişle işlem başarısız olur.

    Özel InvalidOperationException durum, özel durum oluşturmak için kullanılmalıdır.

  7. Kodu aşağıdaki gibi güncelleştirin:

    if (changeNeeded > 0)
        throw new InvalidOperationException("InvalidOperationException: The till is unable to make the correct change.");
    

Kod bloğunu catch tamamlama

Bu görevde, belirli bir özel durum türünü yakalamak için yan tümcesini catch güncelleştireceksiniz.

  1. Yönteminin yukarısını MakeChange kaydırın ve aşağıdaki kodu bulun:

    catch
    {
    }    
    
  2. yönteminde MakeChange oluşturulan özel durum türünü yakalamak için kodu aşağıdaki gibi güncelleştirin:

    catch (InvalidOperationException e)
    {
        Console.WriteLine($"Could not complete transaction: {e.Message}");
    }    
    

    içinde InvalidOperationException oluşan MakeChange özel durum nesnesi yakalanacak, ancak diğer özel durum türleri yakalanmayacak. Diğer özel durum türlerini işlemeye hazır olmadığınıza göre, bunların çağrı yığınında daha düşük bir şekilde yakalanmalarına izin vermek önemlidir. içinde MakeChangediğer özel durum türlerinin beklendiğini fark ederseniz, ek catch yan tümceler ekleyebilirsiniz.

  3. Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.

MakeChange yöntemini "string" yerine "void" biçimine dönüştürün ve özel durum özelliklerine erişin

Bu görevde, türünde MakeChangeolacak şekilde güncelleştirecek void ve ardından sorun ayrıntılarını kullanıcıya iletmek için özel durum özelliklerini kullanacaksınız.

  1. Yönteminin en üstüne MakeChange kaydırın.

  2. yöntemini türünden MakeChange türüne stringvoiddönüştürmek için kodu aşağıdaki gibi güncelleştirin:

    static void MakeChange(int cost, int[] cashTill, int twenties, int tens = 0, int fives = 0, int ones = 0)
    
  3. Aşağıdaki değişken bildirimini silin:

    string transactionMessage = "";
    
  4. Yönteminin en altına MakeChange kaydırın.

  5. Aşağıdaki kod satırlarını silin:

    if (transactionMessage == "")
        transactionMessage = "transaction succeeded";
    
    return transactionMessage;
    
  6. Yukarı kaydırarak en üst düzey deyimlere gelin ve kod bloğunu try bulun.

  7. Kod bloğunu try aşağıdaki gibi güncelleştirin:

    try
    {
        // MakeChange manages the transaction and updates the till 
        MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes);
    
        Console.WriteLine($"Transaction successfully completed.");
        registerCheckTillTotal += itemCost;
    }
    
  8. Aşağıdaki kod satırlarını bulun ve silin:

    // Backup Calculation - each transaction adds current "itemCost" to the till
    if (transactionMessage == "transaction succeeded")
    {
        Console.WriteLine($"Transaction successfully completed.");
        registerCheckTillTotal += itemCost;
    }
    else
    {
        Console.WriteLine($"Transaction unsuccessful: {transactionMessage}");
    }
    
    

    try ve catch kod blokları artık işlem "başarılı" ve "başarısız" iletilerini kullanıcıya iletiyor. Özel durumun Message özelliği sorunu açıkladığından, tek Console.WriteLine() bir deyim her iki sorunu da giderir. Bu güncelleştirmelerden sonra kodunuzu okumak ve korumak daha kolaydır.

  9. Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.

Çalışmanızı denetleyin

Bu görevde uygulamanızı çalıştıracak ve güncelleştirilmiş kodunuzun amaçlandığı gibi çalıştığını doğrulayacaksınız.

  1. Üst düzey deyimlerde döngü bulmak while için yukarı kaydırın.

    Bu döngü, işlemler arasında yineleme yapmak için kullanılır.

  2. Döngü başlamadan while birkaç satır önce aşağıdaki kodu bulun.

    int transactions = 10;
    
    
  3. İşlem 40 sayısını şu şekilde güncelleştirin:

    int transactions = 40;
    
    
  4. Döngünün içinde while aşağıdaki kod satırını bulun.

    int itemCost = valueGenerator.Next(2, 20);
    
    
  5. Rastgele sayı oluşturucuyu itemCost aşağıdaki gibi güncelleştirin:

    int itemCost = valueGenerator.Next(2, 50);
    
    

    Bu maliyet aralığı, müşterilerin satın alacakları ürünler için daha iyi bir eşleşmedir.

  6. Güncelleştirmelerinizi kaydetmek için Dosya menüsünü kullanın.

  7. Çalıştır menüsünde Hata Ayıklamayı Başlat seçin.

  8. TERMINAL panelinde çıkışı gözden geçirin.

  9. İki özel durum türüyle ilişkili iletilerin görüntülendiğini doğrulayın:

    İşlem raporunuz aşağıdaki "İşlem tamamlanamadı" iletilerini içermelidir:

    Customer is making a $42 purchase
             Using 2 twenty dollar bills
             Using 0 ten dollar bills
             Using 0 five dollar bills
             Using 0 one dollar bills
    Could not complete transaction: InvalidOperationException: Not enough money provided to complete the transaction.
    
    Customer is making a $23 purchase
             Using 2 twenty dollar bills
             Using 0 ten dollar bills
             Using 0 five dollar bills
             Using 1 one dollar bills
    Cashier prepares the following change:
             A five
             A five
             A one
             A one
    Could not complete transaction: InvalidOperationException: The till is unable to make change for the cash provided.
    
    

Tebrikler, bir kod mantığı sorununu düzeltmek için yazar kasa uygulamasında hata ayıkladıysanız ve uygulamayı uygun özel durum işleme tekniklerini kullanacak şekilde güncelleştirdiniz.

Not

Bildirilen çıktı, till parasının artık dengelenmediğini gösterir. Kodda ek mantık hataları vardır. Visual Studio Code hata ayıklama becerilerinizi göstermek istiyorsanız bir sınama projesi modülü kullanılabilir!