IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Fonction "transfert d'argent" entre 2 comptes bancaires


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Fonction "transfert d'argent" entre 2 comptes bancaires
    Bonjour

    J'ai un devoir à faire et j'ai une dernière question à laquelle je n'arrive pas à répondre.

    J'ai créer une classe qui s'appelle "compte" et dans laquelle on trouve à la fois le numéro de compte ainsi que la balance du compte. J'ai également créer diverses autres fonctions dont:
    - fonction compte vide
    - fonction obtenir le numero de compte
    - fonction obtenir la balance du compte
    - fonction definir la balance du compte
    - fonction définir le numéro de compte
    - fonction de débit du compte
    - fonction de crédit du compte

    Et maintenant je dois faire une fonction transfert qui correspond naturellement au fait que je dois débiter un premier compte pour créditer le deuxième. Ca a l'air simple mais j'ai un souci (qui est sympa si votre banque vous fait ça): j'arrive à créditer le premier compte mais ça ne débite pas pour autant le deuxième ...

    Les recommandations du devoir sont:
    - deux entrées: 1 compte et un int
    - sortie: booléen
    ==> transfer(other: account, amount:int): boolean
    - il faut que amount soit supérieur ou égal à 0
    - il faut que la balance du compte débiteur soit suffisante


    J'ai fait la chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    bool account::transfer(account other, int amount){
        if (amount >=0 & other.get_balance() >= amount)
            {credit(amount);
            other.debit(amount);
            return true;}
        else
            {return false;}
    }
    En terme de test, j'ai fait ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
        cout << "Invalid parameter: too low balance" << endl;
        cout << acc_credit.transfer(acc_debit,300) << endl;
        acc_credit.println();
        acc_debit.println();
        cout << endl;
     
        cout << "Valid parameter (transfer of 50)" << endl;
        cout << acc_credit.transfer(acc_debit,50) << endl;
        acc_credit.println();
        acc_debit.println();
    Donc comme je l'ai dit plus tôt, le compte qui doit gagner de l'argent gagne bien de l'argent mais celui qui doit en perdre, ne perd rien. J'ai essayé différentes techniques comme réutiliser set_balance que j'ai défini plus tôt dans mon devoir mais le résultat reste le même

    Si vous avez une petite idée, merci d'avance

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    amount >=0 & other.get_balance() >= amount
    ça ne serait pas plutôt :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    amount >=0 && other.get_balance() >= amount

    Ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    transfer(account other, int amount)
    Tu va effectuer une copie de other et ça sera la copie qui sera débitée.
    Il faut utiliser une référence dans ce cas là.

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci mais je ne comprends pas trop le principe de la copie et de la référence (qu'appelez vous d'ailleurs référence?)

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Le passage par référence :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void fonction(Type & xbis);
     
     
    Type x;
    fonction(x);
    La référence ets en fait un pointeur qui va se comporter exactement comme l'objet pointé.

    Pour la copie, il y a des copies quand tu retourne quelque chose, quand tu passe une variable par paramètre, quand tu fait x = x + 1 au lieu de faire x += 1 etc...

    Après ce sont des bases du C++, je te conseillerais de lire un des nombreux tutoriels pour apprendre les bases.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 705
    Points
    2 705
    Par défaut
    Quelques conseils annexes :

    1. Les noms de classes commencent habituellement par une majuscule ;

    2. balance, dans cette acception, est un mot anglais; en français, on dit solde ;

    3. en C++, on ne met généralement pas les accolades en fin de ligne.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 692
    Points
    30 692
    Par défaut
    Salut,

    Accessoirement :

    Une fois qu'un compte bancaire est créé, son numéro ne change plus, il est donc parfaitement inutile (et dangeureux!!!) de créer une fonction qui défini ce numéro.

    Dans la même veine : le solde du compte ne peut être défini qu'à la création du compte (si la personne arrive directement avec des sous lors de l'ouverture, par exemple), et encore!!! : il n'est pas exclu que ce premier dépot d'argent doive être considéré comme... la première transaction effectuée sur le compte

    Par la suite, toute modification du compte passera d'office par une opération de débit ou de crédit.

    Il est donc parfaitement inutile (et tout aussi dangeureux !!! ) de créer une fonction de définition du solde

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    @neckara: merci mais vu le reste du niveau du devoir, l'appel à des pointeurs et compagnie est hors propos et même hors sujet. Si j'en utilise, ils vont me dire que ça n'est pas encore le moment de le faire.

    @oodini: Ok merci pour les conseils. Pour balance, désolé, je fais mes études en anglais, j'en perds mon français

    @koala01: Ok sur le principe mais c'est un devoir, s'ils me demandent de créer ces fonctions, même si elles peuvent s'avérer idiotes, je n'ai pas le choix, je dois les créer, je n'ai pas à discuter leur utilité ou pas.

    Merci pour vos réponses en tout cas, désolé pour la réponse tardive

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par commodoreevic Voir le message
    @neckara: merci mais vu le reste du niveau du devoir, l'appel à des pointeurs et compagnie est hors propos et même hors sujet. Si j'en utilise, ils vont me dire que ça n'est pas encore le moment de le faire.
    Je vois très mal comment tu pourrais faire une fonction qui modifie la valeur d'un paramètre passé en argument sans utiliser de pointeur ou de référence.

    A moins de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    account account::transfer(account other, int amount)
    {
         //....
         return other;
    }
     
    account other, acc;
    other = acc.transfer(other, 100);
    Mais c'est pas super... et tu ne peux plus retourner un bool.
    Dans ce cas là, je suppose que tu ne peux pas lancer d'exception non plus, la seule solution serait de retourner un compte invalide pour retourner false et le compte other pour retourner true.

  9. #9
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci Neckara mais je dois retourner un bool obligatoirement. J'ai rendu le devoir en disant que cette partie n'était pas correcte et demandant également une aide ou un indice pour que je puisse le corriger. Mais j'attends toujours une réponse de leur part. Quand j'aurai la réponse, je la posterai.

  10. #10
    Futur Membre du Club
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Je viens de la trouver la solution, elle est plus que simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    account account::transfer(account& other, int amount)
    au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    account account::transfer(account other, int amount)

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 128
    Points : 33 042
    Points
    33 042
    Billets dans le blog
    4
    Par défaut
    euh oui, c'est ce qu'ils te disent depuis le début...
    par défaut les paramètres sont passés par copie, pour travailler sur l'original tu dois passer ton paramètre par référence ou utiliser un pointeur vers celui-ci.

    Citation Envoyé par commodoreevic Voir le message
    @neckara: merci mais vu le reste du niveau du devoir, l'appel à des pointeurs et compagnie est hors propos et même hors sujet. Si j'en utilise, ils vont me dire que ça n'est pas encore le moment de le faire.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/12/2008, 09h07
  2. Réponses: 2
    Dernier message: 15/05/2008, 22h26
  3. Réponses: 0
    Dernier message: 14/03/2008, 00h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo