Linguaggio C++

Gestione Scuola

Esempio completo in C++: gestione di una scuola con più classi, ciascuna con sezione, numero di alunni e insegnante.

Gestione di una Scuola con Struct in C++


Vogliamo rappresentare la struttura di una scuola composta da diverse classi. Ogni classe è identificata da:

  • una sezione (es. 1A, 2B, 3C...);
  • un numero di alunni iscritti;
  • il nome dell’insegnante principale.

Si desidera creare un programma in C++ che permetta di:

  1. Memorizzare i dati di più classi;
  2. Visualizzare l’elenco delle classi con i relativi dati;
  3. Determinare quale classe ha il numero maggiore di alunni.

Modellazione del problema

Ogni classe scolastica è rappresentata da una struct:

struct Classe {
    string sezione;         // es. "1A", "2B" ...
    int numeroAlunni;       // numero di studenti
    string insegnante;      // nome dell insegnante principale
};

La scuola, invece, può essere rappresentata come un array di struct, dove ogni elemento è una classe:

Classe scuola[5]; // 5 classi della scuola

Codice completo in C++

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

struct Classe {
    string sezione;
    int numeroAlunni;
    string insegnante;
};

int main() {
    const int N = 5; // numero di classi
    Classe scuola[N];
    int maxAlunni = 0;
    string sezioneMax;

    cout << "=== Gestione Scuola ===\n";

    // Inserimento dati
    for (int i = 0; i < N; i++) {
        cout << "\nInserisci sezione della classe " << i+1 << ": ";
        cin >> scuola[i].sezione;
        cout << "Inserisci numero di alunni: ";
        cin >> scuola[i].numeroAlunni;
        cout << "Inserisci nome dell insegnante principale: ";
        cin.ignore();
        getline(cin, scuola[i].insegnante);

        if (scuola[i].numeroAlunni > maxAlunni) {
            maxAlunni = scuola[i].numeroAlunni;
            sezioneMax = scuola[i].sezione;
        }
    }

    // Visualizzazione dati
    cout << "\n\n--- Elenco Classi ---\n";
    cout << left << setw(10) << "Sezione"
         << setw(15) << "Alunni"
         << "Insegnante" << endl;

    for (int i = 0; i < N; i++) {
        cout << left << setw(10) << scuola[i].sezione
             << setw(15) << scuola[i].numeroAlunni
             << scuola[i].insegnante << endl;
    }

    cout << "\nClasse con più alunni: " << sezioneMax
         << " (" << maxAlunni << " alunni)\n";

    return 0;
}

Spiegazione del programma

  • La struct Classe rappresenta una singola classe scolastica.
  • L array scuola contiene 5 elementi, cioè 5 classi diverse.
  • I dati vengono inseriti tramite tastiera.
  • Un ciclo stampa tutte le informazioni in modo tabellare.
  • Durante l inserimento, il programma verifica quale classe ha il numero maggiore di alunni.

Esempio di esecuzione

=== Gestione Scuola ===

Inserisci sezione della classe 1: 1A
Inserisci numero di alunni: 22
Inserisci nome dell insegnante principale: Rossi
Inserisci sezione della classe 2: 2B
Inserisci numero di alunni: 25
Inserisci nome dell insegnante principale: Bianchi
...

--- Elenco Classi ---
Sezione   Alunni         Insegnante
1A        22             Rossi
2B        25             Bianchi
3C        18             Verdi
4A        20             Neri
5B        24             Gialli

Classe con più alunni: 2B (25 alunni)

Estensioni possibili

  • Calcolare il numero totale di alunni della scuola.
  • Permettere la ricerca di una classe per sezione.
  • Gestire dinamicamente l inserimento di un numero variabile di classi.
  • Associare a ogni classe un elenco di materie o voti medi.

Questo esercizio mostra come una struct permetta di modellare ogni classe come un oggetto indipendente, mentre l’array di struct rappresenta l’intera scuola.