bleuerouge
Messages postés12Date d'inscriptionjeudi 7 janvier 2010StatutMembreDernière intervention 1 décembre 2014
-
11 janv. 2005 à 09:56
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007
-
13 janv. 2005 à 14:07
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:
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;
}
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
meech
Messages postés209Date d'inscriptionvendredi 11 avril 2003StatutMembreDernière intervention14 août 2007 13 janv. 2005 à 14:07
Salut,
Peux-tu faire tourner un zip avec l'ensemble de ton code source (fonction main, exemple de fichiers de contacts, etc.) <[mailto:fx.michaud@laposte.net fx.michaud@laposte.net]> ?
Et pour tester dans des conditions réelles, c'est en ANSI C sous Linux ?