Menu
CoddyTech

Ulasan: Sistem Catatan Siswa

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan PHP di Coddy. Pelajaran 43 dari 91.

challenge icon

Tantangan

Mudah

Mari kita bangun Sistem Data Siswa yang menggabungkan semua konsep enkapsulasi yang telah kamu pelajari di bab ini. Kamu akan membuat sistem yang tertata dengan baik untuk mengelola data siswa secara aman, menggunakan promosi konstruktor, property privat, getter dan setter dengan validasi, serta penyembunyian informasi.

Kamu akan menyusun kodemu dalam tiga file:

  • Student.php: Buat class Student menggunakan promosi konstruktor untuk $name privat (string) dan $studentId privat (string). Sertakan juga property array $grades privat (diinisialisasi sebagai array kosong). Siswa tersebut harus memiliki:
    • getName(): mengembalikan nama siswa
    • getStudentId(): mengembalikan ID siswa
    • addGrade(int $grade): menambahkan nilai hanya jika berada di antara 0 dan 100 (inklusif)
    • getAverage(): mengembalikan rata-rata semua nilai sebagai float (mengembalikan 0.0 jika tidak ada nilai)
    • getGradeCount(): mengembalikan jumlah nilai yang tercatat
  • Classroom.php: Buat class Classroom yang mengelola kumpulan siswa. Gunakan array privat untuk menyimpan siswa. Sertakan file Student. Class Classroom harus memiliki:
    • Konstruktor yang menerima $roomName privat (string) menggunakan promosi konstruktor
    • addStudent(Student $student): menambahkan siswa ke classroom
    • getStudentCount(): mengembalikan jumlah siswa yang terdaftar
    • getClassAverage(): menghitung rata-rata dari rata-rata semua siswa (mengembalikan 0.0 jika tidak ada siswa atau nilai)
    • getRoomName(): mengembalikan nama classroom
  • main.php: Sertakan file Classroom. Kamu akan menerima lima input: nama ruangan, nama siswa, ID siswa, dan dua nilai. Buat Classroom dengan nama ruangan tersebut. Buat Student dengan nama dan ID, tambahkan kedua nilai (yang dikonversi menjadi integer), lalu tambahkan siswa tersebut ke classroom. Cetak empat baris:
    • Nama ruangan
    • Nama siswa diikuti rata-ratanya dengan format 1 angka desimal: "[name]: [average]"
    • Jumlah nilai siswa tersebut
    • Rata-rata kelas dengan format 1 angka desimal

Sistem ini menunjukkan enkapsulasi yang tepat: nilai terlindungi dari perubahan langsung, rata-rata dihitung secara internal tanpa menampilkan data mentah, dan semua data mengalir melalui method yang terkendali. Classroom tidak perlu tahu cara siswa menghitung rata-rata mereka. Classroom cukup meminta hasilnya.

Coba sendiri

<?php

require_once 'Classroom.php';

// Baca input
$roomName = trim(fgets(STDIN));
$studentName = trim(fgets(STDIN));
$studentId = trim(fgets(STDIN));
$grade1 = intval(trim(fgets(STDIN)));
$grade2 = intval(trim(fgets(STDIN)));

// TODO: Buat Classroom dengan nama ruangannya

// TODO: Buat Student dengan nama dan ID-nya

// TODO: Tambahkan kedua nilai ke Student

// TODO: Tambahkan Student ke Classroom

// TODO: Cetak nama ruangan

// TODO: Cetak nama Student, lalu rata-ratanya dengan 1 angka di belakang koma: "[name]: [average]"

// TODO: Cetak jumlah nilai untuk Student tersebut

// TODO: Cetak rata-rata class dengan 1 angka di belakang koma

?>

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler PHP online