P – Calcolatore Biglietto Treno



PEI – Calcolatore Biglietto Treno

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/else o switch.
  • 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.
Torna in alto