Pbs structure en liste chainée et manip de fichier

Pbs structure en liste chainée et manip de fichier - C - Programmation

Marsh Posté le 06-01-2005 à 15:05:24    

Bonjour a tous ,
voila ,je voudrais faire un programme carnet d'adresse qui gere des entrées dans des fichier et qui permet de les manipuler.
Pour cela ,j'utilise les listes chainées ,mais voila ,je n'arrive pas a mes fin car je n'est pas encore tres bien saisie la facon de les gerer.
 
Ce code
<code>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
 
// Declaration des constantes
 
 
#define CLS system("cls" ); // efface l'ecran (equiv. basic)
 
 
//    *** Déclaration des variables globales ***
 
 
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 contenants chaques contacts
 
 
typedef struct TFiche_contact
{
 char Nom_de_la_fiche [20];
 struct TContact *pt_tete;
    struct Tcontact *fiche_suivante;
}TFiche_contact; // Structure englobant les fiches
 
FILE *fp=NULL;
 
 
 
// Déclaration des fonctions
 
 
 
int affiche_mnu_principale(void);
 
int affiche_mnu_contact(void);
 
/*void creer_contact(TContact *une_fiche);
 
void Ajouter_fiche (TFiche_contact, TFiche_contact);
 
TFiche_contact* trouver_derniere_fiche (TFiche_contact);
 
TFiche_contact* creer_fichier (TFiche_contact, TFiche_contact);
 
void Ouvrir_fichier (FILE , char[] );
*/
 
 
// definition des fonctions
 
 
 
TFiche_contact* trouver_derniere_fiche (TFiche_contact *une_fiche)
{
     TFiche_contact *derniere_fiche;
     derniere_fiche=une_fiche->pt_tete;
 
     if (derniere_fiche!=NULL)
     {
        while (derniere_fiche->fiche_suivante!=NULL)
              {derniere_fiche=derniere_fiche->fiche_suivante;}
     }
     return derniere_fiche;
}
 
 
 
// Une fois la derniere fiche repéré, on peut en ajouter une nouvel grace a cette fonction :
 
 
 
TFiche_contact* creer_fichier (TFiche_contact *une_fiche, TFiche_contact *a_ajouter)
{
     TFiche_contact *derniere_fiche;
     derniere_fiche=trouver_derniere_fiche(une_fiche);
 
     //On alloue un espace mémoire a la nouvelle fiche.
 
     derniere_fiche->fiche_suivante=a_ajouter;
     a_ajouter = (TFiche_contact*) malloc(sizeof(TFiche_contact));
     a_ajouter->fiche_suivante=NULL;
 
     /*TFiche_contact p=((TFiche_contact*)*malloc(sizeof(TFiche_contact));
     p->fiche_suivante=NULL;   */
 
     return a_ajouter;
}
 
 
 
// Ouvrir un fichier de liste de contacts
 
void Ajouter_fiche (TFiche_contact *une_fiche, TFiche_contact *a_ajouter)
{
     TFiche_contact *derniere_fiche;
     derniere_fiche=trouver_derniere_fiche(une_fiche);
 
     derniere_fiche->fiche_suivante=a_ajouter;
     a_ajouter->fiche_suivante=NULL;
}
 
 
void Ouvrir_fichier (FILE *fp , char  nom_lcontact[20])
{
TFiche_contact current_fiche;
 
//ouverture du fichier
fp = fopen( nom_lcontact, "r+" );
 
//si le fichier n'existe pas, message d'erreur
if (fp == NULL)
 {
 printf("Fichier %s ouvert\n", nom_lcontact);
 printf("\nERREUR : fichier inexistant ou nom du fichier incorrect" );
 system("pause" );
  }
 
else
 printf("Fichier %s ouvert lecture en cours", nom_lcontact);
 while(!feof(fp))
 {
  TContact nouvelle_fiche; // crée nouveaux maillon (fiche)
 
  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); // Lecture du Fichier  
   
  Ajouter_fiche(&current_fiche,&nouvelle_fiche); // Ajoute maillon (fiche) a la liste (tfiche contact)
 
 }
 
 fclose(fp);// Ferme le fichier
 
}
 
 
 
TFiche_contact *create_fiche (void)
{
      TFiche_contact *p=(TFiche_contact*) malloc(sizeof(TFiche_contact));
      p->fiche_suivante=NULL;
      return p;
}
 
// ***********  Programme principale
 
int main( int argc,char *argv[])
{
struct TContact nouvelle_fiche;
static int choix;
 
 
 
// gestion des parametres passé en ligne de commande
 
 
 
if (argc>1)
{
 int temp;
 for (temp=1;temp<argc;temp++)
 {
  if (!strcmp(argv[temp],"/?" ))
  {
   printf("\nGestion de Carnet d'adresse" );
   printf("\n(C) Cyrille - Jacqouille - Mickaïl 2005" );
   printf("\n\nSyntax : Carnet_adresse [nom de la fiche] </?>" );
   printf("\n\n nom de la fiche : nom de la fiche a ouvrir\n" );
  }
  else printf("\nJ'ouvre le fichier appellee %s\n",argv[temp]);
 }
exit(0);
}
 
 
do
{  
    char nom_lcontact[20];
 choix=affiche_mnu_principale();
 
 switch (choix)
        {
 case 1:
    // demande a l'utilisateur de saisir le nom fichier a créer
 
       creer_contact(&nouvelle_fiche);
 
       break;
 case 2:
      //demande a l'utilisateur de saisir le nom du fichier a ouvrir
      printf("Entrez le nom du fichier a ouvrir :  " );
      scanf("%s", nom_lcontact);
      Ouvrir_fichier (fp , nom_lcontact );
  break;
 case 3:
  // todo suppression d'un fichier de contact
  break;
 case 4:
  // ajout d'un contact a une lite
 break;
 case 5:
  // ajout de
 break;
 case 6:
  exit(0);
 break;
 }
} while (choix!=6);
 
return 0; // ok terminaison normal du programme
 
 
 
// affiche_mnu_contact();
 
 
 
}
 
int affiche_mnu_principale(void)
{
int choix;
 
 CLS;
 printf("\n     ************************************************* \n" );
 printf("    *                                                * \n" );
 printf("   *   Agenda Electronique : Menu principal         * \n" );
 printf("    *                                                * \n" );
 printf("      ************************************************  \n" );
 printf("     \n \n         Vous pouvez: \n" );
 printf("              1-Créer un fichier de contact\n" );
 printf("              2-Ouvrir un fichier de contact\n" );
 printf("              3-Modifier un fichier de contact\n" );
 printf("              4-Suprimmer un fichier de contact\n" );
 printf("              5-Ajouter un contact a une liste\n" );
 printf("              6-Quitter le programme\n" );
 printf("\n                         Votre choix : " );
 
do
{
 scanf("%i",&choix);
}
     while (
   (choix != 1)
   && (choix != 2)
   && (choix != 3)
   && (choix != 4)
   && (choix != 5)
   && (choix != 6)
      );
 
return choix;
}
 
int affiche_mnu_contact(void)
{
int choix;
 
CLS;
 printf("\n     ************************************************* \n" );
 printf("    *                                                * \n" );
 printf("   *   Agenda Electronique : Gestion des contacts   * \n" );
 printf("    *                                                * \n" );
 printf("     *************************************************  \n" );
 printf("     \n \n         Vous pouvez: \n" );
 printf("              1-Créer un contact\n" );
 printf("              2-Lister les contacts\n" );
 printf("              3-Modifier un contact\n" );
 printf("              4-Suprimmer un contacts\n" );
 printf("              5-Trier les contacts\n" );
 printf("              6-Retourner au menu principale\n" );
 printf("              7-Rechercher un contact\n" );
 printf("\n                         Votre choix : " );
 
scanf("%d",&choix);
 
return choix;
 
}
 
void creer_contact(TContact * une_fiche)
{
CLS;
printf("                           CREATION DE CONTACT\n\n" );
printf("Nom :" );
scanf("%s",une_fiche->Nom);
printf("\nPrenom :" );
scanf("%s",une_fiche->Prenom);
printf("\nAdresse :" );
scanf("%s",une_fiche->Adresse);
printf("\nAge :" );
scanf("%d",&une_fiche->Age);
printf("\nTelephone :" );
scanf("%s",une_fiche->Telephone);
printf("Fonction :" );
scanf("%s",une_fiche->Fonction);
printf("\nMail :" );
scanf("%s",une_fiche->Mail);
printf("\nDate de naissance :" );
scanf("%s",une_fiche->Date_de_naissance);
}
 
</code>
 
J'arrive qu'a avoir plein de warning ,je traville avec un de mes potes et on n'arrive malheureusement pas a ce mettre daccord de la facon dont on doit gerrer le probleme.
Si quelqu'un pouvait nous eclairer ,merci d'avance !!!

Reply

Marsh Posté le 06-01-2005 à 15:05:24   

Reply

Marsh Posté le 06-01-2005 à 15:11:29    

oula toi tu ne serais pas en cours de TP info a l ESIGELEC ? :p

Reply

Marsh Posté le 06-01-2005 à 15:14:12    

au fait c quoi reellement ta question ? warning sur quel element ?  
au mieux on peut t aiguiller sur une partie de code qui bug, mais pas d expliquer tout le concept du TP :)

Reply

Marsh Posté le 06-01-2005 à 18:26:25    

Mkracing66 a écrit :

au fait c quoi reellement ta question ? warning sur quel element ?  
au mieux on peut t aiguiller sur une partie de code qui bug, mais pas d expliquer tout le concept du TP :)



gcc.exe -c main.c -o DCPP-OBJ/main.o -I"D:/DEV-CPP/include"  -W -Wall -O2 -ansi -DTEST    
 
main.c: In function `trouver_derniere_fiche':
main.c:70: warning: assignment from incompatible pointer type
main.c:76: warning: assignment from incompatible pointer type
main.c: In function `creer_fichier':
main.c:95: warning: assignment from incompatible pointer type
main.c: In function `Ajouter_fiche':
main.c:114: warning: assignment from incompatible pointer type
main.c: In function `Ouvrir_fichier':
main.c:148: warning: format argument is not a pointer (arg 6)
main.c:150: warning: passing arg 2 of `Ajouter_fiche' from incompatible pointer type
main.c: In function `main':
main.c:209: warning: implicit declaration of function `creer_contact'
main.c: At top level:
main.c:306: warning: type mismatch with previous implicit declaration
main.c:209: warning: previous implicit declaration of `creer_contact'
main.c:306: warning: `creer_contact' was previously implicitly declared to return `int'


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed