復習:学生記録システム
CoddyのPHPジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 43/91。
チャレンジ
簡単この章で学んだすべてのカプセル化の概念を統合した、学生記録システムを構築しましょう。コンストラクタのプロパティ昇格、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()— クラスルーム名を返します
- コンストラクタのプロパティ昇格を使用して、privateな
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位までフォーマットされたクラス平均を出力する
?>