Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2008
    Messaggi
    59

    [VB08] classe con risultato sempre zero

    Come esercizio sulle classi, ho creato un’applicazione che calcola interessi e montante dato importo, date di riferimento (inizio periodo e fine periodo) e tasso. Il tutto, tramite la seguente classe:
    codice:
     Public Class Interessi
        Dim capitale As Double ' importo digitato dall'utente
        Dim tasso As Double ' tasso convertito in numero decimale
        Dim tassoPercentuale As Double 'tasso % (digitato dall'utente)
        Dim tempo As Double ' differenza fra le due date
        Dim dataInizioPeriodo As DateTime 'data impostata dall'utente con DateTimePicker
        Dim dataFinePeriodo As DateTime ' data impostata dall'utente con DateTimePicker
        Dim interessi As Double ' importo calcolato dall'applicazione
        Dim montante As Double  ' capitale + interessi (calcolato dall'applicazione)
    
        Public Sub calcolaPeriodo() ' calcolo la differenza fra date
            tempo = dataFinePeriodo.ToOADate - dataInizioPeriodo.ToOADate
        End Sub
        Public Sub calcolaTasso() ' converto il tasso % in decimale
            tasso = tassoPercentuale / 100
        End Sub
        Public Sub calcolaInteressi() ' calcolo gli interessi
            interessi = capitale * tasso * tempo / 365
            interessi.ToString()
    
        End Sub
        Public Sub calcolaMontante() 'calcolo del montante (usata la formula diretta)
            montante = capitale * (1 + (tasso * tempo))
    
        End Sub
        Public Sub vediRisultatoMontante() 'metodo per visualizzare il risultato 
    
            MessageBox.Show(montante.ToString(), "Montante")
    
        End Sub
        Public Sub vediRisultatoInteressi() 'metodo per visualizzare il risultato
            MessageBox.Show(interessi.ToString(), "Interessi")
        End Sub
    End Class
    Nel main, ho inserito il codice
    codice:
      If RadioInteressi.Checked = True Then
                s.calcolaPeriodo() 'calcolo il tempo
                s.calcolaTasso() ' converto il tasso in decimale
                s.calcolaInteressi() ' calcolo gli interessi
                s.vediRisultatoInteressi() ' visualizzo il risultato con messagebox
            End If
    
            If RadioMontante.Checked = True Then ' identica al caso precedente
                s.calcolaPeriodo()
                s.calcolaTasso()
                s.calcolaMontante()
                s.vediRisultatoMontante()
            End If
    Il problema è la messagebox: anziché visualizzare il risultato, mi visualizza sempre 0 (zero).
    Scusandomi x la lunghezza del codice, potreste dirmi dove sbaglio? Grazie in anticipo
    p.s.: sono i miei primi esercizi sulle classi, abbiate pietà.If RadioInteressi.Checked = True Then s.calcolaPeriodo() 'calcolo il tempo s.calcolaTasso() ' converto il tasso in decimale s.calcolaInteressi() ' calcolo gli interessi s.vediRisultatoInteressi() ' visualizzo il risultato con messagebox End If If RadioMontante.Checked = True Then ' identica al caso precedente s.calcolaPeriodo() s.calcolaTasso() s.calcolaMontante() s.vediRisultatoMontante() End If

  2. #2
    A meno che tu non abbia omesso parte del codice della classe, il risultato è sempre 0 perché le variabili in input (capitale, tasso, tassoPercentuale, tempo ecc) sono tutte a 0! In altre parole non vedo membri pubblici, property o costruttori che permettano di impostare i valori delle suddette variabili.
    Chi non cerca trova.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Prima di tutto la classe mi sembra incompleta, ovviamente non hai scritto il restante codice, come inserisce l'utente le variabili??

    Inoltre il calcolo del tempo non mi sembra corretto.

    codice:
      Dim data1 As Double = DateTime.Now.ToOADate - DateTime.Now.AddDays(-10).ToOADate
      Dim data2 As Double = (DateTime.Now - DateTime.Now.AddDays(-10)).TotalDays
    Non danno lo stesso risultato!!
    Ovviamente la differenza tra le due date è 10 gg ma data1 risulta essere 9,99 mentre data2 risulta essere correttamente 10.



    Poi visto che ci siamo, per rendere il codice più leggibile, usa correttamente i nomi dei metodi e variabili. I primi si scrivono secondo le notazioni Pascal ovvero la prima lettera di ogni parola maiuscola. Quindi:

    da

    codice:
    Public Sub calcolaPeriodo() ' calcolo la differenza fra date
            tempo = dataFinePeriodo.ToOADate - dataInizioPeriodo.ToOADate
        End Sub
    a

    codice:
    Public Sub CalcolaPeriodo() ' calcolo la differenza fra date
            tempo = dataFinePeriodo.ToOADate - dataInizioPeriodo.ToOADate
        End Sub
    Non usare le i singoli caratteri per le variabili, tranne ad esempio per i cicli For...Next
    Quindi:

    codice:
     s.calcolaPeriodo()
    a

    codice:
     MyInteressi.calcolaPeriodo()
    Inoltre, anche se funziona correttamente, la MessagBox nella classe mi sembra un pò bruttina.! Forse meglio..

    codice:
    Public Function VediRisultatoInteressi() as string
            return interessi      
        End Sub
    Sbagliare è umano, perseverare è diabolico.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.