arne219
Messages postés3Date d'inscriptionjeudi 17 février 2011StatutMembreDernière intervention17 février 2011
-
25 août 2010 à 11:28
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 2013
-
31 août 2010 à 19:37
bonjour.
J'ai bientôt un examen de langage c (examen de rattrapage)
Pour m'exercer je refais un programme que j'ai du faire a l'examen de juin. le programme n'était pas fini et il y avais des erreurs. maintenant je ne sais toujours pas comment résoudre ce problème car je ne sais pas où il se trouve .
Voila donc pourquoi j'aimerais un peu d'aide afin de finir le programme, ceci m'aiderais énormément à comprendre mes erreurs et réussir cet examen .
Voici l'énoncée:
Gestion des employés une société demande d'écrire un programme afin de faciliter la gestion de ses employés:
1. Pouvoir encoder un nouveau employé. Un employé est caractérisé par son nom(max. 30 caractères),son grade(A,B ou C) et son salaire
2. Octroyer une promotion à un employé. une promotion entraîne automatiquement une augmentation de salaire suivant les règles suivantes:
[list]
a) passage du grade A au grade B: +8%
b) passage du grade B au grade C: +10%
c) passage du grade C au grade D: +12%
/list
3. Afficher tout les employés, leur grade et leur salaire actuel
4. Afficher les employés d'un grade en particulier et leur salaire. Le grade aura été préalablement été choisi par l'utilisateur
5. Afficher le nom de l'employé ayant le salaire le plus élevé
Consignes:
-programme sous forme de menu
-nom des employés, leur grade et les salaires seront stockés dans des tableaux différents. La correspondance entre les éléments relatifs à un employé se fera sur base de l'indice. on limitera la taille de ces tableaux à 20 éléments
-le point 1. sera réalisé dans la fonction "encodage_employe"
-le point 2. sera réalisé dans la fonction "donne_promotion". cette fonctionne affichera tout les employés et permettra à l'utilisateur de sélectionner celui qui bénéficie d'une promotion
-le point 3. sera réalisé dans la fonction "affichage_employes"
-le point 4. sera réalisé dans la fonction "affichage_employes_grade"
-le point 5. sera réalisé dans la fonction "plus_gros_salaire". on y détermine quel employé a le plus gros salaire( si plusieurs on même salaire le plus élevé on en choisit que un) et on allouera dynamiquement l'espace nécessaire pour stocker son nom. La fonction retournera un pointeur vers la chaîne de caractère qui contiendra le nom et le programme principal ce chargera de l'affichage.
Voila donc l'énoncé du programme a faire. j'ai pas compris le point 5 et le point 2 ne fonctionne pas correctement. le point ne fonctionne pas à cause du grade qui n'est pas entré correctement dans le programme. à chaque fois il ajoute 2 grades au premier employé que je rentre dans le point 1 et je ne sais pas pourquoi .
Voici où j'en suis arrivé
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
void encodage_employe(char emp[20][30],char grade[20][1], float salaires[20], int nbr_employe);
void donne_promotion(char emp[20][30],char grade[20][1],float salaires[20],int nbr_employe);
void affichage_employes(char emp[20][30],char grade[20][1],float salaires[20],int nbr_employe);
void affichage_employes_grade(char emp[20][30],char grade[20][1],int nbr_employe);
void plus_gros_salaire(char emp[20][30],char grade[20][1], float salaires[20],int nbr_employe);
int main(int argc, const char * argv[])
{
int choix=0, nbr_employe=0;
char emp[20][30];
char grade[20][1];
float salaires[20];
do{
system("cls");
//affichage du menu
printf("\n\n-----MENU-----\n\n");
printf("1.Encoder un nouveau employe\n");
printf("2.Accorder une promotion a un employe\n");
printf("3.affichage de tout les employes\n");
printf("4.afficher les employes par rapport a leur grade\n");
printf("5.afficher le employe le mieu paye\n\n");
//Le menu
printf("Votre choix : ");
scanf("%d%*c",&choix);
switch (choix)
{
case 1:
encodage_employe(emp,grade,salaires,nbr_employe);
nbr_employe++;
break;
case 2:
donne_promotion(emp,grade,salaires,nbr_employe);
break;
case 3:
affichage_employes(emp,grade,salaires,nbr_employe);
break;
case 4:
affichage_employes_grade(emp,grade,nbr_employe);
break;
case 5:
plus_gros_salaire(emp,grade,salaires,nbr_employe);
break;
default:
return 0;
break;
}
} while (choix != '0');
}
//fonction pour encoder des nouveau employes
void encodage_employe(char emp[20][30],char grade[20][1], float salaires[20], int nbr_employe)
{
system("cls");
printf("----encodage des employe----\n\n");
printf("il y a %d employe pour le moment\n", nbr_employe);
printf("\nEntrer le nom du nouveau l'employe: ");
fgets(emp[nbr_employe],50,stdin);
printf("Entrer le grade du nouveau employe: ");
fgets(grade[nbr_employe],50,stdin);
printf("Entrer le salaire du nouveau employe: ");
scanf("%f",&salaires[nbr_employe]);
}
//fonction pour donner une promotion a un employe
void donne_promotion(char emp[20][30],char grade[20][1],float salaires[20],int nbr_employe)
{
system("cls");
printf("----Donner une promotion a un employe----");
int i=0;
int promotion=0;
char grade_promo;
for (i=0; i<nbr_employe; i++)
{
printf("\n\nNom de l'employe %d : %s",i+1,emp[i]);
printf("Son grade est : %s",grade[i]);
printf("Son salaire est : %f",salaires[i]);
}
printf("\nA quel employe vouler vous donner une promotion?(entrer son numero) ");
scanf("%d",&promotion);
printf("\nQuel promotion vouler vous lui donner? (entrer le grade a,b,c ou d): ");
scanf("%s",&grade[promotion]);
if(grade[promotion]=="b")
{
salaires[promotion]+= ((salaires[promotion]/100)*8);
}
if(grade[promotion]=="c")
{
salaires[promotion]+= ((salaires[promotion]/100)*10);
}
if(grade[promotion]=="d")
{
salaires[promotion]+= ((salaires[promotion]/100)*12);
}
}
//fonction pour afficher tout les employe
void affichage_employes(char emp[20][30],char grade[20][1] , float salaires[20],int nbr_employe)
{
system("cls");
printf("----Affichage des employes----\n");
int i,pause;
for (i=0; i<nbr_employe; i++)
{
printf("\n\nNom de l'employe %d : %s",i+1,emp[i]);
printf("Son grade est : %s",grade[i]);
printf("Son salaire est : %f",salaires[i]);
}
printf("\ntaper "1" pour continuer");
scanf("%d",&pause);
}
//fonction pour afficher le grade des employe
void affichage_employes_grade(char emp[20][30],char grade[20][1],int nbr_employe)
{
system("cls");
printf("----Affichage des grades employes----\n");
int i,pause;
for (i=0; i<nbr_employe; i++)
{
printf("\n\nNom de l'employe %d : %s",i+1,emp[i]);
printf("Son grade est : %s",grade[i]);
}
printf("\n\ntaper "1" sur enter pour continuer");
scanf("%d",&pause);
}
//fonction pour afficher le employe avec le plus gros salaire
void plus_gros_salaire(char emp[20][30],char grade[20][1], float fiche_salaires[20],int nbr_employe)
{
system("cls");
printf("----Calcul du plus gros salaire----");
}
J'espère vraiment que quelqu'un puisse m'aider car moi je suis bloquer la quoi. Merci beaucoup d'avance
cs_ghuysmans99
Messages postés3982Date d'inscriptionjeudi 14 juillet 2005StatutMembreDernière intervention30 juin 201316 25 août 2010 à 14:01
Déjà, sépare ton programme en différents fichiers :
- main.c : Fichier contenant main() - main.h : Header contenant les includes des bibliothèques standard
- employes.c : Fichier contenant les fonctions de gestion des employés
- employes.h : Header contenant les prototypes de ces fonctions
Vu que tes fichiers portent l'extension .c, tu es obligé de déclarer tes variables au début de chaque fonction.
Une fois que c'est fait, quelques questions (qui t'aideront à améliorer ton programme) :
- Pourquoi limiter le nombre d'employés à 20 ?
- Pourquoi ne pas mettre la fiche d'un employé dans une structure ?
VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
Chiheb2010
Messages postés20Date d'inscriptionvendredi 4 juin 2010StatutMembreDernière intervention12 octobre 2011 31 août 2010 à 18:19
Chiheb
Bonjour,tu pourrais faire des structures employés,ect comme le dit ghuysmans99
A part ca j'ai quelques questions:
1.Les employés seront-ils enregistrés dans un fichier ?
2.Pourquoi passer des tableaux 2D a des fonctions en ne précisant aucun détail sur leurs taille ?
3.Dois tu pouvoir par exemple: "Luc Doncieux" pour aller a sa fiche ?
Voila ^^
Désolé d'être barbant avec toutes ses questions