Linux

Résolu/Fermé
mimi_lindy - 20 févr. 2008 à 18:57
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008 - 5 mai 2008 à 22:39
Bonjour,voulez vous maider ds cet exo svp
exo:
on desire traiter des fichiers linux ayant la structure suivante:
-une zone d'entete qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:-nom
-prenom
-age
les operations a realiser sur de tels fichiers sont:

*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .
merci d'avance de mavoir aidé!
A voir également:

35 réponses

mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
20 févr. 2008 à 21:51
#include <stdio.h>
void perror (const char *s);
#include <errno.h>
const char *sys_errlist[];
int sys_nerr;

c'est ca le code pour le message d'erreur ?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
20 févr. 2008 à 22:12
explique moi cette phrase,est elle demandée ds l'exo?

Même si dans l'ennoncé, n'est pas specifié, je pense que celui qui t'as donné l'exo a oublié de le dire où a laissé à toi de choisir

en fait, avoir un numéro entier dans l'en tête comme ça pour plaisir ne sers à rien
autant l'utiliser pour enregistrer le nombre d'entrées ;-)
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
21 févr. 2008 à 19:40
Bonjour,voulez vous m’aider dans cet exo SVP
exo:
on désire traiter des fichiers linux ayant la structure suivante:
-une zone d'entête qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:-nom
-prénom
-age
les opérations a réaliser sur de tels fichiers sont:

*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreur dans un appel système le numéro et le message correspondant à l'erreur .

-écrire en c++(c) les classes (les structures) nécessaires .
-ajouter une fonction Main ,cette fonction affiche un menu afin de permettre à l’utilisateur d’exécuter des opérations sur les fichiers précédents .

merci d'avance de m’avoir aidé!
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
21 févr. 2008 à 21:21
Salut,

je vais t'avancer un peu, mais il faut que tu travailles aussi de ton côté sinon, ça ne sera pas vraiment un aide
/* exo2.c */

/*
Ennoncé :

on desire traiter des fichiers linux ayant la structure suivante:
-une zone d'entete qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:
-nom
-prenom
-age
les operations a realiser sur de tels fichiers sont:

*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreue dans un appel systeme le numéro et le message correspondant à l'erreur .

-écrire en c++(c) les classes (les structures) nécessaires .
-ajouter une fonction Main ,cette fonction affiche un menu 
afin de permettre à l'utilisateur d'exécuter des opérations sur les fichiers précédants . 

Fin Ennoncé
*/

#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

typedef struct {
  char nom[100];
  char prenom[100];
  int age;
}Personne;

int menu();
void Affiche();
void CreerPersonne();

int main()
{
  int choix = 0;
  while((choix=menu()) != 6){
    switch(choix){
      case 1:
	      printf("ouverture\n",choix);
	      Affiche();
	      break;
      case 2:
	      printf("nombre enregistrement\n");
	      break;
      case 3:
	      printf("affiche ième enregistrement\n");
	      break;
      case 4:
	      printf("ajoute nouvel enregistrement\n");
	      CreerPersonne();
	      break;
      case 5:
	      printf("modifier ième enregistrement\n");
	      break;
      case 6:
	      printf("Au revoir!\n");
	      return 0;
      default:
	      printf("/!\\ Option inexistante /!\\\n");
	      break;
    }
  }
  return 0;
}

int menu(){
  int choix;
  printf(" *****     MENU     *****\n\n");
  printf("1. ouverture d'un fichier existant et affichage des enregistrement\n"
         "2. affiche le nombre d'enregistrements\n"
         "3. affiche le i=eme enregistrement\n"
	 "4. ajoute un nouvel enregistrementr\n"
	 "5. modifie le i=eme enregistrement\n"
	 "6. Quitter\n");
  printf("Faites votre choix : ");
  scanf("%d",&choix);
  getchar();
  return choix;
} 

void Affiche(){
  FILE *fb;
  Personne elem;

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Erreur numéro %d\n",errno);
    perror("Fichier\n");
  }else{	  
	  while(fread(elem.nom,100,1,fb) == 1 &&
		fread(elem.prenom,100,1,fb)==1 &&
		fread(&elem.age,sizeof(int),1,fb)){
		  printf("Nom : %s, Prenom : %s, Age : %d\n",
			  elem.nom,elem.prenom,elem.age);
	  }
  }
  fclose(fb);
}

void CreerPersonne(){
  FILE *fb;
  Personne nouveau;
  if(NULL == (fb = fopen("pers.dat","a+b"))){
    printf("Erreur numéro %d\n",errno);
    perror("Fichier\n");
  }else{
	  printf("--- Nouvel enregistrement ---\n");
	  printf("Entrez le nom : ");
	  scanf("%s", nouveau.nom);
	  printf("Entrez le prénom : ");
	  scanf("%s",nouveau.prenom);
	  printf("Entrez l'âge : ");
	  scanf("%d",&nouveau.age);
	  
	  fwrite(nouveau.nom,100,1,fb);
	  fwrite(nouveau.prenom,100,1,fb);
	  fwrite(&nouveau.age,sizeof(int),1,fb);
  }
  fclose(fb);
}
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
21 févr. 2008 à 21:40
merci pour ton aide,
bien sur que je vais travailler dessus,jai besoin davoir linux et c++?pour compiler et voir l'execution.
c'est la solution pour tout l'exo?je veux dire le nouvel exo que jai posté aujourdhui
envoi moi un message pour me montrer un peu une petite explication pour chaque fonction,elle fait koi par exemple
comment je peux compiler le fichier et lexecuter sous linux?(les étapes)
merci 1000 fois
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
23 févr. 2008 à 12:51
Bonjour,

j'attendais voir un peu ce que tu as fait ;-(

bon voici un exemple un peu plus complet (en l'exécutant plusieurs fois et en lisant le code normalement tu devras comprendre ;-)
je n'ai pas traiter l'histoire de nombre entier au début de fichier que je trouve inutile.
l'exemple que je te donne, n'est pas le plus performant et la gestion d'erreur n'est pas mise au point
mais comme tu es débutante ça ne te posera pas des problèmes ;-)
le fichier s'appellera cette fois pers.dat et il ne doit pas être créer avant

tu dois enregister le code dans un fichier que tu l'appelleras par exemple exo.c
pour le compiler tu dois taper
gcc -o exo.exe exo2.c
pour exécuter tu dois taper
./exo.exe
/* exo.c /*
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

typedef struct {
  char nom[100];
  char prenom[100];
  int age;
}Personne;

void CreerPersonne();
void Affiche();
void EditerEnregistrement();
int menu();
int NombreEnregistrements();
int AfficheEnregistrement();
int Recherche();

int main()
{
  int choix = 0;
  int n;
  while((choix=menu()) != 6){
    switch(choix){
      case 1:
	      Affiche();
	      break;
      case 2:
	      if(n=NombreEnregistrements())
	        printf("Il y a %d enregistrements\n",n);
	      else
		printf("Pas d'enregistrements\n");
	      break;
      case 3:
	      AfficheEnregistrement();
	      break;
      case 4:
	      CreerPersonne();
	      break;
      case 5:
	      EditerEnregistrement();
	      break;
      case 6:
	      printf("Au revoir!\n");
	      return 0;
      default:
	      printf("/!\\ Option inexistante /!\\\n");
	      break;
    }
  }
  return 0;
}

int menu(){
  int choix;
  printf("********************\n");
  printf("*        MENU      *\n");
  printf("********************\n");
  printf("1. Ouverture d'un fichier existant et affichage des enregistrement\n"
         "2. Afficher le nombre d'enregistrements\n"
         "3. Afficher le Nème enregistrement\n"
	 "4. Ajouter un nouvel enregistrementr\n"
	 "5. Modifier le Nème enregistrement\n"
	 "6. Quitter\n");
  printf("Faites votre choix : ");
  scanf("%d",&choix);
  getchar();
  return choix;
} 

void Affiche(){
  FILE *fb;
  Personne elem;

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }else{
    while(fread(elem.nom,100,1,fb) == 1 &&
      fread(elem.prenom,100,1,fb)==1 &&
      fread(&elem.age,sizeof(int),1,fb)){
        printf("Nom : %s, Prenom : %s, Age : %d\n",
		elem.nom,elem.prenom,elem.age);
    }
  fclose(fb);
  }
}

void CreerPersonne(){
  FILE *fb;
  Personne nouveau;
  if(NULL == (fb = fopen("pers.dat","a+b"))){
    printf("Erreur numéro %d\n",errno);
    perror("");
  }else{
    printf("--- Nouvel enregistrement ---\n");
    printf("Entrez le nom : ");
    scanf("%s", nouveau.nom);
    printf("Entrez le prénom : ");
    scanf("%s",nouveau.prenom);
    printf("Entrez l'âge : ");
    scanf("%d",&nouveau.age);
    fwrite(nouveau.nom,100,1,fb);
    fwrite(nouveau.prenom,100,1,fb);
    fwrite(&nouveau.age,sizeof(int),1,fb);
  }
  fclose(fb);
}

int NombreEnregistrements(){
  FILE *fb;
  Personne elem;
  int nb = 0;

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }else{
    while(fread(elem.nom,100,1,fb) == 1 &&
      fread(elem.prenom,100,1,fb) == 1 &&
      fread(&elem.age,sizeof(int),1,fb))
        ++nb;
  fclose(fb);
  }
  return nb;
}

int AfficheEnregistrement(){
  int n,n_;
  FILE *fb;
  Personne elem;

  printf("Entrez le numéro d'enregistrement : ");
  scanf("%d",&n);
  n_ = NombreEnregistrements();
  if(n < 1 || n > n_){
    printf("Index hors plage\n");
    return 0;
  }else{
    if(NULL == (fb = fopen("pers.dat","rb"))){
      printf("Err %d\n",errno);
      perror(" ");
    }
    fseek(fb,(100 + 100 + sizeof(int)) * (n-1),SEEK_SET);
    fread(elem.nom,100,1,fb);
    fread(elem.prenom,100,1,fb);
    fread(&elem.age,sizeof(int),1,fb);
    printf("Nom : %s, Prenom : %s, Age : %d\n",
	    elem.nom,elem.prenom,elem.age);
    fclose(fb);
    return n;
  }
}

int Recherche(){
  FILE *fb;
  Personne elem;
  char nom[100];
  int i,choix;

  printf("------------------------------------------\n");
  printf("| Rechercher l'enregistrement à modifier |\n");
  printf("------------------------------------------\n");
  printf("   1. Recherche par nom\n   2. Recherche par position\n");
  printf("   3. Annuler\nFaites votre choix : ");
  scanf("%d",&choix);

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }
  if(! NombreEnregistrements())
	  return 0;
  else{
    switch(choix){
      case 1:
	    printf("Entrez nom : ");
	    scanf("%s",nom);
	    for(i=1;i<=NombreEnregistrements();++i){
              fread(elem.nom,100,1,fb);
	      fread(elem.prenom,100,1,fb);
	      fread(&elem.age,sizeof(int),1,fb);
	      if( strcmp(nom,elem.nom)==0){
                printf("Nom : %s, Prenom : %s, Age : %d\n",
			elem.nom,elem.prenom,elem.age);
		fclose(fb);
		return i;
	      }
	    }
	    return 0;
	    break;
      case 2:
	    return AfficheEnregistrement();
	    break;
      case 3:
	    return 0;
            break;
      default:
	    return 0;
	    break;
    }
  }
}

void EditerEnregistrement(){
  int pos,choix;
  FILE *fb;
  Personne elem;
  
  if(NULL == (fb = fopen("pers.dat","r+b"))){
    printf("Err %d\n",errno);
    perror(" ");
  }
  if(! NombreEnregistrements())
    return;
  else
    pos = Recherche();
  
  if(!pos)
    printf("Opération annulée ou Enregistrement inexistant!\n");
  else{
    fseek(fb,(100 + 100 + sizeof(int))*(pos-1),SEEK_SET);
    printf("---------------------\n");
    printf("| Menu modification |\n");
    printf("---------------------\n");
    printf("   1. Modifier le nom\n   2. Modifier le prénom\n"
           "   3. Modifier l'age\n   4. Modifier tout\n"
	   "   5. Annuler\n");
    printf("Faites votre choix : ");
    scanf("%d",&choix);
    switch(choix){
      case 1:
	    printf("Entrez le nouveau nom : ");
	    scanf("%s",elem.nom);
	    fwrite(elem.nom,100,1,fb);
	    fclose(fb);
	    break;
      case 2:
	    printf("Entrez le nouveau prénom : ");
	    scanf("%s",elem.prenom);
	    fseek(fb,100,SEEK_CUR);
	    fwrite(elem.prenom,100,1,fb);
	    fclose(fb);
	    break;
      case 3:
	    printf("Entrez l'age : ");
	    scanf("%d",&elem.age);
	    fseek(fb,100+100,SEEK_CUR);
	    fwrite(&elem.age,sizeof(int),1,fb);
	    fclose(fb);
	    break;
      case 4:
	    printf("Entrez le nouveau nom : ");
	    scanf("%s",elem.nom);
	    printf("Entrez le nouveau prénom : ");
	    scanf("%s",elem.prenom);
	    printf("Entrez l'age : ");
	    scanf("%d",&elem.age);
	    fwrite(elem.nom,100,1,fb);
	    fwrite(elem.prenom,100,1,fb);
	    fwrite(&elem.age,sizeof(int),1,fb);
	    fclose(fb);
	    break;
      case 5:
	    printf("Opération annulée!\n");
	    break;
    }
  }
}
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
25 févr. 2008 à 21:31
exo:
écrire en c(c++)une classe(une structure) qui comporte les fonctions membres:
-creer un fichier.
-ouvrir un fichier
-insérer en fin de fichier.
-fermer un fichier.
-ajouter une fonction "mean" à l'utilisateur ,qui affiche un menu afin de lui pérmettre d'éxécuter une fonction de la classe(structure).


aidez moi s'ils vous plait pour cet exo,jai besoin de la solution aussi tot que possible
merci d'avance!
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
25 févr. 2008 à 21:34
Salut,

déjà, tu ne dit même pas un merci pour ce que tu as réçu
et j'ai l'impression que tu veuilles qu'on fasse les exercices à ta place

tu peux commencer par nous montrer ce que tu as fait, et ensuite on pourra te donner des indications
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
25 févr. 2008 à 22:36
bsr,non bien sur que je vous remercie pour ce que vous avez fait,mais jai pas fini avec vous concèrnant l'autre exo,on en reparlera mais ce petit exo je dois avoir sa solution pour demain si vous voulez bien m'aidez,et pour votre information c'est aujourdhui que jai recu le cd linux boot pour commencer a compiler et a executer ce que vous mavez donné et voir les resultats...
0
[Dal] Messages postés 6194 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 11 octobre 2024 1 092
26 févr. 2008 à 10:29
Salut,

Le code qu'a fait lami20j pour toi est du ANSI C. Tu peux l'exécuter et le tester avec n'importe quel ordinateur quelque soit son système d'exploitation doté d'un compilateur C.

Quelques petites hypothèses, pour la suite... ton professeur, ou quiconque t'a donné cet exercice à faire, consulte ce site et tombe sur ton message. Il attend patiemment que tu lui remettes le résultat, te félicite parce qu'il fonctionne parfaitement et te donne un zéro pointé en te mettant sous le nez une impression du site.

Il est aussi arrivé dans le passé, dans ce forum, qu'un professeur n'attende pas, reconnaisse un de ses élèves et poste un message dans ce forum en le démasquant. C'est très drôle, sauf pour l'élève qui se fait prendre.

(qui sait, peut-être suis-je ce professeur ?)

Il peut aussi certainement arriver que d'autres élèves ayant reçu le même énoncé d'exercice, cherchant une solution à leur problème sur Google (CCM est très bien référencé sur Google), tombent sur ce site et copient tous la même solution. Imagine la surprise du professeur lorsqu'il va recevoir des codes sources identiques.

Dès lors, quelle est la conclusion qui s'impose ?


Dal
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
7 mars 2008 à 21:23
bsr,si tes la lami20j,essai de repondre
je vx qlqs indications sur cette derniere solution que tu mavais doné,la solution repond a tout lexo?essai de majouter un petit code pour traiter l'histoire du nombre entier au debut,as tu fais ds ce code la création d'un fichier ?(bien sur dans la structure donné)
merci
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
7 mars 2008 à 21:58
Bonjour,voulez vous m’aider dans cet exo SVP
exo:
on désire traiter des fichiers linux ayant la structure suivante:
-une zone d'entête qui consiste en un entier de votre choix
-une suite d'objets ayant la structure suivante:-nom
-prénom
-age
les opérations a réaliser sur de tels fichiers sont:

*création d’un fichier(avec la structure donnée précedement).
*ouverture d'un fichier existant et affichage des enregistrement.
*une fonction qui donne le nombre d'enregistrements.
*une fonction qui donne la valeur du i=eme enregistrement.
*une fonction qui ajoute un nouvel enregistrement en fin de fichier .
*une fonction qui modifie le i=eme enregistrement .
*une fonction qui affiche en cas d'erreur dans un appel système le numéro et le message correspondant à l'erreur .

-écrire en c++(c) les classes (les structures) nécessaires .
-ajouter une fonction Main ,cette fonction affiche un menu afin de permettre à l’utilisateur d’exécuter des opérations sur les fichiers précédents .

merci d'avance de m’avoir aidé!
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 mars 2008 à 09:39
Salut,

tu me deçois, tu n'a rien fait depuis le jour quand je t'ai donné le code

voici le code de ton exo (sauf *une fonction qui affiche en cas d'erreur dans un appel système le numéro et le message correspondant à l'erreur . )

pour ça tu as perror

et je m'arrête là

tu n'as qu'à le compiler et l'exécuter pour l'étudier
bonne continuation

Dal a raison

/* exo.c */
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>

typedef struct {
  char nom[100];
  char prenom[100];
  int age;
}Personne;

int menu();

void AjoutNumeroDeVotreChoixAuDebut();
void AfficheTousLesEnregistrements();
int NombreEnregistrements();
int AfficheEnregistrement();
void AjouteNouvelEnregitrement();
void EditerEnregistrement();
int Recherche();

int main()
{
  int choix = 0;
  int n;

  while((choix=menu()) != 6){
    switch(choix){
      case 0:
	      AjoutNumeroDeVotreChoixAuDebut();
	      break;
      case 1:
	      AfficheTousLesEnregistrements();
	      break;
      case 2:
	      if(n=NombreEnregistrements())
	        printf("Il y a %d enregistrements\n",n);
	      else
		printf("Pas d'enregistrements\n");
	      break;
      case 3:
	      AfficheEnregistrement();
	      break;
      case 4:
	      AjouteNouvelEnregitrement();
	      break;
      case 5:
	      EditerEnregistrement();
	      break;
      case 6:
	      printf("Au revoir!\n");
	      return 0;
      default:
	      printf("/!\\ Option inexistante /!\\\n");
	      break;
    }
  }
  return 0;
}

int menu(){
  int choix;
  printf("********************\n");
  printf("*        MENU      *\n");
  printf("********************\n");
  printf("0. Ajouter le numéro de votre choix au début du fichier\n"
	 "1. Ouverture d'un fichier existant et affichage des enregistrement\n"
         "2. Afficher le nombre d'enregistrements\n"
         "3. Afficher le Nème enregistrement\n"
	 "4. Ajouter un nouvel enregistrementr\n"
	 "5. Modifier le Nème enregistrement\n"
	 "6. Quitter\n");
  printf("Faites votre choix : ");
  scanf("%d",&choix);
  getchar();
  return choix;
} 

void AjoutNumeroDeVotreChoixAuDebut(){
  FILE *fb;
  int numero;

  if(NULL == (fb = fopen("pers.dat","a+b"))){
	      printf("Err %d\n",errno);
		    perror("fopen");
  }
  fclose(fb);

  if(NULL == (fb = fopen("pers.dat","r+b"))){
	      printf("Err %d\n",errno);
		    perror("fopen");
  }else {
    printf("Entrez un numéro de votre choix : ");
    scanf("%d",&numero);
    fwrite(&numero,sizeof(int),1,fb);
  }
  fclose(fb);
}

void AfficheTousLesEnregistrements(){
  FILE *fb;
  Personne elem;
  int numero;

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }else{
    fread(&numero,sizeof(int),1,fb);
    printf("Numéro de début : %d\n",numero);
    while(fread(elem.nom,100,1,fb) == 1 &&
      fread(elem.prenom,100,1,fb)==1 &&
      fread(&elem.age,sizeof(int),1,fb)){
        printf("Nom : %s, Prenom : %s, Age : %d\n",
		elem.nom,elem.prenom,elem.age);
    }
  fclose(fb);
  }
}

void AjouteNouvelEnregitrement(){
  FILE *fb;
  Personne nouveau;
  if(NULL == (fb = fopen("pers.dat","a+b"))){
    printf("Erreur numéro %d\n",errno);
    perror("");
  }else{
    fseek(fb,sizeof(int),SEEK_SET);
    printf("--- Nouvel enregistrement ---\n");
    printf("Entrez le nom : ");
    scanf("%s", nouveau.nom);
    printf("Entrez le prénom : ");
    scanf("%s",nouveau.prenom);
    printf("Entrez l'âge : ");
    scanf("%d",&nouveau.age);
    fwrite(nouveau.nom,100,1,fb);
    fwrite(nouveau.prenom,100,1,fb);
    fwrite(&nouveau.age,sizeof(int),1,fb);
  }
  fclose(fb);
}

int NombreEnregistrements(){
  FILE *fb;
  Personne elem;
  int nb = 0;

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }else{
    while(fread(elem.nom,100,1,fb) == 1 &&
      fread(elem.prenom,100,1,fb) == 1 &&
      fread(&elem.age,sizeof(int),1,fb))
        ++nb;
  fclose(fb);
  }
  return nb;
}

int AfficheEnregistrement(){
  int n,n_;
  FILE *fb;
  Personne elem;

  printf("Entrez le numéro d'enregistrement : ");
  scanf("%d",&n);
  n_ = NombreEnregistrements();
  if(n < 1 || n > n_){
    printf("Index hors plage\n");
    return 0;
  }else{
    if(NULL == (fb = fopen("pers.dat","rb"))){
      printf("Err %d\n",errno);
      perror(" ");
    }
    fseek(fb,sizeof(int),SEEK_SET);
    fseek(fb,(100 + 100 + sizeof(int)) * (n-1),SEEK_CUR);
    fread(elem.nom,100,1,fb);
    fread(elem.prenom,100,1,fb);
    fread(&elem.age,sizeof(int),1,fb);
    printf("Nom : %s, Prenom : %s, Age : %d\n",
	    elem.nom,elem.prenom,elem.age);
    fclose(fb);
    return n;
  }
}

int Recherche(){
  FILE *fb;
  Personne elem;
  char nom[100];
  int i,choix;

  printf("------------------------------------------\n");
  printf("| Rechercher l'enregistrement à modifier |\n");
  printf("------------------------------------------\n");
  printf("   1. Recherche par nom\n   2. Recherche par position\n");
  printf("   3. Annuler\nFaites votre choix : ");
  scanf("%d",&choix);

  if(NULL == (fb = fopen("pers.dat","rb"))){
    printf("Err %d\n",errno);
    perror(" ");
  }
  if(! NombreEnregistrements())
	  return 0;
  else{
    switch(choix){
      case 1:
	    printf("Entrez nom : ");
	    scanf("%s",nom);
	    fseek(fb,sizeof(int),SEEK_SET);
	    for(i=1;i<=NombreEnregistrements();++i){
              fread(elem.nom,100,1,fb);
	      fread(elem.prenom,100,1,fb);
	      fread(&elem.age,sizeof(int),1,fb);
	      if( strcmp(nom,elem.nom)==0){
                printf("Nom : %s, Prenom : %s, Age : %d\n",
			elem.nom,elem.prenom,elem.age);
		fclose(fb);
		return i;
	      }
	    }
	    return 0;
	    break;
      case 2:
	    return AfficheEnregistrement();
	    break;
      case 3:
	    return 0;
            break;
      default:
	    return 0;
	    break;
    }
  }
}

void EditerEnregistrement(){
  int pos,choix;
  FILE *fb;
  Personne elem;
  
  if(NULL == (fb = fopen("pers.dat","r+b"))){
    printf("Err %d\n",errno);
    perror(" ");
  }
  if(! NombreEnregistrements())
    return;
  else
    pos = Recherche();
  
  if(!pos)
    printf("Opération annulée ou Enregistrement inexistant!\n");
  else{
    fseek(fb,sizeof(int),SEEK_SET);
    fseek(fb,(100 + 100 + sizeof(int))*(pos-1),SEEK_CUR);
    printf("---------------------\n");
    printf("| Menu modification |\n");
    printf("---------------------\n");
    printf("   1. Modifier le nom\n   2. Modifier le prénom\n"
           "   3. Modifier l'age\n   4. Modifier tout\n"
	   "   5. Annuler\n");
    printf("Faites votre choix : ");
    scanf("%d",&choix);
    switch(choix){
      case 1:
	    printf("Entrez le nouveau nom : ");
	    scanf("%s",elem.nom);
	    fwrite(elem.nom,100,1,fb);
	    fclose(fb);
	    break;
      case 2:
	    printf("Entrez le nouveau prénom : ");
	    scanf("%s",elem.prenom);
	    fseek(fb,100,SEEK_CUR);
	    fwrite(elem.prenom,100,1,fb);
	    fclose(fb);
	    break;
      case 3:
	    printf("Entrez l'age : ");
	    scanf("%d",&elem.age);
	    fseek(fb,100+100,SEEK_CUR);
	    fwrite(&elem.age,sizeof(int),1,fb);
	    fclose(fb);
	    break;
      case 4:
	    printf("Entrez le nouveau nom : ");
	    scanf("%s",elem.nom);
	    printf("Entrez le nouveau prénom : ");
	    scanf("%s",elem.prenom);
	    printf("Entrez l'age : ");
	    scanf("%d",&elem.age);
	    fwrite(elem.nom,100,1,fb);
	    fwrite(elem.prenom,100,1,fb);
	    fwrite(&elem.age,sizeof(int),1,fb);
	    fclose(fb);
	    break;
      case 5:
	    printf("Opération annulée!\n");
	    break;
    }
  }
}
0
salut
merci pour votre aide,
mais, moi j'utilise un fichier txt et pas binaire.et je ne peu pas réculé pour refair tt mn projet avc les fichier binaire, svp , pourrai vs convertir juste la parti de la modification d'un enregistrement avc les fonctions fscan et fprintf ,ftell..(txt)
merci d'avance
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
8 mars 2008 à 09:48
je mets résolu
0
bob031 Messages postés 8158 Date d'inscription samedi 7 août 2004 Statut Membre Dernière intervention 1 septembre 2014 473
8 mars 2008 à 15:39
je mets résolu

ouaips ! moi je dirai plutôt ......."pondu et résolu" !

joli travail !
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
8 mars 2008 à 18:42
slt,jai cette solution et jai comencer a la compiler..mais une amie m'a dis que cette solution est du pur 'c',elle voulais dire que c'est pas du linux en arriere plan c,elle m'a dit qu'elle marche sous windows et linux et tout systeme d'exploitation,elle a dit que je dois utiliser les appels systeme de linux comme'intopen(mode..)' et 'intcreat(mode...)'.
cette lsolution c du linux?ou je px mettre le code de lerreure dans le programe (perror).
jai complier comme suit:
g++ exo.c(le fichier dans le kwrite est :exo.c)
jai executer comme suit
/exo.exe
c juste?
cette derniere solution que t'as posté c'est la plus complete?pas besoin de voir les autres?
merci
0
Grunt Messages postés 2773 Date d'inscription jeudi 17 janvier 2008 Statut Contributeur Dernière intervention 3 avril 2009 301
9 mars 2008 à 00:05
1) il ne faut pas donner un nom de fichier objet à g++ ? quelque chose comme "g++ exo.c -o exo" ? Enfin si ça marche comme tu fais, tant mieux.
2)Pour exécuter il faut d'abord rendre exécutable ton fichier objet : "chmod +x exo" et ensuite seulement "./exo"

Si ce programme est multiplateforme, tant mieux, c'est une très bonne habitude à prendre !
0
mimi_lynda Messages postés 30 Date d'inscription mercredi 20 février 2008 Statut Membre Dernière intervention 15 novembre 2008
5 mai 2008 à 22:39
bsr,jai besoin d'une aide urgente pour demain
exo1
ecrire un programme qui cree deux processus el pere affichera les entiers paires compris entre 1 et 100,le fils affichera les entiers impaires compris dans le meme intervalle .synchroniser les processus a l'aide des signaux pour que l'affichage soit ordonné .

exo2
ecrire un programme qui cree deux processus :
-le pere ouvre un fichier texte en lecture .on suppose que le fichier est composé de mots formés de caractères alphabétiques séparés par des espaces .
-le processus père recherche le mot dans le fichier et transmet au fils la valeur '1' si le mot est dans le fichier et '0' sinon .
(on a besoin d'un pipe)

faire les deux exos avec des appels systemes de linux avec du 'c' bien sur .
merci (jen ai vraiment besoin maintenant )
0