Menu
CoddyTech

Ringkasan: Data Siswa

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan GO di Coddy. Pelajaran 51 dari 107.

challenge icon

Tantangan

Mudah

Mari buat sistem Catatan Siswa yang menunjukkan enkapsulasi yang tepat. Kamu akan membuat struktur pengelolaan siswa yang melindungi data akademik sensitif, sekaligus menyediakan akses terkontrol melalui method yang dirancang dengan baik.

Kamu akan mengatur kodemu dalam dua file:

  • student.go: Buat struct Student yang melindungi informasi sensitif sekaligus mengekspos data publik yang aman. Name siswa harus diekspor (dapat diakses secara publik), tetapi grade (float64) dan studentID (string) harus tidak diekspor untuk melindungi informasi sensitif ini.

    Implementasikan hal-hal berikut:

    • Konstruktor NewStudent(name, id string, initialGrade float64) *Student yang membuat siswa. Nilai awal grade hanya boleh ditetapkan jika berada di antara 0 dan 100 (inklusif); jika tidak, gunakan nilai default 0.
    • Getter Grade() float64 yang mengembalikan grade saat ini
    • Getter StudentID() string yang mengembalikan ID siswa
    • Setter SetGrade(newGrade float64) bool yang memperbarui grade hanya jika nilai baru berada di antara 0 dan 100 (inklusif). Kembalikan true jika grade berhasil diperbarui, dan false jika tidak.
    • Method Summary() string yang mengembalikan format: [Name] (ID: [studentID]) - Grade: [grade]
  • main.go: Baca informasi siswa dari input, buat siswa menggunakan konstruktor, lalu lakukan operasi grade. Tampilkan ringkasan siswa setelah pembuatan dan setelah setiap upaya pembaruan grade.

Input berikut akan diberikan:

  • Baris 1: Nama siswa
  • Baris 2: ID siswa
  • Baris 3: Grade awal
  • Baris 4: Grade baru pertama yang akan ditetapkan
  • Baris 5: Grade baru kedua yang akan ditetapkan

Setelah membuat siswa, cetak ringkasannya. Lalu coba setiap pembaruan grade. Jika berhasil, cetak ringkasan yang sudah diperbarui; jika ditolak, cetak Invalid grade rejected. Format semua nilai grade dengan dua angka di belakang koma.

Misalnya, jika inputnya Emma Wilson, STU001, 85.5, 92.0, dan 150, outputmu seharusnya:

Emma Wilson (ID: STU001) - Grade: 85.50
Emma Wilson (ID: STU001) - Grade: 92.00
Invalid grade rejected

Pembaruan terakhir gagal karena 150 berada di luar rentang yang valid. Method setter-mu menerapkan aturan ini agar data siswa tetap valid. Perhatikan bahwa studentID dan grade tidak pernah dapat diakses secara langsung: kode eksternal harus menggunakan method getter dan setter-mu untuk berinteraksi dengan data yang dilindungi ini.

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
	"strings"
)

func main() {
	reader := bufio.NewReader(os.Stdin)

	// Baca nama siswa
	name, _ := reader.ReadString('\n')
	name = strings.TrimSpace(name)

	// Baca ID siswa
	id, _ := reader.ReadString('\n')
	id = strings.TrimSpace(id)

	// Baca nilai awal
	initialGradeStr, _ := reader.ReadString('\n')
	initialGrade, _ := strconv.ParseFloat(strings.TrimSpace(initialGradeStr), 64)

	// Baca nilai baru pertama
	newGrade1Str, _ := reader.ReadString('\n')
	newGrade1, _ := strconv.ParseFloat(strings.TrimSpace(newGrade1Str), 64)

	// Baca nilai baru kedua
	newGrade2Str, _ := reader.ReadString('\n')
	newGrade2, _ := strconv.ParseFloat(strings.TrimSpace(newGrade2Str), 64)

	// TODO: Buat siswa baru menggunakan konstruktor NewStudent

	// TODO: Cetak ringkasan siswa setelah dibuat

	// TODO: Coba perbarui nilai untuk pertama kalinya
	// Jika berhasil, cetak ringkasan yang sudah diperbarui
	// Jika ditolak, cetak "Invalid grade rejected"

	// TODO: Coba perbarui nilai untuk kedua kalinya
	// Jika berhasil, cetak ringkasan yang sudah diperbarui
	// Jika ditolak, cetak "Invalid grade rejected"

	// Petunjuk: Gunakan fmt.Sprintf dengan %.2f untuk memformat nilai di Summary()
	_ = newGrade1 // Hapus baris ini saat kamu menggunakan variabel tersebut
	_ = newGrade2 // Hapus baris ini saat kamu menggunakan variabel tersebut
}

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler Go online