Releve de paie en pascal.

jeff -  
KX Messages postés 19031 Statut Modérateur -
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.
Configuration: Windows XP
Internet Explorer 6.0

12 réponses

  1. jeff
     
    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
  2. KX Messages postés 19031 Statut Modérateur 3 020
     
    Tu peux utiliser un fichier de type file of Un_Employe pour y stocker tes données...
    0
    1. jeff
       
      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
  3. KX Messages postés 19031 Statut Modérateur 3 020
     
    Exactement, mais en n'oubliant pas la procédure FermerBaseDonnee...
    PS. il manque un end; à la fin de AfficherBaseDonnee
    0
    1. jeff
       
      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
  4. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. jeff
       
      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
  7. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      j'ai oublié : const NEmin=100; NEmax=119;
      0
      1. jeff > KX Messages postés 19031 Statut Modérateur
         
        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
  8. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. jeff
       
      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
  9. jeff
     
    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
  10. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. jeff
       
      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
      1. jeff > jeff
         
        Je me demandais aussi si la maniere de placer mes procedure et fonction a une grande importance dans le traitement du programme ?
        0
  11. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. jeff
       
      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
  12. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
    1. jeff
       
      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
  13. KX Messages postés 19031 Statut Modérateur 3 020
     
    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