30
Exercice d’Entraînement TP-11 l) Enoncé Une société de vente par correspondance « Les Trois Russes » désire mettre en oeuvre un programme permettant : - d’éditer chaque jour les factures relatives aux commandes émises par ses clients - d’actualiser le fichier de ses clients en effectuant une mise à jour quotidienne - de produire le premier jour de chaque mois, la liste des clients ayant le plus acheté depuis leur inscription au fichier confidentiel. On vous demande de concevoir un programme permettant de réaliser ces différents objectifs LES FICHIERS EN ENTREE Les fichiers ne comportent pas d’anomalies ª Un fichier en organisation séquentielle F_CLIENT, fichier donnant diverses informations sur les clients des « Trois Russes ». Position Intitulé Caractéristique longueur 1 Numéro du client AN 5 6 Code de tarification N 1 7 Nom du Client AN 20 27 Adresse du Client AN 30 57 Cumul Montant des commandes N 10 dont 2 décimales Ce fichier est trié en croissant sur le numéro de client. Le code de tarification peut prendre les valeurs 1 ou 2, ce code servira à définir le prix de chaque produit. ª Un fichier en organisation séquentielle F_MVT, donnant diverses informations sur les clients et sur les commandes effectuées par ces clients. Ce fichier est constitué chaque jour au fur et à mesure de la réception des informations. La saisie se termine à 21 heures, les informations et commandes non prises en compte seront réalisées lors du traitement du lendemain. Ce fichier comporte plusieurs types d’enregistrements : des enregistrements concernant le client et des enregistrements concernant les commandes

Exercice d’Entraînement TP-11 - resoo.org · de tarification, mise à jour du fichier F_CLIENTMAJ, édition d’une facture si une commande a été effectuée, vérification si

Embed Size (px)

Citation preview

Exercice d’Entraînement TP-11

l) Enoncé

Une société de vente par correspondance « Les Trois Russes » désire mettre en oeuvre un programme permettant :

- d’éditer chaque jour les factures relatives aux commandes émises par ses clients

- d’actualiser le fichier de ses clients en effectuant une mise à jour quotidienne

- de produire le premier jour de chaque mois, la liste des clients ayant le plus acheté depuis leur inscription au fichier confidentiel.

On vous demande de concevoir un programme permettant de réaliser ces différents objectifs

LES FICHIERS EN ENTREE

Les fichiers ne comportent pas d’anomalies

Un fichier en organisation séquentielle F_CLIENT, fichier donnant diverses informations sur les clients des « Trois Russes ».

Position Intitulé Caractéristique longueur 1 Numéro du client AN 5 6 Code de tarification N 1 7 Nom du Client AN 20 27 Adresse du Client AN 30 57 Cumul Montant des commandes N 10 dont 2

décimales

Ce fichier est trié en croissant sur le numéro de client.

Le code de tarification peut prendre les valeurs 1 ou 2, ce code servira à définir le prix de chaque produit.

Un fichier en organisation séquentielle F_MVT, donnant diverses informations sur les clients et sur les commandes effectuées par ces clients. Ce fichier est constitué chaque jour au fur et à mesure de la réception des informations. La saisie se termine à 21 heures, les informations et commandes non prises en compte seront réalisées lors du traitement du lendemain. Ce fichier comporte plusieurs types d’enregistrements : des enregistrements concernant le client et des enregistrements concernant les commandes

Description Enregistrements de type Client (type 0)

Position Intitulé Caractéristique Longueur 1 Type d’enregistrement : 0 AN 1 2 Numéro du client AN 5 7 Code Mise à Jour AN 1 8 Nom du client AN 20 28 Adresse du client AN 30

Description Enregistrements de type Commande (type 1)

Position Intitulé Caractéristique Longueur 1 Type d’enregistrement : 1 AN 1 2 Numéro du client AN 5 3 à blanc AN 1 8 à 57 10 zones produits commandés N 50 8 à 12 Un produit commandé AN 5 8 à 10 Numéro du produit N 3 11 à 12 Quantité commandée N 2 13 à 17 Un produit commandé AN 5 13 à 15 Numéro du produit N 3 16 à 17 Quantité commandée N 2 ................................................................................

Ce fichier est trié en croissant sur le numéro de client, le type d’enregistrement.

Les enregistrements de type client (Type 0) du fichier F_MVT

Il ne peut y avoir au maximum qu’ UN SEUL enregistrement de type 0 par client

Le code mise à jour peut prendre les valeurs « C », « M » ou « S ».

Le code « C » concerne un nouveau client

Le code « S » concerne une demande de suppression d’un client

Le code « M » concerne une modification, seules les zones modifiées sont renseignées.

Les enregistrements de type commande (Type 1) du fichier F_MVT

Il ne peut y avoir de 0 à N enregistrement de type 1 par client

Pour chaque enregistrement, les occurrences non renseignées sont en fin d’enregistrement.

Un fichier en organisation séquentielle F_TPU, donnant les prix unitaires de chaque produit. Il existe 300 produits (code produit 1 à 300) dans le catalogue des « Trois Russes ».

Position Intitulé Caractéristique Longueur 1 à 130 10 zones produits AN 130 1 à 13 Un produit AN 13 1 à 3 Un numéro de produit N 3 4 à 8 Prix unitaire code tarification 1 N 5 dont 2 décimales 9 à 13 Prix unitaire code tarification 2 N 5 dont 2 décimales 14 à 26 Un produit AN 13 14 à 16 Un numéro de produit N 3 17 à 21 Prix unitaire code tarification 1 N 5 dont 2 décimales 22 à 26 Prix unitaire code tarification 2 N 5 dont 2 décimales ............................................................................................

LES FICHIERS EN SORTIE

1) Un fichier F_CLIENTMAJ, fichier identique au fichier F_CLIENT d’entrée

2) Un fichier F_FACTURE sur imprimante dont la maquette est décrite ci dessous JJ mois en clair AAAA Nom du client Adresse du client CLIENT NUMERO DE PRODUIT MONTANT xxxxx xxx xxxxx,xx xxxxx xxx xxxxx,xx xxxxx xxx xxxxx,xx TOTAL : xxxxxxx,xx

La facture d’un client tient sur une page Les intitulés sont en gras sur la maquette Saut de page pour chaque nouveau client.

3) Un fichier F_BESTCLIENT donnant sur imprimante chaque mois les dix meilleurs clients des « Trois Russes ».

mois en clair AAAA NOM CLIENT ADRESSE xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Les intitulés sont en gras sur la maquette

Cette statistique n’est produite que le premier de chaque mois et doit être triée en ordre décroissant

LES REGLES DE GESTION

- Le code de tarification attribué à un nouveau client a la valeur 1

- Un client ayant en montant cumulé des commandes dépassé la somme de 10 000€ se voit attribuer un code de tarification 2 après le traitement en cours.

- Le montant d’un produit commandé est égal au Prix unitaire * Quantité commandé

- Le Prix unitaire utilisé sera celui correspondant à la tarification du client

Il) Travail Demandé

1- Unité de traitement ou Diagramme

2- Description des données

3- Arbre programmatique général

4- Arbres programmatiques détaillés

5- Cobol des déclarations des enregistrements des fichiers d’entrée et des différentes tables.

Corrigé de l’Exercice d’Entraînement TP-11

I) Diagramme de Traitement

Le diagramme de traitement nous indique les fichiers à traiter en entrée et en sortie.

F_CLIENT

OrganisationSéquentielle

PROG_TROIS_RUSSES

Trié NuméroClient

F_MVTOrganisationSéquentielle

F_BESTCLIENT

F_CLIENTMAJ

F_TPUOrganisationSéquentielle

Trié NuméroClient et Type

F_FACTURE

Chaque mois

- Le fichier en entrée F_TPU est en accès séquentiel, il comporte 30 enregistrements de 10 produits

chacun. Nous devons disposer des Prix Unitaires de ces 300 produits en mémoire centrale afin de pouvoir effectuer les divers traitements demandés. Ce fichier sera chargé sous forme d’une table T_Produits.

-

II) Analyse du problème

Cette solution va se baser sur une séparation des différents types de clients.

Le fichier F_TPU sera chargé sous forme de table T_Produits en début de traitement.

La particularité de ce traitement consiste dans le fait que le fichier mouvement permet d’effectuer une mise à jour sur les clients (Création, Modification, Suppression) mais également nous permet de gérer les éventuelles commandes de ces différents clients. Dans le fichier mouvement, on peut avoir pour un client donné plusieurs enregistrements mais le type, le code de mise à jour et la séquence de ces enregistrements sont différents en fonction de la nature du client NOUVEAU ou ANCIEN.

La séquence d’enregistrements d’un nouveau client aura la nature suivante :

• Obligatoirement un type « 0 » avec un code de mise à jour « C »

• Puis de 0 à N enregistrements de type « 1 ».

La séquence d’enregistrements d’un ancien client aura la nature suivante :

• Eventuellement un type « 0 » avec un code de mise à jour « M » ou « S »

• De 0 à N enregistrements de type « 1 ».

On peut considérer qu’un client supprimé ne fait pas de commandes.

Si Identifiant de F_CLIENT < Identifiant de F_MVT

Il s’agit d’un client qui ne subit aucune modification administrative et qui n’a effectué aucune commande.

Si Identifiant Identifiant de F_MVT < F_CLIENT

Il s’agit d’un nouveau client qui n’existe pas dans le fichier de base, il s’agit donc logiquement d’une CREATION.

Si Identifiant Identifiant de F_MVT = F_CLIENT

Il s’agit d’un ancien client,

Si l’enregistrement est de type « 0 » et le code de mise à jour « M », on prend en compte les modifications avant de traiter éventuellement les commandes.

Si l’enregistrement est de type « 0 » et le code de mise à jour « S », on supprime ce client, logiquement il n’existe pas de commandes associés.

Si l’enregistrement est de type « 1 », on traite les commandes de ce client sans modification administrative.

Les traitements pour les différents clients concerneront : prise en compte des différentes mises à jour (Création, Modification, Suppression), Cumul du montant des commandes, Modification éventuelle du code de tarification, mise à jour du fichier F_CLIENTMAJ, édition d’une facture si une commande a été effectuée, vérification si le client est parmi les 10 plus gros acheteurs.

Si le traitement est effectué le Premier jour du mois, édition des 10 meilleurs clients.

La fin de traitement est conditionnée par la fin du fichier F_CLIENT et du fichier F_MVT.

Analysons la structure du fichier F_CLIENT.

Le Fichier F_CLIENT est trié sur le numéro de client, on y trouve

Plusieurs CLIENTS

Pour chaque Client UN SEUL enregistrement

Analysons la structure du fichier F_MVT.

Le Fichier F_MVT est trié sur le numéro de client, on y trouve

Plusieurs CLIENTS

Pour chaque Client de 0 à 1 enregistrement de type « 0 »

Pour chaque Client de 0 à N enregistrement de type « 1 »

Nous allons donc appliquer le principe relatif à la mise à jour séquentielle pour différencier les différents types de clients et le principe de la rupture de groupe pour mettre en place la structure du traitement associé.

FICHIERCLIENT

CLIENT

1

N

1

1

TANT QUE

TANT QUE

ENREGISTREMENT Lecture

FICHIERMVT

CLIENT

TYPE 0

1N

1

0,1

TYPE 1

1

N

ENREGISTREMENT Lecture

Dans le fichier F_CLIENT, pour un client, il existe un seul enregistrement

Dans le fichier F_MVT, pour un client il existe 0 ou 1 enregistrement de type « 0 » et de 0 à N enregistrements de type « 1 ».

III) Description des données

En Pseudo-Code

FICHIER F_CLIENT

E_Client : Fiche ( E_NumCli_Client Texte (5) E_CodeTarif_Client Numérique (1) E_Nom_Client Texte (20) E_Adresse_Client Texte (30) E_CumulMt_Client Numérique (8,2) )

E_Client Texte(66) (par défaut) FICHIER F_MVT

E_Mvt : Fiche ( E_Type_Mvt Texte (1) E_NumCli_Mvt Texte (5 E_CodMaj_Mvt Texte(1) 50 caractères)

)

E_Mvt Texte (57) (par défaut)

Le fichier F_MVT ayant plusieurs types d’enregistrements, ceux ci seront décrits sous forme de zones de travail.

FICHIER F_TPU

E_Tpu : Fiche ( E_Produit_Tpu [1 : 10] : Fiche (

E_CodProd_Tpu Numérique (3) E_PU1_Tpu Numérique (3,2) E_PU2_Tpu Numérique (3,2)

)

E_Tpu Texte (130) (par défaut)

Chaque enregistrement du fichier F_TPU a été décrit sous forme d’une zone indicée de 10 occurrences.

FICHIER F_CLIENTMAJ

S_ClientMaj : Fiche ( S_NumCli_CliMaj Texte (5) S_CodeTarif_CliMaj Numérique (1) S_Nom_CliMaj Texte (20) S_Adresse_CliMaj Texte (30) S_CumulMt_CliMaj Numérique (8,2) )

S_ClientMaj Texte(66) (par défaut)

FICHIER F_FACTURE

S_Facture Texte (132)

FICHIER F_BESTCLIENT

S_BestClient Texte (132)

Les fichiers F_FACTURE et F_BESTCLIENT ayant plusieurs types d’enregistrements différents, nous avons déclaré ci-dessus les zones de communication associées. Les différents enregistrements seront décrits sous forme de zones de travail.

ZONES de TRAVAIL

T_Fin_F_Tpu Logique

Variable identifiant la fin du fichier Fichier Terminé ==> « Vrai » Fichier Non Terminé ==> « Faux »

T_Sov_Client Texte (5)

Variable de stockage du numéro de client en en cours de traitement

T_IndProd Numérique (2)

Indice gérant la zone indicée de l’enregistrement du fichier F_TPU

T_IndProd_Mvt Numérique (2)

Indice gérant la zone indicée de l’enregistrement du fichier F_MVT

T_IndDec Numérique (2)

Indice permettant d’effectuer un décalage dans la table T_T_Best

T_Date Fiche ( T_AAAA Numérique (4) T_MM Numérique (2) T_JJ Numérique (2) )

T_Date Texte (8) (par défaut)

Date Système

T_Typ0_Mvt Fiche ( T_NumTyp0_Mvt Texte (1) T_NumCli0_Mvt Texte (5) T_CodMaj_Mvt Texte (1) T_NomCli_Mvt Texte (20) T_AdrCli_Mvt Texte (30) )

T_Typ0_Mvt Texte (57) (par défaut)

Enregistrement Client du fichier Mouvement

T_Typ1_Mvt Fiche ( T_NumTyp1_Mvt Texte (1) T_NumCli1_Mvt Texte (5) 1 caractère à blanc

T_Produit_Mvt [1 : 10] : Fiche ( T_CodProd_Mvt Numérique (3) T_Qte_Mvt Numérique (2) )

T_Typ1_Mvt Texte (57) (par défaut)

Enregistrement Commandes du fichier Mouvement

T_LgnTitre_Fact Fiche (

30 caractères à blanc T_Int1_Fact Texte (6) 20 caractères à blanc T_Int2_Fact Texte (17) 20 caractères à blanc T_Int3_Fact Texte (7) 32 caractères à blanc )

T_LgnTitre_Fact Texte (132) (par défaut)

Ligne Titre de la Facture

T_LgnTitre_Best Fiche ( 40 caractères à blanc T_Int1_Best Texte (10) 40 caractères à blanc T_Int2_Fact Texte (7) 35 caractères à blanc )

T_LgnTitre_Best Texte (132) (par défaut)

Ligne Titre de l’état meilleurs clients

T_LgnDate_Fact Fiche ( T_DateJ_Fact Texte (2) 1 caractère à blanc T_DateM_Fact Texte (9) 1 caractère à blanc T_DateA_Fact Texte (4) 115 caractères à blanc )

T_LgnDate_Fact Texte (132) (par défaut)

Ligne Date de la Facture

T_LgnNom_Fact Fiche ( T_Nom_Fact Texte (20) 112 caractère à blanc )

T_LgnNom_Fact Texte (132) (par défaut)

Ligne Nom de la Facture

T_LgnAdr_Fact Fiche ( T_Adr_Fact Texte (30) 102 caractère à blanc )

T_LgnAdr_Fact Texte (132) (par défaut)

Ligne Adresse de la Facture

T_LgnProd_Fact Fiche ( 30 caractères à blanc T_NumCli_Fact Texte (5) 27 caractères à blanc T_NumProd_Fact Texte (3) 27 caractères à blanc T_MontProd_Fact Numérique Editée (5,2) 32 caractères à blanc )

T_LgnProd_Fact Texte (132) (par défaut)

Ligne Produit de la Facture

T_LgnTot_Fact Fiche ( 30 caractères à blanc T_IntTot_Fact Texte (8) T_MontTot_Fact Numérique Editée (7,2) 84 caractères à blanc )

T_LgnTot_Fact Texte (132) (par défaut)

Ligne Total de la Facture

T_LgnDate_Best Fiche ( T_DateM_Best Texte (9) 1 caractère à blanc T_DateA_Best Texte (4) 118 caractères à blanc )

T_LgnDate_Best Texte (132) (par défaut)

Ligne Date de l’état meilleurs clients

T_LgnCli_Best Fiche ( 35 caractères à blanc T_NomCli_Best Texte (20) 23 caractères à blanc T_AdrCli_Best Texte (30) 24 caractères à blanc )

T_LgnCli_Best Texte (132) (par défaut)

Ligne Client de l’état meilleurs clients

T_MtProd Numérique (5,2)

Zone de calcul montant du produit

T_MtTotProd Numérique (7,2)

Zone de calcul du total de la commande

*****************************************************************************************

Nous avons indiqué que le fichier F_TPU est chargé en mémoire centrale sous forme de table T_Produits comment définir cette table ?

Quels sont les arguments ==> On peut identifier 2 arguments, le numéro de produit et le code de tarification qui détermine le prix unitaire à affecter.

Le numéro de produit prend les valeurs de 1 à 300, il s’agit d’une séquence absolue donc l’argument n’appartient pas à la table

Chargement Direct Recherche Directe 300 postes

Le code de tarification prend les valeurs 1 et 2, il s’agit d’une séquence absolue donc l’argument n’appartient pas à la table

Chargement Direct Recherche Directe 2 postes

La fonction associée ==> un prix unitaire

T_Produits : TABLEAU ( [1 :30], [1,2] : T_PU_Tab Numérique (3,2))

*****************************************************************************************

Puisque les mois doivent être édités en clair, on va initialiser une table interne T_TabMois

Combien de postes ==> 12 mois

Quel est l’argument ==> Le numéro du mois est l’argument, il s’agit d’une séquence absolue donc l’argument n’appartient pas à la table

Recherche Directe

Les fonctions associées ==> Libellé du mois.

T_TabMois : TABLEAU [1 : 12] (T_Libel_Mois Texte (9) )

*****************************************************************************************

Il faut identifier les 10 meilleurs clients chaque mois, pour cela il faut stocker dans une table les informations permettant d’identifier les meilleurs clients (Cumul des commandes) et les informations demabées lors de l’édition du fichier F_BESTCLIENT (Nom du client et Adresse du client)

Combien de postes ==> 10 postes

Cette table sera traitée séquentiellement, il faudra la charger en conservant un tri décroissant dans le cumul des montants.

T_TabBest : TABLEAU ([1 :10] : FICHE ( T_CumMt_TabBest Numérique(8,2) T_NomCli_TabBest Texte (20) T_AdrCli_TabBest Texte (30)

) )

T_IndBest Numérique (2)

Indice gérant la table TabBest

IV) Arbre Général PROG TP11 Trois_Russes

Débu_Trois_Russes Fin_Trois_RussesTANT QUE

E_NumCli_Client ^=Valeur maximale

OUE_NumCli_Mvt ^=Valeur maximale

Un_CLIENT

SI ALORS SINON

E_NumCli_Client <E_NumCli_Mvt

Le traitement Un_CLIENTs'effectuera TANT QUE UN des 2

fichiers n'est pas terminé

IV - ARBRE GENERAL PROG TP11

OuverturesInit

Trois_Russes Char_T_Produits LecturesF_CLIENT F_MVT

SI ALORS SINON

E_NumCli_Client =E_NumCli_Mvt

Ancien_Client_Recopie

Ancien_Client Nouveau_Client

FermeturesSI ALORS

T_JJ=1

Edition_Best

Le traitementeffectué le premier

de chaque mois

Trait_AncCli_Recopie Lecture F_CLIENT

Trait_Ancien_Client Lecture F_CLIENTLe client du fichier de base

n'ayant qu'un enregistrementaprès traitement, on passe au

suivant

Ancien_Client_Recopie

Nouveau_Client

Ecrire S_ClientMajS_ClientMaj

<==E_Client

IV - ARBRE DETAILLE PROG TP11

Charg_T_TabBest

Trait_Creation_Client Trait_Commandes

Ecrire s_ClientMaj

T_Sov_Client<==

E_NumCli_Mvt

Ce bloc prendra encompte si le client aeffectué ou non des

commandes

Charg_T_TabBest

Ecriture en sortieaprès avoir pris en

compte leséventuellescommandes

Cet ancien client participe à larecherche des 10 meilleurs

clients

Lecture F_MVT

Ce nouveau client participe à larecherche des 10 meilleurs

clients

Logiquement, on traite, un enreg de type"0" et code mise à jour "C"

Ayant traité l'enreg detype "0", on passe à

l'enreg suivant du fichierF_MVT

IV - ARBRE DETAILLEPROG TP11

Trait_Ancien_Client

E_CodMaj_Mvt

Lecture F_MVT

Dans le cas d'une suppression, pasde traitement spécifique, on passe à

l'eneg suivant du fichier F_MVT Ancien client avec modifs administratives etéventuellement des commandes

Il peut s'agir d'un ancien client avec modifsadministratives suiviesou non de commandes

OU BIENde la suppression d'un ancien client

OU BIENd''un ancie client avec uniquement des commandes

SELON

"S" "M" àblanc

Modif_Ancien_Client Commandes_Ancien_Client

Ancien client avec uniquement descommandes

Le code E_CodMaj_Mvt à blanccorrespond à la lecture d'un type "1" dans

la zone de communication

T_SovClient<==E_NumCli_Mvt

S_ClientMaj <== E_Client

IV - ARBRE DETAILLEPROG TP11

Init_Trois_Russes

Recuperez datesysteme

==> T_Date

Lecture F_CLIENT

LireF_CLIENT

E_NumCli_Client<==

Valeur Maximale

SI ALORS

Fin de Fichier

Ouvertures

Ouvrir en entréeF_CLIENT, F_MVT

Fermetures

Fermer F_CLIENT,F_MVT, F_FACTURE,

F_BESTCLIENT

InitialisationT_TabBest, et

T_TabMois

T_Int1_Fact <=="CLIENT"

T_Int2_Fact <=="NUMERO DU

PRODUIT"T_Int3_Fact <==

"MONTANT"T_IntTot_Fact <==

"TOTAL : "

T_Int1_Best <=="NOM CLIENT"T_Int2_Best <==

"ADRESSE"

Ouvrir en sortieF_FACTURE,

F_BESTCLIENT

LecturesF_CLIENT_F_MVT

Lecture F_MVT Lecture F_CLIENT

LireF_MVT

E_NumCli_Mvt<==

Valeur Maximale

SI ALORS

Fin de Fichier

IV - ARBRE DETAILLEPROG TP11

Trait_Creation_Client

T_Typ0_Mvt<==

E_Mvt

S_NumCli_CliMaj<== T_NumCli0_MvtS_CodeTarif_CliMaj

<== 1

S_Nom_CliMaj<== T_NomCli_MvtS_Adresse_CliMaj<== T_AdrCli_Mvt

S_CumulMt_CliMaj<==

0

Trait_Modif_Client

SI ALORS SI ALORST_Typ0_Mvt<==E_Mvt

T_NomCli_Mvt ^='blanc"

T_AdrCli_Mvt ^='blanc"

S_NomCli_Maj<==

T_NomCli_Mvt

S_Adresse_CliMaj<==

T_AdrCli_Mvt

Il s'agit d'unenreg de type 0,

on le stockedans la zone de

travail à sonimage

On construit l'enreg du nouveau client dansla zone de communication du fichier de

sortie

On prend en compte les modifications du client dans lazone de communication du fichier de sortie préalablement

renseignée par l'enregistrement du fichier F_CLIENT

Modif_Ancien_Client

Ecire S_ClientMajLecture F_MVT Trait_Commandes Charg_T_TabBest

Ayant traité l'enreg de type"0", on pase à l'enreg

suivant du fichier F_MVT

Ce bloc prendra en comptesi le client a effectué ou non

des commandes

Ecriture en sortie après avoirpris en compte les

éventuelles commandes

Ce client participe à larecherche des 10 meilleurs

clients

IV - ARBRE DETAILLEPROG TP11

Commandes_Ancien_Client

Ecire S_ClientMajTrait_Commandes Charg_T_TabBest

Ce bloc prendra en compteles commandes de cet

ancien client

Ecriture en sortie après avoirpris en compte les

éventuelles commandes

Ce client participe à larecherche des 10 meilleurs

clientsIl s'agit d'un ancien client pour lequel le fichier F_MVT apporte que desinformations concrnant des commandes

IV - ARBRE DETAILLEPROG TP11

Char_T_Produits

T_Fin_F_Tpu=

"Faux"

Lecture F_TPU

Chargement de la table du prixunitaire des différents produits

TANT QUE

Un_Enreg_F_TPU

Debut_Char_T_Produits Fin_Char_T_Produits

T_Fin_Tpu<==

"Faux"Ouverture F_T_PU

en entrée

Debut_Enreg_F_TPU

T_IndProd<==

1

TANT QUE

T_IndProd <= 10

Un_PRODUIT

T_PU_Tab(E_CodProd_Tpu(T_IndProd),1)

<== E_PU1_Tpu(T_IndProd)

T_PU _Tab(E_CodProd_Tpu(T_IndProd),2)

<== E_PU2_Tpu(T_IndProd)

T_IndProd<== T_IndProd

+ 1

Fin_Enreg_F_TPU

Lecture F_TPU

FermerF_TPU

Positionnementpremière

occurrencede l'enregistrement

Tant que l'on n'apas traité les 10

postes

Positionnementsur la prochaine

occurrencede l'enregistrement

Le traitement del'enreg.

est terminé, on lit lesuivant

Quelques commentaires sur ce chargement de la table T_Produits

Après la lecture d’un enregistrement du fichier F_TPU, on se positionne sur la première occurrence de la zone indicée de l’enregistrement.

On va effectuer le transfert des prix unitaires de l’enregistrement vers la table TANT QUE l’on n'a pas dépassé les 10 occurrences d’un enregistrement.

Le transfert consiste à prendre le premier prix unitaire E_PU1_Tpu de l’enregistrement, or cette information appartient à une zone indicée par T_IndProd ==> E_PU1_Tpu (T_IndProd). Cette information est transférée dans la table T_Produits, or pour accéder à cette table il faut 2 indices :

Le premier concerne le code produit (1 à 300), le code produit se trouve dans l’enregistrement du fichier F_TPU dans la zone indicée par T_IndProd ==> E_CodProd_Tpu(T_IndProd)

Le second concerne le code de tarification (1 à 2) or E_PU1_Tpu (T_IndProd) correspond à la tarification 1, le second indice prendra la valeur 1.

E_PU1_Tpu (T_IndProd).==> T_PU_Tab (E_CodProd_Tpu(T_IndProd),1)

Le transfert consiste ensuite à prendre le second prix unitaire E_PU2_Tpu de l’enregistrement, or cette information appartient à une zone indicée par T_IndProd ==> E_PU2_Tpu (T_IndProd). Cette information est transférée dans la table T_Produits, or pour accéder à cette table il faut 2 indices :

Le premier concerne le code produit (1 à 300), le code produit se trouve dans l’enregistrement du fichier F_TPU dans la zone indicée par T_IndProd ==> E_CodProd_Tpu(T_IndProd)

Le second concerne le code de tarification (1 à 2) or E_PU2_Tpu (T_IndProd).correspond à la tarification 2, le second indice prendra la valeur 2.

E_PU2_Tpu (T_IndProd).==> T_PU_Tab (E_CodProd_Tpu(T_IndProd),2)

Poste repéré par T_IndProd Numéro

de produit

PU1 PU2

25 52,5 41,5 Enregistrement de F_TPU Table T_Produits

Code Tarif 1 Code Tarif 2 Ligne 25 =====>

52,5 41,5

IV - ARBRE DETAILLEPROG TP11

Trait_Commandes

T_Sov_Client=

E_Numcli_Mvt

T_Typ1_Mvt<== E_Mvt

Traitement éventuel descommandes, on est positionné par

les lectures sur le prochainenregistrement de F_MVT à traiter

TANT QUE

Un_Enreg_Commande

Debut_Trait_Commandes Fin_Trait_Commandes

Debut_Enreg_Commande

T_IndProd_Mvt<==

1

TANT QUE

T_Produit_Mvt(T_IndProd_Mvt)

^= à blanc ETT_IndProd _Mvt<= 10

Un_PRODUIT_CMDE

T_IndProd_Mvt<== T_IndProdMvt

+ 1

Fin_Enreg_Commande

Lecture F_MVT

Positionnementpremière

occurrencede l'enregistrement

Tant quel'occurrence

renseignée et quel'on a pas traité les

10 postes

Positionnementsur la prochaine

occurrencede l'enregistrement

Le traitement del'enreg.

est terminé, on lit lesuivant

T_MtToTProd<== 0

En_Tete_Facture

Lgn_Facture

Lgn_Tot_Facture Cumul_Cmd Code_Tarif

Montant_Produit Cumul_Facture

T_Numcli_Fact<== T_Sov_Client

IV - ARBRE DETAILLEPROG TP11

Montant_Produit

En_Tete_Facture

Cumul_Facture

T_MtTotProd<==

T_MtTotProd+

T_MtProd

T_MtProd<==

T_PU_Tab ( T_CodProd_Mvt (T_IndProd_Mvt) , S_CodeTarif_CliMaj)*

T_Qte_Mvt (T_IndProd_Mvt)

LgnDate_Facture LgnNom_Facture LgnAdr_Facture LgnInt_Facture Saut_Lgn_Facture

Lgn_Facture

T_NumProd_Fact<==

T_CodProd_Mvt(T_IndProd_Mvt)

T_MontProd_Fact<==

T_MtProd

Ecrire S_Facture<==

T_LgnProd_Fact

T_MontTot_Fact<==

T_MtTotProd

Ecrire S_Facture<== T_LgnTot_Fact

après saut de 2 lignes

Total_Facture

T_Numcli_Fact<==

à blanc

Quelques commentaires sur la calcul du montant d’un produit

Le montant d’un produit est égal = Prix unitaire du produit * Quantité de produit commandé

Le Prix unitaire d’un produit se trouve dans la table des produits, on accède par une recherche directe dans cette table à l’aide de deux informations qui permettent de positionner les indices.

Premier indice : le numéro de produit

Le numéro de produit commandé se trouve dans l’enregistrement du fichier F_MVT, enregistrement stocké dans la zone de travail T_Typ1_Mvt. La zone T_CodProd_Mvt contient ce numéro de produit, or cette zone appartient à une zone indicée par T_IndProd_Mvt

numéro de produit ==> T_CodProd_Mvt (T_IndProd_Mvt )

Second indice : le code de tarification du client

Le code de tarification du client est dans la zone de communication S_ClientMaj du fichier de sortie F_CLIENTMAJ, nous avons transféré toutes les informations concernant un ancien client dans cette zone et avons construit également dans cette zone les caractéristiques d’un nouveau client.

code de tarification ==> S_CodeTarif_Climaj

le prix unitaire à utiliser est identifié par :

T_PU_Tab (T_CodProd_Mvt (T_IndProd_Mvt ), S_CodeTarif_Climaj )

La Quantité commandé pour un produit se trouve dans l’enregistrement du fichier F_MVT, enregistrement stocké dans la zone de travail T_Typ1_Mvt. La zone T_Qte_Mvt contient cette quantité, or cette zone appartient à une zone indicée par T_IndProd_Mvt

quantité commandée ==> T_Qte_Mvt (T_IndProd_Mvt )

Le montant du produit traité est donc égal à :

T_PU_Tab (T_CodProd_Mvt (T_IndProd_Mvt ), S_CodeTarif_Climaj )*T_Qte_Mvt (T_IndProd_Mvt)

IV - ARBRE DETAILLEPROG TP11

LgnDate_Facture LgnNom_Facture

T_Nom_Fact<==S_Nom_CliMaj

T_DateJ_Fact<==T_JJ

T_DateM_Fact<==

T_Libel_Mis(T_MM)

T_DateA_Fact<==

T_AAAA

Ecrire S_Facture<==

T_LgnDate_Factaprès saut de page

Ecrire S_Facture<==

T_LgnNom_Fact

LgnAdr_Facture

T_Adr_Fact<==S_Adr_CliMaj

Ecrire S_Facture<== T_LgnAdr_Fact

LgnInt_Facture

Ecrire S_Facture<== T_LgnTitre_Factaprès saut de 2 lignes

Saut_Lgn_Facture

Ecrire S_Facture

après saut de 2 lignes

S_Facture<== à blanc

v

Cumul_Cmd

S_CumulMt_CliMaj<==

S_CumulMt_CliMaj+

T_MtTotProd

SI ALORS

S_CodeTarif_CliMaj<==

2

S_CumulMt_CliMaj> 10 000

Code_Tarif

IV - ARBRE DETAILLEPROG TP11

Char_T_TabBest

T_IndBest <= 10ET

T_CumMt_TabBest(T_IndBest)

>S_CumulMt_CliMaj

Alimentation régulière de la tabledes meilleurs clients

TANT QUEDebut_Char_T_TabBest Fin_Char_T_TabbBest

T_IndBest<== 1

POSTE_SUIVANT

T_IndBest<== T_IndBest + 1

Positionnementpremièr poste

de la table

Tant que l'on n'a pas traité les 10 posteset que le client du poste examiné a plus

dépensé que le client en cours

Positionnementsur le prochainposte de la table

SI ALORS

T_IndBest <= 10

Decalage_T_TabbBest

En quittant la répétitive si T_IndBest <= 10, on atrouvé dans la table un client qui a moins dépensé

que le client en cours, il faut alors décaler les postesvers le bas pour insérer ce client

IV - ARBRE DETAILLEPROG TP11

Decalage_T_TabBest

T_IndDec > T_IndBest

Insertion du clent dans la tableT_TabBest

TANT QUEDebut_Decalage Fin_Decalage

T_IndDec<== 10

Un_DECALAGE

TabBest (T_IndDec - 1)<== T_IndDec

T_CumMt_TabBest <== S_CumulMt_CliMaj

T_NomCli_TabBest <== S_Nom_CliMaj

T_AdrCli_TabBest <== S_Adr_CliMajPositionnementdernier poste

de la tableTant que l'on n'a pas décalé tous les

postes en dessous du poste d'insertion

T_IndDec<== T_IndDec - 1

On transfère le 9ème poste de la table sur le 1Oème poste (qui est donc écrasé) puis le 8ème sur le 9ème poste jusqu'auposte où il faut insérer le client. Cette insertion s'effectue en fin de décalage.

Au départ, la table est initialisée pour les cumuls à 0

IV - ARBRE DETAILLEPROG TP11

Edition_Best

T_IndBest <= 10

Déchargement de la tableT_TabBest

TANT QUEDebut_Edition_Best Fin_Decalage

T_IndBest<== 1

Un_Poste_Edite

T_NomCli_Best<==

T_NomCli_TabBest(T_IndBest)

RIEN

Positionnementpremier poste

de la table

Tant que l'on n'a pas traité les 10 postes

T_AdrCli_Best<==

T_AdrCli_TabBest(T_IndBest)

Titre_Best

Ecrire S_Best<==

T_LgnCli_Best

T_IndBest<==

t_IndBest + 1

Ecriture d'un poste

COBOL des enregistrement des fichiers en entrée et des différentes tables de l’algorithme

7 8 12 73

DATA DIVISION.

FILE SECTION.

FD F_CLIENT.

1 E_Client.

2 E_NumCli_Client PIC X(5).

2 E_CodeTarif_Client PIC 9.

2 E_Nom_Client PIC X (20).

2 E_Adresse_Client PIC X(30).

2 E_CumulMt_Client PIC ç(8)V99.

FD F_CLIENT

1 E_Mvt.

2 E_Type_Mvt PIC X.

2 E_Numcli_Mvt PIC X(5).

2 E_CodMaj_Mvt PIC X.

2 PIC X(50).

1 T_TyP0_Mvt.

2 T_NumTyp0_Mvt PIC X.

2 T_Numcli0_Mvt PIC X(5).

2 T_CodMaj_Mvt PIC X.

2 T_NomCli_Mvt PIC X(20).

2 T_AdrCli_Mvt PIC X(30).

1 T_TyP1_Mvt.

2 T_NumTyp1_Mvt PIC X.

2 T_Numcli1_Mvt PIC X(5).

2 PIC X.

2 T_Produit_Mvt OCCURS 10.

3 T_CodProd_Mvt PIC 9(30).

3 T_Qte_Mvt PIC99.

7 8 12 73

WORKING-STORAGE SECTION.

1 T_Produits.

2 T_NivProd OCCURS 30.

3 T_PU PIC 999V99 OCCURS 2.

1 T_TabBest.

2 T_Poste_TabBest OCCURS 10.

3 T_CumMt_TabBest PIC 9(8)V99.

3 T_NomCli_TabBest PIC X (20).

3 T_AdrCli_TabBest PIC X (30).

1 T_ZoneMois.

2 PIC X(9) VALUE “Janvier”.

2 PIC X(9) VALUE “Février”.

2 PIC X(9) VALUE “Mars”.

2 PIC X(9) VALUE “Avril”.

2 PIC X(9) VALUE “Mai”.

2 PIC X(9) VALUE “Juin”.

2 PIC X(9) VALUE “Juillet”.

2 PIC X(9) VALUE “Aout”.

2 PIC X(9) VALUE “Septembre”.

2 PIC X(9) VALUE “Octobre”.

2 PIC X(9) VALUE “Novembre”.

2 PIC X(9) VALUE “Décembre”.

1 T_TabMois REDEFINES T_ZoneMois.

2 T_Libel_Mois PIC X(9) OCCURS 12.

Remarques sur le COBOL.

Le fichier F_MVT comporte plusieurs enregistrements, nous aurions pu dans le COBOL décrire ces différents enregistrements dans la WORKING-STORAGE SECTION sous forme de zones de travail comme dans le pseudo code.

Le langage COBOL permet de déclarer plusieurs images de la zone de communication associée à un fichier, pour désigner ce genre de description on utilise le terme de REDEFINES implicite, alors que pour la table des mois on effectue un REDEFINES explicite.