Partage
  • Partager sur Facebook
  • Partager sur Twitter

Gestion compte bancaire

Gestion numéros des comptes

Sujet résolu
    17 septembre 2011 à 17:48:21

    Bonjour à tous et à toutes.
    Je débute en java et comme tout bon débutant j'ai un problème, surtout svp soyez indulgent avec moi...
    je fais actuellement un petit programme qui gère les opérations bancaires. Tout mon programme fonctionne normalement, sauf que j'aimerais apporter une petite amélioration au niveau de l'attribution des numéros de comptes. En effet jusqu'ici je faisais le code suivant (dans le main) pour créer un compte:

    Compte c1 = new Compte(1, "Durant", 50000, 5000, 6000);
    Compte c2 = new Compte(2, "Dupont");
    

    Je cherche donc une solution me permettant d'attribuer les numéros de compte automatiquement en mettant à la place de 1 et 2 une variable qui varie au fur et à mesure qu'on crée des nouveaux comptes.
    à noter que j'ai plusieurs constructeurs.

    Pour résoudre ça j'ai pensé à créer une variable static dans la classe et l'incrémenter dans les constructeurs à chaque appel ça ne marche pas car à chaque fois que tu appelles ton constructeur il crée un compte avec le numéro 1 mais après quand tu l'appelles pour la deuxième fois il ne sais pas que tu l'as déjà appelé la première fois et donc i sera toujours égal 1. de plus il y a plusieurs constructeurs du coup tu auras chaque constructeur qui mettra un compte 1 ce qui impossible dans une banque d'avoir le même numéro de compte.
    Merci d'avance de votre aide et bon weekend à toutes et à tous !!
    • Partager sur Facebook
    • Partager sur Twitter
      17 septembre 2011 à 18:45:44

      Salut.

      Si si avec une variable static de type int ça marche très bien. Il suffit de l'initialiser à 1 (pas dans le constructeur évidemment, directement dans sa déclaration), puis dans tes constructeurs tu utilise la valeur de cette variable comme numéro de compte et tu l'incrémente à la fin de ton constructeur.

      A mon avis ton erreur a été d'initialiser cette variable dans le constructeur donc forcément à chaque appel du constructeur elle vaut 1. Postes le code qui ne fonctionne pas au pire...
      • Partager sur Facebook
      • Partager sur Twitter
        17 septembre 2011 à 18:53:27

        il y a plusieurs constructeurs...
        même si j'initialise à 1 , si j'appelle les constructeurs au même moment j'aurai forcement des numéros identiques...
        • Partager sur Facebook
        • Partager sur Twitter
          17 septembre 2011 à 18:55:51

          Dans la mesure où "au même moment" n'existe pas sur une machine unique (on peut considérer des exceptions avec les multi-coeurs mais bon), je ne vois pas où est le souci, sauf éventuellement une erreur dans ton code.
          • Partager sur Facebook
          • Partager sur Twitter
            17 septembre 2011 à 19:04:30

            tu parle de faire ceci :
            public static int numero = 1;
                 public Compte(String titulaire) {
                    //this.numCompte = numCompte;
                    this.titulaire = titulaire;
                   // this.solde = solde;
                    this.decMax = 800;
                    this.debMax = 1000;
                    numero++;
                }
            
                public Compte(String titulaire, double solde, double decMax, double debMax) {
                   // this.numCompte = numCompte;
                    this.titulaire = titulaire;
                    this.solde = solde;
                    this.debMax = debMax;//débit maximum
                    this.decMax = decMax;// découvert maximum
                       numero++;
                }
            
            • Partager sur Facebook
            • Partager sur Twitter
              17 septembre 2011 à 19:14:28

              A peu de choses près, puisqu'il faut évidemment un attribut qui conserve la valeur de numero à l'instant où tu instancie ton objet.

              Quelque chose comme ça :
              public static int numero = 1;
              
              public Compte(String titulaire) {
                  this.numCompte = numero++;
                  this.titulaire = titulaire;
                  // this.solde = solde;
                  this.decMax = 800;
                  this.debMax = 1000;
              }
              
              public Compte(String titulaire, double solde, double decMax, double debMax) {
                  this.numCompte = numero++;
                  this.titulaire = titulaire;
                  this.solde = solde;
                  this.debMax = debMax;//débit maximum
                  this.decMax = decMax;// découvert maximum
              }
              
              • Partager sur Facebook
              • Partager sur Twitter
                17 septembre 2011 à 19:29:42

                ça ne marche pas tjrs(j'ai 3 comme numero de compte à chaque fois. voila mon main et ma classe compte.(en commentaire ce sont des changement que je compte faire une fois que j'aurai la solution sur les numéros de comptes):
                /*
                 * To change this template, choose Tools | Templates
                 * and open the template in the editor.
                 */
                package pootd1;
                
                /**
                 *
                 * @author Utilisateur
                 */
                public class Main {
                
                    /**
                     * @param args the command line arguments
                     */
                    public static void main(String[] args) {
                        // TODO code application logic here
                        Compte c1 = new Compte("Dupont");
                        c1.crediterCompte(1000);
                        Compte c2 = new Compte("Durant", 50000, 5000,6000);
                        if (c1.debiterCompte(300) == false) {
                            System.out.println("impossible de débiter le compte c1");
                        }
                        if (c2.debiterCompte(600) == false) {
                            System.out.println("Impossible de débiter le compte c2");
                        }
                        c1.crediterCompte(500);
                        System.out.println("" + c1.toString());
                        System.out.println("" + c2.toString());
                        c2.virement(c1, 1000);
                        System.out.println("" + c1.toString());
                        System.out.println("" + c2.toString());
                    }
                }
                


                classe compte :

                /*
                 * To change this template, choose Tools | Templates
                 * and open the template in the editor.
                 */
                package pootd1;
                
                /**
                 *
                 * @author Utilisateur
                 */
                public class Compte {
                
                    private int numCompte;
                    private String titulaire;
                    private double solde;
                    private double decMax;// découvert maximum
                    private double debMax;//débit maximum
                    //private boolean decouvert;
                    
                    /* public Compte(int numCompte, String titulaire, double solde) {
                    this.numCompte = numCompte;
                    this.titulaire = titulaire;
                    this.solde = solde;
                    this.decMax = 800;
                    this.debMax = 1000;
                    }*/
                
                  /*  public Compte(int numCompte, String titulaire) {
                        this.numCompte = numCompte;
                        this.titulaire = titulaire;
                        this.solde = 0;
                        this.decMax = 800;
                        this.debMax = 1000;
                    }
                
                    public Compte(int numCompte, String titulaire, double solde, double decMax) {
                        this(numCompte, titulaire);
                        this.solde = solde;
                        this.decMax = decMax;
                    }
                
                    public Compte(int numCompte, String titulaire, double solde, double decMax, double debMax) {
                        this(numCompte, titulaire, solde, decMax);
                        this.debMax = debMax;
                    }*/
                    public static int numero = 1;
                     public Compte(String titulaire) {
                        this.numCompte = numero++;
                        this.titulaire = titulaire;
                       // this.solde = solde;
                        this.decMax = 800;
                        this.debMax = 1000;
                    }
                
                    public Compte(String titulaire, double solde, double decMax, double debMax) {
                        this.numCompte = numero++;
                        this.titulaire = titulaire;
                        this.solde = solde;
                        this.debMax = debMax;//débit maximum
                        this.decMax = decMax;// découvert maximums
                    }
                
                    /**
                     * @return the numCompte
                     */
                    public int getNumCompte() {
                        return numCompte;
                    }
                
                    /**
                     * @return the titulaire
                     */
                    public String getTitulaire() {
                        return titulaire;
                    }
                
                    /**
                     * @return the solde
                     */
                    public double getSolde() {
                        return solde;
                    }
                
                    /**
                     * @param solde the solde to set
                     */
                    public void setSolde(double solde) {
                        this.solde = solde;
                    }
                
                    /**
                     * @return the decMax
                     */
                    public double getDecMax() {
                        return decMax;
                    }
                
                    /**
                     * @param decMax the decMax to set
                     */
                    public void setDecMax(double decMax) {
                        this.decMax = decMax;
                    }
                
                    /**
                     * @return the debMax
                     */
                    public double getDebMax() {
                        return debMax;
                    }
                
                    /**
                     * @param debMax the debMax to set
                     */
                    public void setDebMax(double debMax) {
                        this.debMax = debMax;
                    }
                
                    /**
                     * retourne false si le compte n'est pas à découvert
                     * sinon si le compte est à découvert retourne true
                     */
                    public boolean estDecouvert() {
                        if (solde >= 0) {
                            return false;
                        } else {
                            return true;
                        }
                    }
                
                    /**
                     * méthode qui permet d'ajouter de l'argent dans le compte
                     * @param montant 
                     */
                    public void crediterCompte(double montant) {
                        if (montant > 0) {
                            this.solde += montant;
                        } else {
                            return;
                        }
                    }
                
                    /**
                     * méthode qui permet de retirer de l'argent
                     * @param montantDebiter 
                     */
                    public boolean debiterCompte(double montantDebiter) {
                        if (montantDebiter > 0 && montantDebiter <= debMax && solde - montantDebiter >= -decMax) {
                            solde -= montantDebiter;
                            return true;
                        } else {
                
                            return false;
                        }
                    }
                
                    /**
                     * permet de d'effectuer un virement
                     * on vérifie que le compte qui va être débiter est débitable
                     * si c'est le cas on le débite, on crédite l'autre compte de la somme débitée et on retourne true
                     * sinon on retourne false
                     */
                    public boolean virement(Compte c, double montant) {
                        if (this.debiterCompte(montant)) {
                            c.crediterCompte(montant);
                            return true;
                        } else {
                            return false;
                        }
                    }
                
                    /**
                     * 
                     * permet d'afficher les caractéristiques d'un compte
                     */
                    @Override
                    public String toString() {
                        String message = "Compte n°" + numero + " appartenant à " + titulaire + " \n";
                        message += "Ayant un solde de " + solde + " \n";
                        message += "le decouvert maximal autorisé est de " + decMax + " \n";
                        message += "le debit maximal autorisé est de " + debMax + " \n";
                        if (estDecouvert() == true) {
                            message += "vous êtes à découvert";
                        }
                        return message;
                    }
                }
                
                • Partager sur Facebook
                • Partager sur Twitter
                  17 septembre 2011 à 19:35:39

                  L'erreur est dans la méthode toString() de ta classe Compte, tu affiches la valeur de ta variable static numero au lieu d'afficher numCompte.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    17 septembre 2011 à 19:42:07

                    Merci beaucoup à toi !!!!
                    Tout marche merci beaucoup !!!
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Gestion compte bancaire

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown