演習 - 推奨寄付データを追加する

完了

開発プロセスのこの手順では、スターター プロジェクト フォルダーに用意されているコードを更新し、アプリケーションに "推奨される寄付" の機能を追加します。 スターター project.cs ファイルは Visual Studio Code で開く必要があります。 作業を開始するための指示が必要な場合は、前の準備ユニットに戻ってください。

"推奨される寄付" の機能を作成する

追加された寄付の機能では、suggestedDonation 変数を作成したり、新しい寄付データに対応する ourAnimals 配列を拡張したりする必要があります。 また、各動物に対して推奨される寄付金額を追加し、推奨される寄付の情報がない場合は既定の金額を実装する必要があります。

推奨される寄付のデータのサポートを追加する

推奨される寄付を保持するための新しい変数を作成し、新しいデータを保持するための ourAnimals 配列を拡張する必要があります。

  1. コメント #1 の下のコードで、各動物の ourAnimals 配列の設定に使用される変数が宣言されていることに注目してください。

    推奨される寄付のデータに対して別の string データを宣言する必要があります。

    // #1 the ourAnimals array will store the following: 
    string animalSpecies = "";
    string animalID = "";
    string animalAge = "";
    string animalPhysicalDescription = "";
    string animalPersonalityDescription = "";
    string animalNickname = "";
    
  2. animalNickname の宣言の下に suggestedDonation 変数を作成します。

    suggestedDonation の宣言を、次のコードで追加します。

    string suggestedDonation = "";
    
  3. コメント # 3 の後の ourAnimals 配列を作成するコードを見つけます。

    次のコード行で、配列が作成されます。

    string[,] ourAnimals = new string[maxPets, 6];

    配列の 2 つの次元を定義するサイズは、ペットの最大数 maxPets と、最初に定義された 6 つの文字列の数 6 ですが、新しい suggestedDonation データのスペースはありません。

  4. 6 の代わりに、各動物のデータの 7 "列" を保持するように ourAnimals 配列を更新します。

    次の行は、更新されたコードを示しています。

    string[,] ourAnimals = new string[maxPets, 7];

    追加されたourAnimals データをサポートするために、suggestedDonation配列を展開しました。

サンプル データに suggestedDonation の金額を追加する

  1. 少し時間を取って、コメント #4 の後の switch ステートメント内の case 0: を確認してください。

    次のコードは suggestedDonation データが作成される前の最初のペットのサンプル データを定義しています。 animalNickname の下にうまく収まります。

        case 0:
            animalSpecies = "dog";
            animalID = "d1";
            animalAge = "2";
            animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.";
            animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.";
            animalNickname = "lola";
            break;
    
  2. break の上に、case 0; から default:suggestedDonation の値を、次の値で挿入します。

    • ケース 0: suggestedDonation = "85.00";
    • ケース 1: suggestedDonation = "49.99";
    • ケース 2: suggestedDonation = "40.00";
    • ケース 3: suggestedDonation = "";
    • 既定値: suggestedDonation = "";

    次のコードは、'suggestedDonation' を追加した case 0: コードを示しています。

        case 0:
            animalSpecies = "dog";
            animalID = "d1";
            animalAge = "2";
            animalPhysicalDescription = "medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.";
            animalPersonalityDescription = "loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.";
            animalNickname = "lola";
            suggestedDonation = "85.00";
            break;
    
  3. project.cs ファイルで、case ステートメントからペット データが設定された次の配列を見つけます (コメント #5 の直前です)。

        ourAnimals[i, 0] = "ID #: " + animalID;
        ourAnimals[i, 1] = "Species: " + animalSpecies;
        ourAnimals[i, 2] = "Age: " + animalAge;
        ourAnimals[i, 3] = "Nickname: " + animalNickname;
        ourAnimals[i, 4] = "Physical description: " + animalPhysicalDescription;
        ourAnimals[i, 5] = "Personality: " + animalPersonalityDescription;
    
  4. 配列を設定するためのサンプル データ スターター コードの一部として suggestedDonation データが含まれていないことに注目してください。

    配列に次のようなステートメントを設定することが理にかなっています。

    ourAnimals[i, 6] = "Suggested Donation: "  + suggestedDonation;
    

    ただし、そのコードは追加しません。 次のセクションでは、別の方法を使用します。

TryParse() によるデータの検証

変数 suggestedDonation は数値を想定していますが、string として収集され、格納されています。 今後、 suggestedDonation が 10 進数を表し、それを 10 進数に変換して、課金計算に使用できることを検証する必要がある場合を考えてみましょう。 ユーザーが twentyなどのテキスト形式で数値を入力するときのエラーを回避するには、 TryParse 検証を使用する必要があります。

この演習のコード サンプルは、米国 (en-US) のカルチャ設定に基づいて設計されており、小数点の記号としてピリオド (.) を使用します。 別の小数点区切り記号 (コンマ ,など) を使用するカルチャ設定を使用してコードをビルドして実行すると、予期しない結果やエラーが発生することがあります。 この問題を修正するには、コード サンプルの小数点のピリオドをお使いのローカルの小数点 (, など) に置き換えます。 または、en-US カルチャ設定を使用してプログラムを実行するには、プログラムの先頭に using System.Globalization;追加します。 その他の using ステートメントの後に、 CultureInfo.CurrentCulture = new CultureInfo("en-US");を追加します。

  1. コメント #5 の前のコード ブロックの末尾に、suggestedDonation を 10 進数としてキャストできることを検証するコードを追加します。

    次のコードを追加します。

    if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
        decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
    }
    

    suggestedDonation変数をdecimalとしてキャストできない場合、コードは既定値をdecimalDonation = 45.00m;割り当てます。 キャストできる場合は、TryParse によってdecimalDonation が設定されます。 いずれにしても、decimalDonation は適切な 10 進数を表します。

  2. 検証コードが適切な場所にあることを確認してください。

    追加した 2 行は、次のコードの上位 2 行としてコードに表示されます。

        if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
            decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
        }
    }
    
    // #5 display the top-level menu options
    

    検証はやはり機能しません。 コードで decimalDonation を使用するには、それを宣言する必要があることを忘れないでください。

  3. コメント #2 の後で、string menuSelection = ""; の後に decimalDonation を宣言します。

    decimal decimalDonation = 0.00m;
    

    ようやく、各ペットの suggestedDonation データを設定する準備ができました。

  4. コメント #5 の前で、入力した TryParse の右角かっこ } のすぐ後に、次のコードを追加します。

    ourAnimals[i, 6] = $"Suggested Donation: {decimalDonation:C2}";
    

    推奨される寄付のデータの decimalDonation バージョンを使用しました。 出力で文字列補間と通貨書式も使用しました。

  5. 少し時間を取って、推奨される寄付のデータが最終的に ourAnimals 配列にどのように収まるかを確認してください。

    次のコードは、TryParse() のコンテキストで ourAnimals 配列を設定しています。

    if (!decimal.TryParse(suggestedDonation, out decimalDonation)){
        decimalDonation = 45.00m; // if suggestedDonation NOT a number, default to 45.00
        }
    ourAnimals[i, 6] = $"Suggested Donation: {decimalDonation:C2}";
    }
    
    // #5 display the top-level menu options
    

    {decimalDonation:C2}コードを使用すると、decimalDonationからの推奨寄付が現地通貨記号と小数点以下2桁で表示されます。これは通貨書式:C2の指示に従ったものです。

ourAnimals 配列を使用する場所を確認して更新する

作成された suggestedDonation データを追加するには、さらに更新する必要があります。 メニュー オプション "1. List all of our current pet information" には追加されたデータがありません。

  1. case 1 内のメニュー ループで、コメント #5 の下のコードに注目してください。

    ペットの属性を出力する内部ループ "for (int j = 0; j < 6; j++)" は、追加されたsuggestedDonation データを考慮する必要があります。

  2. 内部ループ コードの終了条件を更新します。 終了条件を "1" 増やしたので、 j <7になります。 コードが次のコードと一致することを確認します。

    case "1":
    // list all pet info
    for (int i = 0; i < maxPets; i++)
    {
        if (ourAnimals[i, 0] != "ID #: ")
        {
            Console.WriteLine();
            for (int j = 0; j < 7; j++) // increased exit condition
            {
                Console.WriteLine(ourAnimals[i, j]);
            }
        }
    }
    

テストの概要

いくつかのコードが追加されたので、コードが期待どおりに動作することを確認する必要があります。 重要なテスト領域は次の 2 つです。

  1. コードがエラーなしにコンパイルされる。

  2. メニュー オプション 1 を選択すると、すべてのペット情報が表示される。

    • 出力に、ID、種、年齢、ニックネーム、身体的な説明、性格的な説明など、すべてのサンプル ペット情報が含まれている。
    • 各ペットについて、推奨される寄付が小数点以下 2 桁の精度で、通貨記号とともに表示される。

作業を確認する

コードをビルドしてテスト実行します。 コードをテストする必要があるたびに、これらの手順を使用してください。

  1. Visual Studio Code の [ファイル] メニューで、[保存] を選びます。

  2. エクスプローラー ビューで "Starter" を右クリックし、[統合ターミナルで開く] を選択します。

    コード エディター領域の下にターミナル パネルが開きます。

    Visual Studio Code の統合ターミナルを開くには、いくつかの方法があります。 たとえば、上部のメニューでは、[表示] メニューと [ターミナル] メニューの両方からターミナル パネルにアクセスできます。 また、ターミナル パネルを開くキーボード ショートカットは、コーディング効率を高めるための貴重なオプションです。 それぞれの方法を使用できます。

  3. ターミナル パネルにコマンド ライン プロンプトが含まれており、プロンプトに現在のフォルダー パスが表示されていることに注目してください。 例:

    C:\Users\someuser\Desktop\GuidedProject\Starter>
    

    ターミナル パネルを使用して、dotnet builddotnet run などのコマンド ライン インターフェイス (CLI) コマンドを実行できます。 dotnet build コマンドによってコードがコンパイルされ、コード構文に関連したエラーと警告のメッセージが表示されます。

    重要

    ターミナル コマンド プロンプトが開かれていて、プロジェクト ワークスペースのルートが示されていることを確認する必要があります。 ここでは、プロジェクト ワークスペースのルートは Starter フォルダーであり、そこに Starter.csproj および Program.cs ファイルが置かれています。 ターミナルでコマンドを実行すると、コマンドは現在のフォルダーの場所を使用してアクションを実行しようとします。 ファイルを含まないフォルダーの場所から dotnet build または dotnet run コマンドを実行しようとすると、コマンドによってエラー メッセージが生成されます。

  4. プロジェクト コードをビルドするには、ターミナルのコマンド プロンプトで、コマンド dotnet build を入力します。

    数秒後に、ビルドが成功し、 0 Warnings and 0 Errorsしたことを示すメッセージが表示されます。

    Determining projects to restore...
    All projects are up-to-date for restore.
    Starter -> C:\Users\someuser\Desktop\GuidedProject\Starter\bin\Debug\net6.0\Starter.dll
    
    Build succeeded.
        0 Warning(s)
        0 Error(s)
    

    このモジュールの演習でコードをテストする必要があるたびに、前の dotnet builddotnet run の手順を使用します。

  5. エラー メッセージまたは警告メッセージが表示された場合は、続行する前に修正する必要があります。

    エラーと警告のメッセージには、問題が見つかったコード行が一覧表示されます。 次のメッセージは、Build FAILED エラー メッセージの例です。

    C:\Users\someuser\Desktop\GuidedProject\Starter\Program.cs(53,18): error CS1002: ; expected [C:\Users\someuser\Desktop\GuidedProject\Starter\Starter.csproj]

    このメッセージは、検出されたエラーの種類と、それがどこに出現しているかを示しています。 ここでは、メッセージは Program.cs ファイルに error CS1002: ; expected エラーが含まれていることを示しています。 ; expected は、ステートメントの末尾に ; を含めるのを忘れたことを示唆しています。 メッセージの Program.cs(53,18) の部分は、エラーがコード行 53 の左から 18 文字の位置にあることを示します。

    このような構文エラーがあると、ビルド成功の妨げになります (ビルド失敗)。 一部のビルド メッセージでは、"エラー" ではなく "警告" が表示されます。これは、問題が発生したことを意味しますが、プログラムの実行を試すことができます (Build succeeded)。

    問題を修正して更新プログラムを保存したら、 dotnet build コマンドをもう一度実行できます。 0 Warning(s) and 0 Error(s) となるまで続けます。

    自分で問題を解決できない場合は、セットアップ中に完了したダウンロードに含まれる Final フォルダーのProgram.cs コードを調べます。 Final フォルダーのProgram.cs コードは、このモジュールのすべての演習の結論を表しているため、まだ作成していないコードが含まれています。

    ソリューション コードは、多くの場合、ガイド付きプロジェクトのこの時点まで開発したProgram.cs コードとは異なって見えます。 ただし、Final のProgram.cs コードを調べて、コード内の問題を特定して修正することができます。

    独自のソリューションを開発するときに、ソリューション コードに依存しないようにします。 自分の間違いから学ぶものであり、どんな開発者もエラーの検出と修正に時間をかけているものです。

  6. ターミナル コマンド プロンプトで 1 つのコマンド「dotnet run」を入力することにより、プロジェクト コードをビルドして実行し、更新されたコンソール アプリをテストします。 コードを実行すると、2 つのメニュー項目が表示されます。

    • "すべてのペットを表示する" 出力をテストするには、「1」と入力します
    • プレースホルダー メッセージ "作成中" メッセージをテストするには、「2」と入力します

    メニュー項目 #1 の出力は、次のサンプルとほぼ同じものになるはずです。

    ID #: d1
    Species: dog
    Age: 2
    Nickname: lola
    Physical description: medium sized cream colored female golden retriever weighing about 45 pounds. housebroken.
    Personality: loves to have her belly rubbed and likes to chase her tail. gives lots of kisses.
    Suggested Donation: $85.00
    
    ID #: d2
    Species: dog
    Age: 9
    Nickname: gus
    Physical description: large reddish-brown male golden retriever weighing about 85 pounds. housebroken.
    Personality: loves to have his ears rubbed when he greets you at the door, or at any time! loves to lean-in and give doggy hugs.
    Suggested Donation: $49.99
    
    ID #: c3
    Species: cat
    Age: 1
    Nickname: snow
    Physical description: small white female weighing about 8 pounds. litter box trained.
    Personality: friendly
    Suggested Donation: $40.00
    
    ID #: c4
    Species: cat
    Age:
    Nickname: lion
    Physical description:
    Personality:
    Suggested Donation: $45.00
    

    すべてが期待どおりに機能した場合は、おめでとうございます。 それ以外の場合は、関連するコード命令ステップを確認してエラーを探します。 必要に応じて、新しいスターター Project.cs ファイルでやり直します。それでも問題が解決しない場合は、この演習のソリューション フォルダー コードを確認してください。

  7. アプリ メニューで「exit」と入力してプログラムを終了し、ターミナル パネルを閉じてください。