(*  Ce programme est le recopiage de ce que j'avais fait en classe le 16/11
    pendant le test de M‚thodologie de la programmation.  Une seconde version
    de ce programme, pr‚sente sur la disquette, corrige certaine erreurs que
    je n'avais pas su pr‚voir lors du test *)

PROGRAM facture;
VAR n, nbrart, i, numart, qteart, compteur, comptart: integer;
    nomcl, adrcl, cp, vilcl: string;
    pua, pvhtva, tothtva, tothtvb, tothtvc, tottvaca, tottvacb,
    tottvacc, totalht, totaltva, facture: real;
    codtva: char;


(* Commencement de la boucle principale du programme *)

BEGIN

WRITE ('Veuillez introduire le nombre de clients de la journ‚e: ');
READLN (n);
FOR compteur :=1 to n do

    BEGIN

    (* Saisie des donn‚es clients *)

    WRITE ('Nom du client: '); READLN (nomcl);
    WRITE ('Rue + num‚ro: '); READLN (adrcl);
    WRITE ('Code postal: '); READLN (cp);
    WRITE ('Ville: '); READLN (vilcl);

    (* Entete de facture *)

    WRITELN ('Firme le bon petit marchand':27);
    WRITELN ('220 route d'Arlon':31);
    WRITELN ('STRASSEN':36);
    WRITELN; WRITELN;
    WRITELN ('Monsieur ',nomcl);
    WRITELN (adrcl:9);
    WRITELN (cp:9,' ',vilcl);

    (* Saisie des articles command‚s *)

    WRITE ('Nombre d'articles de la commande: '); READLN (nbrart);
    FOR comptart := 1 to nbrart do

        BEGIN

        (* Saisie de chaque article *)

        WRITE ('Num‚ro de l'article: '); READLN (numart);
        WRITE ('Prix unitaire: '); READLN (pua);
        WRITE ('Quantit‚ command‚e: '); READLN (qteart);
        WRITE ('Code TVA (a b ou c)'); READLN (codtva);
        pvhtva := pua * qteart;

        (* Test pour appliquer le taux de TVA correct *)

        IF codtva = 'a' then tothtva := tothtva + pvhtva;
        IF codtva = 'b' then tothtvb := tothtvb + pvhtva;
        IF codtva = 'c' then tothtvc := tothtvc + pvhtva;

        (* Affichage des r‚sultats *)

        FOR i=1 to 50 do WRITE ('-');
        WRITELN;
        WRITELN ('Num‚ro','Prix Unit.':5,'Quantit‚':5,'Code':5,'Prix':5);
        FOR i=1 to 50 do WRITE ('-');
        WRITELN;
        WRITELN (numart, pua:12, qteart:13, codtva:8, pvhtva:13)

        END;

    (* Calcul et affichage des totaux *)

    tottvaca := tothtva + (tothtva * 6 / 100);
    WRITELN;
    WRITELN ('HTVA','CODE':12,'TAUX':13,'TVA':8,'TVAC':13);
    FOR i=1 to 50 do write ('-');
    WRITELN;
    WRITELN (tothtva, 'A':11, '6':13, (tothtva * 6 / 100):8, tottvaca:13);
    tottvacb := tothtvb + (tothtvb * 16 / 100);
    WRITELN (tothtvb, 'B':11, '16':13, (tothtvb * 16 / 100):8, tottvacb:13);
    tottvacc := tothtvc + (tothtvc * 25 / 100);
    WRITELN (tothtvc, 'C':11, '25':13, (tothtvc * 25 / 100):8, tottvacc:13);
    totalht := tothtva  + tothtvb + toththc;
    totaltva := (tothtva * 6 / 100) + (tothtvb  * 16 / 100) + (tothtvc * 25 / 100);
    facture := totalht  + totaltva;
    WRITELN;
    WRITELN ('HTVA':30, 'TVA':8, 'TOTAL':11);
    WRITELN ('------------------------------':49);
    WRITELN (totalht:30, totaltva:8, facture:11)

    END;

WRITELN;
WRITELN ('Fin des factures')

END.
