Bonjour à tous,

Voilà j'ai un soucis avec les classes listes chaînées et je ne m'en sors pas...

Je commence à me familiariser avec les listes chaînées, chapitre que je trouve particulièrement difficile, toutefois avec des classes... je pattoge totalement...

Voilà je dois gérer un programme de gestion d'articles de magasins avec chaque article un prix (float) et un indicatif de solde (0 ou 1 de type bool) pour savoir si le produit est soldé ou non.

J'ai donc matérialisé ça par une classe Etiquette, mais après il me faut faire la somme des prix des différents produits inscrits dans la liste chaînée, j'ai créé un code, il compile pas de soucis, toutefois... il rentre une seule fois dans ma boucle alors qu'il devrait y rentrer 11 fois et me renvoi 0 comme prix

Pouvez-vous m'aider je vous prie ?


Je vous colle mon code afin que vous vous fassiez une idée plus claire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
 
 
#include <iostream>
 
using namespace std;
 
 
/** Modélisation de la classe étiquette **/
class Etiquette
{
    private:
            float prix_hors_reduc;
            bool is_solde;              // 0 pour non soldé, 1 pour soldé
 
    public:
            Etiquette(float phr = 0.0, bool is = 0)
            {
                prix_hors_reduc = phr;
                is_solde = is;
            }
 
            void saisie()
            {
                cout << "Entrez le prix du vêtement non-soldé : ";
                cin >> prix_hors_reduc;
                cout << endl;
                cout << "Le vêtement est-il soldé ? [1 => Oui / 0 => Non] ";
                cin >> is_solde;
            }
 
            void saisie(float prix, bool is)
            {
                prix_hors_reduc = prix;
                is_solde = is;
            }
 
            void affichage()
            {
                cout << prix_hors_reduc <<", ";
                if(is_solde == 1)
                    cout << "soldé" << endl;
                else if(is_solde == 0)
                    cout << "non soldé" << endl;
            }
 
            float get_prix()
            {
                return prix_hors_reduc;
            }
 
            char get_solde()
            {
                return is_solde;
            }
 
            void setPHR(float v)
            {
                prix_hors_reduc = v;
            }
 
            void setIS(bool c)
            {
                is_solde = c;
            }
};
 
 
/** Liste chainée d'étiquette **/
 
 
class MaillonE
{
    private :
        /** donnée membre du maillon*/
        Etiquette valeur;
 
        /** donnée membre l'adresse du maillon suivant*/
        MaillonE *suivant;
 
    public :
        /** Constructeur **/
        MaillonE()
        {}
 
        Etiquette getvaleur()
        {
            return valeur;
        }
 
        /** Retourne le prix de l'étiquette **/
        float getvaleurPHR()
        {
            float gp = valeur.get_prix();
            return gp;
        }
 
        /** Retourne le booléen si le produit est soldé ou non **/
        bool getvaleurIS()
        {
            bool gs = valeur.get_solde();
            return gs;
        }
 
        /** Modifie la valeur de l'étiquette **/
        void setvaleur(Etiquette v)
        {
            valeur = v;
        }
 
        bool hasSuivant()
        {
            return suivant != 0;
        }
 
        /** Retourne la valeur de l'adresse du maillon suivant **/
        MaillonE * getsuivant()
        {
            return suivant;
        }
 
        /** Modifie la valeur de l'adresse du maillon suivant **/
        void setsuivant(MaillonE * s)
        {
            suivant = s;
        }
};
 
 
class EnsembleE
{
    private :
        /** Donnée membre la liste de retraités **/
        MaillonE* liste;
 
    public :
 
        /** Constructeur **/
        EnsembleE()
        {
            liste = NULL;
        }
 
        /** Test de la liste vide **/
        int estVide()
        {
            return(liste == NULL);
        }
 
        /** Ajouter un retraite **/
        void ajout (Etiquette v)
        {
            MaillonE * e;
            e = new (MaillonE);
            (*e).setvaleur(v);
            (*e).setsuivant(liste);
            liste = e;
        }
 
        /** Premier element de la liste **/
        Etiquette premier()
        {
            return((*liste).getvaleur());
        }
 
        /** Creer une liste qui est la fin de la liste d'origine */
        EnsembleE fin ()
        {
            EnsembleE retour;
            retour.liste= (*liste).getsuivant();
            return (retour);
        }
 
        /** Afficher la liste */
        void afficher()
        {
            if (! estVide())
            {
                premier().affichage();
                cout << endl;
                cout << endl;
                fin().afficher();
            }
        }
 
 
        /** Fonction d'initialisation par valeurs par défaut **/
 
        void initialise(EnsembleE* m, Etiquette v)
        {
 
            v.saisie(12.04, 1);
            (*m).ajout(v);
 
            v.saisie(8.04, 1);
            (*m).ajout(v);
 
            v.saisie(5.04, 1);
            (*m).ajout(v);
 
            v.saisie(5.3, 0);
            (*m).ajout(v);
 
            v.saisie(20.3, 1);
            (*m).ajout(v);
 
            v.saisie(14.3, 1);
            (*m).ajout(v);
 
            v.saisie(11.3, 0);
            (*m).ajout(v);
 
            v.saisie(5.3, 0);
            (*m).ajout(v);
 
            v.saisie(26.3, 1);
            (*m).ajout(v);
 
            v.saisie(14.5, 1);
            (*m).ajout(v);
        }
 
        void sommeHReduc(EnsembleE* e)
        {
            MaillonE* m;
            m = new MaillonE;
 
            float i = 0;
            float phr = 0;
 
            while((*m).hasSuivant())
            {
                i = (*m).getvaleurPHR();
                cout << "i : " << i << endl;
                phr = phr + i;
                (*m).setsuivant(m);
            }
 
            cout << "La somme des prix hors réduction des produits est de : " << phr << endl;
        }
 
};
 
 
int main()
{
    EnsembleE* maListe = NULL;
    maListe = new EnsembleE;
    Etiquette v;
 
    maListe->initialise(maListe, v);
 
    v.saisie(18.2, 0);
    maListe->ajout(v);
 
    maListe->afficher();
 
    maListe->sommeHReduc(maListe);
 
}

En espérant que vous me sortiez de ce mauvais pas...

Merci d'avance !