P – Calcolatore Biglietto Treno (Guidato)


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/else usando 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).
Torna in alto