🎮 Gestionale Collezione Videogiochi

Gestione completa della tua libreria gaming: prezzi, valutazioni e statistiche di gioco

🎯 Obiettivo della Verifica

Completare un’applicazione C# Windows Forms per la gestione di una collezione personale di videogiochi. L’applicazione permette di:

  • Registrare nuovi videogiochi con tutti i dati (titolo, piattaforma, genere)
  • Calcolare automaticamente il valore orario in base alle ore giocate
  • Visualizzare statistiche (valore totale collezione, ore giocate, valutazione media)
  • Gestire piattaforme e generi diversi
  • Esportare i dati in formato CSV per backup
📚 Cosa Dovrai Completare
  • Classe Videogioco: Creare completamente con campi privati e validazione
  • Metodo btnAggiungi_Click: Implementare la logica di aggiunta/modifica con calcolo valore
  • Integrazione: Far comunicare correttamente Form e Classe con calcoli automatici

📁 Materiale Fornito

Interfaccia Grafica – Schermata Principale


Figura 1: Schermata principale con input dati

Interfaccia Grafica – Statistiche


Figura 2: Schermata statistiche e lista videogiochi

Struttura dell’interfaccia già pronta

Controllo Nome Scopo
TextBox txtTitolo Titolo del videogioco
TextBox txtCasaProduttrice Casa produttrice
ComboBox cmbPiattaforma Piattaforma (PC, PlayStation 5, Xbox Series X, Nintendo Switch)
ComboBox cmbGenere Genere (Azione, RPG, Sportivo, Strategia, Avventura)
TextBox txtOreGiocate Ore giocate (0-2000)
TextBox txtPrezzo Prezzo pagato in € (5-120)
NumericUpDown numValutazione Valutazione personale (1-10)
Label lblValoreOrario Mostra valore orario calcolato
ListBox lstVideogiochi Elenco videogiochi
Button btnAggiungi Aggiungi/Modifica videogioco
Label lblValoreTotale Mostra valore totale della collezione

⚙️ Parti da Completare

1

📋 CLASSE Videogioco (DA CREARE COMPLETAMENTE)

Devi creare una classe Videogioco con le seguenti caratteristiche:

Proprietà richieste (TUTTE con validazione nei setter)
// 1. DATI IDENTIFICATIVI
- Titolo (stringa): non vuoto, max 100 caratteri
- CasaProduttrice (stringa): non vuoto, max 50 caratteri
- DataAcquisto (DateTime): non può essere nel futuro

// 2. DATI TECNICI E DI GIOCO
- Piattaforma (stringa): solo valori: "PC", "PlayStation 5", "Xbox Series X", "Nintendo Switch"
- Genere (stringa): solo valori: "Azione", "RPG", "Sportivo", "Strategia", "Avventura"
- OreGiocate (int): tra 0 e 2000 ore
- Prezzo (double): tra 5.00 e 120.00 €
- Valutazione (int): tra 1 e 10 stelle

// 3. PROPRIETÀ CALCOLATE (SOLO GET)
- ValoreOrario (double): calcolato come Prezzo / OreGiocate (se ore > 0, altrimenti 0)
- CategoriaGiocatore (string): 
  * "Casual" se ore < 20 * "Appassionato" se ore tra 20 e 100 * "Hardcore" se ore > 100
🔑 Validazione Data Acquisto – Esempio
public DateTime DataAcquisto
{
    get { return _dataAcquisto; }
    set
    {
        if (value > DateTime.Now)
        {
            MessageBox.Show("La data di acquisto non può essere nel futuro!", 
                          "Errore", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;       }
        _dataAcquisto = value;
    }
}
Metodi richiesti
// 1. Costruttore con parametri (usa le proprietà per validazione)
public Videogioco(string titolo, string casaProduttrice, DateTime dataAcquisto,
                  string piattaforma, string genere,
                  int oreGiocate, double prezzo, int valutazione)

// 2. Override del metodo ToString()
// Formato: "Titolo - Piattaforma - Valutazione: ★X - €XX.XX"
// Esempio: "Elden Ring - PC - Valutazione: ★9 - €59.99"

2

🖱️ METODO btnAggiungi_Click (DA COMPLETARE NEL FORM)

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

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 il videogioco esistente nella lista
    // 4. Se in modalità aggiunta:
    //    - Crea nuova istanza di Videogioco con i valori inseriti
    //    - Aggiungila alla lista
    // 5. Aggiornare lblValoreOrario con il valore calcolato
    // 6. Aggiornare l'interfaccia e le statistiche
    // 7. Gestire eccezioni dalla classe Videogioco
}

📝 Istruzioni Dettagliate

1

STEP 1: Creare la classe Videogioco

  1. Aggiungi nuovo file Videogioco.cs al progetto
  2. Implementa tutte le proprietà con validazione nei setter
  3. Le proprietà ValoreOrario e CategoriaGiocatore devono essere SOLO get (calcolate)
  4. Crea il costruttore con tutti i parametri
  5. Overrida ToString() per visualizzazione significativa
Esempio di creazione oggetto nel Form
// Imposta la data di acquisto a oggi
DateTime dataAcquisto = DateTime.Now;

// Creazione oggetto Videogioco
Videogioco nuovoVideogioco = new Videogioco(
    titolo, casaProduttrice, dataAcquisto,
    piattaforma, genere,
    oreGiocate, prezzo, valutazione
);

2

STEP 2: Completare btnAggiungi_Click

Schema logico da seguire
SE i campi non sono validi → ESCI
CONVERTI i valori dalle TextBox:
   - OreGiocate da stringa a int
   - Prezzo da stringa a double
   - Valutazione da numValutazione.Value (già int)
   - DataAcquisto (usa DateTime.Now per data corrente)
SE siamo in modalità MODIFICA:
    Crea nuovo Videogioco con i valori
    Sostituisci nella lista all'indice indiceModifica
    Resetta indiceModifica a -1
    Cambia testo bottone a "➕ Aggiungi Videogioco"
ALTRIMENTI (modalità AGGIUNTA):
    Crea nuovo Videogioco con i valori
    Aggiungi alla lista
CALCOLA e mostra valore orario in lblValoreOrario
AGGIORNA ListBox e statistiche
PULISCI campi input

✅ Requisiti per il Punteggio

Punteggio Requisiti
0-5 Classe Videogioco basic (senza validazione) + btnAggiungi parziale
6-7 Classe corretta + validazione in 5+ proprietà + btnAggiungi funzionante
8-9 Classe completa + proprietà calcolate + tutte validazioni + btnAggiungi perfetto
10
  • Tutto perfetto + gestione eccezioni elegante
  • Codice ben commentato + statistiche corrette
  • SPIEGAZIONE AGGIORNAMENTO TEMPO REALE: File di testo che spiega come funziona l’aggiornamento in tempo reale della label del valore orario
⚠️ NOTA IMPORTANTE PER VOTO 10:

Per ottenere il voto massimo, oltre a tutti gli altri requisiti, devi creare un file di testo “spiegazione_aggiornamento_realtime.txt” che spiega:

  1. Come viene calcolato il valore orario nella classe Videogioco
  2. Come il valore viene passato dal Form alla label
  3. In quale momento preciso viene aggiornata la label lblValoreOrario
  4. Come funziona il binding dei dati tra oggetto e interfaccia

📤 Modalità di Consegna

Consegna i seguenti file:

  1. PROGETTO COMPLETO (esclusi file obj/ e bin/):
    • Videogioco.cs – La classe completa con tutte le proprietà e metodi
    • Form1.cs – Solo il metodo btnAggiungi_Click completato (indicato con commento // DA COMPLETARE)
    • Tutti gli altri file del progetto (escluse cartelle obj e bin)
  2. SPIEGAZIONE_TECNICA.txt – File di testo che spiega come avviene l’aggiornamento in tempo reale della label del valore orario

⏰ Tempo a disposizione: 90 minuti

Verifica Pratica – Gestionale Collezione Videogiochi
Gestione Dati con Classi – Da Oggetti a File

Torna in alto