Supprimer une ligne d'un fichier en C
Résolu/Fermé
moi411
Messages postés
179
Date d'inscription
samedi 22 novembre 2003
Statut
Membre
Dernière intervention
25 juin 2017
-
18 mai 2005 à 19:02
moi411 - 23 mai 2005 à 22:25
moi411 - 23 mai 2005 à 22:25
A voir également:
- Supprimer un element d'un fichier en c
- Comment ouvrir un fichier epub ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Impossible de supprimer un fichier - Guide
- Fichier rar - Guide
- Ouvrir un fichier .bin - Guide
6 réponses
Salut,
Ca y est j'ai une solution, mon prof m'a aidé à corriger mon code, je le mets donc au cas ou ça aiderait qqun d'autre.
Cette solution n'est évidemment pas la meilleur mais c'est la plus simple à comprendre (enfin je trouve).
Bref, c'est une solution!!!
Le code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
FILE*fichier;
typedef struct
{
char nom[30];
char prenom[30];
float monttant;
}tcompte;
//prototype de la fonction encode-----------------------------------------------
int encode(tcompte *c, char *tab1, char *tab2, float valeur);
//------------------------------------------------------------------------------
//prototype de la fonction eff--------------------------------------------------
int eff(tcompte *c, char *tab1, char *tab2);
//------------------------------------------------------------------------------
//prototype de la fonction modifier---------------------------------------------
int mod(tcompte *c, char *tab1, char *tab2, float valeur);
//------------------------------------------------------------------------------
//prototype de la fonction afficher---------------------------------------------
int aff(tcompte *c);
//------------------------------------------------------------------------------
//prototype de la fonction password---------------------------------------------
//int password(char *tab1, char *tab2);
void main()
{
tcompte c;
float m; /*monttant*/
char choix; /*différentes options*/
char n[30]; /*nom*/
char p[30]; /*prénom*/
system("cls");
printf("\n\t\tMENU\n\n");
printf("\te.Encoder un compte\n");
printf("\ts.Supprimer un compte\n");
printf("\tm.Modifier un compte\n");
printf("\ta.Afficher les comptes\n");
printf("\tq.Quitter le programme\n");
do
{
printf("\n\n\nFaites votre choix: ");
fflush(stdin);
choix=getch();
switch (choix)
{
//ajouter un compte
case 'e': printf("\n\n\n\tEntrez le nom du client: ");
scanf("%s",n); //erreur &n
printf("\tEntrez le prenom du client: ");
scanf("%s",p); //erreur &p
printf("\tEntrez le montant restant a payer: ");
scanf("%f",&m);
if(encode(&c,n,p,m)==0)
{
printf("\n\n\tOn ne peut plus encoder!!!\n\n\n");
}
else
{
printf("\n\n\tLe compte est bien encode\n\n\n");
}
break;
//effacer un compte
case 's': printf("\n\n\n\tEntrez le nom du client a effacer: ");
scanf("%s",n); //erreur
printf("\tEntrez le prenom du client a effacer: ");
scanf("%s",p); //erreur
if(eff(&c,n,p)==0)
{
printf("\n\n\tLe fichier n'exiqte pas!!!\n\n",p,n);
}
else
{
printf("\n\n\tLe compte de %s %s est bien efface.\n\n",p,n);
}
break;
//modifier un compte
case 'm': printf("\n\n\tEntrez le nom du client a modifier: ");
scanf("%s",&n);
printf("\tEntrez le prenom du client a modifier: ");
scanf("%s",&p);
printf("\n\nEntrez la somme paye: ");
scanf("%f",&m);
switch(mod(&c,n,p,m))
{
case 0: printf("\n\n\tLe fichier n'a pu etre ouvert!!!\n\n");
break;
case 1: printf("\n\n\tLa somme a payer est trop grande\n\n");
break;
case 2: printf("\n\n\tLe compte est modifie\n");
break;
case 3: printf("\n\n\tIl n'y a pas de compte a ce nom!!!\n\n");
}
break;
//afficher les comptes
case 'a' if(aff(&c)==0)
{
printf("\n\n\tIl n'y a aucun compte!!!\n\n");
}
else
{
printf("\tVoici le(s) compte(s)\n\n");
}
break;
case 'q':
break;
}
}
while(choix!='q');
}
//fonction encode---------------------------------------------------------------
int encode(tcompte *c, char *tab1, char *tab2, float valeur)
{
fichier=fopen("C:\\fichier.txt","a");
if(fichier==NULL)
{
return 0;
}
else
{
strcpy(c->nom,tab1);
strcpy(c->prenom,tab2);
c->monttant=valeur;
fprintf(fichier,"%-20s%-20s%-10f\n",c->prenom,c->nom,c->monttant);
fclose(fichier);
}
return 1;
}
//------------------------------------------------------------------------------
//fonction effacer--------------------------------------------------------------
int eff(tcompte *c, char *tab1, char *tab2)
{
int pos=0;
int trouve=0;
fichier=fopen("c:\\fichier.txt","r+");
if(fichier==NULL) //Si le fichier n'existe pas, on retourne une erreur
{
return 0;
}
rewind(fichier); //On se place au début du fichier
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
if(strcmp(c->nom,tab1)==0 && strcmp(c->prenom,tab2)==0)
{
trouve=1;
break;
}
pos++;
}
if (trouve == 0) return 0;
printf("fiche trouvée\n");
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
fseek(fichier,pos*52,SEEK_SET);
fprintf(fichier,"%-20s%-20s%-10f",c->prenom,c->nom,c->monttant);
pos++;
fseek(fichier,(pos+1)*52,SEEK_SET);
}
fseek(fichier,pos*52,SEEK_SET);
fprintf(fichier,"%c",26);
fclose(fichier);
return 1;
}
//------------------------------------------------------------------------------
//fonction modifier-------------------------------------------------------------
int mod(tcompte *c, char *tab1, char *tab2, float valeur)
{
fichier=fopen("c:\\fichier.txt","r+"); //On ouvre en lecture+écriture
rewind(fichier); //On se place au début du fichier
if(fichier==NULL) //Si le fichier est vide, on retourne une erreur
{
return 0;
}
while(!feof(fichier))
{
fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant); //On lit les données
if(strcmp(c->nom,tab1)==0 && strcmp(c->prenom,tab2)==0)
{
if(valeur>c->monttant)
{
return 1; //La somme paye est trop grande
}
c->monttant=c->monttant-valeur;
printf("\tIl reste %f euros a payer a %s %s.\n\n",c->monttant,c->prenom,c->nom);
fseek(fichier,-52,SEEK_CUR);
fprintf(fichier,"%-20s%-20s%-10f\n",c->prenom,c->nom,c->monttant);
fclose(fichier);
return 2;
}
}
if(feof(fichier)!=0)
{
fclose(fichier);
return 3; //Si le compte n'existe pas on renvoie une erreur
}
return 0;
}
//------------------------------------------------------------------------------
//fonction afficher-------------------------------------------------------------
int aff(tcompte *c)
{
fichier=fopen("c:\\fichier.txt","r");
if(fichier==NULL) //Si le fichier est vide, on retourne une erreur
{
return 0;
}
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
c->nom[20]='\0';
c->prenom[20]='\0';
printf("\n\n\tPrenom: %s\n",c->prenom);
printf("\tNom: %s\n",c->nom);
printf("\tDette: %f\n\n",c->monttant);
}
fclose(fichier);
return 1;
}
//------------------------------------------------------------------------------
Ca y est j'ai une solution, mon prof m'a aidé à corriger mon code, je le mets donc au cas ou ça aiderait qqun d'autre.
Cette solution n'est évidemment pas la meilleur mais c'est la plus simple à comprendre (enfin je trouve).
Bref, c'est une solution!!!
Le code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
FILE*fichier;
typedef struct
{
char nom[30];
char prenom[30];
float monttant;
}tcompte;
//prototype de la fonction encode-----------------------------------------------
int encode(tcompte *c, char *tab1, char *tab2, float valeur);
//------------------------------------------------------------------------------
//prototype de la fonction eff--------------------------------------------------
int eff(tcompte *c, char *tab1, char *tab2);
//------------------------------------------------------------------------------
//prototype de la fonction modifier---------------------------------------------
int mod(tcompte *c, char *tab1, char *tab2, float valeur);
//------------------------------------------------------------------------------
//prototype de la fonction afficher---------------------------------------------
int aff(tcompte *c);
//------------------------------------------------------------------------------
//prototype de la fonction password---------------------------------------------
//int password(char *tab1, char *tab2);
void main()
{
tcompte c;
float m; /*monttant*/
char choix; /*différentes options*/
char n[30]; /*nom*/
char p[30]; /*prénom*/
system("cls");
printf("\n\t\tMENU\n\n");
printf("\te.Encoder un compte\n");
printf("\ts.Supprimer un compte\n");
printf("\tm.Modifier un compte\n");
printf("\ta.Afficher les comptes\n");
printf("\tq.Quitter le programme\n");
do
{
printf("\n\n\nFaites votre choix: ");
fflush(stdin);
choix=getch();
switch (choix)
{
//ajouter un compte
case 'e': printf("\n\n\n\tEntrez le nom du client: ");
scanf("%s",n); //erreur &n
printf("\tEntrez le prenom du client: ");
scanf("%s",p); //erreur &p
printf("\tEntrez le montant restant a payer: ");
scanf("%f",&m);
if(encode(&c,n,p,m)==0)
{
printf("\n\n\tOn ne peut plus encoder!!!\n\n\n");
}
else
{
printf("\n\n\tLe compte est bien encode\n\n\n");
}
break;
//effacer un compte
case 's': printf("\n\n\n\tEntrez le nom du client a effacer: ");
scanf("%s",n); //erreur
printf("\tEntrez le prenom du client a effacer: ");
scanf("%s",p); //erreur
if(eff(&c,n,p)==0)
{
printf("\n\n\tLe fichier n'exiqte pas!!!\n\n",p,n);
}
else
{
printf("\n\n\tLe compte de %s %s est bien efface.\n\n",p,n);
}
break;
//modifier un compte
case 'm': printf("\n\n\tEntrez le nom du client a modifier: ");
scanf("%s",&n);
printf("\tEntrez le prenom du client a modifier: ");
scanf("%s",&p);
printf("\n\nEntrez la somme paye: ");
scanf("%f",&m);
switch(mod(&c,n,p,m))
{
case 0: printf("\n\n\tLe fichier n'a pu etre ouvert!!!\n\n");
break;
case 1: printf("\n\n\tLa somme a payer est trop grande\n\n");
break;
case 2: printf("\n\n\tLe compte est modifie\n");
break;
case 3: printf("\n\n\tIl n'y a pas de compte a ce nom!!!\n\n");
}
break;
//afficher les comptes
case 'a' if(aff(&c)==0)
{
printf("\n\n\tIl n'y a aucun compte!!!\n\n");
}
else
{
printf("\tVoici le(s) compte(s)\n\n");
}
break;
case 'q':
break;
}
}
while(choix!='q');
}
//fonction encode---------------------------------------------------------------
int encode(tcompte *c, char *tab1, char *tab2, float valeur)
{
fichier=fopen("C:\\fichier.txt","a");
if(fichier==NULL)
{
return 0;
}
else
{
strcpy(c->nom,tab1);
strcpy(c->prenom,tab2);
c->monttant=valeur;
fprintf(fichier,"%-20s%-20s%-10f\n",c->prenom,c->nom,c->monttant);
fclose(fichier);
}
return 1;
}
//------------------------------------------------------------------------------
//fonction effacer--------------------------------------------------------------
int eff(tcompte *c, char *tab1, char *tab2)
{
int pos=0;
int trouve=0;
fichier=fopen("c:\\fichier.txt","r+");
if(fichier==NULL) //Si le fichier n'existe pas, on retourne une erreur
{
return 0;
}
rewind(fichier); //On se place au début du fichier
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
if(strcmp(c->nom,tab1)==0 && strcmp(c->prenom,tab2)==0)
{
trouve=1;
break;
}
pos++;
}
if (trouve == 0) return 0;
printf("fiche trouvée\n");
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
fseek(fichier,pos*52,SEEK_SET);
fprintf(fichier,"%-20s%-20s%-10f",c->prenom,c->nom,c->monttant);
pos++;
fseek(fichier,(pos+1)*52,SEEK_SET);
}
fseek(fichier,pos*52,SEEK_SET);
fprintf(fichier,"%c",26);
fclose(fichier);
return 1;
}
//------------------------------------------------------------------------------
//fonction modifier-------------------------------------------------------------
int mod(tcompte *c, char *tab1, char *tab2, float valeur)
{
fichier=fopen("c:\\fichier.txt","r+"); //On ouvre en lecture+écriture
rewind(fichier); //On se place au début du fichier
if(fichier==NULL) //Si le fichier est vide, on retourne une erreur
{
return 0;
}
while(!feof(fichier))
{
fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant); //On lit les données
if(strcmp(c->nom,tab1)==0 && strcmp(c->prenom,tab2)==0)
{
if(valeur>c->monttant)
{
return 1; //La somme paye est trop grande
}
c->monttant=c->monttant-valeur;
printf("\tIl reste %f euros a payer a %s %s.\n\n",c->monttant,c->prenom,c->nom);
fseek(fichier,-52,SEEK_CUR);
fprintf(fichier,"%-20s%-20s%-10f\n",c->prenom,c->nom,c->monttant);
fclose(fichier);
return 2;
}
}
if(feof(fichier)!=0)
{
fclose(fichier);
return 3; //Si le compte n'existe pas on renvoie une erreur
}
return 0;
}
//------------------------------------------------------------------------------
//fonction afficher-------------------------------------------------------------
int aff(tcompte *c)
{
fichier=fopen("c:\\fichier.txt","r");
if(fichier==NULL) //Si le fichier est vide, on retourne une erreur
{
return 0;
}
while(fscanf(fichier,"%[^ ] %[^ ] %f\n",c->prenom,c->nom,&c->monttant)!=EOF)
{
c->nom[20]='\0';
c->prenom[20]='\0';
printf("\n\n\tPrenom: %s\n",c->prenom);
printf("\tNom: %s\n",c->nom);
printf("\tDette: %f\n\n",c->monttant);
}
fclose(fichier);
return 1;
}
//------------------------------------------------------------------------------