Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775

    [C] - Problema tra classe e main



    sto creando una semplicissima classe ContoCorrente, dove posso impostare il saldo attuale di due conti, depositare e prelevare soldi (con controllo, se voglio prelevare più di quando ho nel conto).. più un'eventuale metodo, che in pratica mi possa trasferire una somma di denare dal primo conto corrente al secondo, o viceversa (sempre con il controllo, se voglio prelevare più di quanto ho)..

    però c'è un problemino: se io nel PRIMO CONTO ho 50euro e nel SECONDO CONTO ne ho 30, e voglio trasferirne 70 nel SOCONDO, così da avere:

    PRIMO CONTO: -20euro
    SECONDO CONTO 100euro

    giustamente il programma mi da errore, dicendo che non posso trasferire 70 euro, perchè ne ho soltanto 50 nel conto..
    però se poi vado a controllare il SECONDO CONTO, mi visualizza 100euro..

    il problema sta che nel Main, io i soldi li trasferisco comunque nel SECONDO CONTO, non tenendo conto se posso oppure no.. il mio problema è proprio questo, come posso gestire questo mio problema?
    cioè come posso far si, che i soldi me li trasferisco SOLO e SOLTANTO, se posso prelevardi dal PRIMO CONTO?
    devo inserire quale controllo? e nel main, o nella classe?

    Main:
    codice:
    /*
     * Classe Main.
     *
     * creare una classe per descrivere il comportamento di un conto corrente
     * bancario, supponendo di poter svolgere almeno le seguenti istruzioni:
     * - deposito
     * - prelevare
     * - chiedere saldo del conto corrente
     *
     * utilizzare la classe creata per creare un programma che trasferisca
     * una somma di denaro tra due conti correnti;
     * creare la classe movimento su conto corrente.
     *
     * 11/10/2011
     */
    package ContoCorrente;
    import javax.swing.*;
    
    public class Main{
        public static void main(String []args){
            int test=-1,scelta,denaro;
            ContoCorrente c=new ContoCorrente();
            ContoCorrente2 c2=new ContoCorrente2();
            
            c.setSaldo(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il saldo attuale del primo conto:")));
            c2.setSaldo(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il saldo attuale del secondo conto:")));
            
            while(test!=0){
                scelta=Integer.parseInt(JOptionPane.showInputDialog("1- Visualizza saldo 1;\n2- Visualizza saldo 2;\n3- Deposita 1;\n4- Deposita 2;\n5- Preleva 1;\n6- Preleva 2;\n7- Scambio 1-2;\n8- Scambio 2-1;\n0- Esci;\n\nScelta: "));
    
                switch(scelta){
                    case 1:{
                        JOptionPane.showMessageDialog(null,c.toString());
                        break;
                    }
                    case 2:{
                        JOptionPane.showMessageDialog(null,c2.toString());
                        break;
                    }
                    case 3:{
                        c.deposito(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il deposito 1:")));
                        break;
                    }
                    case 4:{
                        c2.deposito(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il deposito 2:")));
                        break;
                    }
                    case 5:{
                        c.prelievo(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il prelievo 1:")));
                        break;
                    }
                    case 6:{
                        c2.prelievo(Integer.parseInt(JOptionPane.showInputDialog("Inserisci il prelievo 2:")));
                        break;
                    }
                    case 7:{
                        // Scambio da 1 a 2
                    	denaro=Integer.parseInt(JOptionPane.showInputDialog("Inserisci lo scambio 1 - 2:"));
                    	c.scambioPrel(denaro);
                     	c2.scambioDep(denaro); 
                        break;
                    }
                    case 8:{
                        // Scambio da 2 a 1
                    	denaro=Integer.parseInt(JOptionPane.showInputDialog("Inserisci lo scambio 1 - 2:"));
                    	c2.scambioPrel(denaro);
                    	c.scambioDep(denaro); 
                        break;
                    }
                    case 0:{
                        test=0;
                        break;
                    }
                }
            }
        }
    }
    ContoCorrente:
    codice:
    package ContoCorrente;
    import javax.swing.JOptionPane;
    
    public class ContoCorrente{
        private float deposito;
        private float prelievo;
        private float saldo;
        private float scambioPre;
        private float scambioDep;
        
        public ContoCorrente(){
            deposito=0;
            prelievo=0;
            saldo=0;
            scambioPre=0;
            scambioDep=0;
        }
        //prendo in ingresso il saldo
        public void setSaldo(float s){
            saldo=s;
        }
        public float getSaldo(){
            return saldo;
        }
        public float deposito(float d){
            saldo+=d;
            return deposito;
        }
        public float prelievo(float p){
        	if(saldo-p>=0){
        		saldo-=p;
        	}else{
        		JOptionPane.showMessageDialog(null,"Errore! Non hai abbastanza soldi per scambiare.\nIl tuo saldo attuale è di "+saldo+" euro.");
        	}
            return prelievo;
        }
        
        public float scambioPrel(float scP){
        	if(saldo-scP>=0){
        		saldo-=scP;
        	}else{
        		JOptionPane.showMessageDialog(null,"Errore! Non hai abbastanza soldi per scambiare.\nIl tuo saldo attuale è di "+saldo+" euro.");
        	}
        	return scambioPre;
        }
        public float scambioDep(float scD){
        	saldo+=scD;
        	return scambioDep;
        }
        
        public String toString(){
            String s="";
    
            s+="Saldo: "+saldo+" euro.";
            return s;
        }
    }
    ContoCorrente2:
    codice:
    package ContoCorrente;
    import javax.swing.JOptionPane;
    
    public class ContoCorrente2{
        private float deposito;
        private float prelievo;
        private float saldo;
        private float scambioPre;
        private float scambioDep;
        
        public ContoCorrente2(){
            deposito=0;
            prelievo=0;
            saldo=0;
            scambioPre=0;
            scambioDep=0;
        }
        //prendo in ingresso il saldo
        public void setSaldo(float s){
            saldo=s;
        }
        public float getSaldo(){
            return saldo;
        }
        public float deposito(float d){
            saldo+=d;
            return deposito;
        }
        public float prelievo(float p){
        	if(saldo-p>=0){
        		saldo-=p;
        	}else{
        		JOptionPane.showMessageDialog(null,"Errore! Non hai abbastanza soldi per scambiare.\nIl tuo saldo attuale è di "+saldo+" euro.");
        	}
            return prelievo;
        }
        
        public float scambioPrel(float scP){
        	if(saldo-scP>=0){
        		saldo-=scP;
        	}else{
        		JOptionPane.showMessageDialog(null,"Errore! Non hai abbastanza soldi per scambiare.\nIl tuo saldo attuale è di "+saldo+" euro.");
        	}
        	return scambioPre;
        }
        public float scambioDep(float scD){
        	saldo+=scD;
        	return scambioDep;
        }
        
        public String toString(){
            String s="";
    
            s+="Saldo: "+saldo+" euro.";
            return s;
        }
    }
    Grazie mille..

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E che c'entra il linguaggio C?
    Quello è Java... e ha una sezione dedicata.

    Sposto e correggo il titolo.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Devi, chiaramente, condizionare il deposito alla buona riuscita del prelievo.

    Facendo in quel modo il trasferimento tu esegui sempre prima il prelievo, poi il deposito, qualunque sia l'esito del prelievo.

    Non hai messo alcuna condizione sulla seconda operazione.

    Per non parlare del fatto che il metodo scambioPrel() ha una firma tale da restituire un float... che è sempre 0, visto che dentro al metodo fai solo dei conteggi, ma non vai mai a toccare il valore della variabile "scambioPre", che viene poi restituita.

    Dovresti rivedere quei metodi. Parlando dello scambioPrel() dovrebbe fare queste operazioni:

    1) Controllo se ho un saldo sufficiente per compiere l'operazione
    2) Se non ho un saldo sufficiente, ritorno 0
    3) Se ho un saldo sufficiente, scalo dal conto i soldi e ritorno il valore prelevato

    In questo modo, puoi controllare la transazione:

    1) Se chiamando scambioPrel() ottengo un valore maggiore di zero, allora chiamo scambioDep() passandogli questo valore, altrimenti non faccio nulla.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

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.