begin process at 2012 05 30 03:45:38
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Fichier / Disque

 > 

liste chainée et gestion de fichier


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

liste chainée et gestion de fichier

mardi 11 janvier 2005 à 09:56:53 | liste chainée et gestion de fichier

bleuerouge

 Bonjour ,j'ai un big probleme en c je voudrai faire une gestion de carnet d'adresse ou des contact (struture TContact) serais des maillons d'un liste (structure TFiche_contact) que l'on remplirais avec un gestyion de fichier voici une partie  code que j'ai deja fait:
[code]
typedef struct TContact
{
 char    Nom [20];
 char    Prenom [20];
 char    Adresse [50];
 int     Age;
 char    Telephone [15];
 char    Fonction [20];
 char    Mail [30];
 char    Date_de_naissance [20];
 struct TContact * ptsuivant;
}TContact;

// Structure des fiches de contact
typedef struct TFiche_contact
{
 struct TContact  *pt_tete;
    struct TFiche_contact *TFiche_suivante;
   
}TFiche_contact;

//Autres variables
FILE *fp;
char filename [256];
char new_fichier [20];

/////////////////////////////////////////////  FONCTIONS /////////////////////////////////////

//  *************** Gestion des contacts ***************

//Fonction qui trouve le dernier contact
TContact * Trouver_dernier_Contact (TFiche_contact * une_fiche)
{
 TContact *  pt_test=une_fiche->pt_tete;  // pointeur qui va tester le maillon
 
 if (pt_test!=NULL)        // renvoie NULL si vide
 // return NULL;
 {
 while (pt_test->ptsuivant!=NULL)
  pt_test=pt_test->ptsuivant;
 } 
 return pt_test; 
}

//Fonction qui trouve l'avant dernier contact
TContact* Trouver_avant_dernier_Contact (TFiche_contact * une_fiche)
{
 TContact *  pt_test;      // pointeur qui va parcourir la fiche
 TContact *  pt_test_qui_suit;    // pointeur qui suit derriere

 pt_test=une_fiche->pt_tete;
 pt_test_qui_suit=pt_test;

 if (pt_test==NULL)        // renvoie NULL si vide
  return NULL;
 
 while (pt_test->ptsuivant!=NULL)
  {
   pt_test_qui_suit=pt_test;
   pt_test=pt_test->ptsuivant;
  }
 return pt_test_qui_suit; 
}


void Ajouter_contact_dans_fiche(TContact * nvelle_fiche_a_ajouter,TFiche_contact * une_fiche )  //Fonction qui permet d'ajouter un contact
{

 TContact * dernier_contact_de_fiche;
   
 /*dernier_contact_de_fiche=Trouver_dernier_Contact (une_fiche);

 dernier_contact_de_fiche->ptsuivant=nvelle_fiche_a_ajouter;
 nvelle_fiche_a_ajouter->ptsuivant=NULL;*/
 
 if (une_fiche->pt_tete==NULL)
  une_fiche->pt_tete=nvelle_fiche_a_ajouter;
 else
  {
  dernier_contact_de_fiche=Trouver_dernier_Contact (une_fiche);
  dernier_contact_de_fiche->ptsuivant=nvelle_fiche_a_ajouter;
  }

 
}

//Fonction qui permet d'enlever un contact
void Enlever_Contact_dans_fiche (TFiche_contact * une_fiche)
{
 if (une_fiche->pt_tete!=NULL)         // Si une fiche n'est pas vide
 {
  TContact * pt_dernier=Trouver_dernier_Contact(une_fiche); // Pointeur sur dernier contact de la fiche
 
  if (pt_dernier==une_fiche->pt_tete)
  {
   une_fiche->pt_tete=NULL;        // Un seul contact dans la liste
  }
  else
  {
   TContact * pt_avant_dernier=Trouver_avant_dernier_Contact (une_fiche);
   pt_avant_dernier->ptsuivant=NULL;      // Pointeur sur l'avant dernier contact de la liste
  }
 }
}

//Fonction qui permet d'afficher les contacts
void Afficher_fiche(TFiche_contact * une_fiche)
{
 TContact * contact=une_fiche->pt_tete;       // Contact parcourant la fiche
 int num_enregistrement=0;          // numero d'enregistrement

 while (contact !=NULL)
 {
  printf("\n Enregitrement %d \n\n",num_enregistrement);
  printf("\nNom: %s \n",contact->Nom);
  printf("\nPrenom: %s \n",contact->Prenom);
  printf("\nAge: %d \n",contact->Age);
  printf("\nAdresse: %s \n",contact->Adresse);
  printf("\nTelelphone: %s \n",contact->Telephone);
  printf("\nFonction: %s \n",contact->Fonction);
  printf("\nMail: %s \n",contact->Mail);
 }

 printf("\n\nFin de la fiche\n");
}


//  *************** Gestion des fiches ***************


int Creer_fichier (char nom_du_fichier[])       //Fonction qui permet de créer une fiche
{
 FILE *fp;              // Pointeur de file

 strcat(nom_du_fichier ,".eca");
    fp=fopen(nom_du_fichier,"w");
           

 if (fp==NULL)
 {
  printf("\n\b Impossible de creer nouvelle fiche\n");
  return 0;
 }
 
 else

 {
  printf("\nFichier %s cree",nom_du_fichier);
     fprintf(fp,"eca 1");
  fclose(fp);
        system("\n\npause");
  return 1;
 }
}


//Fonction qui permet d'ouvrir un fichier
int Ouvrir_fichier (char nom_du_fichier[] , TFiche_contact * une_fiche)
{

 FILE *fp;          // Pointeur du fichier courrant
 char test[15];
 int c;
 TContact* nouvelle_fiche;

 strcat(nom_du_fichier ,".eca");     // Ajoute l'extention au nom de la fiche
 fp = (fopen(nom_du_fichier ,"r"));
  
 if( fp== NULL)          // Retourne NULL si existe pas
 {
  printf("\a\nFichier introuvable\n");
  return 0;
 }
 
 fgets (test,6,fp);
 
 if (strcmp(test,"eca 1"))
    {
        printf("\a\nFichier non valide");
        fclose(fp);
        return 0;
    }


 while (!feof(fp))
 {
  nouvelle_fiche=((TContact*)malloc(sizeof(TContact)));
  nouvelle_fiche->ptsuivant= NULL;

  /*fgets (nouvelle_fiche->Nom, sizeof(buffer), fp);
        fgets (nouvelle_fiche->Prenom, sizeof(buffer), fp);
        fgets (nouvelle_fiche->Adresse, sizeof(buffer), fp);
        fgets (nouvelle_fiche->Age, sizeof(buffer), fp);
        fgets (nouvelle_fiche->Telephone, sizeof(buffer), fp);
        fgets (nouvelle_fiche->Fonction, sizeof(buffer), fp);
  */
  
  fscanf(fp,"%s %s %s %i %s %s %s %s ",
   nouvelle_fiche->Nom,
   nouvelle_fiche->Prenom,
   nouvelle_fiche->Adresse,
   nouvelle_fiche->Age,
   nouvelle_fiche->Telephone,
   nouvelle_fiche->Fonction,
   nouvelle_fiche->Mail,
   nouvelle_fiche->Date_de_naissance);
  
   Ajouter_contact_dans_fiche(nouvelle_fiche,une_fiche);

 }

 fclose (fp);

return 1;

}
[/code]
Hors ma liste chaionée ne marche âs ,a partir du moment que j'utilise ouvrir fichier ,j'ai un acces violation au niveau de la fonction trouver_dernier_contact ()
Apres je n'arrive plus a m'y retrouver et je n'ai plus beaucoup de temps est ce que quelqu'un pourrait m'aider a comprendre mes erruer
mille merci d'avance

jeudi 13 janvier 2005 à 14:07:34 | Re : liste chainée et gestion de fichier

meech

Membre Club

Salut,

Peux-tu faire tourner un zip avec l'ensemble de ton code source (fonction main, exemple de fichiers de contacts, etc.) <
fx.michaud@laposte.net> ?
Et pour tester dans des conditions réelles, c'est en ANSI C sous Linux ?

En espérant t'aider,
Ciao.



Cette discussion est classée dans : test, fiche, pt, fp, contact


Répondre à ce message

Sujets en rapport avec ce message

Retour a la ligne dans un FPUTS() [ par pyr0123 ] Bonjour, J'ai un probleme, j'écris dans un fichier une chaine de caractere :   <b class="s1" style="font-f Problème avec fwrite [ par riep ] bonjour j'ai un petit problème avec fwrite, en fait je voudrais tout simplement recopier les données d'un fichier 1 dans un fichier 2 seulement si ces probleme de recherche dans un fichier [ par jekburn ] // Bonsoir, mon programme est un repertoire téléphonique, on peut rentré un nom et // un n° de tél.// les données s'incrivent bien dans le fichier, ma probleme d'erreur dans un programme [ par jekburn ] Bonjour,Mon programme qui est un répertoire téléphonique, avec recherche de fiche par "nom"comet une erreur, mais je ne sais pas d'ou elle viensMerci erreur [ par jekburn ] Bonjour, mon programme refuse de fonctionné, il commet une erreur mémoireMerci pour votre aide#include #include #include struct enreg{ char nom[30];& erreur d'application............please.help........... [ par jekburn ] #include #include #include struct enreg{ char nom[30]; char tel[10];}fiche; creation(){ clrscr(); FILE *fd; fd=fopen("fichier.dat"," Test de mon logiciel [ par Marceleeuuh ] Salut à tous Bon voila cette année j'avais un projet universitaire à réaliser en groupe. On a donc décidé de réaliser un lecteur de musique sous linu Utiliser une structure c++ dans _asm{} ? [ par Zootella ] Hello, Voilà j'esseye d'utiliser une structure faite en c++ dans _asm{} : struct test {     char * a;     char * b; } test p; p.a = "test1"; p.b = Fonction qui test la validité d'une adresse Email [ par Cedced41 ] Bonjour,J'utilise Visual C++ (Embedded) et je voudrais savoir si quelqu'un a une fonction toute faite qui teste une adresse email passée en paramêtre. charger un fichier sans indiquer le chemin complet ? [ par Batman60 ] salutcomment faire pour accéder à un fichier sans mentionner le chemin complet?le but c'est de pouvoir placer l'exe qui contient ce code n'importe ou


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,250 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales