Student Grader Program with Object-Oriented Programming

Contents

Student Grader Program with Object-Oriented Programming#

Pada tutorial kali ini, kamu akan membuat program kalkulator nilai siswa menggunakan pemrograman berbasis objek.

Kita akan membuat kelas Siswa untuk merepresentasikan setiap siswa dengan methods berikut:

  1. __init__ menginisialisasi objek Siswa dengan nama dan nomor induk.

  2. tambah_nilai memungkinkan penambahan nilai untuk mata pelajaran yang berbeda.

  3. hitung_nilai_rata_rata menghitung rata-rata dari semua nilai.

  4. dapatkan_nilai_huruf mengkonversi nilai numerik menjadi nilai huruf.

  5. tampilkan_rapor menampilkan rapor lengkap untuk siswa.

class Siswa:
    def __init__(self, nama, nomor_induk):
        """
        Inisialisasi objek Siswa.

        Parameter:
        - nama (str): Nama siswa
        - nomor_induk (str): Nomor induk siswa
        """
        self.nama = nama
        self.nomor_induk = nomor_induk
        self.nilai = {}
        self.nilai_rata_rata = None

    def tambah_nilai(self, mata_pelajaran, skor):
        """
        Menambahkan nilai untuk mata pelajaran tertentu.

        Parameter:
        - mata_pelajaran (str): Nama mata pelajaran
        - skor (float): Nilai yang diperoleh (0-100)
        """
        if 0 <= skor <= 100:
            self.nilai[mata_pelajaran] = skor
        else:
            print(
                f"Nilai tidak valid untuk {mata_pelajaran}. Nilai harus antara 0 dan 100."
            )

    def hitung_nilai_rata_rata(self):
        """
        Menghitung nilai rata-rata dari semua mata pelajaran.
        """
        if self.nilai:
            self.nilai_rata_rata = sum(self.nilai.values()) / len(self.nilai)
        else:
            self.nilai_rata_rata = None

    def dapatkan_nilai_huruf(self):
        """
        Mengkonversi nilai rata-rata numerik menjadi nilai huruf.

        Mengembalikan:
        - str: Nilai huruf (A, B, C, D, atau E)
        """
        if self.nilai_rata_rata is None:
            return "Belum ada nilai"
        elif self.nilai_rata_rata >= 90:
            return "A"
        elif self.nilai_rata_rata >= 80:
            return "B"
        elif self.nilai_rata_rata >= 70:
            return "C"
        elif self.nilai_rata_rata >= 60:
            return "D"
        else:
            return "E"

    def tampilkan_rapor(self):
        """
        Menampilkan rapor lengkap untuk siswa.
        """
        print(f"\nRapor Siswa untuk {self.nama} (NIS: {self.nomor_induk})")
        print("Nilai Mata Pelajaran:")
        for mata_pelajaran, nilai in self.nilai.items():
            print(f"{mata_pelajaran}: {nilai}")
        self.hitung_nilai_rata_rata()
        print(f"\nNilai Rata-rata: {self.nilai_rata_rata:.2f}")
        print(f"Nilai Huruf: {self.dapatkan_nilai_huruf()}")

Selanjutnya, kita bisa meng-instansiasi objek Siswa pada program kita:

siswa1 = Siswa("Luna", "S12345")

# Menambahkan nilai untuk berbagai mata kuliah
siswa1.tambah_nilai("Matematika", 95)
siswa1.tambah_nilai("Bahasa Inggris", 98)
siswa1.tambah_nilai("Kecerdasan Buatan", 90)
siswa1.tambah_nilai("Pemrosesan Bahasa Alami", 92)

# Menampilkan rapor siswa
siswa1.tampilkan_rapor()
Rapor Siswa untuk Luna (NIS: S12345)
Nilai Mata Pelajaran:
Matematika: 95
Bahasa Inggris: 98
Kecerdasan Buatan: 90
Pemrosesan Bahasa Alami: 92

Nilai Rata-rata: 93.75
Nilai Huruf: A

Inheritance#

Pada bagian selanjutnya, kita akan menambahkan konsep pewarisan pada program kita.

Kita akan membuat kelas baru, yaitu SiswaBeasiswa yang mewarisi kelas Siswa dan memiliki atribut dan fitur tambahan.

class SiswaBeasiswa(Siswa):
    def __init__(self, nama, nomor_induk, jenis_beasiswa):
        """
        Inisialisasi objek SiswaBeasiswa.

        Parameter:
        - nama (str): Nama siswa
        - nomor_induk (str): Nomor induk siswa
        - jenis_beasiswa (str): Jenis beasiswa yang diterima
        """
        super().__init__(nama, nomor_induk)  # Memanggil konstruktor kelas induk
        self.jenis_beasiswa = jenis_beasiswa
        self.syarat_nilai_minimum = 80

    def cek_kelayakan_beasiswa(self):
        """
        Memeriksa apakah siswa masih layak menerima beasiswa.

        Mengembalikan:
        - bool: True jika layak, False jika tidak
        """
        self.hitung_nilai_rata_rata()
        return self.nilai_rata_rata >= self.syarat_nilai_minimum

    def tampilkan_rapor(self):
        """
        Menampilkan rapor lengkap untuk siswa beasiswa.
        Override metode dari kelas induk.
        """
        super().tampilkan_rapor()  # Memanggil metode kelas induk
        print(f"Jenis Beasiswa: {self.jenis_beasiswa}")
        if self.cek_kelayakan_beasiswa():
            print("Status Beasiswa: Layak")
        else:
            print("Status Beasiswa: Tidak Layak")
# Membuat siswa beasiswa
siswa_beasiswa1 = SiswaBeasiswa("Aurora", "S67890", "Beasiswa Prestasi")
siswa_beasiswa1.tambah_nilai("Matematika", 100)
siswa_beasiswa1.tambah_nilai("Bahasa Inggris", 100)
siswa_beasiswa1.tambah_nilai("Kecerdasan Buatan", 95)
siswa_beasiswa1.tambah_nilai("Pemrosesan Bahasa Alami", 95)
siswa_beasiswa1.tampilkan_rapor()
Rapor Siswa untuk Aurora (NIS: S67890)
Nilai Mata Pelajaran:
Matematika: 100
Bahasa Inggris: 100
Kecerdasan Buatan: 95
Pemrosesan Bahasa Alami: 95

Nilai Rata-rata: 97.50
Nilai Huruf: A
Jenis Beasiswa: Beasiswa Prestasi
Status Beasiswa: Layak