Menu
Coddy logo textTech

復習:学生記録システム

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

challenge icon

チャレンジ

簡単

この章で学んだすべてのカプセル化の概念を統合した、学生記録システムを構築しましょう。コンストラクタのプロパティ昇格、privateプロパティ、バリデーション付きのゲッターとセッター、そして情報の隠蔽を使用して、学生データを安全に管理する、整理されたシステムを作成します。

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

  • Student.php — コンストラクタのプロパティ昇格を使用して、privateな $name (string) と privateな $studentId (string) を持つ Student クラスを作成します。また、privateな $grades 配列プロパティ(空で初期化)も含めてください。学生クラスには以下のメソッドが必要です:
    • getName() — 学生の名前を返します
    • getStudentId() — 学生IDを返します
    • addGrade(int $grade) — 成績が0から100(両端を含む)の間である場合のみ、成績を追加します
    • getAverage() — すべての成績の平均を float として返します(成績が存在しない場合は 0.0 を返します)
    • getGradeCount() — 記録された成績の数を返します
  • Classroom.php — 学生のコレクションを管理する Classroom クラスを作成します。学生を保存するために private な配列を使用します。Student ファイルをインクルードしてください。クラスルームクラスには以下のメソッドが必要です:
    • コンストラクタのプロパティ昇格を使用して、privateな $roomName (string) を受け取るコンストラクタ
    • addStudent(Student $student) — クラスルームに学生を追加します
    • getStudentCount() — 登録されている学生の数を返します
    • getClassAverage() — すべての学生の平均の平均を計算します(学生がいない、または成績がない場合は 0.0 を返します)
    • getRoomName() — クラスルーム名を返します
  • main.php — Classroom ファイルをインクルードしてください。5つの入力(クラスルーム名、学生名、学生ID、および2つの成績の値)を受け取ります。クラスルーム名で Classroom を作成します。名前とIDで Student を作成し、両方の成績(整数に変換)を追加してから、その学生をクラスルームに追加します。以下の4行を出力してください:
    • クラスルーム名
    • 学生の名前と、小数点第1位までフォーマットされた平均: "[name]: [average]"
    • その学生の成績の数
    • 小数点第1位までフォーマットされたクラス平均

このシステムは適切なカプセル化を実証しています。成績は直接の操作から保護され、平均は生データを公開することなく内部で計算され、すべてのデータは制御されたメソッドを通じて流れます。クラスルームは学生がどのように平均を計算するかを知る必要はなく、単に結果を要求するだけです。

自分で試してみよう

<?php

require_once 'Classroom.php';

// 入力を読み込む
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: 教室名を使用してClassroomを作成する

// TODO: 名前とIDを使用してStudentを作成する

// TODO: 両方の成績を生徒に追加する

// TODO: 生徒を教室に追加する

// TODO: 教室名を出力する

// TODO: 生徒の名前と、小数点第1位までフォーマットされた平均点を出力する: "[name]: [average]"

// TODO: その生徒の成績の数を出力する

// TODO: 小数点第1位までフォーマットされたクラス平均を出力する

?>

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