Menu
Coddy logo textTech

Riepilogo - Registri degli studenti

Fa parte della sezione Programmazione orientata agli oggetti del percorso C# di Coddy. Lezione 35 di 70.

challenge icon

Sfida

Facile

Costruiamo un sistema di registri degli studenti che riunisce tutte le tecniche di incapsulamento che hai imparato in questo capitolo. Creerai un sistema sicuro in cui i dati degli studenti sono adeguatamente protetti, i voti vengono convalidati e alcune informazioni rimangono immutabili dopo la creazione.

Organizzerai il codice in due file:

  • Student.cs: crea una classe Student nello spazio dei nomi Records che dimostri un corretto incapsulamento. La classe dello studente deve avere:
    • Un campo readonly Name (stringa) accessibile pubblicamente, ma che può essere impostato solo durante la costruzione
    • Un campo readonly privato per l'ID dello studente (stringa): non deve mai essere accessibile direttamente dall'esterno
    • Un elenco privato per memorizzare i voti (numeri interi)
    • Una proprietà pubblica di sola lettura Average che calcola e restituisce la media di tutti i voti, oppure 0 se non sono presenti voti
    • Un metodo pubblico AddGrade(int grade) che accetta solo voti compresi tra 0 e 100 (inclusi): i voti non validi devono essere ignorati senza segnalazioni
    • Un metodo pubblico GetGradeCount() che restituisce il numero di voti validi registrati
    • Un metodo pubblico GetStudentInfo() che restituisce una stringa nel formato "{Name} (ID: {last 4 characters of student ID})": nota che esponi solo una versione mascherata dell'ID!
    Il costruttore deve accettare il nome e l'ID dello studente, in quest'ordine.
  • Program.cs: nel file principale, crea uno studente e aggiungi diversi voti per mostrare come funziona l'incapsulamento. Mostrerai che i voti validi vengono accettati, quelli non validi vengono rifiutati e la media viene calcolata correttamente.

Riceverai cinque input:

  • Nome dello studente
  • ID dello studente (almeno 4 caratteri)
  • Primo voto da aggiungere (numero intero)
  • Secondo voto da aggiungere (numero intero, potrebbe non essere valido, come -5 o 150)
  • Terzo voto da aggiungere (numero intero)

Stampa l'output in questo formato:

{GetStudentInfo() result}
Grades recorded: {GetGradeCount()}
Average: {Average}

Ad esempio, se gli input sono Emma Wilson, STU12345, 85, 150 e 90, l'output dovrebbe essere:

Emma Wilson (ID: 2345)
Grades recorded: 2
Average: 87.5

Nota che il voto non valido 150 è stato ignorato senza segnalazioni, quindi sono stati registrati solo due voti. L'ID dello studente è protetto: il codice esterno non può mai vedere l'ID completo, ma solo la versione mascherata tramite GetStudentInfo(). Il nome è leggibile ma immutabile. Questo è l'incapsulamento che lavora insieme per creare una classe robusta e ben protetta!

Provalo tu

using System;
using Records;

class Program
{
    public static void Main(string[] args)
    {
        // Leggi i dati di input
        string name = Console.ReadLine();
        string studentId = Console.ReadLine();
        int grade1 = Convert.ToInt32(Console.ReadLine());
        int grade2 = Convert.ToInt32(Console.ReadLine());
        int grade3 = Convert.ToInt32(Console.ReadLine());

        // TODO: Crea un oggetto Student con name e studentId

        // TODO: Aggiungi tutti e tre i voti usando il metodo AddGrade

        // TODO: Stampa l'output nel formato richiesto:
        // {risultato di GetStudentInfo()}
        // Grades recorded: {GetGradeCount()}
        // Media: {Average}
    }
}

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C# online