Un exercice langage C urgent

khal22 Messages postés 3 Statut Membre -  
khal22 Messages postés 3 Statut Membre -
bonsoir si quelqun peut m'aider j'ai un exercice de programmation en language C et merci d'avance :
exercice:[u][/u]

le fichier "etudiants.txt" décrit les différents etudiants:

-cin :un long sur 8 caracteres
-nom: une chaine de caractere sur 15 caracteres
-prenom: une chaine de caractere sur 15 caracteres
-num_inscription: un long sur 8 caracteres
-classe: une chaine de caractere sur 10 caracteres
-matiere: une chaine de caractere sur 10 caracteres
-note_controle: un réel sur 5 caracteres
-note_examen: un réel sur 5 caracteres

on vous demande d'ecrire les fonctions suivantes:

1) saisir_fichiers (FILE *fp_etudiant)
{
}
qui permet de saisir les données dans le fichiers "etudiant.txt" avec contraints de saisie

2) File * Moyenne_etudiant(FILE *fp_etudiant)
{
}
qui permet de générer un fichier "moyenne.txt" qui contient le cin ,le nom ,le prenom ainsi que la moyenne de tous les etudiants du fichier "etudiant.txt"

3)rattrapage (FILE *fp_etudiant)
{
}
qui permet de générer un fichier d'afficher la liste des etudiantsqui vont passer l'examen de rattrapage et les matiéres à.

4) modifier_etudiant (FILE * fp_etudiant, long cin)
{
}
qui permet de modifier l'une des notes d'un etudiant donné

5) matière_premier(FILE * fp_etudiant, char * matiere)
{
}
qui permet d'afficher (l'/les) etudiant(s) 1er dans une discipline donnée.

6) recherche_inscri( FILE * fp_etudiant, char * nom, char * prenom)
{
}

un etudiant veut rechercher son numero d'inscription ,pour cela, il tape au clavier son nom, prenom et le programme doit afficher son nom ,son prenom , son numero d'inscription et la classe auquelle il appartient. La recherche doit etre une recherche dichotomique.

7) tri_croissant( FILE * fp_etudiant)
{
}
trier dans l'ordre croissant les noms des etudiants.

moi je l'ai trouvé trés difficile s'il vous plait quelqun peut m'aider.
Merci

3 réponses

  1. blux Messages postés 5039 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    tu le veux en TAMP ?
    0
  2. khal22 Messages postés 3 Statut Membre
     
    oui svp c trés urgent
    0
  3. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
     
    Plutôt que de réciter ton exercice et de dire que tu le trouves difficile, dis-nous ce que tu as compris, ce que tu as commencé à faire, et ce que tu n'arrives pas à faire. Sans ce préalable, tu n'auras aucune aide...
    0
    1. blux Messages postés 5039 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      TAMP = Travaille A Ma Place...
      0
    2. fiddy Messages postés 441 Date d'inscription   Statut Contributeur Dernière intervention   1 847
       
      C'est pas à moi qui faut le dire ^^. Je lui expliquais ce qu'on attendait de lui :-)
      0
    3. khal22 Messages postés 3 Statut Membre
       
      j'ai fais ça mais je suis sure qu'il est faux :/
      #include <stdio.h>
      #include <stdlib.h>
      #include <string.h>

      void saisir_fichier(FILE* fp_etudiant);
      void menu();
      int verif_lettre(char* c);
      int verif_cin(char *ncin,FILE *fp);
      int chiffre(char* c);
      void ajouter_etudiant();
      FILE* moyenne_etudiant(FILE* fp_etudiant);
      void modifier_note(FILE* fp);
      void recherche_par_cin(FILE* fp);
      void rattrapage();

      void main()
      {
      FILE *fp_etudiant=NULL;
      int choix;
      do
      {
      menu();
      do
      {
      scanf("%d",&choix);
      if(choix<0||choix>6)
      printf("choix invalide\n");
      }while(choix<0||choix>6);
      switch (choix)
      {
      case 1 : saisir_fichier(fp_etudiant); break;
      case 2 : moyenne_etudiant(fp_etudiant); break;
      case 3 : modifier_note(fp_etudiant); break;
      case 4 : rattrapage(); break;
      case 0 : exit(0);

      }


      }while(1);





      }

      void menu()
      {
      printf("1.saisir les donnees d'un etudiant\n");
      printf("2.liste de ratrappage\n");
      printf("3.modifier la note d'un etudiant\n");
      printf("4.afficher (l'/les)etudiant(s) qui (est/sont) 1er(s) dans la matiere\n");
      printf("5.recherche num. d'inscri d'un etudiant\n");
      printf("6.trier les etudiant par ordre alphabetique\n");
      }

      void saisir_fichier(FILE* fp_etudiant)
      {
      char ch[200]="",ch2[200]="";
      char cin[8]="";
      char num_inscri[8]="",classe[10]="",matiere[10]="";
      float note_control,note_exam;
      char prenom[15]="";
      char nom[15]="";
      int i;
      printf("entrer le cin de l'etudiant : ");
      do
      {
      scanf("%s",cin);
      }while(strlen(cin)!=8||!chiffre(cin)||!verif_cin(cin,fp_etudiant));
      fp_etudiant=fopen("etudiant.txt","r+");
      if(fp_etudiant!=NULL)
      {

      while(fgetc(fp_etudiant)!=EOF);
      fputc('\n',fp_etudiant);
      fputs(cin,fp_etudiant);
      fclose(fp_etudiant);
      }

      printf("\nentrer le prenom de l'etudiant : ");
      do
      {
      scanf("%s",prenom);

      }while(strlen(prenom)>15||strlen(prenom)<1||!verif_lettre(prenom));

      printf("\nentrer le nom de l'etudiant : ");
      do
      {
      scanf("%s",nom);
      }while(strlen(nom)>15||strlen(nom)<1||!verif_lettre(nom));

      printf("\nentrer le num. d'inscri de l'etudiant : ");
      do
      {
      scanf("%s",num_inscri);
      }while(strlen(num_inscri)!=8||!chiffre(num_inscri)||!verif_cin(num_inscri,fp_etudiant));
      printf("\nentrer la classe de l'etudiant : ");
      do
      {
      scanf("%s",classe);
      }while(strlen(classe)<1||strlen(classe)>10);
      printf("\nentrer la matiere: ");
      do
      {
      scanf("%s",matiere);
      }while(!verif_lettre(matiere)||strlen(matiere)<1||strlen(matiere)>10);
      printf("\nentrer le note de controle de l'etudiant : ");
      do
      {
      scanf("%f",¬e_control);
      }while(note_control<0||note_control>20);
      printf("\nentrer le note de l'exam de l'etudiant : ");
      do
      {
      scanf("%f",¬e_exam);
      }while(note_exam<0||note_exam>20);
      sprintf(ch," %-20s %-20s %8s %-10s %-10s %-10f %-10f",nom,prenom,num_inscri,classe,matiere,note_control,note_exam);
      fp_etudiant=fopen("etudiant.txt","a");
      if(fp_etudiant!=NULL)
      {
      fputs(ch,fp_etudiant);
      fclose(fp_etudiant);
      }
      }



      int verif_cin(char *ncin,FILE *fp)
      {
      char ch[200];
      rewind(fp);
      while(fgets(ch,199,fp))
      {
      if(!memcmp(ch,ncin,8))
      {
      printf("CIN existe deja \n ");
      return(0);
      }
      }
      return(1);
      }


      int verif_lettre(char* c)
      {
      int i;
      for(i=0;i<strlen(c);i++)
      {
      if((c[i]<='z'&&c[i]>='a')||(c[i]<='Z'&&c[i]>='A'))
      return 1;
      }
      return 0;
      }

      int chiffre(char* c)
      {
      int i;
      for(i=0;i<strlen(c);i++)
      {
      if(c[i]<='9'&&c[i]>='0')
      return 1;
      }
      return 0;
      }




      FILE* moyenne_etudiant(FILE* fp_etudiant)
      {
      float a[2]={0},m=0; int i=0,b=95,p=-1,l;
      char ch_moy[100]="",ch_boucl[150]="",c;
      FILE* fp;
      fp_etudiant=fopen("etudiant.txt","r");
      if(fp_etudiant!=NULL)
      {
      rewind(fp_etudiant);


      c=fgetc(fp_etudiant);


      while(c!=EOF)
      {
      p++;
      l=p;
      i=0;

      fgets(ch_moy,51,fp_etudiant);

      printf("%s\n",ch_moy);
      while(c!=EOF&&i<32)
      {
      c=fgetc(fp_etudiant);
      i++;
      }
      fscanf(fp_etudiant,"%f",&a[0]);
      printf("%f",a[0]);
      rewind(fp_etudiant);
      c=fgetc(fp_etudiant);
      while(l>0&&fgets(ch_boucl,150,fp_etudiant)!=NULL)
      {
      l--;
      }
      i=0;

      while(c!=EOF&&i<93)
      {
      c=fgetc(fp_etudiant);
      i++;
      }
      fscanf(fp_etudiant,"%f",&a[1]);
      printf(" %f",a[1]);
      printf("\n");

      m=(a[0]*3+a[1]*7)/10;
      fp=fopen("moyenne_etudiant.txt","a");
      if(fp!=NULL)
      {
      fputs(ch_moy,fp);
      fprintf(fp,"%f",m);
      fputc('\n',fp);
      fclose(fp);
      }
      while(c!=EOF&&c!='\n')
      {
      c=fgetc(fp_etudiant);
      }


      }

      fclose(fp_etudiant);
      }

      }



      void modifier_note(FILE* fp)
      {
      int i=0,b;
      float n;
      char chaine[150]="", rnom[10]="",cpnom[10]="",c;
      int l=0,m;

      printf("saisir le nom a chercher : ");
      scanf("%s",rnom);
      fp=fopen("etudiant.txt","r+");
      if(fp!=NULL)
      {
      rewind(fp);
      c=fgetc(fp);
      while(fgets(chaine,150,fp)!=NULL)
      {
      l++;

      sscanf(chaine,"%8s %20s",cpnom,cpnom);
      if(!strcmp(cpnom,rnom))
      {
      m=l-1;
      i++;
      printf("%s",chaine);
      }

      }
      rewind(fp);
      c=fgetc(fp);
      if(i==1)
      {
      while(fgets(chaine,150,fp)!=NULL&&m>0)
      {
      m--;
      }
      }
      if(i>1)
      {
      recherche_par_cin(fp);
      }
      printf("saisir la note a modifier : ");
      printf("1.ds 2.exam : ");
      scanf("%d",&b);
      printf("saisir la nouvelle note : ");
      scanf("%f",&n);
      switch(b)
      {
      case 1 : fseek(fp,-23,SEEK_CUR); fprintf(fp,"%f",n); break;
      case 2 : fseek(fp,-12,SEEK_CUR); fprintf(fp,"%f",n); break;
      default: printf("choix invalide\n"); break;
      }
      fclose(fp);

      }

      }


      void recherche_par_cin(FILE* fp)
      {
      char chaine[150]="", rcin[8]="",cpcin[8]="",c;
      int i=0,m,l=0;

      printf("saisir le num de cin a chercher : ");
      scanf("%s",rcin);
      fp=fopen("etudiant.txt","r");
      if(fp!=NULL)
      {
      rewind(fp);
      c=fgetc(fp);
      while(fgets(chaine,150,fp)!=NULL)
      {
      l++;
      sscanf(chaine,"%8s",cpcin);
      if(!strcmp(cpcin,rcin))
      {
      m=l-1;
      printf("%s",chaine);
      }

      }
      rewind(fp);
      c=fgetc(fp);


      while(fgets(chaine,150,fp)!=NULL&&m>0)
      {
      m--;
      }
      fclose(fp);
      }
      }


      void rattrapage()
      {
      FILE* fp=NULL;
      float a;
      char ch[100]="",c;
      fp=fopen("moyenne_etudiant.txt","r");
      if (fp!=NULL)
      {
      printf("La liste des etudiants qui vont passer l'exam de rattrapage : \n\n");
      while(fgets(ch,100,fp)!=NULL)
      {
      fseek(fp,-11,SEEK_CUR);
      fscanf(fp,"%f",&a);
      if(a<10)
      printf("%s",ch);
      c=fgetc(fp);
      while(c!='\n'&&c!=EOF)
      {
      c=fgetc(fp);
      }
      }
      fclose(fp);
      printf("\n");

      }
      }
      0