Obiettivo
Realizzare un’applicazione Windows Form in C# che calcoli il prezzo di un biglietto del treno, in base a:
- Tipo di treno (Regionale o Alta Velocità)
- Giorno (Feriale o Festivo)
- Numero di chilometri percorsi
- Sconti per Studente e/o Abbonato
Il programma deve utilizzare e comprendere i seguenti concetti:
- Controlli Windows Form (RadioButton, CheckBox, TextBox, Label, Button, MenuStrip)
- Uso di
String.IsNullOrEmpty(),Convert.ToDouble(),ToString(),MessageBox.Show() - Gestione eccezioni con
try { ... } catch (FormatException) - Utilizzare costanti per le tariffe
Funzionalità richieste
- Listino tariffe in una TextBox.
- L’utente inserisce i chilometri da percorrere in una TextBox.
- Se il campo è vuoto, appare un MessageBox di errore.
- Se l’utente scrive caratteri non numerici, l’errore viene gestito nel blocco
catch (FormatException)e viene mostrato un messaggio di errore in una Label (rossa). - Il prezzo base viene scelto in base al tipo di treno e al giorno:
| Tipo di Treno | Feriale | Festivo |
|---|---|---|
| Regionale | 0,10 €/km | 0,12 €/km |
| Alta Velocità | 0,25 €/km | 0,30 €/km |
- Sconti:
- KM > 300 → -10%
- Studente → -10%
- Abbonato → -20%
- Il prezzo totale viene mostrato in una Label (lblTot) formattata come valuta.
- La Label è inizialmente invisibile (
Visible = false). - Dal menù o dal pulsante “Esci” l’applicazione si chiude dopo conferma (
MessageBoxcon Yes/No). - L’opzione “Nuovo calcolo” resetta tutti i campi e ripristina i valori di default.
Indicazioni di progettazione
Nel costruttore del form (public Form1()) vanno inserite le inizializzazioni dei controlli:
lblTot.Visible = false; rdbReg.Checked = true; rdbFer.Checked = true; ckStu.Checked = false; ckAbb.Checked = false; txtMenu.Text = "...";
Gestione eccezioni – Usare try { ... } catch (FormatException) per intercettare errori di formato (es. testo non numerico):
try {
double km = Convert.ToDouble(txtKm.Text);
}
catch (FormatException) {
lblTot.Visible = true;
lblTot.ForeColor = Color.Red;
lblTot.Text = "Errore: Inserire solo numeri!";
}
Metodi utili:
String.IsNullOrEmpty(txtKm.Text)→ controlla se la TextBox è vuotaConvert.ToDouble(txtKm.Text)→ converte il testo in numerolblTot.Text = tot.ToString("C")→ visualizza il totale in formato valutaMessageBox.Show("Messaggio", "Titolo", MessageBoxButtons.OK, MessageBoxIcon.Warning)→ avvisi o conferme
Interfaccia grafica e convenzioni sui nomi
IMPORTANTE: Tutti i controlli e le variabili principali devono includere il proprio cognome o iniziali per evitare copie tra studenti.
Esempi:
btnCalcola_Rossi,txtKm_Rossi,lblTot_Rossidouble tot_Rossi = 0;,int km_Rossi = 0;
| Controllo | Nome suggerito | Descrizione |
|---|---|---|
| Label | lblTitolo_Rossi, lblTot_Rossi | Testo guida e risultato finale |
| TextBox | txtKm_Rossi | Inserimento chilometri |
| GroupBox | grpTreno_Rossi | Contiene le RadioButton del tipo di treno |
| RadioButton | rdbReg_Rossi, rdbAV_Rossi | Tipo treno (Regionale o Alta Velocità) |
| RadioButton | rdbFer_Rossi, rdbFes_Rossi | Tipo giorno (feriale o festivo) |
| CheckBox | ckStu_Rossi, ckAbb_Rossi | Selezione sconti |
| Button | btnCalcola_Rossi, btnEsci_Rossi | Calcola prezzo / Chiude il programma |
| MenuStrip | menuMain_Rossi | File → Esci (con conferma), Nuovo calcolo |
| Label | lblMenu_Rossi | Mostra il listino prezzi all’avvio |
Criteri di valutazione
| Descrizione | Punti |
|---|---|
| Interfaccia completa con tutti i controlli richiesti | 4 |
| Inizializzazioni corrette nel costruttore del form | 2 |
Uso corretto di try/catch con FormatException |
3 |
Gestione campo vuoto e messaggi con MessageBox |
2 |
Uso corretto dei metodi richiesti (ToString(), Convert.ToDouble(), String.IsNullOrEmpty()) |
2 |
| Funzionamento corretto della logica di calcolo e sconti | 4 |
| MenuStrip funzionale con “Esci” e “Nuovo calcolo” | 1 |
| Senza nomi personalizzati dei controlli/variabili | Voto massimo 3 |
| Totale | 18 |
