Vai al contenuto

Verifica guidata: preventivo fotovoltaico

Verifica C# - Calcolatore Preventivo Fotovoltaico

Obiettivo

Completare il programma Windows Form in C# che calcola il preventivo per un impianto fotovoltaico. Il programma deve:

  • Calcolare il prezzo base secondo il tipo di installazione
  • Applicare eventuali sconti (Cliente Fedele / Bonus Ristrutturazione)
  • 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
    rdbTetto.Checked = true;     // Installazione Tetto selezionata
    ckFedele.Checked = false;
    ckBonus.Checked = false;

    // 3. Listino prezzi da mostrare all'avvio
    txtMenu.Text =
        "\tLISTINO PREZZI:\r\n" +
        "INSTALLAZIONE A TETTO:\r\n" +
        "\t1.200 € per kW\r\n" +
        "INSTALLAZIONE A TERRA:\r\n" +
        "\t1.500 € per kW\r\n" +
        "INSTALLAZIONE IN FACCIATA:\r\n" +
        "\t2.000 € per kW";
}

// EVENTO click Calcola
private void btnCalcola_Click(object sender, EventArgs e)
{
    double tot = 0;
    double kW = 0;

    // COSTANTI - PREZZI PER kW
    double PREZZO_TETTO = 1200;
    double PREZZO_TERRENO = 1500;
    double PREZZO_FACCIATA = 2000;

    // 1. Controllo campo vuoto
    if (String.IsNullOrEmpty(txtkW.Text))
    {
        MessageBox.Show("Inserisci la potenza in kW!", "Errore", MessageBoxButtons.OK, MessageBoxIcon.Warning);
        return;
    }

    try
    {
        // 2. Converti testo in numero
        kW = Convert.ToDouble(txtkW.Text);

        // 3. CALCOLO PREZZO BASE
        // --- COMPLETARE ---
        // Se rdbTetto.Checked → prezzo base = kW * 1200
        // Se rdbTerreno.Checked → prezzo base = kW * 1500
        // Se rdbFacciaia.Checked → prezzo base = kW * 2000

        if (rdbTetto.Checked)
        {
            tot = kW * PREZZO_TETTO;
        }
        else if (rdbTerreno.Checked)
        {
            // COMPLETARE
        }
        else if (rdbFacciaia.Checked)
        {
            // COMPLETARE
        }

        // 4. APPLICA SCONTO IMPIANTO GRANDE (se kW > 10)
        if (kW > 10)
        {
            tot = tot * 0.92;  // -8%
        }

        // 5. APPLICA SCONTO CLIENTE FEDELE
        // --- COMPLETARE ---
        if (ckFedele.Checked)
        {
            // APPLICA SCONTO 5%
        }

        // 6. APPLICA SCONTO BONUS RISTRUTTURAZIONE
        // --- COMPLETARE ---
        if (ckBonus.Checked)
        {
            // APPLICA SCONTO 15%
        }

        // 7. MOSTRA IL TOTALE NELLA LABEL
        lblTot.Text = tot.ToString("C");
        lblTot.ForeColor = DefaultForeColor;
        lblTot.Visible = true;
    }
    catch (FormatException)
    {
        // 8. 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 preventivo
private void nuovoPreventivoToolStripMenuItem_Click(object sender, EventArgs e)
{
    // RESET dei controlli
    txtkW.Text = "";
    rdbTetto.Checked = true;
    ckFedele.Checked = false;
    ckBonus.Checked = false;
    lblTot.Visible = false;
}

Supporto Step-by-Step

Passo 1: Calcolo Prezzo Base

Completare la parte mancante:

else if (rdbTerreno.Checked)
{
    tot = kW * PREZZO_TERRENO;  // kW * 1500
}
else if (rdbFacciaia.Checked)
{
    tot = kW * PREZZO_FACCIATA; // kW * 2000
}

Passo 2: Applicazione Sconto Cliente Fedele

Completare la parte mancante:

if (ckFedele.Checked)
{
    tot = tot * 0.95;  // -5% (100% - 5% = 95% = 0.95)
}

Passo 3: Applicazione Sconto Bonus Ristrutturazione

Completare la parte mancante:

if (ckBonus.Checked)
{
    tot = tot * 0.85;  // -15% (100% - 15% = 85% = 0.85)
}

Istruzioni per l'alunno

  • Completare la sezione "CALCOLO PREZZO BASE" con if/else usando le RadioButton
  • Completare le sezioni "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)

Tabella prezzi di riferimento:

Tipo InstallazionePrezzo per kW
Tetto1.200 €/kW
Terreno1.500 €/kW
Facciaia2.000 €/kW

Sconti applicabili:

  • Impianto > 10 kW → -8% (già implementato)
  • Cliente Fedele → -5% (da completare)
  • Bonus Ristrutturazione → -15% (da completare)

Criteri di valutazione semplificati

DescrizionePunti
Completamento calcolo prezzo base (punti 3 e 4)6
Applicazione corretta sconti Cliente Fedele4
Applicazione corretta sconto Bonus Ristrutturazione4
Funzionamento generale e assenza di errori4
Totale18