Menu
Coddy logo textTech

Riepilogo - Sistema di registrazione degli studenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso C++ di Coddy. Lezione 39 di 104.

È il momento di mettere in pratica ciò che hai imparato sull’incapsulamento! In questa sfida, creerai un sistema di registrazione degli studenti che dimostra l’uso corretto degli specificatori di accesso, l’occultamento delle informazioni e delle classi annidate.

Il tuo sistema gestirà i dati degli studenti applicando questi principi di incapsulamento:

  • Membri dati privati per proteggere informazioni sensibili come i voti e gli ID degli studenti
  • Interfaccia pubblica con getter e setter controllati
  • Una classe annidata per rappresentare i voti dei singoli corsi, mantenendo questo dettaglio di implementazione all’interno della classe dello studente

Ecco la struttura che implementerai:

class Student {
public:
    class Grade {    // Classe annidata per i voti dei corsi
        // ...
    };
    
    // Interfaccia pubblica per interagire con i dati dello studente
    
private:
    std::string name;
    int studentId;
    // Raccolta di voti
};

Questa sfida combina tutto ciò che hai imparato in questo capitolo: scegliere livelli di accesso appropriati, nascondere i dettagli di implementazione dietro un’interfaccia chiara e usare classi annidate per organizzare tipi correlati. Rifletti attentamente su cosa dovrebbe essere accessibile e cosa dovrebbe rimanere nascosto.

challenge icon

Sfida

Facile

Costruiamo un sistema di registrazione degli studenti che riunisce tutto ciò che hai imparato sull’incapsulamento. Creerai un sistema in cui i dati degli studenti sono adeguatamente protetti, i voti vengono gestiti tramite una classe annidata e tutte le interazioni avvengono attraverso un’interfaccia pubblica chiara.

Creerai due file per organizzare il codice:

  • Student.h: definisci una classe Student che dimostri un corretto incapsulamento con una classe Grade annidata.

    La classe Grade annidata (dichiarata nella sezione pubblica di Student) deve memorizzare il nome di un corso (stringa) e un punteggio (double). Assegnale un costruttore che accetti entrambi i valori e fornisci i metodi getCourseName() e getScore() per accedere ai dati. La classe Grade mantiene privati i propri dati; anche se è annidata in Student, conserva comunque il proprio incapsulamento.

    La classe Student deve avere membri privati per il nome dello studente (stringa), l’ID dello studente (int) e una raccolta di puntatori a Grade. Fornisci:

    • Un costruttore che accetti il nome e l’ID dello studente
    • I getter getName() e getStudentId() (entrambi const)
    • Un metodo addGrade(const std::string& course, double score) che crei un nuovo Grade e lo aggiunga al registro dello studente (aggiungi il voto solo se il punteggio è compreso tra 0 e 100 inclusi)
    • Un metodo getAverageGrade() (const) che calcoli e restituisca la media di tutti i voti, oppure 0.0 se non ce ne sono
    • Un metodo displayRecord() (const) che mostri il registro completo dello studente

    Non dimenticare di liberare i voti allocati dinamicamente nel distruttore e di includere le opportune protezioni dell’header.

  • main.cpp: leggi da input il nome dello studente, l’ID dello studente e i voti di tre corsi. Il formato dell’input sarà di cinque righe: nome, ID e poi tre righe, ciascuna contenente il nome di un corso e un punteggio separati da uno spazio (ad es., Math 95.5).

    Crea un oggetto Student con il nome e l’ID, aggiungi tutti e tre i voti e poi visualizza il registro completo.

    Il formato di output di displayRecord() deve essere:

    Student: <name> (ID: <id>)
    Grades:
      <course1>: <score1>
      <course2>: <score2>
      <course3>: <score3>
    Average: <average>

Formatta tutti i punteggi e la media con una cifra decimale usando std::fixed e std::setprecision(1) da <iomanip>. Converti l’ID usando std::stoi() e i punteggi usando std::stod().

Questa sfida combina membri dati privati, getter pubblici, setter controllati con convalida e una classe annidata: tutti collaborano per creare un sistema di registrazione degli studenti ben incapsulato.

Provalo tu

#include <iostream>
#include <string>
#include <sstream>
#include "Student.h"

int main() {
    // Leggi il nome dello studente
    std::string name;
    std::getline(std::cin, name);
    
    // Leggi l'ID dello studente
    std::string idStr;
    std::getline(std::cin, idStr);
    int studentId = std::stoi(idStr);
    
    // Leggi i voti di tre corsi (formato: "CourseName Score")
    std::string line1, line2, line3;
    std::getline(std::cin, line1);
    std::getline(std::cin, line2);
    std::getline(std::cin, line3);
    
    // TODO: Analizza ogni riga per estrarre il nome del corso e il voto
    // Usa std::stod() per convertire le stringhe dei voti in valori double
    
    // TODO: Crea un oggetto Student con il nome e l'ID
    
    // TODO: Aggiungi tutti e tre i voti allo studente
    
    // TODO: Visualizza la scheda completa dello studente
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C++ online