Modifier un fichier en C
£udo
Messages postés
455
Statut
Membre
-
Vivien -
Vivien -
salut ,j' ai un souci avec une fonction en C. Mon pg permet la création, l' ajout d'eleve, la modif et la suppression d' un eleve d'une classe. Y a que la suppresion qui marche pas. J'utilise les fichiers et quand je supprime qqn je voudrais qu' il ne m'efface que l'eleve demandé et non tout le fichier. De plus, si par exemple, y a 3 eleves, et que je supprime l'eleve n°2, je voudrais que le n°3 devienne le n°2. J' ai essayé mais ça passe pas, qqn peut m'aider svp?
Merci
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
Merci
void supprimer_eleve()
{
char choix_supp;
int seleve_temp=0;
int trouve=0;
system("cls");
printf("\n----------------------------------------------------------------------------\n\n\n");
printf("\t\t\t\tSUPPRESSION ELEVE\n");
printf("\n----------------------------------------------------------------------------\n\n\n");
consultation_eleve();//on affiche la consultation
/*
On ouvre les 2 fichiers
fichier1_eleve en mode lecture uniquement
fichier2_eleve en mode ecriture en fin de fichier
*/
fichier_eleve= fopen("fichier1_eleve","r");
Nouveau_fichier_eleve=fopen("fichier2_eleve","a");
flushall();
printf("\nSaisir le numero de l'eleve a supprimer : ");
scanf("%d",&seleve_temp);
system("cls");
//tant qu'on lit des eleves dans le fichier
while(fread(&seleve,sizeof(seleve),1,fichier_eleve)!=0)
{
if (seleve.identifiant == seleve_temp )//si le numero saisi est dans le fichier
{
trouve=1;
printf("\n Nom : %s",seleve.nom);
printf("\n Prenom: %s", seleve.prenom);
printf("\n Classe : %s",seleve.classe);
printf("\n Date de naissance : %s",seleve.date_naissance);
printf("\n Numero de telephone : %s",seleve.numtel);
printf("\n Mail : %s",seleve.mail);
printf("\n Adresse : %s",seleve.add);
printf("\n Code postal :%s",seleve.cp);
printf("\n Ville : %s",seleve.ville);
printf("\n Date de naissance : %s",seleve.date_naissance);
printf("\n\n\n Voulez vous supprimer cet eleve?(o/n)");
flushall();
choix_supp=(char)getchar();
//si le choix est non
if ((choix_supp=='n')||(choix_supp=='N'))
{
/*
on ecrit sur le nouveau fichier eleve
on ferme les 2 fichiers
et on retourne au menu.
*/
fwrite(&seleve,sizeof(seleve),1,Nouveau_fichier_eleve);
fclose(fichier_eleve);
fclose (Nouveau_fichier_eleve);
menugeneral_eleve();
}
//si le choix est oui, on affiche une phrase de confirmation
if ((choix_supp=='o')||(choix_supp=='O'))
{
printf("\n\n\t\tLa fiche de l'eleve numero %d a ete supprimee!\n",seleve_temp);
}
}//fin du if
//si le numero saisi est different de l'identifiant
if (seleve.identifiant != seleve_temp)
{
//si l'identifiant est superieur
if (seleve.identifiant > seleve_temp )
{
seleve.identifiant = seleve.identifiant - 1;
//on ecrit dans le nouveau_fichier
fwrite (&seleve, sizeof(seleve),1,Nouveau_fichier_eleve);
}
//si l'identifiant est inferieur
if (seleve.identifiant < seleve_temp )
{
//on ecrit dans le nouveau_fichier
fwrite(&seleve,sizeof(seleve),1,Nouveau_fichier_eleve);
}
}
else
{
fwrite(&seleve,sizeof(seleve),1,Nouveau_fichier_eleve);
printf("\nLa fiche de l'eleve numero %d a ete supprimee.\n",seleve_temp);
}
}
}//fin du while
fclose(fichier_eleve);
fclose (Nouveau_fichier_eleve);
remove("fichier1_eleve");
rename("fichier2_eleve","fichier1_eleve");
fichier_eleve= fopen("fichier1_eleve","a");
Nouveau_fichier_eleve=fopen("fichier2_eleve","a");
fclose (fichier_eleve);
fclose (Nouveau_fichier_eleve);
if (trouve==0)
{
printf("\n\t\t\tCet eleve n'est pas dans la base!");
}
printf("\n\n\n\n\t Appuyer sur une touche pour retourner sur le menu eleve...");
getch();//le programme fait une pause jusqu'a ce qu'on appuie sur une touche
}//fin du void
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
A voir également:
- Modifier un fichier en C
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Fichier epub - Guide
- Modifier dns - Guide
- Modifier extension fichier - Guide
7 réponses
Bonjour, je viens de prendre une conpie de ton message je vais vérifié et t'envoyer mes commentaires sous peu merci de ta compréhensino
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Tant mieux ...
J'aimerai, si possible, y jeter un coup d'oeil (si ca ne te pose pas de problème) car j'ai des fonctions similaires à coder et j'aimerai voir comment tu as procédé ...
D'avance merci ...
J'aimerai, si possible, y jeter un coup d'oeil (si ca ne te pose pas de problème) car j'ai des fonctions similaires à coder et j'aimerai voir comment tu as procédé ...
D'avance merci ...
voila comment j'ai fait avec mon nouveau prgramme, l'ancien etait a peu pres similaire
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
*******************************/
void ajout(FILE *f,char *n)
{
char choix;
system("cls");
printf("AJOUT D'UNE FICHE ELEVE\n\n");
printf("ENTRER LE NOM DU FICHIER DANS LEQUEL VOUS VOULEZ L'INSCRIRE: ");
gets(n);
flushall();
//ouverture en "a+":lecture/écriture d'un fichier existant (mise à jour), pas de création d'une nouvelle version, le pointeur est positionné à la fin du fichier.
f = fopen(n,"a+");
if (f == NULL)
{
printf("\nERREUR, CE FICHIER N'EXISTE PAS\n\n");
}
else
{
do
{
printf("\nSAISIE D'UNE FICHE ?(o/n) ");
choix = (char)getchar();
flushall();
if ((choix=='o')||(choix=='O'))
{
printf("\nNOM: ");
gets(seleve.nom);
printf("PRENOM: ");
gets(seleve.prenom);
printf("CLASSE: ");
gets(seleve.classe);
printf("RETARD(S): ");
scanf("%d",&seleve.retard);
printf("RETENUE(S): ");
scanf("%d",&seleve.retenue);
printf("ABSCENCE(S): ");
scanf("%d",&seleve.abs);
flushall();
fwrite(&seleve,sizeof(seleve),1,f);
}
}//fin do
while((choix=='o')||(choix=='O'));
}//fin else
fclose(f);
}
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)