Linguaggio C++

Gerarchia Di Struct

Esempio completo in C++ con struct annidate multilivello: una scuola con più classi e insegnanti.

Gestione Completa di una Scuola con Struct Annidate in C++


Questo esempio rappresenta una scuola completa composta da più classi, dove ogni classe ha un insegnante. Si utilizza una struttura gerarchica annidata di tre livelli:

  • Insegnante → dati del docente (nome, materia, esperienza)
  • Classe → sezione, numero alunni, e un insegnante
  • Scuola → nome dell istituto e array di classi

Modellazione delle struct

struct Insegnante {
    string nome;
    string materia;
    int anniEsperienza;
};

struct Classe {
    string sezione;
    int numeroAlunni;
    Insegnante docente; // ogni classe ha un insegnante
};

struct Scuola {
    string nomeIstituto;
    int numeroClassi;
    Classe classi[5]; // fino a 5 classi
};

Codice completo in C++

#include <iostream>
#include <iiomanip>
#include <string>
using namespace std;

struct Insegnante {
    string nome;
    string materia;
    int anniEsperienza;
};

struct Classe {
    string sezione;
    int numeroAlunni;
    Insegnante docente;
};

struct Scuola {
    string nomeIstituto;
    int numeroClassi;
    Classe classi[5];
};

int main() {
    Scuola scuola;

    cout << "=== Gestione Completa della Scuola ===\n";
    cout << "Inserisci nome dell istituto: ";
    getline(cin, scuola.nomeIstituto);

    cout << "Quante classi vuoi inserire (max 5)? ";
    cin >> scuola.numeroClassi;
    cin.ignore();

    // Inserimento dati classi e insegnanti
    for (int i = 0; i < scuola.numeroClassi; i++) {
        cout << "\n--- Classe " << i+1 << " ---\n";
        cout << "Sezione: ";
        getline(cin, scuola.classi[i].sezione);
        cout << "Numero alunni: ";
        cin >> scuola.classi[i].numeroAlunni;
        cin.ignore();

        cout << "Nome insegnante: ";
        getline(cin, scuola.classi[i].docente.nome);
        cout << "Materia insegnata: ";
        getline(cin, scuola.classi[i].docente.materia);
        cout << "Anni di esperienza: ";
        cin >> scuola.classi[i].docente.anniEsperienza;
        cin.ignore();
    }

    // Visualizzazione riepilogo
    cout << "\n\n=== Riepilogo Istituto: " << scuola.nomeIstituto << " ===\n";
    cout << left << setw(8) << "Sez"
         << setw(10) << "Alunni"
         << setw(20) << "Insegnante"
         << setw(15) << "Materia"
         << "Esperienza" << endl;

    for (int i = 0; i < scuola.numeroClassi; i++) {
        Classe c = scuola.classi[i];
        cout << left << setw(8) << c.sezione
             << setw(10) << c.numeroAlunni
             << setw(20) << c.docente.nome
             << setw(15) << c.docente.materia
             << c.docente.anniEsperienza << " anni" << endl;
    }

    return 0;
}

Spiegazione del codice

  • La struct Scuola contiene un array di Classe.
  • Ogni Classe contiene a sua volta una struct Insegnante.
  • Si leggono i dati in modo gerarchico: prima la scuola, poi ogni classe e infine il docente di ciascuna.
  • L uso di setw() (libreria <iomanip>) serve per allineare le colonne in output.

Esempio di esecuzione

=== Gestione Completa della Scuola ===
Inserisci nome dell istituto: Istituto Galileo Galilei
Quante classi vuoi inserire (max 5)? 2

--- Classe 1 ---
Sezione: 1A
Numero alunni: 23
Nome insegnante: Rossi
Materia insegnata: Matematica
Anni di esperienza: 12

--- Classe 2 ---
Sezione: 2B
Numero alunni: 25
Nome insegnante: Bianchi
Materia insegnata: Italiano
Anni di esperienza: 15

=== Riepilogo Istituto: Istituto Galileo Galilei ===
Sez     Alunni    Insegnante          Materia        Esperienza
1A      23        Rossi               Matematica     12 anni
2B      25        Bianchi             Italiano       15 anni

Estensioni possibili

  • Aggiungere un campo indirizzo e preside nella struct Scuola.
  • Creare una funzione che calcoli il totale degli alunni dell istituto.
  • Gestire più scuole in un array di Scuola.
  • Salvare i dati su file e caricarli all avvio.

Questo esempio riassume il concetto di composizione di strutture: una scuola è composta da più classi, e ogni classe da un insegnante. Si tratta di una rappresentazione fedele di una struttura gerarchica reale.