🏋️ Gestionale Abbonati Palestra

Gestione completa degli iscritti: abbonamenti, sessioni mensili e statistiche del centro fitness

🎯 Obiettivo della Verifica

Completare un’applicazione C# Windows Forms per la gestione degli abbonati di un centro fitness. L’applicazione permette di:

  • Registrare nuovi abbonati con tutti i dati anagrafici e contrattuali
  • Calcolare automaticamente il costo mensile in base al tipo di abbonamento e alle sessioni
  • Visualizzare statistiche del centro (incasso totale mensile, costo medio per abbonato)
  • Gestire le discipline e le tipologie di abbonamento
  • Esportare i dati in formato CSV per la segreteria
📋 Cosa Dovrai Completare
  • Classe Abbonato: Creare completamente con campi privati e validazione
  • Metodo btnAggiungi_Click: Implementare la logica di aggiunta/modifica con calcolo costo
  • Integrazione: Far comunicare correttamente Form e Classe con calcoli automatici

📁 Materiale Fornito

1

File Form1.cs già implementato (tranne il metodo btnAggiungi_Click)

Riceverai un file Form1.cs completo di:

  • ✅ Tutti i controlli dell’interfaccia grafica
  • ✅ Metodi di validazione già implementati
  • ✅ Gestori eventi per rimozione, ordinamento, salvataggio
  • ✅ Metodi per aggiornamento visualizzazione e statistiche
  • SOLO btnAggiungi_Click da completare
2

Struttura dell’interfaccia già pronta

Controllo Nome Scopo
TextBox txtNome Nome abbonato
TextBox txtCognome Cognome abbonato
ComboBox cmbDisciplina Disciplina praticata (Palestra, Nuoto, Pilates)
ComboBox cmbTipoAbbonamento Tipo abbonamento (Base, Standard, Premium)
TextBox txtSessioniMensili Numero sessioni al mese (1–30)
TextBox txtCostoSessione Costo per singola sessione in € (5–80)
Label lblCostoCalcolato Mostra costo mensile calcolato automaticamente
ListBox lstAbbonati Elenco abbonati
Button btnAggiungi Aggiungi/Modifica abbonato
Label lblTotaleIncasso Mostra incasso totale mensile della palestra

⚙️ Parti da Completare

1

📋 CLASSE Abbonato (DA CREARE COMPLETAMENTE)

Devi creare una classe Abbonato con le seguenti caratteristiche:

Proprietà richieste (TUTTE con validazione nei setter)
// 1. DATI ANAGRAFICI
- Nome (stringa): non vuoto, max 50 caratteri
- Cognome (stringa): non vuoto, max 50 caratteri
- DataIscrizione (DateTime): non può essere nel futuro

// 2. DATI ABBONAMENTO
- Disciplina (stringa): solo valori ammessi: "Palestra", "Nuoto", "Pilates"
- TipoAbbonamento (stringa): solo valori: "Base", "Standard", "Premium"
- SessioniMensili (int): tra 1 e 30 sessioni/mese
- CostoSessione (double): tra 5.00 e 80.00 €/sessione

// 3. PROPRIETÀ CALCOLATA (SOLO GET)
- CostoMensile (double): calcolato come SessioniMensili × CostoSessione
🔑 Proprietà Calcolata – Esempio
public double CostoMensile
{
    get { return SessioniMensili * CostoSessione; }
    // NO set! Viene calcolata automaticamente
}
Metodi richiesti
// 1. Costruttore con parametri (usa le proprietà per validazione)
public Abbonato(string nome, string cognome, DateTime dataIscrizione,
                string disciplina, string tipoAbbonamento,
                int sessioniMensili, double costoSessione)

// 2. Override del metodo ToString()
// Formato: "Cognome Nome - Disciplina - Costo mensile: €X.XXX,XX"
// Esempio: "Bianchi Luca - Nuoto - Costo mensile: €480,00"
2

🖱️ METODO btnAggiungi_Click (DA COMPLETARE NEL FORM)

Devi implementare il gestore evento per l’aggiunta/modifica abbonati:

Logica da implementare
private void btnAggiungi_Click(object sender, EventArgs e)
{
    // DA COMPLETARE:
    // 1. Validare tutti i campi (usa i metodi esistenti nel Form)
    // 2. Convertire i valori dalle TextBox ai tipi corretti
    // 3. Se in modalità modifica (indiceModifica != -1):
    //    - Modifica l'abbonato esistente nella lista
    // 4. Se in modalità aggiunta:
    //    - Crea nuova istanza di Abbonato con i valori inseriti
    //    - Aggiungila alla lista
    // 5. Aggiornare lblCostoCalcolato con il costo mensile calcolato
    // 6. Aggiornare l'interfaccia e le statistiche
    // 7. Gestire eccezioni dalla classe Abbonato
}
🎯 Punti Chiave da Implementare

  • Calcolo automatico costo: SessioniMensili × CostoSessione
  • Validazione incrociata: Controlla che i valori siano numerici e nei range
  • Gestione modalità: Stesso pulsante per aggiunta e modifica
  • Aggiornamento statistiche: Somma di tutti i costi mensili degli abbonati

📝 Istruzioni Dettagliate

1

STEP 1: Creare la classe Abbonato

  1. Aggiungi nuovo file Abbonato.cs al progetto
  2. Implementa tutte le proprietà con validazione nei setter
  3. La proprietà CostoMensile deve essere SOLO get (calcolata)
  4. Crea il costruttore con tutti i parametri
  5. Overrida ToString() per visualizzazione significativa
Esempio di validazione nella classe
public int SessioniMensili
{
    get { return _sessioniMensili; }
    set
    {
        if (value < 1 || value > 30)
        {
            MessageBox.Show("Le sessioni mensili devono essere tra 1 e 30!",
                          "ERRORE", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        _sessioniMensili = value;
    }
}
2

STEP 2: Completare btnAggiungi_Click

Schema logico da seguire
SE i campi non sono validi → ESCI
CONVERTI i valori dalle TextBox:
   - SessioniMensili da stringa a int
   - CostoSessione da stringa a double
   - DataIscrizione (usa DateTime.Now per data corrente)
SE siamo in modalità MODIFICA:
    Crea nuovo Abbonato con i valori
    Sostituisci nella lista all'indice indiceModifica
    Resetta indiceModifica a -1
    Cambia testo bottone a "➕ Aggiungi Abbonato"
ALTRIMENTI (modalità AGGIUNTA):
    Crea nuovo Abbonato con i valori
    Aggiungi alla lista
CALCOLA e mostra costo in lblCostoCalcolato
AGGIORNA ListBox e statistiche
PULISCI campi input

✅ Requisiti per il Punteggio

Punteggio Requisiti
0-5 Classe Abbonato basic (senza validazione) + btnAggiungi parziale
6-7 Classe corretta + validazione in 5+ proprietà + btnAggiungi funzionante
8-9 Classe completa + proprietà calcolata + tutte le validazioni + btnAggiungi perfetto
10 Tutto perfetto + gestione eccezioni elegante + codice ben commentato + statistiche corrette

💡 Suggerimenti

🔑 Concetti Chiave da Ricordare

🎯 Validazione Form vs Classe

  • Form: Controlla campi vuoti e formato
  • Classe: Controlla valori assurdi e limiti
  • Entrambi necessari!
💾 Proprietà Calcolata

  • Solo get, nessun set
  • Calcolata automaticamente
  • Esempio: Costo = Sessioni × CostoSessione
🔄 Gestione Modalità

  • indiceModifica = -1 → Aggiungi
  • indiceModifica = 0,1,2… → Modifica
  • Ricordati di resettare!
🧮 Calcoli da Implementare

// Calcolo costo mensile individuale
double costo = sessioniMensili * costoSessione;

// Calcolo incasso totale mensile (nelle statistiche)
double totaleIncasso = 0;
foreach (Abbonato a in listaAbbonati)
{
    totaleIncasso += a.CostoMensile;
}

// Calcolo costo medio per abbonato
double medio = listaAbbonati.Count > 0 ?
               totaleIncasso / listaAbbonati.Count : 0;

📤 Modalità di Consegna

Consegna due file:

  1. Abbonato.cs – La classe completa con tutte le proprietà e metodi
  2. Form1.cs – Solo il metodo btnAggiungi_Click completato (indicato con commento // DA COMPLETARE)

⏰ Tempo a disposizione: 90 minuti

Verifica Pratica – Gestionale Abbonati Palestra
Gestione Dati con Classi – Da Oggetti a File

Torna in alto