Menu
Coddy logo textTech

まとめ:学生レコード

CoddyのC#ジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 35/70。

challenge icon

チャレンジ

簡単

この章で学んだすべてのカプセル化技術を統合した、学生記録システムを構築しましょう。学生データが適切に保護され、成績が検証され、特定の情報が作成後に不変のまま維持される、安全なシステムを作成します。

コードは2つのファイルに分けて構成します:

  • Student.cs: Records名前空間内に、適切なカプセル化を実証するStudentクラスを作成します。学生クラスには以下の要素を含める必要があります:
    • 公開アクセス可能だが、コンストラクタでのみ設定可能なreadonlyフィールド Name (string)
    • 学生ID用のプライベートなreadonlyフィールド (string) - これは外部から直接アクセスできないようにする必要があります
    • 成績(整数)を保存するためのプライベートなリスト
    • すべての成績の平均を計算して返す、公開の読み取り専用プロパティ Average。成績が存在しない場合は0を返します
    • 0から100(両端を含む)の間の成績のみを受け入れる公開メソッド AddGrade(int grade)。無効な成績は黙って無視される必要があります
    • 記録された有効な成績の数を返す公開メソッド GetGradeCount()
    • "{Name} (ID: {last 4 characters of student ID})"という形式の文字列を返す公開メソッド GetStudentInfo()。IDのマスクされたバージョンのみを公開している点に注目してください!
    コンストラクタは、名前、学生IDの順で引数を受け取る必要があります。
  • Program.cs: メインファイルで、学生を作成し、いくつかの成績を追加して、カプセル化がどのように機能するかを実証します。有効な成績が受け入れられ、無効な成績が拒否され、平均が正しく計算されることを示します。

5つの入力を受け取ります:

  • 学生の名前
  • 学生ID(少なくとも4文字以上)
  • 追加する1つ目の成績(整数)
  • 追加する2つ目の成績(整数、-5や150のような無効な値の可能性があります)
  • 追加する3つ目の成績(整数)

出力を以下の形式で表示してください:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

例えば、入力が Emma WilsonSTU123458515090 の場合、出力は以下のようになります:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

無効な成績である 150 が黙って拒否されたため、2つの成績のみが記録されていることに注目してください。学生IDは保護されており、外部のコードは完全なIDを見ることはできず、GetStudentInfo() を通じてマスクされたバージョンのみを見ることができます。名前は読み取り可能ですが不変です。これが、堅牢で十分に保護されたクラスを作成するために連携するカプセル化の力です!

自分で試してみよう

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // 入力を読み込む
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: name と studentId を使用して Student オブジェクトを作成する

        // TODO: AddGrade メソッドを使用して3つの成績すべてを追加する

        // TODO: 必要な形式で出力を表示する:
        // {GetStudentInfo() の結果}
        // 記録された成績: {GetGradeCount()}
        // 平均: {Average}
    }
}

オブジェクト指向プログラミングのすべてのレッスン