Modifier un fichier en C

Fermé
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 - 24 mars 2005 à 20:44
 Vivien - 6 avril 2005 à 23:48
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

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:

7 réponses

£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
25 mars 2005 à 20:56
personne sait ?-
(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
0
crush_104 Messages postés 526 Date d'inscription vendredi 21 janvier 2005 Statut Membre Dernière intervention 8 juin 2010 62
26 mars 2005 à 00:31
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
0
je pourrai jeter un coup d'oeil sur ta fonction ajouter_eleve() stp ?
0
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
6 avril 2005 à 21:28
salut, c'est pas la peine, j'ai resolu le probleme. Merci

(¯`·.¸¸.-> £udo <-.¸¸.·´¯)
0

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 ...
0
£udo Messages postés 455 Date d'inscription mardi 8 juin 2004 Statut Membre Dernière intervention 19 décembre 2006 16
6 avril 2005 à 22:41
voila comment j'ai fait avec mon nouveau prgramme, l'ancien etait a peu pres similaire

*******************************/
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 <-.¸¸.·´¯)
0
Je te remercie; c'est impeccable
Bonne soirée
0