Récupération données liste doublement chainée

Signaler
Messages postés
3
Date d'inscription
mardi 17 janvier 2006
Statut
Membre
Dernière intervention
19 mai 2012
-
Bonjour,
Je suis débutant et m'entraine au cpp.
Je fais une petite application qui gère des comptes en banque.
J'ai une liste doublement chainée de mes comptes.
Je cherche à l'afficher (cela se trouve dans le case b du main).
Ce que j'ai fait sort bien ma liste mais ça ne remonte pas les données client.
En débuggant, cela me dis que le pointeur est incorrect mais je ne vois pas comment arranger cela.
Est-ce que quelqu'un à une idée?
Voici mon code:
main.cpp

#include 
#include <cstdlib>
#include "Client.h"
using namespace std;


int main(void) {

char choix;
bool finTraitement=false;
int compte = 0;
int numCompte;
unsigned int clientId;
Client cli[10];
Client *premierClient=NULL;
Client *dernierClient=NULL;
Client *clientSuivant=NULL;
Client *ptr=NULL;

clientId=1;

while (!finTraitement) {
cout << "\t\t\n\n" << "Menu Principal";
cout << "\t\n\n" << "choisissez une lettre:";
cout << "\t\n" << "a - Ajout client.";
cout << "\t\n" << "b - Afficher client(s).";
cout << "\t\n" << "s - Supprimer client (id).";
cout << "\t\n" << "c - Ajout compte.";
cout << "\t\n" << "d - Depot d'argent.";
cout << "\t\n" << "r - Retrait d'argent.";
cout << "\t\n" << "m - Montrer les informations de compte.";
cout << "\t\n" << "q - Quitter l'application.\n\n";
cout << "\t" << "Choix: ";
choix = cin.get();

      switch(choix) {
         case 'a':
            system("cls");

if (!premierClient) {
premierClient=new(Client);
dernierClient=premierClient;

premierClient->setClientSuivant(NULL);
premierClient->setClientPrecedent(NULL);
}
else {
dernierClient->setClientSuivant(new(Client));
dernierClient->getClientSuivant()->setClientSuivant(NULL);
dernierClient->getClientSuivant()->setClientPrecedent(dernierClient);
dernierClient=dernierClient->getClientSuivant();			
}

dernierClient->setId(clientId++);

            if (compte > 10) {
               cout << "Je ne peux plus ajouter de comptes. Presser une touche pour retourner au menu principal.";
               cin.get();
break;
            }

            compte += 1;
numCompte += 1;
            cli[compte].recoisData();
cin.get();
            system("cls");
         break;

 case 'b':
            

            if (!premierClient) {
cout << "\nPas de client.";
cin.get();
}
else {


Client *ptr = premierClient;    
while (ptr != NULL)
{
cout << "\n",ptr->afficherClients();
ptr = ptr->getClientSuivant();
}

}
cin.get();
            system("cls");

         break;

         case 'd':
            system("cls");
            cout << "\nEnter numero de client: ";
            cin >> numCompte;
            cli[numCompte].depot();
cin.get();
            system("cls");
         break;

         case 'r':
            system("cls");
            cout << "\nEntrer numero de client: ";
            cin >> numCompte;
            cli[numCompte].retrait();
cin.get();
            system("cls");
         break;

         case 'm':
            system("cls");
            cout << "\nEntrer numero de client: ";
            cin >> numCompte;
            cli[numCompte].montreData();
cin.get();
            system("cls");
         break;

         case 'q':
            finTraitement=true;
         break;

         default:
cout << "\nChoix incorrect.";
cin.get();
            
      }

   }
   return 0;
}



Client.h

#ifndef client_h
#define client_h
using namespace std;

#define MAX_STRING_LENGTH	100

class Client {

    public:
      Client();
  ~Client();

      void recoisData();
      void depot();
      void retrait();
      void montreData();

  void setClientSuivant(Client *pClientSuivant);
  void setClientPrecedent(Client *pClientPrecedent);
  void setId(unsigned int pClientId);
  void afficherClients ();

  Client *getClientSuivant();
  Client *getClientPrecedent();
 
  unsigned int getId();
 


   private:
      char mNom[MAX_STRING_LENGTH];
      char mAdresse[MAX_STRING_LENGTH];
      char mVille[MAX_STRING_LENGTH];
      char mCodePostal[MAX_STRING_LENGTH];
  unsigned int mClientId;
  Client *mClientSuivant;
  Client *mClientPrecedent;
  Client *mPremierClient;
      float mSolde;


};

#endif


Client.cpp

#include 
#include "Client.h"
using namespace std;


Client::Client()
{           
  mSolde = 0.00;
}

Client::~Client()
{           
}

void Client::recoisData()
{
cout << "\nEntrer le nom du client: ";    cin >> mNom;
cout << "\nEntrer l'adresse du client: ";   cin >> mAdresse;
cout << "\nEntrer la ville du client: ";      cin >> mVille;
cout << "\nEntrer le code postal du client: ";    cin >> mCodePostal;
cout << "\nEntrer le solde du compte: ";    cin >> mSolde;

}

void Client::depot()
{
  float dep;
  cout << "\nEntrer le montant a deposer: ";
  cin >> dep;
  mSolde += dep;
}

void Client::retrait()
{
  float retra;
  cout << "\nEntrer le montant a retirer: ";    cin >> retra;
  mSolde -= retra;
}

void Client::montreData()
{
cout << "Id client: " << mClientId;
cout << "\nNom: " << mNom;
cout << "\nAdresse: " << mAdresse;
cout << "\nVille: " << mVille;
cout << "\nCode Postal: " << mCodePostal;
cout << "\nSolde: " << mSolde;
cout << "\nAppuyez sur une touche pour revenir au menu."<< endl;
cin.get();
}

void Client::afficherClients()
{
        cout << "Id client: " << mClientId;
cout << "\nNom: " << mNom;
cout << "\nAdresse: " << mAdresse;
cout << "\nVille: " << mVille;
cout << "\nCode Postal: " << mCodePostal;
cout << "\nSolde: " << mSolde;
cin.get();
}

void Client::setClientSuivant(Client *pClientSuivant)
{
mClientSuivant=pClientSuivant;
}

void Client::setClientPrecedent(Client *pClientPrecedent)
{
mClientPrecedent=pClientPrecedent;
}

Client *Client::getClientSuivant()
{
return(mClientSuivant);
}

Client *Client::getClientPrecedent()
{
return(mClientPrecedent);
}


 void Client::setId(unsigned int pClientId)
 {
 mClientId=pClientId;
 }

unsigned int Client::getId()
{
return(mClientId);
}

</code>