Obiettivo
Completare il programma Windows Form in C# che calcola il prezzo di un biglietto del treno, basato su:
- Tipo di treno (Regionale / Alta Velocità)
- Giorno (Feriale / Festivo)
- Numero di chilometri
- Sconti (Studente / Abbonato)
Il programma deve gestire errori di input e mostrare il prezzo finale nella Label lblTot.
Codice da completare
// Inizializzazioni nel costruttore
public Form1()
{
InitializeComponent();
// Rendere invisibile la label del totale
lblTot.Visible = false;
// Valori di default
rdbReg.Checked = true;
rdbFer.Checked = true;
ckStu.Checked = false;
ckAbb.Checked = false;
// Listino prezzi da mostrare all'avvio
txtMenu.Text =
"\tLISTINO PREZZI:\r\n" +
"TRENO REGIONALE:\r\n" +
"\tFeriale 0,10 €/km \r\n" +
"\tFestivo 0,12 €/km \r\n" +
"ALTA VELOCITÀ:\r\n" +
"\tFeriale 0,25 €/km \r\n" +
"\tFestivo 0,30 €/km";
}
// Evento click del pulsante Calcola
private void btnCalcola_Click(object sender, EventArgs e)
{
double tot = 0;
double km = 0;
//COSTANTI
double TARIFFARFER = 0.10;
double TARIFFARFES = 0.12;
double TARIFFAAFER = 0.25;
double TARIFFAAFES = 0.30;
// Controllo se il campo km è vuoto
if (String.IsNullOrEmpty(txtKm.Text))
{
MessageBox.Show("Inserisci i chilometri!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
// Converti il testo in numero
double km = Convert.ToDouble(txtKm.Text);
// COMPLETARE: calcolo prezzo base secondo tipo treno e giorno
// Se rdbReg.Checked → prezzo base = km * 0,10 (feriale) o 0,12 (festivo)
// Se rdbAV.Checked → prezzo base = km * 0,25 (feriale) o 0,30 (festivo)
// COMPLETARE: applica sconti se ckStu.Checked o ckAbb.Checked
// Mostra il totale nella Label lblTot
lblTot.Text = tot.ToString("C");
lblTot.ForeColor = DefaultForeColor;
lblTot.Visible = true;
}
catch (FormatException)
{
// Mostra messaggio di errore se il formato non è corretto
lblTot.Text = "Errore: inserire solo numeri!";
lblTot.ForeColor = Color.Red;
lblTot.Visible = true;
}
}
// Evento click Esci
private void btnEsci_Click(object sender, EventArgs e)
{
if (MessageBox.Show("Vuoi uscire?", "Conferma", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
{
Application.Exit();
}
}
// Evento Nuovo calcolo
private void nuovoCalcoloToolStripMenuItem_Click(object sender, EventArgs e)
{
// RESET dei controlli ai valori di default
txtKm.Text = "";
rdbReg.Checked = true;
rdbFer.Checked = true;
ckStu.Checked = false;
ckAbb.Checked = false;
lblTot.Visible = false;
}
Indicazioni per l’alunno
- Completare il calcolo del prezzo base usando
if/elseoswitch. - Applicare correttamente gli sconti (studente/abbonato).
- Non modificare i nomi dei controlli che includono il proprio cognome (es.
lblTot_Rossi). - Gestire gli errori di inserimento con il
catch (FormatException). - Lasciare tutte le inizializzazioni nel costruttore.