#include #include typedef struct article { int num; char des[100]; int stock; float prix; struct article *succ; } art, *listart; typedef struct it { int qte; art *art; struct it *succ; } item, *listitem; typedef struct cmde { int num; item *it; struct cmde *succ; } cde, *listcde; struct linecde { int numart; int qte; }; void ajart(listart &A, listart &q) { if (A && A->succ) ajart(A->succ,q); else { q->succ=NULL; if(A) { q->num=A->num+1; A->succ=q; } else { q->num=1; A=q; } } } void saisi_art(listart &A) { art *q; q=new art; cout << "***** Saisir une article *****\n"; // cout << "Ref article : "; // cin >> q->num; cout << "Des article : "; cin >> q->des; cout << "Qte article : "; cin >> q->stock; cout << "Prix article : "; cin >> q->prix; cout << endl; ajart(A,q); } int entrerstock(int numart, int Q, listart &A) { int res=0; if (A && A->num==numart) { A->stock+=Q; res=1; } else if (A) res=entrerstock(numart,Q,A->succ); return res; } art* adrart(int num, listart A) { art *q; if (A && A->num!=num) q=adrart(num,A->succ); else q=A; return q; } void saisir_it(listitem &I,listart A) { item *q; int num; char choix; cout << "entrez la ref d un article : "; cin >> num; q=new item; if (q->art=adrart(num,A)) { cout << "Quantite Cde ? : "; cin >> q->qte; q->succ=NULL; I=q; } else { cout << "produit inexistant!\n"; I=NULL; delete q; } cout << "Autre produit? O/N\n"; cin >> choix; if (choix=='o' || choix=='O') if (I) saisir_it(I->succ,A); else saisir_it(I,A); } void ajcde(listcde &C, listcde &q) { if (C && C->succ) ajcde(C->succ,q); else { q->succ=NULL; if (C) { q->num=C->num+1; C->succ=q; } else { q->num=1; C=q; } } } void saisie_cde(listcde &C,listart A) { cde *q; q= new cde; cout << "***** Saisir une commande *****\n"; // cout << "Ref commande : "; // cin >> q->num; ajcde(C,q); saisir_it(q->it,A); } void affart(listart A) { if (A) { cout << "Numart : " << A->num << endl; cout << "Design : " << A->des << endl; cout << "Stock : " << A->stock << endl; cout << "Prix : " << A->prix << " Euros\n"<< endl; affart(A->succ); } } float affitem(listitem I) { float som=0; if (I) { cout << "\n\tDesign : " << I->art->des; cout << "\n\tQuanti : " << I->qte; som=I->qte*I->art->prix; cout << "\n\tPrix : " << som << " Euros\n"; som+=affitem(I->succ); } return som; } void affcde(listcde C) { float somme=0; if (C) { cout << "Commande num : " << C->num << endl; somme=affitem(C->it); cout << "\nTotal de la commande : " << somme << " Euros\n\n"; affcde(C->succ); } } int compteI(listart A, listitem I) { int S=0; if (I) { if (I->art==A) S=I->qte; S+=compteI(A,I->succ); } return S; } int compteC(listart A, listcde C) { int S=0; if (C) { S=compteI(A,C->it); S+=compteC(A,C->succ); } return S; } void printcdes(listart A, listcde C) { int S=0; if (A) { S=compteC(A,C); cout << "Article : " << A->des << " = " << S << " Commandes\n"; printcdes(A->succ,C); } } int checkstock(int numcde, listcde C) { int res=0; item *i; if (C && C->num!=numcde) res=checkstock(numcde,C->succ); else { if (C) { i=C->it; while (i) { if (compteI(i->art,C->it)>i->art->stock) res=1; i=i->succ; } } else res=1; } return res; } void decstock(listitem I) { if (I) { entrerstock(I->art->num,I->qte*-1,I->art); decstock(I->succ); } } float docde (int numcde, listcde C) { float somme=0; if (C && C->num!=numcde) somme=docde(numcde,C->succ); else { if (C) { somme =affitem(C->it); decstock(C->it); } } return somme; } void insertcde(int numcde,struct linecde lines[],int nlines,listcde &C, listart A) { int j; listitem i=NULL,p=NULL; cde *q; q = new cde; ajcde(C,q); q->num=numcde; i=new item; q->it = i; for (j =0;jart=adrart(lines[j].numart,A); i->qte=lines[j].qte; p=new item; i->succ=p; p->succ=NULL; i=p; } } void inittest(listart &A, listcde &C) { art *q; cde *p; q=new art; // saisi_art(A);// fontionne // q->num=1; strcpy(q->des,"Gants"); q->stock=15; q->prix=(float) 25.9; ajart(A,q); // affart(A); q=new art; // q->num=3; strcpy(q->des,"Mouffles"); q->stock=10; q->prix=(float) 35.5; ajart(A,q); q=new art; // q->num=2; strcpy(q->des,"Bagues"); q->stock=23; q->prix=(float) 19.9; ajart(A,q); q=new art; // q->num=4; strcpy(q->des,"Chevalieres"); q->stock=45; q->prix=(float) 66.99; ajart(A,q); p=new cde; // p->num=1; ajcde(C,p); p->it = new item ; p->it->art=adrart(1,A) ; p->it->qte=20 ; p->it->succ=NULL; p=new cde; // p->num=2; ajcde(C,p); p->it = new item ; p->it->art=adrart(2,A) ; p->it->qte=5 ; p->it->succ=NULL; p=new cde; // p->num=3; ajcde(C,p); p->it = new item ; p->it->art=adrart(2,A) ; p->it->qte=2 ; p->it->succ=NULL; p->it->succ = new item ; p->it->succ->art=adrart(3,A) ; p->it->succ->qte=9 ; p->it->succ->succ=NULL; } void main() { listart Art=NULL; listcde Cde=NULL; int faire; struct linecde Lc[10]; Lc[0].numart=1; Lc[0].qte=12; Lc[1].numart=3; Lc[1].qte=24; inittest(Art,Cde); insertcde(4,Lc,2,Cde,Art); // saisi_art(Art); // saisie_cde(Cde,Art); // test de entrerstock if (faire=entrerstock(2,155,Art)) cout << "a jour\n"; else cout << "article non trouve\n"; if (faire=entrerstock(5,155,Art)) cout << "a jour\n"; else cout << "article non trouve\n"; affart(Art); affcde(Cde); printcdes(Art,Cde); if (faire=checkstock(1,Cde)) cout << "pas honorable\n"; else cout << "satisfaisable\n"; if (faire=checkstock(2,Cde)) cout << "pas honorable\n"; else cout << "satisfaisable\n"; cout <<"somme commande 3 : "<