Vai al contenuto

Applica le tue conoscenze di ListBox e ComboBox

Applica le tue conoscenze di ListBox e ComboBox in un progetto divertente!.

⚠️ REGOLE OBBLIGATORIE:

INIZIALI COGNOME: Tutte le variabili e i metodi devono iniziare con le tue iniziali (es: Mario Rossi β†’ mrNomeVariabile)

PENALITΓ€: Se non rispetti questa regola, voto massimo: 3/10

ESEMPIO: mrListaGiochi, mrAggiungiGioco, mrControllaCampi

Concetti da applicare:

ListBox: Visualizza la tua collezione di videogiochi

ComboBox: Seleziona genere, piattaforma e valutazione

Items: La lista dei tuoi videogiochi

SelectedItem: Il videogioco che hai selezionato

SelectedIndex: La posizione del videogioco nella lista

Text: Il testo visualizzato nei controlli

Traccia della Verifica

Obiettivo

Creare un programma Windows Form per gestire la tua biblioteca personale di videogiochi. Il programma deve permettere di aggiungere, visualizzare, modificare, rimuovere e ordinare i videogiochi.

  1. Interfaccia Grafica Richiesta:
  • TextBox: mrTxtTitolo β†’ Titolo del videogioco
  • TextBox: mrTxtSviluppatore β†’ Nome dello sviluppatore
  • TextBox: mrTxtAnno β†’ Anno di pubblicazione
  • ComboBox: mrCmbGenere β†’ Genere del videogioco
  • ComboBox: mrCmbPiattaforma β†’ Piattaforma di gioco
  • ComboBox: mrCmbValutazione β†’ Tua valutazione (1-5 stelle)
  • Button: mrBtnAggiungi β†’ Aggiungi videogioco
  • Button: mrBtnModifica β†’ Modifica videogioco selezionato
  • Button: mrBtnRimuovi β†’ Rimuovi videogioco selezionato
  • Button: mrBtnPulisci β†’ Pulisci tutti i campi
  • Button: mrBtnOrdinaTitolo β†’ Ordina per titolo
  • Button: mrBtnOrdinaAnno β†’ Ordina per anno
  • Button: mrBtnOrdinaValutazione β†’ Ordina per valutazione
  • ListBox: mrLstBiblioteca β†’ Visualizza elenco videogiochi
  • Label: mrLblContatore β†’ Mostra quanti giochi hai in biblioteca
  1. FunzionalitΓ  Richieste:

βœ… Usa una List<string> mrListaGiochi per salvare i videogiochi.

βœ… Implementa un metodo mrAggiornaBiblioteca() per aggiornare la ListBox.

βœ… Implementa un metodo mrControllaCampi() per verificare che tutti i campi siano compilati correttamente.

βœ… Implementa un metodo mrPulisciCampi() per svuotare i TextBox dopo l'aggiunta.

βœ… Implementa la modifica di un videogioco esistente.

βœ… Implementa l'ordinamento per titolo, anno e valutazione.

βœ… Aggiorna automaticamente il contatore dei giochi.

βœ… Gestisci gli errori (campi vuoti, anno non numerico, ecc.).

  1. Dettagli Implementazione:
  • Il formato di ogni videogioco nella lista deve essere: "Titolo - Sviluppatore - Anno - Genere - Piattaforma - β˜…β˜…β˜…β˜…β˜†"
  • Le valutazioni devono essere visualizzate come stelle (es: β˜…β˜…β˜…β˜†β˜† per 3 stelle)
  • I generi disponibili devono essere: Azione, Avventura, RPG, Sparatutto, Sport, Strategia, GDR
  • Le piattaforme disponibili devono essere: PC, PlayStation, Xbox, Nintendo Switch, Mobile
  • Quando si seleziona un gioco nella ListBox, i campi devono riempirsi automaticamente
  • Il pulsante "Aggiungi" deve trasformarsi in "Modifica" quando si sta modificando un gioco
  • Per ordinare, usa il metodo Sort() con funzioni lambda come visto a lezione

Criteri di Valutazione

Punteggio - Tabella di Valutazione

Competenza Punti Descrizione Note
Iniziali Cognome 2 Tutte le variabili e metodi iniziano con le iniziali Obbligatorio per voti > 3
Interfaccia Grafica 2 Creazione corretta di tutti i controlli richiesti Nomi, layout, funzionalitΓ  base
Inizializzazione 2 List e ComboBox popolate correttamente Valori di default impostati
Aggiunta Videogiochi 3 Implementazione completa btnAggiungi_Click Controlli, validazione, formattazione
Modifica e Rimozione 3 Selezione, modifica e rimozione funzionanti Cambio testo pulsante, conferme
Ordinamento 4 Ordinamento per titolo, anno e valutazione Uso corretto di Sort() e lambda
Gestione Errori 3 MessageBox, controlli, pulizia codice Codice ben strutturato e commentato
TOTALE 19 β†’ Voto finale: punti / 1.9

Esempi di Ordinamento

Risultato atteso dopo l'ordinamento

Ordina per Titolo

Ordinamento per Titolo

Alfabetico A-Z

mrListaGiochi.Sort((g1, g2) => { return g1.Split('-')[0].Trim() .CompareTo(g2.Split('-')[0].Trim()); });

Ordina per Anno

Ordinamento per Anno

Dal piΓΉ vecchio

mrListaGiochi.Sort((g1, g2) => { int a1 = int.Parse(g1.Split('-')[2].Trim()); int a2 = int.Parse(g2.Split('-')[2].Trim()); return a1.CompareTo(a2); });

Ordina per Valutazione

Ordinamento per Valutazione

Dalle 5 stelle

mrListaGiochi.Sort((g1, g2) => { int s1 = g1.Split('-')[5].Count(c => c == 'β˜…'); int s2 = g2.Split('-')[5].Count(c => c == 'β˜…'); return s2.CompareTo(s1); });

Esempi di risultato:

Per Titolo:

Call of Duty - ... - β˜…β˜…β˜…β˜…β˜†

Cyberpunk 2077 - ... - β˜…β˜…β˜…β˜†β˜†

FIFA 23 - ... - β˜…β˜…β˜…β˜…β˜†

Minecraft - ... - β˜…β˜…β˜…β˜…β˜…

The Legend of Zelda - ... - β˜…β˜…β˜…β˜…β˜…

Per Anno:

Minecraft (2011) - β˜…β˜…β˜…β˜…β˜…

The Legend of Zelda (2017) - β˜…β˜…β˜…β˜…β˜…

Cyberpunk 2077 (2020) - β˜…β˜…β˜…β˜†β˜†

FIFA 23 (2022) - β˜…β˜…β˜…β˜…β˜†

Call of Duty (2022) - β˜…β˜…β˜…β˜…β˜†

Per Valutazione:

β˜…β˜…β˜…β˜…β˜… Minecraft

β˜…β˜…β˜…β˜…β˜… The Legend of Zelda

β˜…β˜…β˜…β˜…β˜† FIFA 23

β˜…β˜…β˜…β˜…β˜† Call of Duty

β˜…β˜…β˜…β˜†β˜† Cyberpunk 2077

Suggerimenti per la Soluzione

Come procedere

  1. Inizia dall'interfaccia:

Crea prima tutti i controlli richiesti con i nomi corretti inizializzati con le tue iniziali. Aggiungi i 3 pulsanti per l'ordinamento.

  1. Inizializza le ComboBox:

Nel costruttore del form, popola le ComboBox con i valori richiesti per genere, piattaforma e valutazione (1-5 stelle).

  1. Implementa l'ordinamento:

Usa il metodo Sort() con funzioni lambda per ordinare la lista. Ricorda che il formato dei videogiochi Γ¨: "Titolo - Sviluppatore - Anno - Genere - Piattaforma - β˜…β˜…β˜…β˜…β˜†"

Esempio completo ordinamento per titolo

private void mrBtnOrdinaTitolo_Click(object sender, EventArgs e)
{
    mrListaGiochi.Sort((g1, g2) => {
        string titolo1 = g1.Split('-')[0].Trim();
        string titolo2 = g2.Split('-')[0].Trim();
        return titolo1.CompareTo(titolo2);
    });
    mrAggiornaBiblioteca();
}
  1. Ordinamento per anno:

Per ordinare per anno, devi convertire la stringa in numero prima di confrontarla.

Esempio completo ordinamento per anno

private void mrBtnOrdinaAnno_Click(object sender, EventArgs e)
{
    mrListaGiochi.Sort((g1, g2) => {
        int anno1 = int.Parse(g1.Split('-')[2].Trim());
        int anno2 = int.Parse(g2.Split('-')[2].Trim());
        return anno1.CompareTo(anno2);
    });
    mrAggiornaBiblioteca();
}
  1. Ordinamento per valutazione:

Per ordinare per valutazione (stelle), conta il numero di β˜… in ogni stringa.

Esempio completo ordinamento per valutazione

private void mrBtnOrdinaValutazione_Click(object sender, EventArgs e)
{
    mrListaGiochi.Sort((g1, g2) => {
        string val1 = g1.Split('-')[5].Trim();
        string val2 = g2.Split('-')[5].Trim();
        int stelle1 = val1.Count(c => c == 'β˜…');
        int stelle2 = val2.Count(c => c == 'β˜…');
        return stelle2.CompareTo(stelle1); // Decrescente
    });
    mrAggiornaBiblioteca();
}

Spiegazione: Funzioni Lambda

  1. Struttura base:

Le funzioni lambda ti permettono di definire come confrontare due elementi:

lista.Sort((elemento1, elemento2) => {
    // Estrai dati da confrontare
    // Restituisci:
    // - negativo: elemento1 viene prima
    // - zero: sono uguali
    // - positivo: elemento1 viene dopo
});
  1. Ricorda il formato:

Ogni videogioco Γ¨ nel formato: "Titolo - Sviluppatore - Anno - Genere - Piattaforma - β˜…β˜…β˜…β˜…β˜†"

string[] parti = gioco.Split('-');
// parti[0] = Titolo
// parti[2] = Anno (convertire in int)
// parti[5] = Valutazione (contare β˜…)

Informazioni per la Verifica

Istruzioni Finali

  1. Tempo a disposizione:

1:30 per chi ha PDP 2 ore

  1. Consegna:

Alla fine del tempo, consegnare il progetto completo con tutti i file sorgente.

  1. Valutazione:

Oltre al funzionamento, verrΓ  valutata anche la pulizia del codice e l'organizzazione dell'interfaccia.

  1. Buona fortuna!

Ricorda di applicare tutto ciΓ² che abbiamo imparato con ListBox, ComboBox e ordinamento con lambda. NON DIMENTICARE LE INIZIALI!