Problème avec programme pour l'école

arne219 Messages postés 3 Date d'inscription jeudi 17 février 2011 Statut Membre Dernière intervention 17 février 2011 - 25 août 2010 à 11:28
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 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

3 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
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
0
Chiheb2010 Messages postés 20 Date d'inscription vendredi 4 juin 2010 Statut Membre Dernière intervention 12 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
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
31 août 2010 à 19:37
@Chiheb2010 : Tous ces tableaux ont une taille fixe et de toutes façons ça ne sert à rien de préciser quand c'est un paramètre de fonction

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
Rejoignez-nous