Obiettivo
Completare il programma Windows Form in C# che calcola il prezzo del biglietto del treno. Il programma deve:
- Calcolare il prezzo base secondo tipo di treno e giorno.
- Applicare eventuali sconti (Studente / Abbonato).
- Gestire errori di inserimento e campo vuoto.
- Mostrare il prezzo finale nella Label
lblTot.
Codice guidato da completare
// COSTRUTTORE del Form
public Form1()
{
InitializeComponent();
// 1. Rendere invisibile la Label del totale
lblTot.Visible = false;
// 2. Valori di default per i RadioButton e CheckBox
rdbReg.Checked = true; // Treno Regionale selezionato
rdbFer.Checked = true; // Giorno Feriale selezionato
ckStu.Checked = false;
ckAbb.Checked = false;
// 3. 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 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;
// 1. Controllo campo vuoto
if (String.IsNullOrEmpty(txtKm.Text))
{
MessageBox.Show("Inserisci i chilometri!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
try
{
// 2. Converti testo in numero
double km = Convert.ToDouble(txtKm.Text);
// 3. CALCOLO PREZZO BASE
// --- COMPLETARE ---
// 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)
// 4. APPLICA SCONTI
// --- COMPLETARE ---
// Se ckStu.Checked → sconto 10%
// Se ckAbb.Checked → sconto 20%
// ATTENZIONE: applicare uno sconto alla volta sul prezzo base oppure cumulativo
// 5. MOSTRA IL TOTALE NELLA LABEL
lblTot.Text = tot.ToString("C");
lblTot.ForeColor = DefaultForeColor;
lblTot.Visible = true;
}
catch (FormatException)
{
// 6. Gestione errore: campo non numerico
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
txtKm.Text = "";
rdbReg.Checked = true;
rdbFer.Checked = true;
ckStu.Checked = false;
ckAbb.Checked = false;
lblTot.Visible = false;
}
Istruzioni per l’alunno
- Completare la sezione “CALCOLO PREZZO BASE” con
if/elseusando le RadioButton. - Completare la sezione “APPLICA SCONTI” considerando le CheckBox.
- Non modificare i nomi dei controlli.
- Lasciare tutte le inizializzazioni nel costruttore.
- Gestire gli errori di input con il
catch (FormatException).