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
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
A voir également:
- Releve de paie en pascal.
- Turbo pascal download - Télécharger - Édition & Programmation
- My pascal - Télécharger - Édition & Programmation
- Relevé identité opérateur - Guide
- Logiciel fiche de paie gratuit - Télécharger - Comptabilité & Facturation
- Modifier fiche de paie avec photoshop ✓ - Forum Bureautique
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.
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.
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
28 juil. 2008 à 19:07
Tu peux utiliser un fichier de type file of Un_Employe pour y stocker tes données...
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;
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;
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
28 juil. 2008 à 20:46
Exactement, mais en n'oubliant pas la procédure FermerBaseDonnee...
PS. il manque un end; à la fin de AfficherBaseDonnee
PS. il manque un end; à la fin de AfficherBaseDonnee
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.
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.
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
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.
La confiance n'exclut pas le contrôle
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
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
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 !
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 !
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;
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;
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
31 juil. 2008 à 15:11
Je ne vois toujours pas en quoi les pointeurs sont nécessaires...
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 !
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 !
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
31 juil. 2008 à 15:12
j'ai oublié : const NEmin=100; NEmax=119;
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
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;
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;
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
31 juil. 2008 à 20:18
J'attire ton attention sur la ligne
Si c'est ce que tu veux tant mieux sinon dis-moi ce que cette ligne est censé faire...
La confiance n'exclut pas le contrôle
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
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....
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
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...
La confiance n'exclut pas le contrôle
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
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.
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.
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
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;
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;
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
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...
La confiance n'exclut pas le contrôle
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
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)
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)
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
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...
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...