PROGRAMME 10 : Inventaire
On dispose d'un fichier texte PASCAL décrivant la liste des
produits en stock dans les différents magasin d'une chaîne de supermarchés. Chaque
ligne de ce fichier a le format suivant : n°produit prix unitaire nombre d'unités en stock <-- 4 -->BB <---- 7 ---->BB <-------- 4-----------> La dernière ne contient que des zéros. B désigne un blanc. 1) Créer à partir de ce fichier un autre fichier STOCK (de type FILE) où chaque enregistrement est une structure à 3 champs : numéro du produit, prix unitaire et nombre d'unités en stock.
|
Le programme
PROGRAM Stock;
TYPE
T = RECORD
Nm : INTEGER;{numéro de magasin}
Nr : INTEGER;{numéro de rayon}
Num: STRING
END;
Typearticle = RECORD
Numprod : T;
Pu : REAL;
Qte : INTEGER
END;
Tfile = FILE OF Typearticle;
VAR
Im, Ir : INTEGER;
Mmag, Mray, Mtotal : REAL;
E : Typearticle;
Fsort : TEXT;
Fstock : Tfile;
Ftext : TEXT;
{ Création du fichier Fstock à partir d'un fichier Text}
PROCEDURE Creer(VAR Ft : TEXT; VAR Fs : Tfile );
VAR Num : STRING;
Pu : REAL;
Qte : INTEGER;
Nm, Nr : INTEGER;
Art : Typearticle;
PROCEDURE Lire( VAR Nm, Nr:INTEGER;VAR Num :
STRING;VAR Pu:REAL;
VAR Qte : INTEGER );
VAR N_m, N_r: STRING;
J : INTEGER;
C : CHAR;
BEGIN
N_m:='';
FOR J:=1 TO 2 DO
BEGIN READ(Ft, C);N_m := N_m+C
END;
Nm := ORD(N_m(.2.))-48 + (ORD(N_m(.1.))-48)*10;
N_r:='';
FOR J:=1 TO 2 DO
BEGIN READ(Ft, C);N_r := N_r+C
END;
Nr := ORD(N_r(.2 .))-48 +
(ORD(N_r(.1.))-48)*10;
Num:='';
FOR J:=1 TO 4 DO
BEGIN READ(Ft, C);Num := Num+C
END;
FOR J:=1 TO 2 DO READ(Ft,C);
READ(Ft, Pu);
READLN(Ft, Qte);
END;
BEGIN
ASSIGN(Ft,'D_stock.Pas');
ASSIGN(Fs,'R1_stock');
RESET(Ft);
REWRITE(Fs);
Lire(Nm, Nr, Num, Pu, Qte);
WHILE ( Nm <> 0 ) DO
BEGIN
Art.Numprod.Nm := Nm;
Art.Numprod.Nr := Nr;
Art.Numprod.Num := Num;
Art.Pu := Pu;
Art.Qte := Qte;
WRITE(Fs, Art);
Lire(Nm, Nr, Num, Pu, Qte);
END;
Art.Numprod.Nm := 0;
WRITE(Fs,Art);
END;
{ Inventaire}
BEGIN
ASSIGN(Fstock,'R1_stock');
Creer(Ftext, Fstock);
ASSIGN(Fsort,'R_stock.Pas');
REWRITE(Fsort);
RESET(Fstock);
READ(Fstock, E);
Im := 1; Ir := 1; Mray := 0;
Mmag := 0; Mtotal := 0;
WRITELN(Fsort, ' ':5,'Magasin Nø',Im:3);
WHILE (NOT EOF(Fstock) ) DO
IF E.Numprod.Nm = Im
THEN
IF E.Numprod.Nr = Ir
then
BEGIN
Mray := Mray + E.Qte *
E.Pu;
READ(Fstock, E)
END
ELSE
BEGIN
WRITELN(Fsort,' ':10,'Rayon Nø', Ir:3,':':10, Mray:8:2 );
Mmag := Mmag + Mray;
Mray := 0;
Ir := Ir + 1
END
ELSE
BEGIN
Mmag := Mmag + Mray;
Mtotal := Mtotal + Mmag;
WRITELN(Fsort,' ':10,'Rayon Nø',
Ir:3,':':10, Mray:8:2 );
WRITELN(Fsort);
WRITELN(Fsort,'*':10,' Montant
total du rayon : ', Mmag:8:2);
WRITELN(Fsort);
WRITELN(Fsort,' ':5,'Magasin Nø',
Im+1:3);
Im:=Im + 1;
Ir := 1;
Mmag := 0;
Mray := 0;
END;
WRITELN(Fsort,' ':10,'Rayon Nø', Ir:3,':':10, Mray:8:2 );
Mmag := Mmag + Mray;
WRITELN(Fsort,'*':10,' Montant total du rayon : ', Mmag:8:2);
WRITELN(Fsort);
Mtotal := Mtotal + Mmag;
WRITELN(Fsort,'*':5,' Montant total du stock : ', Mtotal:8:2 );
CLOSE(Fsort)
END.
Les données
Contenu du fichier D_Stock.Pas
01014532 13.23 24
01014536 45.34 12
01022343 23.23 16
01025643 15.8 42
01036798 12 87
02016754 6.76 12
02016543 5.4 98
02017845 1.65 34
03014444 3.56 12
03025555 7.89 8
03036666 7.54 23
04012222 77.2 34
00000000 0000 00
Les résultats
Contenu du fichier R_Stock.Pas
Magasin Nø 1
Rayon Nø 1
: 861.60
Rayon Nø 2
: 1035.28
Rayon Nø 3
: 1044.00
* Montant total du rayon : 2940.88
Magasin Nø 2
Rayon Nø 1
: 666.42
* Montant total du rayon : 666.42
Magasin Nø 3
Rayon Nø 1
: 42.72
Rayon Nø 2
: 63.12
Rayon Nø 3
: 173.42
* Montant total du rayon : 279.26
Magasin Nø 4
Rayon Nø 1
: 2624.80
* Montant total du rayon : 2624.80
* Montant total du stock : 6511.36