papilex | bonjour ou bonsoir. jai un mini projet gestion personel en c avec une liste chainé que je doit sauvegardé dans un fichier jai fini les fonction nécéssaire et la liste saffiche normalement mais le problem cest lecriture dans le fichier jy arrive pas merci davance pour votre aide.... Code :
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <ctype.h>
- typedef struct date {
- int j;
- int m;
- int a;
- }date;
- typedef struct personne
- {
- char prenom[20];
- char nom[20];
- char sexe;
- date d;
- int nbrenfant;
- char identifiant[5];
- personne *suiv ;
- personne *precd;
- }personne;
- typedef personne *liste;
- FILE *ps;
- struct date saisidate(){
- struct date d;
- do{
- printf("donnez l'annee \n " );
- scanf("%d",&d.a);
- }while(d.a<1915||d.a>2018);
- do{
- printf(" donnez le mois " );
- scanf("%d",&d.m);
- }while(d.m<0||d.m>12);
- switch(d.m){
- case 1:
- case 3:
- case 5:
- case 7:
- case 8:
- case 10 :
- case 12:
- do{
- printf(" donner le jours \n" );
- scanf("%d",&d.j);
- }while(d.j<0||d.j>31);
- break;
- case 4:
- case 6:
- case 9:
- case 11:
- do{
- printf("donnez le jour \n " );
- scanf("%d",&d.j);
- }while(d.j<0||d.j>30);
- break;
- case 2:
- if((d.a%4==0)&&(d.a%100==0)){
- do{
- printf("donner le jour:" );
- scanf("%d",&d.j);
- }while(d.j<=0||d.j>29);break;
- }else
- {
- do{
- printf("donner le jour:" );
- scanf("%d",&d.j);
- }while(d.j<=0||d.j>28);break;
- }
- }
- return(d);
- }
- personne*alloue(){
- personne*pers=(personne*)malloc(sizeof(personne));
- pers->suiv=NULL;
- return(pers);
- }
- void ajoutez(liste tete,personne*p)
- {
- if(tete==NULL)
- {
- tete=p;
- }
- else
- {
- p->suiv=tete;
- tete=p;
- }
- }
- liste charge(FILE*ps)
- {
- liste l=NULL;
- personne *p;
- ps=fopen("ps.txt","a" );
- if (ps==NULL)
- {
- printf("le fichier es vide\n" );
- }
- while(!feof(ps))
- {
- p=alloue();
- fscanf(ps,"%s,%s,%c,%d,%d,%,%d,%s",p->prenom,p->nom,p->sexe,&p->d.j,&p->d.m,&p->d.a,p->nbrenfant,p->identifiant);
- ajoutez(l,p);
-
- }
- fclose(ps);
- return l;
- }
- liste ajouter(liste l)
- {
- personne *p=alloue();
- printf("donner le prenom:" );
- scanf("%s",p->prenom);
- printf("donner le nom:" );
- scanf("%s",p->nom);
- printf("donner le sexe" );
- scanf("%s",&p->sexe);
- printf("donner le nombre denfant:" );
- scanf("%d",&p->nbrenfant);
- printf("donner lidentifiant:" );
- scanf("%s",p->identifiant);
- printf("\n" );
- p->d=saisidate();
- ajoutez(l,p);
- }
- void afficher(personne *p){
- printf("\n le nom %s \n prenom %s \n sexe %c \n date naissance %d %d %d \n nombre d enfant %d \n identifiant%s \n ",p->nom,p->prenom,p->sexe,p->d.j,p->d.m,p->d.a,p->nbrenfant,p->identifiant);
- }
- void afficherliste(liste l){
- liste p;
- p=l;
- if(p==NULL){
- printf(" la liste es vide \n " );
- }
- while(p!=NULL){
- afficher(p);
- p=p->suiv;
- }
- }
- bool recherche(liste l ,personne *precd ,personne *p ,char nom[20]){
- precd=NULL;
- p=l;
- if(p==NULL){
- printf(" la liste vide \n " );
- }
- while((p!=NULL)&&(strcmp(nom,p->nom)!=0))
- {
- precd=p;
- p=p->suiv;
- }
- if(strcmp(nom,p->nom)==0){return(true);
- }else return false;
- }
- void modifier_nbrdenfant(liste l, char prenom[20]){
- personne*p,*precd;
- if(recherche(l,precd,p,prenom)==true){
- printf(" donnez le nouveax nombre d enfant" );
- scanf("%d",&p->nbrenfant);
- }
- }
- int affichez_nbrenfant(liste l,char prenom[20])
- {
- personne *p,*precd;
- if(recherche(l,precd,p,prenom)==true)
- {
- return(p->nbrenfant);
- }
- else
- {
- printf("cette personne nexist pas" );
- }
- }
- liste supprimer(liste l,char prenom[20]){
- personne *p,*precd;
- if( recherche(l,precd,p,prenom)==true){
- if(precd==NULL){
- l=l->suiv;
- free(p);
- printf("supprimer avec succe\n " );
- return(l);
- }else{
- precd->suiv=p->suiv;
- free(p);
- }
- }else{
- printf("cette perssone nexiste pas" );
- }
- }
- char prenom(liste l ,char prenom[20]){
- personne *p,*precd;
- if( recherche(l,precd,p,prenom)==true){return(p->nom[20]);}}
- int age(liste l,char prenom[20],int n)
- {
- personne *p,*precd;
- if(recherche(l,precd,p,prenom)==true)
- {
- return(n-p->d.a);
- }
- else
- {
- printf("cette personne nexist pas" );
- }
- }
- /*void ercirefichier(liste l,FILE*F)
- {
- personne *p;
- FILE *ps=fopen("ps.txt ","w+" );
-
- if(feof(ps)){
- printf("erreur " );}
- p=l;
- while(p!=NULL){
- fprintf(ps,"%s,%s,%c,%s,%d,%d,%d,%d,%s",p->prenom,p->nom,p->sexe,p->d.j,p->d.m,p->d.a,p->nbrenfant,p->identifiant);
- p=p->suiv;
-
- }
- fclose(ps);
-
- }*/
- void erciredansfichier(personne *p)
- {
- FILE *ps;
- ps=fopen("ps.txt","w" );
- if(ps!=NULL)
- {
- personne *suiv=NULL;
- personne *precd=NULL;
- while(p!=NULL)
- {
- fseek(ps,0,SEEK_END);
- fwrite(p,sizeof(personne),1,ps);
- printf("writing:%s to file\n",p->nom);
- p=p->suiv;
- }
- suiv=NULL;
- precd=NULL;
- }
- else
- {
- printf("erreur lors de louverture du fichier" );
- }
- }
- void quitter()
- {
- exit(0);
- }
- int main()
- {
- FILE* ps;
- personne p,*precd;
- liste l;
- int i,n;
- l=ajouter(l);
- afficherliste(l);
- erciredansfichier(l);
- return(0);
- }
|
Message édité par Harkonnen le 29-05-2018 à 09:21:18
|