Menu
Coddy logo textTech

요약 - 학생 기록 시스템

Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 43번째.

challenge icon

챌린지

쉬움

이 장에서 배운 모든 캡슐화 개념을 통합하는 학생 기록 시스템(Student Records System)을 구축해 보겠습니다. 생성자 프로모션(constructor promotion), private 속성, 유효성 검사가 포함된 getter 및 setter, 그리고 정보 은닉을 사용하여 학생 데이터를 안전하게 관리하는 잘 조직된 시스템을 만들 것입니다.

코드는 다음 세 개의 파일로 구성됩니다:

  • 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 파일을 포함(include)해야 합니다. 강의실 클래스는 다음을 포함해야 합니다:
    • 생성자 프로모션을 사용하여 private $roomName (string)을 받는 생성자
    • addStudent(Student $student) — 강의실에 학생을 추가합니다.
    • getStudentCount() — 등록된 학생 수를 반환합니다.
    • getClassAverage() — 모든 학생의 평균 점수에 대한 평균을 계산합니다 (학생이 없거나 성적이 없으면 0.0을 반환합니다).
    • getRoomName() — 강의실 이름을 반환합니다.
  • main.php — Classroom 파일을 포함하세요. 강의실 이름, 학생 이름, 학생 ID, 그리고 두 개의 성적 값까지 총 다섯 개의 입력을 받게 됩니다. 강의실 이름으로 Classroom 객체를 생성하세요. 이름과 ID로 Student 객체를 생성하고, 두 성적을 (정수로 변환하여) 추가한 다음, 해당 학생을 강의실에 추가하세요. 다음 네 줄을 출력하세요:
    • 강의실 이름
    • 학생의 이름 뒤에 소수점 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: 학생의 이름과 소수점 첫째 자리까지 형식화된 평균 점수 출력: "[name]: [average]"

// TODO: 해당 학생의 성적 개수 출력

// TODO: 강의실 평균 점수를 소수점 첫째 자리까지 형식화하여 출력

?>

객체 지향 프로그래밍의 모든 레슨