Bonjour,
J'ai un soucis dans mon programme,
Lorsque je vais dans la fonction "creation_contrat()" j'arrive à créer un nouveau contrat et le lire mais lorsque je vais dans ma fonction "affiche_details()" impossible d'accèder au contrat créé!
Les fonctions sont tout à la fin du programme.
Je suppose que c'est soucis sur le push_back mais rien de moins suis car je suis tout sauf un as du C++

Voici mon code et merci d'avance pour votre aide.
Oliv.
///////////////////////////////////////////////////////////////////////////////////////////
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
#include<vector>
using namespace std;
///////////////////////////////////////////////////////////////////////////////////////////
// classe contrat
///////////////////////////////////////////////////////////////////////////////////////////
class contrat
{
private:
int numero;
int moisCreation;
int anneeCreation;
int montantAnnuelBase;
protected:
int moisFinContrat;
int anneeFinContrat;
public:
contrat(int, int, int, int, int, int);
//contrat(int, int, int, int);
contrat();
~contrat();
virtual void affiche();
modificationFinContrat(int, int);
int getnumero();
};
int contrat::getnumero()
{return numero;
}
contrat::contrat(int n, int mc, int ac, int mfc, int afc, int mab) //constructeur
{
numero = n;
moisCreation = mc;
anneeCreation = ac;
moisFinContrat = mfc;
anneeFinContrat = afc;
montantAnnuelBase = mab;
}
contrat::contrat() //constructeur par defaut
{
numero = 0;
moisCreation = 0;
anneeCreation = 0;
moisFinContrat = 0;
anneeFinContrat = 0;
montantAnnuelBase = 0;
}
contrat::~contrat() //destructeur
{
}
void contrat::affiche() //affichage contrat
{
cout<<"numero de contrat: "<<numero<<endl;
cout<<"date de creation du contrat: "<<moisCreation<<"/"<<anneeCreation<<endl;
cout<<"date de fin du contrat: "<<moisFinContrat<<"/"<<anneeFinContrat<<endl;
cout<<"montant de la cotisation annuelle de base: "<<montantAnnuelBase<<endl;
}
contrat::modificationFinContrat(int mfc, int afc) //modif date fin contrat
{
moisFinContrat=mfc;
anneeFinContrat=afc;
}
///////////////////////////////////////////////////////////////////////////////////////////
//classe contrat habitation
///////////////////////////////////////////////////////////////////////////////////////////
class cHabit:public contrat
{
private:
protected:
int montantPatrimoine;
char categorieCouverture;
public:
cHabit(int, char , int, int, int, int, int, int);
~cHabit();
conditionSinistre(int);
void affiche();
};
cHabit::cHabit(int mp=0, char cc='A', int n=0, int mc=0, int ac=0, int mfc=0, int afc=0, int mab=0) : contrat( n, mc, ac, mfc, afc, mab)
{
montantPatrimoine = mp;
categorieCouverture = cc;
}
cHabit::~cHabit()
{
}
cHabit::conditionSinistre(int condition)
{
float remboursement;
if(condition ==1)
{
switch(categorieCouverture)
{
case 'N': remboursement = 0.65*montantPatrimoine - 250;
break;
case 'S': remboursement = 0.75*montantPatrimoine - 200;
break;
case 'E': remboursement = 0.9*montantPatrimoine - 150;
break;
default: cout<<"mauvise saisie"<<endl;
}
}
else
{
switch(categorieCouverture)
{
case 'N': remboursement = 0.45*montantPatrimoine - 250;
break;
case 'S': remboursement = 0.65*montantPatrimoine - 200;
break;
case 'E': remboursement = 0.75*montantPatrimoine - 150;
break;
default: cout<<"mauvaise saisie"<<endl;
}
}
cout<<"Remboursement sinistre: "<<remboursement<<" Euros"<<endl;
}
void cHabit:: affiche()
{
contrat::affiche();
cout<<"montant du patrimoine: "<<montantPatrimoine<<endl;
cout<<"categorie de couverture: "<<categorieCouverture<<endl;
}
///////////////////////////////////////////////////////////////////////////////////////////
//classe contrat voiture
///////////////////////////////////////////////////////////////////////////////////////////
class cVoiture:public contrat
{
private:
char numeroImmatriculation[8];
int mMiseCirculation;
int aMiseCirculation;
int numeroSerie;
float bonusMalus;
public:
cVoiture(char *, int, int, int, float, int, int,int, int, int, int);
~cVoiture();
void affiche();
};
cVoiture::cVoiture(char *ni=NULL, int mmc=0, int amc=0, int ns=0, float bm=0, int n=0, int mc=0, int ac=0,int mfc=0,int afc=0, int mab=0) : contrat( n, mc, ac, mfc, afc, mab)
{
mMiseCirculation = mmc;
aMiseCirculation = amc;
strcpy(numeroImmatriculation, ni);
numeroSerie = ns;
bonusMalus = bm;
}
cVoiture::~cVoiture()
{
}
void cVoiture::affiche()
{
contrat::affiche();
cout<<"Date premiere mise en ciculation: "<<mMiseCirculation<<"/"<<aMiseCirculation<<endl;
cout<<"Numero Immatriculation: "<<numeroImmatriculation<<endl;
cout<<"Bonus/Malus: "<<bonusMalus<<endl;
}
///////////////////////////////////////////////////////////////////////////////////////////
// Class client
///////////////////////////////////////////////////////////////////////////////////////////
class client
{
private:
char nom[10];
char prenom[10];
protected:
contrat *t[10];
int nbC;
public:
client(char *, char *);
~client();
void affiche();
void ajouterContrat(contrat *newContrat);
};
client::client(char *n, char *p)
{
strcpy(nom, n);
strcpy(prenom, p);
nbC = 0;
}
client::~client()
{
}
void client::affiche()
{
int i=0;
cout<<"prenom: "<<prenom<<" nom: "<<nom<<endl;
cout<<nbC<<" contrats"<<endl;
for(i=0; i<=nbC-1; i++)
{
t[i]->affiche();
}
system("pause");
}
void client::ajouterContrat(contrat *newContrat)
{
t[nbC]=new contrat;
t[nbC]=newContrat;
nbC++;
}
///////////////////////////////////////////////////////////////////////////////////////////
void creation_contrat();
void affiche_details();
///////////////////////////////////////////////////////////////////////////////////////////
// Programme principal
///////////////////////////////////////////////////////////////////////////////////////////
vector<contrat *> tabContrat;
int NumContrats = 0;
int main()
{
int choix_menu;
for(;;) //boucle permanente du programme
{
cout<<"quelles fonction souhaitez vous mettre en oeuvre?\n"; //menu de choix de la fonction
cout<<"1: Afficher les caractéristiques d'un contrat d'après sont nouveau numéro\n";
/*cout<<"2: Conditions de l'assurance d'après le numéro de contrat\n";
cout<<"3: Balayer l'ensemble des contrats\n";
cout<<"4: Modification de la date de fin de contrat\n";*/
cout<<"5: Creer un contrat\n";
/*cout<<"6: Creer un client\n";*/
cout<<"0: Quitter le programme\n";
cin>>choix_menu;
switch(choix_menu)
{
case 1: affiche_details();
break;
/*case 2: affiche_condition_assurance();
break;
case 3: balayage_contrats();
break;
case 4: modification_contrat();
break;*/
case 5: creation_contrat();
break;
/*case 6: creation_client();
break;*/
case 0: return 0;
default:
printf("vous n'avez pas selectionner un menu qui existe ");
}
}
}
///////////////////////////////////////////////////////////////////////////////////////////
//fonctions
///////////////////////////////////////////////////////////////////////////////////////////
void creation_contrat()
{
int Annee_Mise_Circulation,numero_Serie, Mois_Mise_Circulation, choix_type_contrat,montant_Patrimoine,Mois_Creation,Annees_Creation,montant_Annuel_Base,Mois_fin,Annee_fin; char categorie_Couverture,numero_Immatriculation[8];
float bonus_Malus;
int nc;
int j=0;
int test =0;
cout<<"quel type de contrat souhaitez vous créer?\n 1: Habitation\n 2: Véhicule\n";
cin>>choix_type_contrat;
cout<<"Mois de creation du contrat (mm)?\n";
cin>>Mois_Creation;
cout<<"Annee de creation du contrat (aaaa)?\n";
cin>>Annees_Creation;
cout<<"Montant annuel choisi (en Euros)?\n";
cin>>montant_Annuel_Base;
cout<<"Mois de fin de contrat (mm)?\n";
cin>>Mois_fin;
cout<<"Annee de fin de contrat (aaaa)?\n";
cin>>Annee_fin;
if (choix_type_contrat == 1)
{
cout<<"montant du Patrimoine?\n";
cin>>montant_Patrimoine;
cout<<"Categorie Couverture (N, S E)?\n";
cin>>categorie_Couverture;
cHabit C(montant_Patrimoine, categorie_Couverture, NumContrats, Mois_Creation, Annees_Creation, Mois_fin, Annee_fin, montant_Annuel_Base);
tabContrat.push_back(&C);
NumContrats++;
cout<<"nc"<<endl;
cin>>nc;
for (j=0;j<NumContrats; j++)
{
test = tabContrat[j]->getnumero();
cout<<test<<endl;
if (test == nc) tabContrat[j]->affiche();
}
}
else if (choix_type_contrat == 2)
{
cout<<"immatriculation du véhicule?\n";
cin>>numero_Immatriculation[8];
cout<<"Mois de mise en circulation?\n";
cin>>Mois_Mise_Circulation;
cout<<"Annee de mise en circulation?\n";
cin>>Annee_Mise_Circulation;
cout<<"numero de serie?\n";
cin>>numero_Serie;
cout<<"bonus ou malus?\n";
cin>>bonus_Malus;
cVoiture C(numero_Immatriculation,Mois_Mise_Circulation,Annee_Mise_Circulation, numero_Serie, bonus_Malus, NumContrats, Mois_Creation, Annees_Creation, Mois_fin, Annee_fin, montant_Annuel_Base);
tabContrat.push_back(&C);
NumContrats++;
cout<<"nc"<<endl;
cin>>nc;
for (j=0;j<NumContrats; j++)
{
test = tabContrat[j]->getnumero();
cout<<test<<endl;
if (test == nc) tabContrat[j]->affiche();
}
}
return;
}
///////////////////////////////////////////////////////////////////////////////////////////
void affiche_details() //fonction d'affichage d'apres le numero de contrat
{
/*int j =0, test=0;
int numero_contrat;
cout<<NumContrats;
cout<<"saisir un numéro de contrat\n";
cin>>numero_contrat;
cout<<numero_contrat;
for (j=0;j<NumContrats; j++)
{
test = tabContrat[j]->getnumero();
cout<<test<<endl;
if (test == numero_contrat) tabContrat[j]->affiche();
}*/
tabContrat[0]->affiche();
return;
}