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
Scuolacontiene un array diClasse. - Ogni
Classecontiene a sua volta una structInsegnante. - 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
indirizzoepresidenella structScuola. - 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.