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
    Membre régulier
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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
    Membre régulier
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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 éprouvé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 766
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 766
    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
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    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
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  7. #7
    Membre régulier
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    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 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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 026
    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
    Membre régulier
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    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
    Membre régulier
    Inscrit en
    Juin 2012
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2012
    Messages : 9
    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 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 154
    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.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

+ 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