Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    12

    bilancio di una famiglia - problema con date

    Ciao a tutti. Per un esame devo scrivere il programma Java per la gestione di un bilancio famigliare. Non vi sto chiedendo di scrivermi il programma, ma qualche dritta, quella magari sì.

    Le voci contenute nel bilancio sono divise naturalmente in entrate e uscite. Di ogni voce si ha l'importo, la descrizione e la data.

    L'utente deve essere in grado di fare ricerche per data e per importo.

    Non ho ancora praticamente iniziato. Ho solo pensato di creare 3 vettori: uno per le operazioni, uno per le descrizioni e uno per le date. Gli indici uguali associano le date giuste con gli importi giusti.

    La prima domanda è se vi sembra una strada praticabile.


    Seconda questione:
    ho un problema con l'inserimento delle date. Non so se mi convenga creare dei nuovi GregorianCalendar da inserire nel mio vettore delle date oppure mantenere le date come interi e poi confrontarle.
    Terrei i Gregorian Calendar ma il costruttore che ho ideato li crea in questo modo:

    public void deposit(double ammontare, String descrizione, int anno, int mese, int giorno ) {
    operazioni.add(ammontare);
    descrizioni.add(descrizione);
    Calendar data = new GregorianCalendar(anno,mese,giorno);
    date.add(data);
    }

    E il problema è poi che si chiamano tutti nello stesso modo, "data", e non so come confrontarli..

    Grazie per l'aiuto che mi darete.

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: bilancio di una famiglia - problema con date

    Originariamente inviato da ffarr
    Di ogni voce si ha l'importo, la descrizione e la data.

    Ho solo pensato di creare 3 vettori: uno per le operazioni, uno per le descrizioni e uno per le date.
    No, mi spiace. Già qui non ci siamo. Ti complicheresti solo la vita, dovendo gestire più vettori da dover tenere "allineati" come dati e posizioni/dimensioni. Oltretutto scriveresti più codice e non proprio nell'ottica OOP.

    La soluzione è modellare le cose meglio. Una "voce" rappresenta un insieme di dati? Allora dovresti "modellarla" con una apposita classe es. Movimento che contiene i campi necessari a descrivere questa entità. Quindi faresti un array/lista di oggetti Movimento, più semplice da gestire e più nell'ottica OOP.

    Originariamente inviato da ffarr
    Terrei i Gregorian Calendar ma il costruttore che ho ideato li crea in questo modo:

    public void deposit(double ammontare, String descrizione, int anno, int mese, int giorno ) {

    E il problema è poi che si chiamano tutti nello stesso modo, "data", e non so come confrontarli..
    Quello postato non è un "costruttore", comunque cosa vuoi dire con "si chiamano tutti nello stesso modo"?? Hai più oggetti GregorianCalendar (occhio tra l'altro che il mese è 0-based, non parte da 1!) che sono comparabili.
    Se ti riferisci alla variabile 'data' che si vede .... quella è solo locale al metodo, non centra nulla ai fini di come inserire o estrarre gli oggetti da una lista!

    No, comunque a parte questo, ripensa un po' il tutto nell'ottica OOP.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2008
    Messaggi
    12
    Rettifico tutto ciò che ho detto e accolgo a braccia aperte il consiglio. Ho creato una classe Movimento

    public class Movimento{
    String descrizione;
    double importo;
    Calendar data = new GregorianCalendar();
    boolean negativo; //questo boolean è un flag per distinguere le entrate dalle uscite

    public Movimento (String desc, double imp, int anno, int mese, int giorno){
    this.descrizione = desc;
    this.importo = imp;
    this.negativo = (imp<0);
    data.set (Calendar.YEAR, anno);
    data.set (Calendar.MONTH, mese+1);
    data.set (Calendar.DAY_OF_MONTH, giorno);
    }

    }

    e poi sto creando il Bilancio. Per adesso ho giusto fatto il costruttore:

    public class Bilancio {

    Vector<Object> movimenti = new Vector<Object>(0);
    private String cognome;

    public Bilancio (String cognome){
    this.cognome = cognome;
    }

    public void deposit (String desc, double imp, int anno, int mese, int giorno){
    Movimento m = new Movimento (desc, imp, anno, mese, giorno);
    movimenti.add(m);
    }
    }

    Tutti gli oggetti movimento andranno nel vettore movimenti.
    Ho un piccolo problema di codice però: per effetture una ricerca dovrei accedere alla sezione "importo" di ogni oggetto movimento presente nel vettore. (E anche alle data, se voglio fare ricerca per date). Ma non so come accedere a questi parametri.
    In pratica vorrei leggere e fare operazioni sugli importi e le date degli oggetti Movimento presenti nel vettore. Come posso fare?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da ffarr
    Ho creato una classe Movimento

    codice:
    public class Movimento{
    	String descrizione;
    	double importo;
    	Calendar data = new GregorianCalendar();
    	boolean negativo; //questo boolean è un flag per distinguere le entrate dalle uscite
    	
    	public Movimento (String desc, double imp, int anno, int mese, int giorno){
    	       this.descrizione = desc;
    	       this.importo = imp;
    	       this.negativo = (imp<0);
    	       data.set (Calendar.YEAR, anno);
    	       data.set (Calendar.MONTH, mese+1);
    	       data.set (Calendar.DAY_OF_MONTH, giorno);
    	       }
    	
    }
    È già un buon punto ma .... sempre nell'ottica OOP e della "incapsulazione", dovresti: a) mettere i campi come private (privati, non accessibili direttamente dall'esterno) e b) Mettere dei metodi "getter/setter" per accedere ai campi, es. getDescrizione/setDescrizione ecc... Chiaramente valuta tu quali devono essere anche settabili e quali solo leggibili, se necessario.

    Originariamente inviato da ffarr
    e poi sto creando il Bilancio. Per adesso ho giusto fatto il costruttore:

    codice:
    public class Bilancio {
    	
    	Vector<Object> movimenti = new Vector<Object>(0);
    	private String cognome; 
    	
    	public Bilancio (String cognome){
    		this.cognome = cognome;
    		}
    	  
    	public void deposit (String desc, double imp, int anno, int mese, int giorno){
    		Movimento m = new Movimento (desc, imp, anno, mese, giorno);
    		movimenti.add(m);
    		}
    }
    Stai usando i "generics", bene! (quei <.....> ). Ma allora sfrutta i generics in modo sensato. Se tratti oggetti Movimento, allora usa Vector<Movimento>, non Vector<Object> che non ti darebbe alcun vantaggio.

    Originariamente inviato da ffarr
    Ho un piccolo problema di codice però: per effetture una ricerca dovrei accedere alla sezione "importo" di ogni oggetto movimento presente nel vettore. (E anche alle data, se voglio fare ricerca per date). Ma non so come accedere a questi parametri.
    Fai una iterazione sul Vector, con un ciclo for per "indice" su tutta la lunghezza o con un Iterator. Nota che da Java 5 (visto che usi i generics) puoi anche usare il ciclo "for-each".

    Per ogni elemento vai a leggere le proprietà che ti interessano (e ribadisco quanto detto prima, con i metodi getter!) es. getData() o getImporto() e fai i controlli che ti servono per dire se ti serve o no o altri calcoli.


    P.S. Mi pare di capire che il tuo primo "scoglio" sia quello di entrare nell'ottica OOP. Ti suggerisco di approfondire l'argomento perché in Java (come altri linguaggi ad oggetti) è fondamentale.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.