Menu
Coddy logo textTech

復習 - 学生記録システム

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

challenge icon

チャレンジ

簡単

この章で学んだすべてのカプセル化の概念を組み合わせた Student Records System を構築しましょう。constructor promotion、private プロパティ、検証付きの getter と setter、情報隠蔽を使用して、学生データを安全に管理する、整理されたシステムを作成します。

コードを3つのファイルに分けて整理します。

  • Student.php:constructor promotion を使用して、private な $name(string)と private な $studentId(string)を持つ Student class を作成します。また、private な $grades array プロパティ(empty として initialized)も含めます。Student には次の機能を持たせます。
    • getName():学生の名前を返す
    • getStudentId():学生 ID を返す
    • addGrade(int $grade):grade が 0 以上 100 以下(inclusive)の場合のみ追加する
    • getAverage():すべての grade の average を float として返す(grade が存在しない場合は 0.0 を返す)
    • getGradeCount():記録された grade の数を返す
  • Classroom.php:学生のコレクションを管理する Classroom class を作成します。学生を格納するために private array を使用します。Student ファイルを include します。Classroom には次の機能を持たせます。
    • constructor promotion を使用して、private な $roomName(string)を受け取る constructor
    • addStudent(Student $student):学生を Classroom に追加する
    • getStudentCount():enrolled している学生の数を返す
    • getClassAverage():すべての学生の average の average を calculates する(学生がいない、または grade がない場合は 0.0 を返す)
    • getRoomName():Classroom の名前を返す
  • main.php:Classroom ファイルを include します。room name、student name、student ID、および2つの grade values、合計5つの inputs を受け取ります。room name を使って Classroom を Create します。name と ID を使って Student を Create し、両方の grades(int に converted)を add してから、その student を classroom に add します。4行を Print します。
    • room name
    • 学生の name に続けて、average を小数点以下1桁に formatted したもの:"[name]: [average]"
    • その student の grades の数
    • 小数点以下1桁に formatted した class average

このシステムは、適切なカプセル化を示しています。grades は直接操作から保護され、averages は raw data を公開せずに内部で calculates され、すべての data は制御された methods を通して流れます。Classroom は、学生がどのように averages を calculates するかを知る必要がありません。結果を尋ねるだけです。

自分で試してみよう

<?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桁にフォーマットしたクラス平均を出力する

?>

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

自分で練習してみよう: PHPオンラインコンパイラ