Modifier un fichier en C
£udo
Messages postés
455
Date d'inscription
Statut
Membre
Dernière intervention
-
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
- Modifier dns - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - 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 <-.¸¸.·´¯)