Releve de paie en pascal.

Fermé
jeff - 16 juil. 2008 à 13:24
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 - 7 août 2008 à 19:41
Bonjour,

je cherche a ecrire un programme pascal qui produira les relevés de paie de 5 employés d’une entreprise et les affichera à l’écran. Le programme devra être construit de façon structurée.

Chaque relevé (modèle libre) contiendra le nom complet, l’adresse et la fonction de l’employé, en plus des informations se rapportant particulièrement au relevé produit, sans les montants cumulatifs se retrouvant habituellement sur un tel type de relevé.

construit comme suit :
Un_Employe = RECORD
No_Employe : Byte ;
Nom_et_Prenom : String;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;
END;
VAR
Liste1 : ARRAY[100..109] OF Un_employe;

Le champ Code_Impot peut valoir 1, 2 ou 3, qui signalent respectivement des déductions fiscales de base de 5 000, 7 000 et 10 000 $. Les taux d’impôt appliqués sont :
Revenu annuel ($) de taux d’impôt fédéral taux d’impôt provincial
15 000 et moins 0 % 0 %
15 001 à 30 000 15 % 20 %
30 001 à 50 000 19 % 23 %
50 001 et plus 23 % 27 %
Le revenu annuel imposable est estimé en fonction du salaire d’une période de paie et de la déduction fiscale de base. Il n’y pas d’autres déductions que les impôts provincial et fédéral.

Le programme fonctionnera à partir de la saisie au clavier des numéros d’employés
(compris entre 100 et 119) dont on veut les relevés de salaire, et du nombre d’heures
travaillées (maximum 90) pour une période de deux semaines.

Si quelqu'un a du temps pour jeter un coup d'oeil sur se programme et m'aider, se serais grandement apprecier.
A voir également:

12 réponses

J'ai debuter mon programme, mais j'aimerais savoir comment garder mes donnees en memoire pour y avoir acces , au lieu de toujours entrer de nouvelles donnees.


program EMPLOYE;

type
Un_Employe = ^TEmploye;
TEmploye = record
No_Employe : Byte ;
nom_et_prenom: string;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;

end;

var
Liste1 : ARRAY[100..119] OF Un_employe ;
Employes: array[1..20] of Un_Employe;
i, nombreEmployes: integer;
No_Employe : Byte ;
nom_et_prenom: string;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;

begin
write('Combien d''Employes (Maximum : 20) : ');
readln(nombreEmployes);
if nombreEmployes > 20 then
nombreEmployes := 20;
for i := 1 to nombreEmployes do

begin
new(Employes[i]);
write(' No_Employe : ');
readln(No_Employe);
Employes[i]^.No_Employe := No_Employe;
write(' nom_et_prenom : ');
readln(nom_et_prenom);
Employes[i]^.nom_et_prenom := nom_et_prenom;
write(' Fonction : ');
readln(Fonction);
Employes[i]^.fonction := Fonction;
write(' Salaire_horaire : ');
readln(Salaire_horaire);
Employes[i]^.Salaire_horaire := Salaire_horaire;
write(' Code_Impot : ');
readln(Code_Impot);
Employes[i]^.Code_Impot := Code_Impot;
write(' No_et_Rue : ');
readln(No_et_Rue);
Employes[i]^.No_et_Rue := No_et_Rue;
write(' Ville_et_Province : ');
readln(Ville_et_Province);
Employes[i]^.Ville_et_Province := Ville_et_Province;
write(' Code_Postal: ');
readln(Code_Postal);
Employes[i]^.Code_Postal := Code_Postal;

end;

for i := 1 to nombreEmployes do

writeln( ' No_Employe : ', Employes[i]^.No_Employe);
writeln (' nom_et_prenom : ', Employes[i]^.nom_et_prenom);
writeln( ' Salaire_horaire: ', Employes[i]^.Salaire_horaire);
writeln( ' Code_Impot : ', Employes[i]^.Code_Impot);
writeln( ' No_et_Rue : ', Employes[i]^.No_et_Rue);
writeln( ' Ville_et_Province : ', Employes[i]^.Ville_et_Province);
writeln(' Code_Postal : ', Employes[i]^.Code_Postal);



for i := 1 to nombreEmployes do
dispose(Employes[i]);

readln;

end.
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
28 juil. 2008 à 19:07
Tu peux utiliser un fichier de type file of Un_Employe pour y stocker tes données...
0
du genre BaseDonnee = file of Un_Employe ? et des procedure comme suit?

procedure CreerBaseDonnee(CheminAcces:string);
var b:BaseDonnee;
begin
assign(b,CheminAcces);
rewrite(b);
close(b);
end;

procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
begin
assign(b,CheminAcces);
reset(b);
end;

procedure AjouterDonnee(var b:BaseDonnee;d:Donnee);
begin
seek(b,filesize(b));
write(b,d);
end;

procedure AfficherBaseDonnee(var b:BaseDonnee);
var d:Donnee;
begin
seek(b,1);
while not eof(b) do
begin
read(b,d);
writeln;
LireDonnee(d);
readln;
end;
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
28 juil. 2008 à 20:46
Exactement, mais en n'oubliant pas la procédure FermerBaseDonnee...
PS. il manque un end; à la fin de AfficherBaseDonnee
0
Peux tu regarder mon programme et me dire si je suis sur le bon chemin, ??


program Releve_de_paie;

type

Un_Employe = ^TEmploye;
TEmploye = record
No_Employe : Byte ;
nom_et_prenom: string;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;


end;

BaseDonnee = file of Un_Employe;


procedure CreerBaseDonnee(CheminAcces:string);
var b:BaseDonnee;
begin
assign(b,CheminAcces);
rewrite(b);
close(b);
end;

procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
begin
assign(b,CheminAcces);
reset(b);
end;

procedure AjouterDonnee(var b:BaseDonnee;d:Un_Employe);
begin
seek(b,filesize(b));
write(b,d);
end;

procedure AfficherBaseDonnee(var b:BaseDonnee);
var d:Un_Employe;
begin
seek(b,1);
while not eof(b) do
begin
read(b,d);
writeln;
readln;
end;
end;



var
Liste1 : ARRAY[100..119] OF Un_employe ;
Employes: array[100..119] of Un_Employe;
i,nombreEmployes: integer;
No_Employe : Byte ;
nom_et_prenom: string;
Fonction : String ;
Salaire_Horaire : Real ;
Code_Impot : Byte ;
No_et_Rue : String ;
Ville_et_Province : String ;
Code_Postal : String ;


var b:BaseDonnee;
t, n:integer;
s:string;
begin
writeln('Creer une nouvelle base de donnee, ou utiliser une precedente ?');
write('1. Nouvelle, 2. Ancienne : '); readln(n); writeln;
write('Chemin d''acces = '); readln(s); writeln;
if n=1 then CreerBaseDonnee(s) else
OuvrirBaseDonnee(s,b);
readln;



begin
write('Combien d''Employes (Maximum : 20) : ');
readln(nombreEmployes);
if nombreEmployes > 20 then
nombreEmployes := 20;
for i := 1 to nombreEmployes do



begin

writeln;
new(Employes[i]);
write(' No_Employe : ');
readln(No_Employe);
Employes[i]^.No_Employe := No_Employe;
write(' nom_et_prenom : ');
readln(nom_et_prenom);
Employes[i]^.nom_et_prenom := nom_et_prenom;
write(' Fonction : ');
readln(Fonction);
Employes[i]^.fonction := Fonction;
write(' Salaire_horaire : ');
readln(Salaire_horaire);
Employes[i]^.Salaire_horaire := Salaire_horaire;
write(' Code_Impot : ');
readln(Code_Impot);
Employes[i]^.Code_Impot := Code_Impot;
write(' No_et_Rue : ');
readln(No_et_Rue);
Employes[i]^.No_et_Rue := No_et_Rue;
write(' Ville_et_Province : ');
readln(Ville_et_Province);
Employes[i]^.Ville_et_Province := Ville_et_Province;
write(' Code_Postal: ');
readln(Code_Postal);
Employes[i]^.Code_Postal := Code_Postal;
readln;
end;

end;






end.
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 12:44
Il est inutile (et faux) d'utiliser des pointeurs dans ton programme...

En effet il serait inutile de faire un fichier de pointeurs puisqu'à la fin du programme les données visées par ces pointeurs sont "effacées" et donc inutilisables lorsque tu ouvres à nouveau ce fichier !

Non ce qu'il faut faire c'est un fichier de données, un file of Un_Employe mais avec le type Un_Employe tel que tu le mettais au tout début (je n'avais pas vu la déviance à ton 2è post)

Autres remarques :
La position dans le fichier commence à 0, ainsi pour aller au début on fait seek(b,0) et non seek(b,1).
Il faut absolument penser à fermer ton fichier à la fin du programme !
Le type byte ne permet d'aller que jusqu'à 255, si tu veux dépasser ce nombre mais un integer.
J'ai rajouter la procédure EntrerDonnee pour simplifier le programme principal.
Et corriger la procedure AfficherBaseDonnee en utilsant une procedure auxiliaire AfficherDonnee.

program Releve_de_paie;

type Un_Employe=record
                No_Employe : Byte ;
                nom_et_prenom: string;
                Fonction : String ;
                Salaire_Horaire : Real ;
                Code_Impot : Byte ;
                No_et_Rue : String ;
                Ville_et_Province : String ;
                Code_Postal : String ;
                end;

     BaseDonnee=file of Un_Employe;

procedure CreerBaseDonnee(CheminAcces:string);
var b:BaseDonnee;
begin
assign(b,CheminAcces);
rewrite(b);
close(b);
end;

procedure OuvrirBaseDonnee(CheminAcces:string; var b:BaseDonnee);
begin
assign(b,CheminAcces);
reset(b);
end;

procedure EntrerDonnee(var d:Un_Employe);
begin
with d do
     begin
     write('No Employe        : '); readln(No_Employe);
     write('Nom et Prenom     : '); readln(nom_et_prenom);
     write('Fonction          : '); readln(Fonction);
     write('Salaire horaire   : '); readln(Salaire_Horaire);
     write('Code Impot        : '); readln(Code_Impot);
     write('No et Rue         : '); readln(No_et_Rue);
     write('Ville et Province : '); readln(Ville_et_Province);
     write('Code Postal       : '); readln(Code_Postal);
     end;
end;

procedure AjouterDonnee(var b:BaseDonnee;d:Un_Employe);
begin
seek(b,filesize(b));
write(b,d);
end;

procedure AfficherDonnee(d:Un_Employe);
begin
with d do
     begin
     writeln('No Employe        : ',No_Employe);
     writeln('Nom et Prenom     : ',nom_et_prenom);
     writeln('Fonction          : ',Fonction);
     writeln('Salaire horaire   : ',Salaire_Horaire:0:2);
     writeln('Code Impot        : ',Code_Impot);
     writeln('No et Rue         : ',No_et_Rue);
     writeln('Ville et Province : ',Ville_et_Province);
     writeln('Code Postal       : ',Code_Postal);
     writeln;
     end;
end;

procedure AfficherBaseDonnee(var b:BaseDonnee);
var d:Un_Employe;
begin
seek(b,0);
while not eof(b) do
      begin
      read(b,d);
      AfficherDonnee(d);
      readln;
      end;
end;

var d:Un_Employe; b:BaseDonnee; i,n:integer; s:string;
begin
write('Quelle base de donnee utiliser ?    1. Nouvelle, 2. Ancienne : ');
readln(n); writeln;
write('Chemin d''acces : '); readln(s); writeln;
if n=1 then CreerBaseDonnee(s);

OuvrirBaseDonnee(s,b); // dans tous les cas il faut l'ouvrir !

write(filesize(b),' employes deja fiches, en rajouter combien : '); // aucun maximum avec les fichiers !
readln(n);
for i:=1 to n do
    begin
    EntrerDonnee(d);
    AjouterDonnee(b,d);
    end;

write('Voir les ',filesize(b),' employes fiches ?   1. Oui, 2. Non : '); readln(n); writeln;
if n=1 then AfficherBaseDonnee(b);

close(b); // dans tous les cas il faut fermer à la fin !
writeln; write('Fin du programme. Appuyer Sur Entree'); readln;
end.
--
La confiance n'exclut pas le contrôle
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 12:53
Pour diminuer la taille du fichier où tu stocke les données, il est préférable de limiter la taille des string
Par défaut un string est une chaine de 256 caractères donc ton fichier utilise à chaque string 256 octets alors que tu en utiliseras souvent beaucoup moins, tu pourrais alors modifier le type de départ, en "bloquant" la taille des string.

Exemple : type Un_Employe=record... Code_Postal:string[10]; end;

un string[n] ne prendra que n octets dans ton fichier, ça te permettra de gagner de la place !
0
C'est beaucoups plus clair en effet,

J'ai introduit des pointeurs pour pouvoir faire l'analyse de la base de donnee

exemple :


procedure Analyser(var b:BaseDonnee);
var
d:Un_Employe; Heures : real;
Salaire:real;
liste1:array[100..119] of Un_Employe; i:integer;


begin
writeln('---- RELEVER DE PAIE ---'); writeln;

for i:=NEmin to NEmax do
seek(b,1);
while not eof(b) do
begin
read(b,d);

writeln;
write(' No_Employe : ');
readln(No_Employe);
write(' Heures : ');
readln(Heures);
writeln(' Le Salaire est : ');
salaire := Salaire_horaire * Heures;
Readln(Salaire);

Employes[i]^.No_Employe := No_Employe;
Employes[i]^.nom_et_prenom := nom_et_prenom;
Employes[i]^.fonction := Fonction;
Employes[i]^.Salaire_horaire := Salaire_horaire;
Employes[i]^.Code_Impot := Code_Impot;
Employes[i]^.No_et_Rue := No_et_Rue;
Employes[i]^.Ville_et_Province := Ville_et_Province;
Employes[i]^.Code_postal := Code_Postal;



end;

end;
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 15:11
Je ne vois toujours pas en quoi les pointeurs sont nécessaires...
procedure Analyser(var b:BaseDonnee);
var d,Null:Un_Employe;
    Heures,salaire:real;
    liste1:array[NEmin..NEmax] of Un_Employe;
    i,j:integer;
begin
writeln('---- RELEVER DE PAIE ---'); writeln;
seek(b,0); // Attention le début est à 0 !
i:=NEmin;
while (not eof(b)) and (i<=NEmax) do
     begin
     read(b,d);
     write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
     write('Heures : '); readln(Heures);
     salaire:=d.Salaire_horaire * Heures;
     writeln('Le Salaire est : ',Salaire:0:2);
     writeln;
     liste1[i]:=d;
     i:=i+1;
     end;
with Null do
     begin
     No_Employe:=0;
     nom_et_prenom:='';
     Fonction:='';
     Salaire_Horaire:=0;
     Code_Impot:=0;
     No_et_Rue:='';
     Ville_et_Province:='';
     Code_Postal:='';
     end;
for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
     liste1[j]:=Null;
end;
L'utilisation de pointeur n'apparaitrait dans ton code UNIQUEMENT si tu souhaitais avoir liste1 qui soit de taille variable (c'est à dire potentiellement très grande, et donc adaptable au contenu du fichier) auquel cas on supprimerai le array.
Mais si tu as toujours besoin de 20 cases dans ton tableau, il n'y a pas utilité de faire appel aux pointeurs ! Le type array évite de faire de si grande manipulation !
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 15:12
j'ai oublié : const NEmin=100; NEmax=119;
0
jeff > KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024
31 juil. 2008 à 18:37
Ok je pense que j'etais un peu trops camper sur les pointeurs, voila le restant de mon analyse, peux tu jeter un coups d'oeil et me dire ce que tu en pense.


procedure Analyser(var b:BaseDonnee);
var d,Null:Un_Employe;
Heures,salaire:real;
liste1:array[NEmin..NEmax] of Un_Employe;
i,j:integer;
begin
writeln('---- RELEVER DE PAIE ---'); writeln;
seek(b,0); // Attention le début est à 0 !
i:=NEmin;
while (not eof(b)) and (i<=NEmax) do
begin
read(b,d);
write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
write('Heures : '); readln(Heures);
salaire:=d.Salaire_horaire * Heures;
writeln('Le Salaire est : ',Salaire:0:2);
writeln;
salaire_annuel(B) := d.salaire * 26;
writeln(‘Le salaire annuel Brut est : ‘,salaire_annuel(B) :0 :2);
writeln;
if Code_impot = 1
salaire_annuel=salaire_annuel(B)-5000 else
if Code_impot = 2
salaire_annuel=salaire_annuel(B) – 7000 else
if Code_impot = 3
salaire_annuel=salaire_annuel(B) – 10000
write(‘Le salaire annuel(I) est : ‘,salaire_annuel(I) :0 :2);
writeln;
if salaire_annuel(I) <= 15000
salaire_annuel=salaire_annuel(I) – 0 else
if 15001 >= salaire_annuel(I) <= 30000
salaire_annuel = salaire_annuel(I)*35/100 else
if 30001 >= salaire_annuel(I) <= 50000
salaire_annuel = salaire_annuel(I)*42/100 else
if salaire_annuel(I) >= 50001
salaire_annuel = salaire_annuel(I)*50/100
write(‘ Le salaire annuel est : ‘,salaire_annuel :0 :2);
writeln;
liste1[i]:=d;
i:=i+1;
end;
with Null do
begin
No_Employe:=0;
nom_et_prenom:='';
Fonction:='';
Salaire_Horaire:=0;
Code_Impot:=0;
No_et_Rue:='';
Ville_et_Province:='';
Code_Postal:='';
end;
for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
liste1[j]:=Null;
end;
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 20:18
J'attire ton attention sur la ligne
write('No_Employe : '); readln(d.No_Employe);
À mon avis le programme ne fais pas ce que tu veux... Ici il MODIFIE le N° de l'employé !
Si c'est ce que tu veux tant mieux sinon dis-moi ce que cette ligne est censé faire...
procedure Analyser(var b:BaseDonnee);
var d,Null:Un_Employe;
    Heures,salaire,salaire_annuel:real;
    liste1:array[NEmin..NEmax] of Un_Employe;
    i,j:integer;
begin
writeln('---- RELEVER DE PAIE ---'); writeln;
seek(b,0); // Attention le début est à 0 !
i:=NEmin;
while (not eof(b)) and (i<=NEmax) do
      begin
      read(b,d);
      write('No_Employe : '); readln(d.No_Employe); // à mon avis là y a erreur !
      write('Heures : '); readln(Heures);
      salaire:=d.Salaire_horaire * Heures;
      writeln('Le Salaire est : ',Salaire:0:2);
      writeln;
      salaire_annuel:=salaire*26; // pourquoi 26 et non 12 ?
      writeln('Le salaire annuel Brut est : ',salaire_annuel:0:2);
      writeln;
      case d.Code_impot of
           1:salaire_annuel:=salaire_annuel-5000;
           2:salaire_annuel:=salaire_annuel-7000;
           3:salaire_annuel:=salaire_annuel-10000;
           end;
     writeln('Le salaire annuel(I) est : ',salaire_annuel:0:2);
     writeln;
     if (salaire_annuel>15000) and (salaire_annuel<=30000)
                               then salaire_annuel:=salaire_annuel*0.35
else if (salaire_annuel>30000) and (salaire_annuel<=50000)
                               then salaire_annuel:=salaire_annuel*0.42
else if salaire_annuel>50000   then salaire_annuel:=salaire_annuel*0.5;
     writeln('Le salaire annuel est : ',salaire_annuel:0:2);
     writeln;
     liste1[i]:=d;
     i:=i+1;
     end;

with Null do
     begin
     No_Employe:=0;
     nom_et_prenom:='';
     Fonction:='';
     Salaire_Horaire:=0;
     Code_Impot:=0;
     No_et_Rue:='';
     Ville_et_Province:='';
     Code_Postal:='';
     end;
for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
    liste1[j]:=Null;
end;
--
La confiance n'exclut pas le contrôle 
0
salaire_annuel:=salaire*26; // pourquoi 26 et non 12 ?

26 car j'ai calculer que en raison d'une paye toute les deux semaines, alors ca fait 26 paye.
0
ce que je veux, c'est entrer le numero d'employe, et ce numero doit me renvoyer les donnees de l'employe il est censer appartenir, alors si j'entre un numero d'employe et que je rentre le nombre d'heure travailler, je dois avoir toute les informations qui s'affiche sur cet employe....
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
31 juil. 2008 à 21:21
Remarque : je ne vois toujours pas à quoi sert liste1 puisqu'on la remplit mais qu'on ne la lit jamais...
const NEmin=100; NEmax=119;

function RechercherIndice(var b:BaseDonnee;var numero:byte):integer;
var d:Un_Employe;
begin
seek(b,0);
while not eof(b) do
      begin
      read(b,d);
      if d.No_Employe=numero then exit(filepos(b)-1); // -1 car déjà décalé
      end;
result:=-1;
end;

procedure Analyser(var b:BaseDonnee);
var d,Null:Un_Employe;
    numero:byte;
    Heures,salaire,salaire_annuel:real;
    liste1:array[NEmin..NEmax] of Un_Employe;
    i,j,n:integer;
begin
writeln('---- RELEVER DE PAIE ---'); writeln;
i:=NEmin;
while (not eof(b)) and (i<=NEmax) do
      begin
      write('No_Employe : '); readln(numero);
      n:=RechercherIndice(b,numero);
      if n>=0 then begin
                   read(b,d);
                   write('Heures : '); readln(Heures);
                   salaire:=d.Salaire_horaire * Heures;
                   writeln('Le Salaire est : ',Salaire:0:2);
                   writeln;
                   salaire_annuel:=salaire*26;
                   writeln('Le salaire annuel Brut est : ',salaire_annuel:0:2);
                   writeln;
                   case d.Code_impot of
                        1:salaire_annuel:=salaire_annuel-5000;
                        2:salaire_annuel:=salaire_annuel-7000;
                        3:salaire_annuel:=salaire_annuel-10000;
                        end;
                   writeln('Le salaire annuel(I) est : ',salaire_annuel:0:2);
                   writeln;
     if (salaire_annuel>15000) and (salaire_annuel<=30000)
                               then salaire_annuel:=salaire_annuel*0.35
else if (salaire_annuel>30000) and (salaire_annuel<=50000)
                               then salaire_annuel:=salaire_annuel*0.42
else if salaire_annuel>50000   then salaire_annuel:=salaire_annuel*0.5;
                   writeln('Le salaire annuel est : ',salaire_annuel:0:2);
                   writeln;
                   liste1[i]:=d;
                   i:=i+1;
                   end
      end;

with Null do
     begin
     No_Employe:=0;
     nom_et_prenom:='';
     Fonction:='';
     Salaire_Horaire:=0;
     Code_Impot:=0;
     No_et_Rue:='';
     Ville_et_Province:='';
     Code_Postal:='';
     end;
for j:=i to NEmax do // au cas où filesize(b)<NEmax-NEmin
    liste1[j]:=Null;
end;
--
La confiance n'exclut pas le contrôle 
0
c'est vrais que liste1 ne me sert a rien quand j'essaye de faire fonctionner le programme, ... j'ai toujours un probleme au niveau de l'enregistrement du fichier

BaseDonnee = file of Un_Employe ; ca me donne comme [Erreur] Project2.dpr(20): E2155 Le type 'Un_Employe' nécessite une finalisation - non autorisé dans le type fichier


et aussi au niveau de : if d.No_Employe=numero then exit(filepos(b)-1); // -1 car déjà décalé me donne comme erreur [Erreur] Project2.dpr(97): E2066 Opérateur ou point-virgule manquant.
0
Je me demandais aussi si la maniere de placer mes procedure et fonction a une grande importance dans le traitement du programme ?
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
1 août 2008 à 10:05
Project.dpr ... c'est Delphi ça non ?

Si tu utilises ce qu'on a fait dans un projet Delphi, il faudra que tu passe le code en unité et non en programme !
De plus effectivement exit(valeur) n'est pas autorisé en Delphi il faut faire begin result:=valeur; exit; end;
0
Oui, j'avais enlever cette partie et laisser juste le exit, et ca me donne mes resultats, ........mais j'ai toujours une indication d'erreur..........[Avertissement] tentative1.dpr(100): W1035 La valeur de retour de la fonction 'RechercherIndice' peut être indéfinie
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
1 août 2008 à 13:59
Avec ce code, l'entier renvoie -1 si aucune donnee ne possède No_employe=numero.
Sinon il renvoie la position du 1ère indice qui coïncide, en aucun cas elle est indéfinie...
function RechercherIndice(var b:BaseDonnee;var numero:byte):integer;
var d:Un_Employe;
begin
seek(b,0);
while not eof(b) do
      begin
      read(b,d);
      if d.No_Employe=numero then begin
                                  result:=filepos(b)-1; // -1 car déjà décalé
                                  exit;
                                  end;
      end;
result:=-1;
end;
--
La confiance n'exclut pas le contrôle 
0
J'ai remis tout ca en ordre, enfin j'espere.....mais quand je fait fonctionner le programme je n'ai pas totalement ce que je veux, par exemple quand je rentre le numero d'un employe, il me donne les information sur l'employe suivant, j'ai mis un (-1) ici pour corriger

if d.No_Employe=numero -1

mais la il ne me donne plus d'information sur l'employe No 100(premier) et aussi le programme me demande de sortir chaque fois que je rentre l'employe no 119 (dernier)
0
KX Messages postés 16741 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 30 mai 2024 3 016
7 août 2008 à 19:41
J'avoue que je n'ai pas fait de test pour vérifier les indices...
Revoit en amont lors de l'appel de la procédure RechercherIndice s'il n'y a pas d'absurdité...
Si ça ne marche pas, plutôt que de "jouer" sur le if, essaye plutôt de jouer sur le result:=filepos(b)-1
Je ne sais pas trop pourquoi mais il est possible qu'enlever le-1 marche...
0