Pbs structure en liste chainée et manip de fichier - C - Programmation
Marsh Posté le 06-01-2005 à 15:11:29
oula toi tu ne serais pas en cours de TP info a l ESIGELEC ?
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
Marsh Posté le 06-01-2005 à 18:26:25
Mkracing66 a écrit : au fait c quoi reellement ta question ? warning sur quel element ? |
|
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(¤t_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 !!!