Choubisoft Admin
Messages : 123 Points : 7125 Date de naissance : 02/11/1989 Date d'inscription : 18/02/2010 Age : 35 Localisation : Casablanca Emploi/loisirs : Etudiant
| Sujet: algorithme de l'employer Dim 23 Mai - 12:35 | |
| Bonjour / Bonsoir chers membres,
Voila le code source du dictionnaire bon le code est simple, bien commenter, les fonctions sont si simple a comprendre mais ça empêche d'en discuter si vous rencontrez des difficulté ....
juste je doit motionner que si les barre des encadrement des tableaux et tout; s'il s'affiche bizarrement enlever les et remplacer les par leur code ASCII que vous pouvez retrouver ICI
Donc sans tarder voila le code C: - Code:
-
/** Name: exercice struct. Author : Boukhris Chouaib. Date: 06/04/10 8:38. Derniere Mise a Jour : . Description: Programme qui manipule des structure . Licence : Copyleft OpenSource. **/
#include <stdio.h> #include <stdlib.h> #include "manip.h" //============================================================================================================== /* Les structures du programme */ typedef struct{ int jr; int mo; int an; }Date1; //-------------------------------------------------------------------------------------------------------------- typedef struct{ int matr; char nom[30]; char prenom[30]; float salaire; Date1 date_emb;//Date d'embauche. Date1 date_naiss;//Date de naissance. }Employe1;
//=================================================================================================================================
/* Fonction menu */ int menu(void){
int choix;
printf("\n\n╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Menu │\n"); printf("├─────────┬─────────────────────────────────────────────────────────────────┤\n"); printf("│ N° │ Choix │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 1 │ Saisir une date │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 2 │ Comparer deux dates │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 3 │ Calcule le nombre d’années entre deux dates │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 4 │ Saisir un employé │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 5 │ Saisir N employés │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 6 │ Affiche un nombre N d’employés │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 7 │ Affiche tous les employés ayant un salaire entre 5000 et 9000 │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 8 │ Augmentation de 10%% pour les employés embauchés avant 2/1/1985 │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 9 │ Supprime tous les employés qui ont travaillé plus de 35 ans │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 10 │ Détermine pour un nom le nombre d’employés ayant le même nom │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 11 │ Affiche tous les employés selon l’ordre décroissant │\n"); printf("├─────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ 0 │ ** Qutier le programme ** │\n"); printf("╰─────────┴─────────────────────────────────────────────────────────────────╯"); printf("\n\t\t\tTapez votre choix : ");
scanf("%d",&choix);
return (choix); }
int main() { int ch, val, n, flag=0; char c, nom[30];
Date1 date_a, date_b; Employe1 Emp, *Nemp;
while(1){
ch= menu(); switch(ch){ case 0: exit (0); // end of programme.
case 1:{ system("clear"); printf("\n\t Saisie de la date :\n"); Saisie_date(&date_a); printf("\tDate bien Saisie :D ...\n\n");
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 1. }
case 2:{ system("clear"); printf("\n\t Saisir la 1er date :\n"); Saisie_date(&date_a); printf("\n\t Saisir la 2eme date :\n"); Saisie_date(&date_b); val=datecmp(&date_a, &date_b);
system("clear"); if(val<0){ printf("╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ %02d / %02d / %4d & Inférieure à %02d / %02d / %4d │\n", date_a.jr, date_a.mo, date_a.an, date_b.jr, date_b.mo, date_b.an); printf("╰───────────────────────────────────────────────────────────────────────────╯\n"); } else if(val>0){ printf("╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ %02d / %02d / %4d & Supérieur à %02d / %02d / %4d │\n", date_a.jr, date_a.mo, date_a.an, date_b.jr, date_b.mo, date_b.an); printf("╰───────────────────────────────────────────────────────────────────────────╯\n"); } else{ printf("╭───────────────────────────────────────────────────────────────────────────╮\n"); printf("│ %02d / %02d / %4d & Égale à %02d / %02d / %4d │\n", date_a.jr, date_a.mo, date_a.an, date_b.jr, date_b.mo, date_b.an); printf("╰───────────────────────────────────────────────────────────────────────────╯\n"); }
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 2. }
case 3:{ system("clear"); printf("\n\t Saisir la 1er date :\n"); Saisie_date(&date_a); printf("\n\t Saisir la 2eme date :\n"); Saisie_date(&date_b);
if(datecmp(&date_a, &date_b) < 0) val=age_emp(&date_b, &date_a); else if(datecmp(&date_a, &date_b) > 0) val=age_emp(&date_a, &date_b); else val=0;
system("clear"); printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ %4d Est le nombre d'années entre %02d / %02d / %4d & %02d / %02d / %4d │\n", val, date_a.jr, date_a.mo, date_a.an, date_b.jr, date_b.mo, date_b.an); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n");
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 3. }
case 4:{ system("clear"); Saisie_Emp(&Emp); printf("\n\n\tEmploye bien Saisie :D ...\n\n");
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 4. }
case 5:{ system("clear"); printf("\n\tDonnez le nobre des employés :"); scanf("%d", &n); Nemp= (Employe1*)malloc(sizeof(Employe1)*n); system("clear"); Saisie_NEmp(Nemp, n); printf("\t %d Employe ont été bien Saisie :D ...\n\n", n); flag++;// Pour vérifier plus tard si on a fait une saisie ou non.
printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 5. }
case 6:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); printf("\n\t\tAffichage de N employer :\n"); Affiche_NEmp(Nemp, n); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; // end of case 6. } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } }
case 7:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); printf("\n\n\tLes employés ayant un salaire entre 5000 et 9000 :\n"); Affiche_Emp59(Nemp, n); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } }
case 8:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); printf("\n\n\tAugmentation de 10%% pour les employés embauchés avant 2/1/1985 :\n"); augment(Nemp, n); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } }
case 9:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); printf("\n\n\tSuppression de tous les employés qui ont travaillé plus de 35 ans :\n\n"); printf("\n\t\tAvant la Suppression :\n"); Affiche_NEmp(Nemp, n); sppr_35(Nemp, &n); printf("\n\n\t\tAprés la Suppression :\n"); Affiche_NEmp(Nemp, n); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; }
}
case 10:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); printf("\n\tDonner un nom a chercher dans la table : "); scanf("%s", nom); val=det_nbr_nom(Nemp, n, nom); printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ \" %4d \" │\n", val); printf("│ est le nobmbre d'employée ayant \" %s \" comme nom │\n", nom); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } }
case 11:{ // Si on a fait une saisie. if(flag!=0){ system("clear"); tri_affich(Nemp, n); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } // si non. else{ printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Aucune Structure n'est saisie ... │\n"); printf("│ Veuillez Saisir s'il vous plaît une structure :D │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; }
}
default : printf("╭───────────────────────────────────────────────────────────────────────────────╮\n"); printf("│ Erreur...!! │\n"); printf("│ Choix invalide │\n"); printf("╰───────────────────────────────────────────────────────────────────────────────╯\n"); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); break; } }
return 0; }
& voila le code de la biblio manip.h: - Code:
-
#include <stdio.h> #include <stdlib.h> #include <string.h>
//============================================================================================================== /* Les structures du programme */ typedef struct{ int jr; int mo; int an; }Date; //-------------------------------------------------------------------------------------------------------------- typedef struct{ int matr; char nom[30]; char prenom[30]; float salaire; Date date_emb;//Date d'embauche. Date date_naiss;//Date de naissance. }Employe;
//============================================================================================================== /* Fonction de saisie de date valide */
void Saisie_date(Date *date_s) { int Mj[]={0, 31, 0, 31, 30, 31, 30, 31, 31, 30, 31, 30,31};
// Saisie & Controle des années. do{ //system("clear"); printf("\n\tL'année : "); scanf("%d", &date_s->an); }while(date_s->an < 1900 || date_s->an >2020);
if(date_s->an%4 == 0 && date_s->an%100!=0) Mj[2]=29; else Mj[2]=28;
// Saisie & Controle des mois. do{ printf("\tSaisissez le mois : "); scanf("%d", &date_s->mo); }while(date_s->mo < 1 || date_s->mo >12);
// Saisie & Controle des jours. do{ printf("\tSaisissez le jours : "); scanf("%d", &date_s->jr); }while((date_s->jr < 1) || (date_s->jr > Mj[date_s->mo]));
} //========================================================================================================
/* Fonction qui compare deux dates*/ // Les dates sont égaux = 0. // Date1 sup a Date2 > 0. // Date1 inf a Date2 < 0. int datecmp(Date *date_1, Date *date_2){
if(date_1->an > date_2->an) return (1);
else if(date_1->an < date_2->an) return (-1); // else I. else{ if(date_1->mo > date_2->mo) return (1);
else if(date_1->mo < date_2->mo) return (-1); // else II. else{ if(date_1->jr > date_2->jr) return (1);
else if(date_1->jr < date_2->jr) return (-1);
else return 0; }//end_else II }//end_else I.
} //================================================================================================================ // Fonction qui l'age de l'employer. int age_emp(Date *emb, Date *naiss){ int age;
age= (emb->an)-naiss->an;
// Si l'employer n'a pas encor ateind sont mois d'aniverasaire. if(emb->mo < naiss->mo) return (age--);
// Si l'employer n'a pas encor ateind sont jour d'aniverasaire. if((emb->mo == naiss->mo) && (emb->jr < naiss->jr)) return (age--);
// Si l'employer a depassé sont jour && mois d'aniverssaire . return age;
}
//------------------------------------------------------------------------------------------------------- /* Fonction qui saisie un employé avec controle d'age qui doit etre sup a 18ans & date d'embauche sup a date de naissance.*/
void Saisie_Emp(Employe *emp){
printf("\tMatricule : "); scanf("%d", &emp->matr);
printf("\tNom : "); scanf("%s", emp->nom); printf("\tPrénom : "); scanf("%s", emp->prenom);
do{ printf("\tSalaire : "); scanf("%f", &emp->salaire); }while(emp->salaire < 2214); // smic des salaire au maroc.
do{ printf("\tDate d'embauche : "); Saisie_date(&(emp->date_emb));
printf("\tDate de naissance : "); Saisie_date(&(emp->date_naiss));
}while((datecmp(&(emp->date_emb), &(emp->date_naiss))<=0) || (age_emp(&(emp->date_emb), &(emp->date_naiss))<18) );
} //=============================================================================================================
/* Fonction qui saisie N employer */ void Saisie_NEmp(Employe *emp, int N){ int i;
for(i=0; i<N; i++){ system("clear"); printf("\n\n\tEmployee N° %d :\n\n", i+1); Saisie_Emp((emp+i)); } } //============================================================================================================
/* Fonction qui affiche un employe */ void Affiche_Emp(Employe *emp){
printf("╭─────────────────┬─────────────────────────────────────────────────────────────────╮\n"); printf("│ Matricul │ %6d │\n", emp->matr); printf("├─────────────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ Nom │ %10s │\n", emp->nom); printf("├─────────────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ Prenom │ %10s │\n", emp->prenom); printf("├─────────────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ Salaire │ %06.2f │\n", emp->salaire); printf("├─────────────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ Date Emb │ %02d / %02d / %d │\n", (emp->date_emb).jr, (emp->date_emb).mo, (emp->date_emb).an); printf("├─────────────────┼─────────────────────────────────────────────────────────────────┤\n"); printf("│ Date Naiss │ %02d / %02d / %d │\n", (emp->date_naiss).jr, (emp->date_naiss).mo, (emp->date_naiss).an); printf("╰─────────────────┴─────────────────────────────────────────────────────────────────╯"); } //==========================================================================================================
/* Fonction qui affice N employe */ void Affiche_NEmp(Employe *emp, int N){ int i;
for(i=0; i<N; i++){ printf("\n\n\t\t╭───────────────────┬────────────────╮\n"); printf("\t\t│ Employer N° │ %04d │\n", i); printf("\t\t╰───────────────────┴────────────────╯\n"); Affiche_Emp((emp+i)); } } //=========================================================================================================
/* Foction qui affiche les employés ayant un salaire entre 5000 et 9000 */ void Affiche_Emp59(Employe *emp, int N){ int i; char c;
for(i=0; i<N; i++){ if((emp+i)->salaire>=5000 && (emp+i)->salaire<=9000){ Affiche_Emp((emp+i));
// Pour afficher employer par employer, contrainte de la resolution de la console. printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); // Effacer pour afficher un nouveau employé. } } } //=========================================================================================================
/* Fonction qui réalise une augmentation de 10% du salaire de tous les emplyés embauchés avant 2/1/1985 et dont le nom commance par a*/ void augment(Employe *emp, int N){ int i; char c;
for(i=0; i<N; i++){ if((emp+i)->date_emb.jr<2 && (emp+i)->date_emb.mo<1 && (emp+i)->date_emb.an<1985 && (emp+i)->nom[0]=='a'){ (emp+i)->salaire += ((emp+i)->salaire*0.1); printf("\t\t╭───────────────────┬────────────────╮\n"); printf("\t\t│ Employer N° │ %04d │\n", i); printf("\t\t╰───────────────────┴────────────────╯\n"); Affiche_Emp((emp+i)); printf("\n\n\t\tAppuyer sur n'importe quel touche pour continuer ..."); while( (c=getchar())!='\n' && c!=EOF ); getchar(); system("clear"); } } } //=========================================================================================================
/* Fonction qui supprime tout les employés qui ont travaillé plus de 35ans. */ void sppr_35(Employe *emp, int *N){ int i, j, age_trav; Date date_auj;
Saisie_date(&date_auj); for(i=0; i<*N; i++){ age_trav=age_emp(&date_auj, &((emp+i)->date_emb)); if(age_trav == 35){ for(j=i; j<*N-1; j++) *(emp+j) = *(emp+j+1); *N-=1; }
} } //=========================================================================================================
/* Fonction qui détermine pour chaque nom le nombre d’employés ayant le même nom. */ int det_nbr_nom(Employe *emp, int N, char *nom){ int i, j=0;
for(i=0; i<N; i++){ if(strcmp((emp+i)->nom, nom) == 0) j++; } return j; } //========================================================================================================
/* Fonction tri selon salaire décroissant puis affiche. */ void tri_affich(Employe *emp, int N){ int i, j; int k; float aux; float max;
for(i=0; i<N-1; i++){
max= (emp+i)->salaire;
for(j=i; j<N; j++){ if(max < (emp+j)->salaire){ max= (emp+j)->salaire; k=j; } }
aux = (emp+i)->salaire; (emp+i)->salaire = max; (emp+k)->salaire = aux; }
Affiche_NEmp(emp, N); }
Cordialement
Dernière édition par Choubisoft le Mar 25 Mai - 3:58, édité 1 fois | |
|
adib jihad
Messages : 21 Points : 5431 Date d'inscription : 23/02/2010
| Sujet: Re: algorithme de l'employer Dim 23 Mai - 12:44 | |
| | |
|
khalidmaroc1988
Messages : 39 Points : 5506 Date de naissance : 19/11/1988 Date d'inscription : 01/03/2010 Age : 36
| Sujet: Re: algorithme de l'employer Ven 28 Mai - 17:18 | |
| | |
|
TSDI2008
Messages : 34 Points : 5379 Date de naissance : 12/08/1985 Date d'inscription : 27/08/2010 Age : 39 Localisation : laayoune Emploi/loisirs : etudiant
| Sujet: Re: algorithme de l'employer Lun 25 Oct - 4:50 | |
| | |
|