Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/04/2020, à 14:59

chris7522

Difficulté pour coder petit programme Compte banquaire (C++)

Bonjour ,
Désolé de vous "prendre la tete" régulierement avec mes petits problèmes . smile
  Je suis encore sur ce petit code de compte bancaire , plus ou moins bien fait .
J'ai 2 classes :
  L'une avec les identifiants :

#ifndef IDENTIFIANT_H_
#define IDENTIFIANT_H_
#include <string>

class Identifiant
{
 public:
	Identifiant();
	~Identifiant();
	void afficherIdentifiant();
	std::string get_nom();
	std::string get_prenom();

	void set_nom(std::string x);
	void set_prenom(std::string x);

 private:
	std::string nom;
	std::string prenom;
};

L'autre avec les méthodes du compte:

#ifndef COMPTE_H_
#define COMPTE_H_
#include "identifiant.h"
#include <string>
class Compte
{
 public:
	Compte();
	~Compte();
	void saisir(long numCpte,double solde);
	void crediter(double montant);
	bool debiter(double montant);
	bool virement(double montant,Compte &c);
	int get_solde();
	void set_solde(int b);
	void afficher();
 private:
	double m_solde;
	long m_numCompte;


};

#endif /* COMPTE_H_ */

et puis le main :

#include "compte.h"

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main()
{
 Compte ccp, livretA;
 Identifiant identifiant;
 int a(0);

 identifiant.afficherIdentifiant();
 do {
 cout << "Quelle operation souhaitez vous faire ?" << endl;

 cout << "1 : Afficher le solde de votre compte CCP: " << endl;
 cout << "2 : Afficher le solde de votre livret A : " << endl;
 cout << "3 : Saisir votre nouveau solde CCP : " << endl;
 cout << "4 : Saisir votre nouveau solde livret A : " << endl;
 cout << "5 : Faire un depot sur votre compte CCP : " << endl;
 cout << "6 : Faire un depot sur votre livret A : " << endl;
 cout << "7 : Faire un retrait sur votre compte CCP : " << endl;
 cout << "8 : Faire un retrait sur votre livret A : " << endl;
 cout << "9 : Faire un virement sur votre compte CCP : " << endl;
 cout << "10 : Faire un virement sur votre livret A : " << endl;
 cout << "11 : Quitter le programme " << endl;
 cin >> a;
 cin.ignore();
 switch(a)
 {
  case 1 :
	  ccp.afficher();
      break;
  case 2 :
	  livretA.afficher();
	  break;
  case 3 :
     {
      long s(0);
      double t(0);

      cout << "Entrez votre solde : " << endl;
      cin >> s;

      cout << "Entrez votre numéro de compte : " << endl;
      cin >> t;


      ccp.saisir(t,s);
     }
	  break;
  case 4 :
     {
      long s(0);
      double t(0);
      cout << "Entrez votre solde : " << endl;
      cin >> s;
      cout << "Entrez votre numéro de compte : " << endl;
      cin >> t;

      livretA.saisir(t,s);
     }
     break;
  case 5 :
     {
	  int s(0);
	  cout << " Quel est le montant de votre depot : " << endl;
	  cin >> s ;
	  ccp.crediter(s);
     }
     break;
  case 6 :
     {
  	  int s(0);
  	  cout << " Quel est le montant de votre depot : " << endl;
  	  cin >> s ;
  	  livretA.crediter(s);
     }
     break;
  case 7 :
     {
      int s(0);
      cout << " Quel est le montant de votre retrait : " << endl;
      cin >> s ;
      ccp.debiter(s);
     }
     break;
  case 8 :
     {
      int s(0);
      cout << " Quel est le montant de votre retrait : " << endl;
      cin >> s ;
      livretA.debiter(s);
     }
     break;
  case 11 :
	  cout << "Aurevoir" << endl;
	  break;
  default :
	  cout << "Mauvais choix " << endl;
	  break;
 }
}while( a != 11);

 return 0;
}

    Jusqu'a présent il n'y avait qu'une seule personne qui utilisait les méthodes de ces 2 classes , moi .
Je voudrai que plusieurs personnes puissent utiliser les méthodes de ces classes .
   Je ne vois pas trop comment m'y prendre .

Hors ligne

#2 Le 09/04/2020, à 15:25

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Bonjour,
Petite précision avant de commencer: vérifier un code de carte bancaire ou un code pin, c'est extrêmement compliqué et cela reste un secret très bien gardé (à ma connaissance le seul code open source là dessus est celui contenu dans android).

Pourquoi pas dans identifiant créer une liste d'objets Compte, ce qui permettrait à chaque personne d'avoir son objet identifiant qui contient aussi les comptes

Hors ligne

#3 Le 09/04/2020, à 15:46

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Naziel a écrit :

Pourquoi pas dans identifiant créer une liste d'objets Compte, ce qui permettrait à chaque personne d'avoir son objet identifiant qui contient aussi les comptes

Merci Naziel de ta réponse express !
Je n'ai pas encore abordé ce point donc je ne vois pas comment faire concretement . Ne s'agit il pas de création dynamique d'objet ou d'un truc de ce genre ?

Hors ligne

#4 Le 09/04/2020, à 15:57

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

En fait j'imagine qu'à l'appel du constructeur de identifiant, une liste de "Compte" vide est créée, et ensuite tu crées une méthode qui te permet de créer des comptes, ce qui te permettra d'avoir un contrôle sur les comptes (pas le droit d'ouvrir deux livrets A, ...)
vector<Compte> listeCompte permet d'avoir un tableau d'objets Compte. Après tu peux aussi jouer avec l'héritage et le polymorphisme en faisant des classes héritant de Compte comme CCP, livretA, ... Et du coup ta liste précédente devient une collection hétérogène

Dernière modification par Nuliel (Le 09/04/2020, à 15:57)

Hors ligne

#5 Le 09/04/2020, à 16:25

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Je te remercie de ton aide mais c'est encore un peu complexe pour moi a mettre en oeuvre , je vais devoir avancer un peu dans mon apprentissage pour résoudre mon probleme .
Merci tout de meme wink

Hors ligne

#6 Le 09/04/2020, à 17:07

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Parceque ce serai vraiment abusé de ma part de te demander un exemple big_smile
Je ne voudrai pas profiter de ta gentilesse cool  , ca se fait pas !

Hors ligne

#7 Le 09/04/2020, à 18:06

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

On n'est pas obligé de faire une collection hétérogène et utiliser le polymorphisme, on peut mettre

std::vector<Compte> listeCompte

dans les attributs privés de la classe identifiant, et dans le main on pourrait faire quelque chose comme:

Identifiant Bernard;
Bernard.creer_compte("CCP"); // créer un objet Compte et l'ajoute au tableau listeCompte
Bernard.getSolde("CCP")

Je vais essayer de commencer à coder ça ce soir, je peux te donner une première version si tu veux

Dernière modification par Nuliel (Le 09/04/2020, à 18:07)

Hors ligne

#8 Le 09/04/2020, à 18:25

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Merci de ta générosité .
  Je commence a apercevoir ce que tu veux faire , prends ton temps pour le faire tout de meme , il n'y a aucune urgence !
  D'avance merci .

Hors ligne

#9 Le 09/04/2020, à 19:55

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Voilà, j'ai une première version (pas de polymorphisme, pas de collection hétérogène, juste un tableau dynamique de comptes)
Veux tu que je mette tout ici ou j'attends un peu si tu veux tester? Ou je mets que les headers?

Dernière modification par Nuliel (Le 09/04/2020, à 20:00)

Hors ligne

#10 Le 09/04/2020, à 20:17

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

On attends un peu smile
Merci et bonne soirée

Hors ligne

#11 Le 09/04/2020, à 20:45

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Ok, quelques remarques:
- afin de pouvoir différencier les attributs des variables passées en paramètre aux méthodes, je préfixe les attributs par m_ (ce qui donne m_nom, m_prenom, ...)
- ton constructeur n'a pas de paramètres, il en faudrait pour pouvoir initialiser tes attributs dès la création de l'objet

Hors ligne

#12 Le 09/04/2020, à 21:07

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Ok merci des conseils , c'est bien plus clair pour moi de prefixer les attributs , pas de risque de confusion avec les autres variables.
     Je ferai un second constructeur avec les parametres en fonction de ton exemple .

Hors ligne

#13 Le 10/04/2020, à 13:46

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

En y repensant aujourd'hui, je me suis dit qu'à la place d'une liste d'objets compte, on pourrait juste avoir des couples (typeCompte, solde) de type (string, float), mais la liste d'objets reste un bon exercice wink

Hors ligne

#14 Le 10/04/2020, à 14:16

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Qu'importe le chemin emprunté quand seul compte le résultat  smile
Tu verrai ca comment du coup ?

Hors ligne

#15 Le 10/04/2020, à 14:51

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Pour ma part je l'ai fait avec une liste d'objets Compte, et je vais faire une v2 pour jouer avec l'héritage (comme ça il y aura la classe CCP, la classe LivretA, qui hériteront de Compte), le polymorphisme. Après je profite de cet exemple pour travailler la POO que j'utilise pas souvent.

Donc 3 possibilités (du plus simple au plus dur)
- faire une liste (typeCompte, solde) de type (string, float)
- faire une liste d'objets Compte (ma v1)
- faire une liste d'objets héritant de Compte

Après ça dépend de ce que tu veux travailler.

Dernière modification par Nuliel (Le 10/04/2020, à 15:09)

Hors ligne

#16 Le 10/04/2020, à 19:26

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Daccord , je te remercie .
Une derniere chose :
   Je n'arrive pas à trouver une réponse pour cette question : Existe-t-il une règle pour placer les directives #include <> ou #include" ".

Faut-il les mettre dans l'entête plutôt que dans le source ?

Faut-il les mettre là où la fonction est appelée ?

Cette dernière solution me semblerait logique, sauf si le compilateur en a besoin avant.

Hors ligne

#17 Le 10/04/2020, à 21:28

grigouille

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Pour répondre à ta question il faut comprendre l'ODR (one-definition rule).
https://en.wikipedia.org/wiki/One_Definition_Rule


Debian (xfce) 12
HP LaserJet M1132 MFP

Hors ligne

#18 Le 18/04/2020, à 17:59

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Alors, où en es tu chris7522?

Hors ligne

#19 Le 18/04/2020, à 18:59

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

J' y ai consacré peu de temps mais en relisant tes conseils je me suis dit que  :
      - J'obterai bien pour une relation de compostion entre mes classes .
     Ma classe composite " Client " et mes classes composante " ccp " , " livretA " , " EnregistrementSolde " , etc ... ( Un compte ne peut appartenir qu'a un seul client , la suppression d'un client entrainera la destruction de tous ses comptes , " Client " peut posséder plusieurs compte )
    Quand penses tu ?

Hors ligne

#20 Le 18/04/2020, à 19:39

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

A mon avis si tu veux t'entraîner vaut mieux commencer par faire juste deux classes (Compte et Identifiant), et lorsque cela fonctionnera, pourquoi pas faire ce que tu dis (cela te permettra de faire de l'héritage en plus)
En gros faire étape par étape, pas tout d'un bloc

Dernière modification par Nuliel (Le 18/04/2020, à 19:39)

Hors ligne

#21 Le 18/04/2020, à 20:20

chris7522

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Tu ne m'as toujours pas dit ce que toi tu en aurai fait tongue;)

Hors ligne

#22 Le 18/04/2020, à 21:47

Nuliel

Re : Difficulté pour coder petit programme Compte banquaire (C++)

J'en aurais fait de même, là j'ai ma v1 avec identifiant et compte comme classes, et ensuite la v2 la différence est de faire hériter compte pour avoir tous les différents types de compte.

Ou j'ai pas compris la question hmm

Hors ligne

#23 Le 19/04/2020, à 00:40

NicoApi73

Re : Difficulté pour coder petit programme Compte banquaire (C++)

Bonsoir,

Je n'aborderai pas les choses de cette manière là.

Tu as les personnes qui ont des attributs.

Tu as les comptes. Chacun d'entre-eux a un propriétaire unique. Par conséquent un compte a un attribut propriétaire de type personne.

Un compte reste simple (genre un attribut solde, un attribut propriétaire, une méthode pour déposer une méthode pour retirer). Tu le surcharges pour en faire un compte particulier (compte rémunéré, livret...)

Je te déconseille de mettre les vues dans tes classes de modèle. Pas besoin d'une méthode afficher pour les personnes, ce n'est pas sa responsabilité. Il faut faire une ou plusieurs classes à part.

La fonction main prend des responsabilités qui ne sont pas les siennes. Ne mets dedans que l'initialisation de la classe qui va controler la gestion haut niveau, pas le controle en lui-même. Si tu rajoutes de la saisie pour créer des comptes, pour créer des personnes, pour sauver, charger... Ce sera ingérable dans le main

Hors ligne