תרגיל - התריעה וקליטת חריגות ביישום קונסולת C#‎

הושלמה

בתרגיל זה, trycatch תפתח בלוק קוד ופסוקית במשפטים ברמה העליונה, MakeChange תיצור ותתן חריגות בפעולת השירות ולאחר catch מכן תשלים את בלוק הקוד באמצעות אובייקט חריג. עליך להשלים את המשימות הבאות במהלך תרגיל זה:

  1. עדכן משפטים ברמה העליונה: יישם try-catch תבנית במשפטים ברמה העליונה. בלוק try הקוד יכיל את השיחה אל MakeChange.
  2. שיטת MakeChange עדכון: צור והפנה חריגות עבור בעיות "אין מספיק עד" ו"תשלום תחתון".
  3. עדכן את catch בלוק הקוד כדי להשתמש במאפיינים של החריגה שזרקה.
  4. בדיקת אימות: בצע בדיקות אימות עבור הקוד שפיתת בתרגיל זה.

try-catch הוספת תבנית במשפטים ברמה העליונה

במשימה זו, תחרף את השיחה MakeChange לשיטה בתוך משפט try ותיצור את הפסוקית המתאימה catch .

  1. ודא שקובץ Program.cs פתוח בעורך הקוד של Visual Studio.

  2. אתר את שורות הקוד הבאות:

    // 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. קח דקה כדי לשקול את מטרתו של קוד זה.

    שים לב MakeChange שמחזיר ערך מחרוזת. ערך ההחזרה מוקצה למשתנה בשם transactionMessage. אם transactionMessage שווה ל- "transaction succeeded", העלות של הפריט שנרכש מתווספת ל- registerCheckTillTotal. המשתנה משמש registerCheckTillTotal לאימות יתרת החוב שחושבה על-ידי MakeChange השיטה.

  4. כדי להקיף את השיחה לשיטה MakeChange בבלוק קוד try משפט, עדכן את הקוד באופן הבא:

    try
    {
        // MakeChange manages the transaction and updates the till 
        string transactionMessage = MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes);
    }
    
  5. הוסף את המשפט catch הבא לאחר בלוק try קוד המשפט:

    catch
    {
    }
    

    תסיים לפתח את הפסוקית catch לאחר שתיווצר ותזרוק את החריגים.

יצירה והפעלה של חריגות בפעולת MakeChange השירות

במשימה זו, תעדכן כדי ליצור MakeChange ולתן חריגות מותאמות אישית כאשר לא ניתן להשלים טרנזקציה.

פעולת MakeChange השירות כוללת שתי בעיות שאמורות להוביל לחריגות:

  • בעיית תשלום תחתון: בעיה זו מתרחשת כאשר הלקוח מציע תשלום נמוך מהעלות של הפריט. אם הלקוח לא הציע מספיק תשלום, אמור MakeChange להציג חריגה.

  • אין מספיק בעיה עד: בעיה זו מתרחשת כאשר עד אינו מכיל את החשבונות הנדרשים כדי ליצור את השינוי המדויק. אם לא ניתן לבצע שינוי מדויק, צריך MakeChange לזרוק יוצא מן הכלל.

  1. גלול מטה אל MakeChange השירות.

  2. אתר את שורות הקוד הבאות:

    if (changeNeeded < 0)
        transactionMessage = "Not enough money provided.";
    
  3. התחשב בבעיה שקוד זה ממוען בה.

    אם changeNeeded הוא קטן מאפס, הלקוח לא סיפק מספיק כסף כדי לכסות את מחיר הרכישה של הפריט שהוא קונה. מחיר הרכישה והכסף שסופק על-ידי הלקוח הם פרמטרים של MakeChange השיטה. לפעולת השירות אין אפשרות להשלים את העסקה כאשר הלקוח אינו מספק מספיק כסף. במילים אחרות, הפעולה נכשלת.

    קיימים שני סוגי חריגים המופיעים כך שמתאימים לתנאים אלה:

    • InvalidOperationException: יש InvalidOperationException לציין חריגה רק כאשר תנאי ההפעלה של פעולת שירות אינם תומכים בהשלמה מוצלחת של קריאה לשיטה מסוימת. במקרה זה, תנאי ההפעלה נקבעים על-ידי הפרמטרים שסופקו לפעולת השירות.
    • ArgumentOutOfRangeException - יש ArgumentOutOfRangeException להתריעה על חריגה רק כאשר הערך של ארגומנט נמצא מחוץ לטווח הערכים המותר, כפי שהוגדר על-ידי פעולת השירות שהופעלה. במקרה זה הכסף שסופק חייב להיות גדול יותר מהעלות של הפריט.

    כל אחד מסוגי החריגים יכול InvalidOperationException לפעול, אך הוא תואם בצורה טובה מעט בהקשר של יישום זה.

  4. עדכן את הקוד באופן הבא:

    if (changeNeeded < 0)
        throw new InvalidOperationException("InvalidOperationException: Not enough money provided to complete the transaction.");
    
  5. גלול מטה כדי לאתר את שורות הקוד הבאות:

    if (changeNeeded > 0)
        transactionMessage = "Can't make change. Do you have anything smaller?";
    
  6. התחשב בבעיה שקוד זה ממוען בה.

    אם changeNeeded גדול מאפס לאחר הלולאות while שמכין את השינוי, אזי החשבונות של התוקף עד אז לא יהיו פועלים כדי לבצע שינויים. לשיטה אין אפשרות להשלים את הטרנזקציה כאשר לתשלומים אין את החשבונות הנדרשים כדי לבצע שינויים. במילים אחרות, הפעולה נכשלת.

    יש InvalidOperationException להשתמש בחריגה כדי ליצור את החריגה.

  7. עדכן את הקוד באופן הבא:

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

השלם את catch בלוק הקוד

במשימה זו, תעדכן את המשפט כדי catch לתפוס סוג חריגה ספציפי.

  1. גלול למעלה מעל השיטה MakeChange ואתר את הקוד הבא:

    catch
    {
    }    
    
  2. כדי לתפוס את סוג החריגה שנזרקה בפעולת MakeChange השירות, עדכן את הקוד באופן הבא:

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

    אובייקט InvalidOperationException החריגה שנזרקה ייתפס MakeChange , אך סוגי חריגים אחרים לא ייתפסו. מאחר שאינך מוכן לטפל בסוגי חריגים אחרים, חשוב לתת להם להיתפס נמוך יותר במחסנית הקריאות. אם אתה מודע לכך שצפויים סוגי חריגים אחרים בתוך MakeChange, באפשרותך להוסיף משפטים catch נוספים.

  3. השתמש בתפריט קובץ כדי לשמור את העדכונים.

המר את פעולת השירות MakeChange מ- "string" ל"void" וממאפיינים של חריגת גישה

במשימה זו, תעדכן MakeChangevoidכדי להיות מסוג ולאחר מכן להשתמש במפרטי חריגה כדי להעביר פרטי בעיה למשתמש.

  1. גלול לחלק העליון של MakeChange השיטה.

  2. כדי להמיר את MakeChange פעולת השירות מסוג לסוג string , voidעדכן את הקוד באופן הבא:

    static void MakeChange(int cost, int[] cashTill, int twenties, int tens = 0, int fives = 0, int ones = 0)
    
  3. מחק את הצהרת המשתנה הבאה:

    string transactionMessage = "";
    
  4. גלול לחלק התחתון של השיטה MakeChange .

  5. מחק את שורות הקוד הבאות:

    if (transactionMessage == "")
        transactionMessage = "transaction succeeded";
    
    return transactionMessage;
    
  6. גלול מעלה אל המשפטים ברמה העליונה ואתר את בלוק try הקוד.

  7. עדכן את try בלוק הקוד באופן הבא:

    try
    {
        // MakeChange manages the transaction and updates the till 
        MakeChange(itemCost, cashTill, paymentTwenties, paymentTens, paymentFives, paymentOnes);
    
        Console.WriteLine($"Transaction successfully completed.");
        registerCheckTillTotal += itemCost;
    }
    
  8. אתר ולאחר מכן מחק את שורות הקוד הבאות:

    // 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 הקוד catch והטרנזקציה מכריזים כעת על הודעות הטרנזקציה "הצלחה" ו"כישלון" למשתמש. מאחר שמאפיין החריגה Message מתאר את הבעיה, משפט יחיד Console.WriteLine() מטפל בשתי הבעיות. לאחר עדכונים אלה, קל יותר לקרוא ולתחזק את הקוד שלך.

  9. השתמש בתפריט קובץ כדי לשמור את העדכונים.

בדוק את העבודה שלך

במשימה זו, תפעיל את היישום שלך ותאמת שהקוד המעודכן פועל כצפוי.

  1. גלול מעלה כדי למצוא את while הלולאה במשפטים ברמה העליונה.

    לולאה זו משמשת לחזרה באמצעות הטרנזקציות.

  2. אתר את הקוד הבא כמה שורות לפני תחילת הלולאה while .

    int transactions = 10;
    
    
  3. עדכן את מספר הטרנזקציות כך 40 :

    int transactions = 40;
    
    
  4. אתר את שורת הקוד הבאה בתוך הלולאה while .

    int itemCost = valueGenerator.Next(2, 20);
    
    
  5. עדכן את itemCost מחולל המספרים האקראיים באופן הבא:

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

    טווח עלות זה הוא התאמה טובה יותר עבור פריטים שהלקוחות רוכשים.

  6. השתמש בתפריט קובץ כדי לשמור את העדכונים.

  7. בתפריט הפעלה , בחר התחל איתור באגים.

  8. סקור את הפלט בלוח המסוף.

  9. ודא שההודעות המשויכות לשני סוגי החריגים מוצגות:

    דוח הטרנזקציות שלך אמור לכלול את ההודעות הבאות של "לא היתה אפשרות להשלים טרנזקציה":

    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.
    
    

מזל טוב, נותקת את יישום רישום המזומנים כדי לפתור בעיה של לוגיקת קוד, ו עדכנת את היישום כך שישתמש בטכניקות ראויות לטיפול בחריגות.

הערה

הפלט שדווח מראה שהכסף עד אינו מאוזן עוד. ישנם באגים לוגיים נוספים בקוד. מודול פרוייקט אתגר זמין אם אתה מעוניין להפגין את כישורי איתור הבאגים של קוד Visual Studio!