Rangkuman, Sistem Catatan Siswa
Termasuk bagian Pemrograman Berorientasi Object dalam perjalanan C++ di Coddy. Pelajaran 39 dari 104.
Saatnya menerapkan pengetahuanmu tentang enkapsulasi! Dalam tantangan ini, kamu akan membangun Sistem Data Siswa yang menunjukkan penggunaan penentu akses, penyembunyian informasi, dan class bersarang yang tepat.
Sistemmu akan mengelola data siswa dengan prinsip-prinsip enkapsulasi berikut:
- Anggota data privat untuk melindungi informasi sensitif seperti nilai dan ID siswa
- Antarmuka publik dengan getter dan setter yang terkontrol
- Class bersarang untuk mewakili nilai kursus masing-masing siswa, sehingga detail implementasi ini tetap berada di dalam class siswa
Berikut struktur yang akan kamu implementasikan:
class Student {
public:
class Grade { // class bersarang untuk nilai kursus
// ...
};
// Antarmuka publik untuk mengakses data siswa
private:
std::string name;
int studentId;
// Kumpulan nilai
};Tantangan ini menggabungkan semua hal dari bab ini: memilih tingkat akses yang sesuai, menyembunyikan detail implementasi di balik antarmuka yang rapi, dan menggunakan class bersarang untuk mengatur tipe-tipe yang berkaitan. Pikirkan baik-baik hal apa yang seharusnya dapat diakses dan hal apa yang seharusnya tetap tersembunyi.
Tantangan
MudahMari bangun Sistem Catatan Siswa yang memadukan semua hal yang telah kamu pelajari tentang enkapsulasi. Kamu akan membuat sistem yang melindungi data siswa dengan baik, mengelola nilai melalui class bersarang, dan menjalankan semua interaksi melalui antarmuka publik yang rapi.
Kamu akan membuat dua file untuk mengatur kodemu:
Student.h: Definisikan classStudentyang menunjukkan enkapsulasi yang tepat dengan classGradebersarang.Class
Gradebersarang (dideklarasikan di bagian publikStudent) harus menyimpan nama kursus (string) dan nilai (double). Buat constructor yang menerima kedua nilai tersebut, lalu sediakan methodgetCourseName()dangetScore()untuk mengakses datanya. ClassGrademenyimpan datanya secara privat. Meskipun bersarang di dalamStudent, class ini tetap mempertahankan enkapsulasinya sendiri.Class
Studentharus memiliki anggota privat untuk nama siswa (string), ID siswa (int), dan kumpulan pointerGrade. Sediakan:- Constructor yang menerima nama dan ID siswa
- Getter
getName()dangetStudentId()(keduanya const) - Method
addGrade(const std::string& course, double score)yang membuatGradebaru dan menambahkannya ke catatan siswa (tambahkan hanya jika nilai berada di antara 0 dan 100, termasuk keduanya) - Method
getAverageGrade()(const) yang menghitung dan mengembalikan rata-rata semua nilai, atau 0.0 jika tidak ada nilai - Method
displayRecord()(const) yang menampilkan catatan lengkap siswa
Jangan lupa membersihkan nilai yang dialokasikan secara dinamis di destructor, dan sertakan header guard yang sesuai.
main.cpp: Baca nama siswa, ID siswa, dan tiga nilai kursus dari input. Format input terdiri dari lima baris: nama, ID, lalu tiga baris yang masing-masing berisi nama kursus dan nilai yang dipisahkan oleh spasi (misalnya,Math 95.5).Buat
Studentdengan nama dan ID tersebut, tambahkan ketiga nilai, lalu tampilkan catatan lengkapnya.Format output untuk
displayRecord()harus seperti berikut:Student: <name> (ID: <id>) Grades: <course1>: <score1> <course2>: <score2> <course3>: <score3> Average: <average>
Format semua nilai dan rata-ratanya dengan satu angka di belakang koma menggunakan std::fixed dan std::setprecision(1) dari <iomanip>. Konversikan ID menggunakan std::stoi() dan nilai menggunakan std::stod().
Tantangan ini memadukan anggota data privat, getter publik, setter terkontrol dengan validasi, dan class bersarang. Semuanya bekerja bersama untuk membuat sistem catatan siswa yang terenkapsulasi dengan baik.
Coba sendiri
#include <iostream>
#include <string>
#include <sstream>
#include "Student.h"
int main() {
// Baca nama siswa
std::string name;
std::getline(std::cin, name);
// Baca ID siswa
std::string idStr;
std::getline(std::cin, idStr);
int studentId = std::stoi(idStr);
// Baca nilai dari tiga kursus (format: "CourseName Score")
std::string line1, line2, line3;
std::getline(std::cin, line1);
std::getline(std::cin, line2);
std::getline(std::cin, line3);
// TODO: Uraikan setiap baris untuk mengambil nama kursus dan nilainya
// Gunakan std::stod() untuk mengubah string nilai menjadi tipe data double
// TODO: Buat object Student dengan nama dan ID
// TODO: Tambahkan ketiga nilai ke data siswa
// TODO: Tampilkan data lengkap siswa
return 0;
}
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pemrograman Berorientasi Object
1Dasar-Dasar OOP
File EksternalBuild dan Kompilasi C++File Header dan File SourceNamespace dan CakupanPengantar OOP dalam C++class vs objectPointer 'this'method (Fungsi Anggota)Atribut (Anggota Data)Dasar Ctor dan DtorRingkasan: Kalkulator Sederhana4Properti class
Anggota instance vs staticGetter dan setterFungsi anggota constKata kunci mutableMethod dan variabel staticFungsi dan class friendRangkuman, Pengelola Rekening Bank7Pewarisan
Pewarisan DasarTingkat Akses pada PewarisanUrutan Pemanggilan Ctor & DtorPenimpaan methodFungsi Virtual & VTablePewarisan BergandaPewarisan VirtualRangkuman: Hierarki Karyawan2Manajemen Memori
Memori Stack vs HeapPointer dan ReferenceMemori Dinamis (new/delete)Smart Pointer di C++RAII di C++Rangkuman: Pengelola Array Dinamis5Enkapsulasi
Penentu Akses dalam C++Penentu Akses secara MendalamPenyembunyian Informasistruct vs classNested dan Inner classRangkuman, Sistem Catatan Siswa8Polimorfisme
Polimorfisme saat Compile vs RuntimeOverloading FungsiMeninjau Kembali Fungsi VirtualFungsi Virtual MurniKelas AbstrakDesain Interface di C++Casting Dinamis & RTTIRangkuman: Kalkulator Bentuk3Konstruktor & Destruktor
Konstruktor DefaultKonstruktor BerparameterKonstruktor SalinKonstruktor PindahDaftar Inisialisasi KonstruktorKonstruktor DelegasiKupas Tuntas DestruktorAturan Tiga, Lima, dan NolRangkuman: class String6Overloading Operator
Pengantar Overloading OperatorOverloading Operator AritmetikaOverloading Operator PerbandinganOperator StreamOverloading Operator PenugasanOverloading Operator [] dan ()Operator Konversi TipeRingkasan, class Matrix9Template
Template FungsiTemplate classSpesialisasi TemplateTemplate VariadikDasar SFINAE & Type TraitsRangkuman, Container GenerikLatihan sendiri: Compiler C++ online