Correction code C

nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010 - 24 oct. 2010 à 01:27
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 - 23 nov. 2010 à 21:42
Bonjour,

j'ai un code en C mais lors de la compilation/execution des erreurs s'affichent et je ne sais pas à quoi elles correspondent. Je suis débutant pouvez vous m'aider?

Le programme est censé gérer une bibliotheque (auteur, titre livre, lecteur etc.)

merci

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <dos.h>
#include <string.h>
#include <windows.h>

int main(int argc, char *argv[])
{

typedef struct
{
int jour;
int mois;
int annee;
}date;
typedef struct bib   /*creation du type bib*/
{
int isbn;
char titre[60];   /*declaration tableaux de caracteres pour titre,auteur avec 60 caracteres max*/    
char auteur[60];
char code[6];
float prix;
date day;
}bib;
int recherche(bib t[],int n,int x);   
void cadre(int dc,int fc,int dl,int fl,int c)
{
int i;
textcolor(c);
cprintf("É");
cprintf("È");
cprintf("»");
cprintf("&#188;");
cprintf("º");
cprintf("º");
cprintf("Í");
cprintf("Í");
}
void menu();
void remplissage(bib t[],int* n)
{
int j;float x;
int i1;
do
{

clrscr();
printf("bouquin numero %d",*n);
getch();
clrscr();
cadre(5,75,3,36,2);
puts("ISBN        :");
puts("TITRE       :");
puts("AUTEUR      :");
puts("EDITEUR     :");
puts("PRIX        :");
puts("DATE EDITION:");
clreol();scanf("%d",&t[*n].isbn);}while(recherche(t,*n,t[*n].isbn)!=0);
clreol();scanf("%s",t[*n].titre);}while(strlen(t[*n].titre)>20);fflush(stdin);
clreol();scanf("%s",t[*n].auteur);}while(strlen(t[*n].auteur)>20);fflush(stdin);
clreol();scanf("%s",t[*n].code);}while(strlen(t[*n].code)>20);fflush(stdin);
scanf("%f",&x);t[*n].prix=x;
clreol();scanf("%d%d%d",&t[*n].day.jour,&t[*n].day.mois,&t[*n].day.annee);}while(t[*n].day.jour<=0||t[*n].day.jour>31||t[*n].day.mois<=0||t[*n].day.mois>12);

printf("continuer(1/0)?");
scanf("%d",&j);
*n+=1;
}while(j!=0||*n>100);/*on suppose que notre gestionnaire ne peut supporter plus que 100 bouquins*/
menu();
}/*fin de gestion de remplissage*/

void tri_auteur(bib t[],int n)
{
int i,j;
bib x;

      for(i=0;i<n;i++)
      {
for(j=i+1;j<n;j++)
{
if(strcmp(t[i].auteur,t[j].auteur)>0)
{
x=t[i];
t[i]=t[j];
t[j]=x;
}
}
      }

}
void tri_annee(bib t[],int n)
{
int i,j;
bib x;


for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(t[i].day.annee>t[j].day.annee||t[i].day.annee%100!=0&&t[i].day.annee%400==100&&t[j].day.annee%100==0&&t[j].day.annee%400!=100)//on a ajouté au controle de l'annee le fait que si la premiere annee est ou non bisextille
{
x=t[i];
t[i]=t[j];
t[j]=x;
if(t[i].day.mois<t[j].day.mois)
{
                           x=t[i];
t[i]=t[j];
t[j]=x;
                    }                          
}

}
}


}

void aff1(bib t[],int *n)
{
int i;

clrscr();
tri_auteur(t,*n);
for(i=0;i<=*n;i++)
{
puts("ISBN          :");
puts("TITRE         :");
puts("AUTEUR        :");
puts("EDITEUR       :");
puts("PRIX          :");
puts("DATE D'EDITION:");
printf("%d",t[i].isbn);
puts(t[i].titre);
puts(t[i].auteur);
puts(t[i].code);
printf("%f",t[i].prix);
printf("%d/%d/%d",t[i].day.jour,t[i].day.mois,t[i].day.annee);
getch();
}


printf ("retour au menu principale dans 3sec!!");
delay(3000);
}
void aff2(bib t[],int *n)
{
    int i;

clrscr();
tri_annee(t,*n);
for(i=0;i<*n;i++)
{

puts("ISBN          :");
puts("TITRE         :");
puts("AUTEUR        :");
puts("EDITEUR       :");
puts("PRIX          :");
puts("DATE D'EDITION:");
printf("%d",t[i].isbn);
puts(t[i].titre);
puts(t[i].auteur);
puts(t[i].code);
printf("%f",t[i].prix);
printf("%d/%d/%d",t[i].day.jour,t[i].day.mois,t[i].day.annee);
getch();
}

printf("retour au menu principale dans 3sec!");
delay(3000);
}
int recherche2(bib t[],int n,int x);
int recherche(bib t[],int n,int x)
{
int i,j,find=0;
for(i=0;i<n;i++)
{
if(t[i].isbn==x){find=1;break;}
}
return find;
}

int recherche2(bib t[],int n,int x)
{
int i,j,find=0;
for(i=0;i<n;i++)
{
if(t[i].isbn==x){find=i;break;}
}
return find;

}

void add(bib t[],int *n)
{
remplissage(t,n);
menu();
}
void sup(bib t[],int *n,int num)
{

int i;
int find;
clrscr();
if(*n==0){clrscr();printf ("rien &#8230; supprimer");}
else
{
clrscr();
find=recherche2(t,*n,num);
if(find==0)
{clrscr();printf("element introuvable...impossible de supprimer");}
else
{
for(i=find;i<*n;i++)
t[i]=t[i+1];
*n=*n-1;
printf("&#8218;l&#8218;ment supprim&#8218; avec succŠs");
}
}
}
void modif(bib t[],int n,int x)
{

int i,found;float price;
found=recherche(t,n,x);
clrscr();
if(found==0){clrscr();system("PAUSE");}
else
{
puts("entrer votre prix:");
scanf("%f",&price);
t[found].prix=price;
}
}
void menu()
{
     //declaration des variables necessaires au traitement
    bib t[100];
    int i;
    int x;
    int isbn1;
    int choix,CC;
    int r;//recherche de l'isbn en cas de modification du prix d'un bouquin
    char menu2[2][81]={"1-Par auteur","2-Par annee"};
    char men[5][81]={"1-Remplissage.","2-Affichage.","3-Tri(par auteur/par annee).","4-Recherche.","5-Mises à jour"};
    char menu3[2][81]={"1-Par auteur.","2-Par date."};
    char menu4[3][81]={"1-Ajout bouquin.","2-Suppression bouquin.","3-modification prix."};
    int leprix;
    int C1,C2,C3;
    int n;n=0;
    //debut de traitement
    clrscr();
    cadre(5,75,3,36,1);//construction du cadre du menu principal-->remarque:la même fct de cadre sera  appelée +rs fois
    for(i=0;i<5;i++)
    {puts(men[i]);}
    printf ("entrer votre choix:");
    scanf("%d",&choix);
    switch(choix)
    {
case 1:clrscr();
cadre(5,75,3,36,1);
remplissage(t,&n);
menu();
break;
case 2:clrscr();
cadre(5,75,3,36,1);
for(i=0;i<2;i++)
    {puts(menu2[i]);}
puts("entrer votre choix:");
scanf("%d",&C1);
switch(C1)
{
    case 1:aff1(t,&n);
    menu();
    break;
    case 2:aff2(t,&n);
    menu();
    break;
}
break;
case 3:clrscr();
cadre(5,75,3,36,1);

for(i=0;i<2;i++)
{puts(menu3[i]);}
puts("entrer votre choix:");
scanf("%d",&C2);
switch(C2)
{
    case 1:tri_auteur(t,n);
menu();
break;
    case 2:tri_annee(t,n);
    menu();
    break;
}
break;
case 4:clrscr();
puts("entrer isbn:");
scanf("%d",&x);
CC=recherche2(t,n,x);
printf("%d",CC);
if(CC==x) printf("bouquin TROUVE");
else if(CC==0)printf("bouquin introuvable!!");
getch();
menu();
break;
case 5:clrscr();
cadre(5,75,3,36,1);
for(i=0;i<3;i++)
{puts(menu4[i]);}
puts("entrer votre choix:");
scanf("%d",&C3);
switch(C3)
{
case 1:clrscr();
cadre(5,75,3,36,1);
add(t,&n);
menu();
break;
case 2:clrscr();
cadre(5,75,3,36,1);
clrscr();
printf("entrer l'isbn:");
scanf("%d",&isbn1);
sup(t,&n,isbn1);
menu();
break;
case 3:clrscr();
cadre(5,75,3,36,1);
clrscr();
printf("entrer le prix:");
scanf("%d",&leprix);
clrscr();
puts("entrer isbn:");
scanf("%d",&isbn1);
r=recherche(t,n,isbn1);
if(r){
modif(t,n,leprix);
printf("prix modifié avec succes");
getch();
}
else {clrscr(); getch();}
menu();
}
getch();
menu();
break;
    }
}
void main()
{
clrscr();
menu();
getch();
}
  
}

57 réponses

cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
30 oct. 2010 à 15:48
J'espère que t'as remplacé ton main() par celui que je t'ai donné ... Ca marche chez moi, pas de raison pour que ça n'aille pas de ton côté

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
2 nov. 2010 à 20:52
ok :)

maintenant probleme pour afficher les livres et lecteurs enregistrés. Je voudrais faire un printf du type printf("%d %s %s", infolivre.code,infolivre.auteur,infolivre.titre)
(c'est l'idée) mais je dois déclarer quoi dans le main?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
2 nov. 2010 à 23:17
Un case en plus et une fonction pour lister les livres et lecteurs.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
3 nov. 2010 à 09:34
c'est la fonction qui pose probleme. ce serait de quelle forme?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 nov. 2010 à 09:43
Pour parcourir une liste chainée, on fait comment ?

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
3 nov. 2010 à 17:51
j'aurais créé cette fonction

void afficherListe(llist liste)
{
    element *tmp = liste;
    /* Tant que l'on n'est pas au bout de la liste */
    while(tmp != NULL)
    {
        /* On affiche */
        printf("%d ", tmp->val);
        /* On avance d'une case */
        tmp = tmp->nxt;
    }
}


et dans le main je renvoie case x: vers liste ?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
3 nov. 2010 à 23:51
... vers afficherListe()

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
6 nov. 2010 à 00:22
ok.
et il y a moyen de coder plus simplement ce morceau de code pcq toutes ces struct ca embrouille.merci

/*ajout livre*/ 

struct elementlivre
{
int code;
char auteur[20];
char titre[60];
};

typedef struct livre
{
        struct elementlivre infolivre;
        struct livre *suivant;
}maillon;
 
typedef maillon* liste;
 
liste ajout(liste l)
{maillon*  nv=(maillon*)malloc(sizeof(maillon));
  liste  tmp=NULL;
  printf("|---------------------------\n");
  printf("|      Ajouter un livre     |\n");
  printf("|---------------------------\n");
  printf("| Entrez le code du livre:  ");
  scanf("%d",&nv->infolivre.code);
  printf("|---------------------------\n");
  printf("| Entrez le nom de l'auteur:");
  scanf("%s",&nv->infolivre.auteur);
  printf("|---------------------------\n");
  printf("| Entrez le titre du livre:");
  scanf("%s",&nv->infolivre.titre);
  printf("|---------------------------\n");
  printf(" Le livre %d de '%s' intitule ''%s'' vient d'etre ajoute a la bibliotheque",nv->infolivre.code,nv->infolivre.auteur,nv->infolivre.titre);
  printf("\n");
  printf("\n");
 tmp=l;
 
 if(l==NULL)
 {
      l=nv;
      nv->suivant=NULL;
      return l;
 }
    else 
    {
  while(tmp->suivant!=NULL)
       {
       tmp=tmp->suivant;
       }
       nv->suivant=NULL;
       tmp->suivant=nv;
       }
        return l;
}
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
6 nov. 2010 à 01:29
Non c'est bien comme ça, et puis si les variables sont nommées correctement ça devrait pas poser problème

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
6 nov. 2010 à 16:43
ok. et pourrais tu m'expliquer un peu comment ca marche ce morceau de code stp?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
7 nov. 2010 à 00:34
Il crée un nouveau maillon qui ne pointe pas vers un suivant et fait pointer le suivant du dernier de la liste vers le nouveau.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
11 nov. 2010 à 18:40
slt
voila mon code. mais j'ai un probleme : lorsque j'enregistre 2 livres par exemple (fonction ajout), et que j'affiche les livres enregistrés (fonction listerlivre), il s'affiche 2 fois le nom du 1er livre enregistré.
ex : j'enregistre le livre a n°1
j'enregistre le livre b n°2

lister les livres : a n°1
a n°1 -> il devrait afficher b n°2

help??

#include<stdio.h>
/*#include<conio.h>*/
#include<stdlib.h>
#include <time.h>
/*#include <curses.h>*/



/////////*ajout livre*///////////

struct elementlivre     /*creation struct elementlivre contenant les caracteristiques du livre*/
{

int code;
char auteur[20];
char titre[60];

};

typedef struct livre      /* creation d'un typedef livre */
{
        struct elementlivre infolivre;    /*creation structure infolivre vers strucure element livre contenant caract du livre*/
        struct livre *suivant;   /*creation pointeur suivant vers typedef livre donc *suivant revoie l'adresse du typedef*/
}maillon;     /*creation de maillon*/
 
typedef maillon* liste;     /*creation typedef avec pointeur de maillon*/

liste ajout(liste l)    /*on cree la fonction ajout reliee a liste du typedef*/
{maillon*  nv=(maillon*)malloc(sizeof(maillon));      /* on attribue la memoire a nv contenant le pointeur maillon*/
  liste  tmp=NULL;     /*on initialise la variable tmp dans liste*/
  printf("|---------------------------\n");   /* creation du menu ajout livre*/
  printf("|      Ajouter un livre     |\n");
  printf("|---------------------------\n");
  printf("| Entrez le code du livre:   ");
  scanf("%d",&nv->infolivre.code);   /*nv pointe vers la structure livre et la variable code de elementlivre*/
  printf("|---------------------------\n");
  printf("| Entrez le nom de l'auteur: ");
  scanf("%s",&nv->infolivre.auteur);       /*nv pointe vers la structure livre et la variable auteur de elementlivre*/
  printf("|---------------------------\n");
  printf("| Entrez le titre du livre:  ");
  scanf("%s",&nv->infolivre.titre);       /*nv pointe vers la structure livre et la variable titre de elementlivre*/
  printf("|---------------------------\n");
  /*while((nv->infolivre.code!=int)&&(nv->infolivre.auteur!=char)&&(nv->infolivre.titre!=char))
          printf("Erreur : Entrez des caracteres valides (entier pour le code et caracteres pour auteur et titre)\n\n");
          printf("|---------------------------\n");
          printf("| Entrez le code du livre:   ");
          scanf("%d",&nv->infolivre.code);             nv pointe vers la structure livre et la variable code de elementlivre
          printf("|---------------------------\n");
          printf("| Entrez le nom de l'auteur: ");
          scanf("%s",&nv->infolivre.auteur);           nv pointe vers la structure livre et la variable auteur de elementlivre
          printf("|-d-------------------------\n");
          printf("| Entrez le titre du livre:  ");
          scanf("%s",&nv->infolivre.titre);            nv pointe vers la structure livre et la variable titre de elementlivre
          printf("|---------------------------\n");
          }*/
 
  printf(" Le livre %d de '%s' intitule '%s' vient d'etre ajoute a la bibliotheque\n\n",nv->infolivre.code,nv->infolivre.auteur,nv->infolivre.titre);

 tmp=l;
 if(tmp==NULL)
          {
      l=nv;
      nv->suivant=NULL;
      return l;
     }
    else 
    {
  while(tmp->suivant!=NULL)
       {
       tmp=tmp->suivant;
       }
       nv->suivant=NULL;
       tmp->suivant=nv;
       }
        return l;
}


/////////* ajout lecteur*//////////
struct elementlecteur  /* remarques identiques a precedemment */
{
char prenom[20];
char nom[20];
int codeemprunte;
};

typedef struct lecteur
{
        struct elementlivre infolivre;
        struct elementlecteur infolecteur;
        struct lecteur *suivant2;
}maillon2;
 
typedef maillon2* liste2;
 
liste2 ajout2(liste2 m)
{maillon2*  nv2=(maillon2*)malloc(sizeof(maillon2));
liste2  tmp=NULL;


  printf("|-----------------------|\n");
  printf("|   Ajouter un lecteur  |\n");
  printf("|-----------------------|\n");
  printf("| Entrez le prenom:      ");
  scanf("%s",&nv2->infolecteur.prenom);
  printf("|------------------------\n");
  printf("| Entrez le nom:         ");
  scanf("%s",&nv2->infolecteur.nom);
  printf("|------------------------\n");
  printf("| Code du livre umprunte: ");
  scanf("%d",&nv2->infolecteur.codeemprunte);
  printf("\n");
  printf(" %s %s a emprunte le livre %d",nv2->infolecteur.prenom,nv2->infolecteur.nom,nv2->infolecteur.codeemprunte);
  printf("\n");
  printf("\n");
  
 tmp=m;
 if(tmp==NULL)
          {
      m=nv2;
      nv2->suivant2=NULL;
      return m;
     }
    else 
    {
  while(tmp->suivant2!=NULL)
       {
       tmp=tmp->suivant2;
       }
       nv2->suivant2=NULL;
       tmp->suivant2=nv2;
       }
        return m;
}

/////////* supprimer livre*//////////
maillon* suppression(maillon* l)   /*creation d'un poiteur maillon sur la fonction suppression*/
{ int x; 
   
  maillon *p,*tmp;   /*creation des pointeurs p et avp*/
      printf("Code du livre a supprimer: \n");
      scanf("%d",&x);
      if(l==NULL)     /*si la liste est vide le livre n'existe pas*/
      {
      printf("------------------------\n");
      printf("Le livre %d n'existe pas\n",x);
      printf("------------------------\n");
      printf("\n");
      return NULL;
      }
  else    /*sinon on parcourt la liste tant que x pas trouvée et si on trouve la variable x et qu'on arrive à la fin de la liste c'est qu'elle a ete utilisée. on imprime donc x*/
      {
      p=l;
      tmp=l;
  while((p->suivant!=NULL)&&(p->infolivre.code!=x))
  {
  tmp=p;
  p=p->suivant;
  }
  if(p->suivant==NULL)
  {
  printf("--------------------------\n");
  printf("Le livre %d a ete supprime\n",x);
  printf("--------------------------\n");
  printf("\n");
  return NULL;
  }
  tmp->suivant=p->suivant;
  free(p);     /*on libere la memoire (x et y supprimés)*/
  return l;
}
}


////////* supprimer lecteur*/////////

maillon2* suppression2(maillon2* m)    /*memes remarques que precedemment*/
{ 
char nom[20];
maillon2*  nv2=(maillon2*)malloc(sizeof(maillon2));
  maillon2 *q,*tmp;
      printf("Entrez le nom a supprimer: ");
      scanf("%s",&nom);
      printf("\n");
      if(m==NULL)
      {
      printf("\n");
      printf("--------------------------\n");
      printf("Le lecteur %s n'existe pas\n",nom);
      printf("--------------------------\n");
      printf("\n");
      return NULL;
      }
  else 
      {
      q=m;
      tmp=m;
  while((q->suivant2!=NULL)&&(q->infolecteur.nom!=nom))
  {
  tmp=q;
  q=q->suivant2;
  }
  if(q->suivant2==NULL)
  {
  printf("----------------------------\n");
  printf("Le lecteur %s a ete supprime\n",nom);
  printf("----------------------------\n");
  printf("\n");
  return NULL;
  }
  tmp->suivant2=q->suivant2;
  free(q);
  return m;
}
}


///////* modifier la bdd livre*////////
maillon* modification(maillon* l)    /*creation de la fonction modification */
{int  choix1;
 
printf("|  Modification livres  |\n");
printf("|-----------------------|\n");
printf("| Ajout             | 1 |\n");
printf("| Suppression       | 2 |\n");
printf("| Retour au menu    | 3 |\n");
printf("-------------------------\n");
                             
printf("Entrez votre choix: ");
scanf("%d",&choix1); 
printf("\n");
switch (choix1)      /*fonction switch permet de reconnaitre le caractere entré au clavier et de faire une certaine action en consequence*/
{
case 1:l=ajout(l);     /* si appuie sur 1 renvoie la fonction ajout*/
break;
case 2:l=suppression(l);    /*si appuie sur 2 renvoie la fonction suppression*/
break;
case 3:break;    /* si appuie sur 3 renvoie au menu principal*/
default:(printf("Erreur : Veuillez entrer un caractere valide\n\n"))&&(l=modification(l)); /*si autre on revoie vers la fonction modification avec message d'erreur*/
}
return l;
}
 
 


/* modifier la bdd lecteur*/

maillon2* modification2(maillon2* m)   /*memes justif que precedemment*/
{int  choix2;
printf("| Modification lecteurs |\n");
printf("|-----------------------|\n");
printf("| Ajout             | 1 |\n");
printf("| Suppression       | 2 |\n");
printf("| Retour au menu    | 3 |\n");
printf("-------------------------\n");                             
printf("Entrez votre choix: ");
scanf("%d",&choix2); 
printf("\n");
switch (choix2)
{
case 1:m=ajout2(m);
break;
case 2:m=suppression2(m);
break;
case 3:break;
default:(printf("Erreur : Veuillez entrer un caractere valide\n\n"))&&(m=modification2(m));


     
}
return m;
}
 
///////*lister les livres*//////////
maillon* listerlivre(maillon* l)  /*creation fonction listerlivre*/
{  
   int demandeajoutlivre;

      liste tmp=l;
      if(tmp==NULL) 
             /*si la liste est nulle on imprime "la liste est vide"*/
      {
  
      printf("-----------------------------\n");                       
      printf("la liste de livres est vide\n");
      printf("-----------------------------\n");
      printf("Voulez-vous ajouter un livre ? oui:1 | non:2   : ");
      scanf("%d",&demandeajoutlivre);
      printf("\n");
      switch(demandeajoutlivre)
      {
      case 1:l=modification(l);break;
      case 2:break;
      default:((printf("Erreur : Veuillez entrer un caractere valide\n\n"))&&(l=listerlivre(l)));
      }
      }
      
        
if(tmp!=NULL){
  printf(" Livres enregistres :\n\n");}
while(tmp!=NULL)
{
printf("'%s' - '%s' ( %d )\n\n",l->infolivre.titre,l->infolivre.auteur,l->infolivre.code);
tmp=tmp->suivant;
}
return l;
}
////////*lister les lecteurs*///////////
maillon2* listerlecteur(maillon2* m)   /*memes justif que precedemment*/
{ 
int demandeajoutlecteur;
    liste2 tmp=m;
      if(tmp==NULL)
      {
      
      printf("-----------------------------\n");
      printf("La liste de lecteurs est vide\n");
      printf("-----------------------------\n");
      printf("Voulez-vous ajouter un lecteur ? oui:1 | non:2   : ");
      scanf("%d",&demandeajoutlecteur);
      printf("\n");
      switch(demandeajoutlecteur)
      {
      case 1:m=modification2(m);break;
      case 2:break;
      default:((printf("Erreur : Veuillez entrer un caractere valide\n\n"))&&(m=listerlecteur(m)));
      }
      }
      
     
  if(tmp!=NULL){
  printf(" Lecteurs enregistres :\n\n");}
while(tmp!=NULL)
{
printf("%s %s a emprunte le livre %d \n\n",m->infolecteur.nom,m->infolecteur.prenom,m->infolecteur.codeemprunte);
tmp=tmp->suivant2;
}
return m;

}

////////*affichage emprunt (n° livres)*////////

maillon2* emprunt(maillon2* m)
{


liste2 tmp=m;

      if(tmp==NULL) 
             /*si la liste est nulle on imprime "la liste est vide"*/
      {
      printf("-----------------------------\n");                       
      printf("Aucun livre emprunte\n");
      printf("-----------------------------\n");
      
      }
     
if(tmp!=NULL){
  printf(" Livres empruntes :\n\n");}
while(tmp!=NULL)
{
printf("%d \n\n",m->infolecteur.codeemprunte);
tmp=tmp->suivant2;
}
return m;
}



///////////* ecran d'accueil*/////////
int main(){
  
    liste l=NULL;   /*initialisation des listes livre et lecteur*/
liste2 m=NULL;
int choix;    /*variable choix : caractere entré au clavier*/
    
    
    
        while (1)   /*pour revenir au menu principal à la fin d'une action*/
        {
         
         const char * NomJourSemaine[] = {"Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi"};  /*creation constantes de caracteres des jours de la semaine : pointeur vers ceux la*/
         const char * NomMois[] = {"janvier", "fevrier", "mars", "avril", "mai", "juin",       /*creation constantes de caracteres des mois : pointeur vers ceux la*/
                                   "juillet","aout","septembre","octobre","novembre","decembre"};
        time_t timestamp;
        struct tm * t;
    
        timestamp = time(NULL);   /*pour savoir nbre de secondes ecoulée depuis 1970 et convertir en date*/
        t = localtime(&timestamp);  /*timestamp est contenu dans t qui pointe vers tm*/
        printf("Nous sommes %s ", NomJourSemaine[t->tm_wday]);   /*jour de la semaine*/
        printf("%02u %s %04u ", t->tm_mday, NomMois[t->tm_mon], 1900 + t->tm_year);    /* date jour + mois + année*/
        printf("( %02u:%02u )\n", t->tm_hour, t->tm_min);  /*affiche l'heure*/
        printf("\n");
      

      
        printf("|--------------------------------|\n");   /*affichage du menu principal*/
        printf("|         Menu principal         |\n");
        printf("|--------------------------------|\n");
printf("| Modification des livres    | 1 |\n");
printf("| Modification des lecteurs  | 2 |\n");
printf("|--------------------------------|\n");
printf("| Liste des livres           | 3 |\n");
printf("| Liste des lecteurs         | 4 |\n");
printf("|--------------------------------|\n");
printf("| Emprunts des livres        | 5 |\n");
printf("|--------------------------------|\n");
printf("| Recherche (livres)         | 6 |\n");
printf("| Recherche (lecteurs)       | 7 |\n");
printf("|--------------------------------|\n");
printf("| Quitter                    | 8 |\n");
printf("|--------------------------------|\n");
printf("\n");
printf("Entrez votre choix: ");
scanf("%d",&choix);
printf("\n");
switch(choix)
{
case 1: l=modification(l);break;    /*renvoie à la fonction liée au chiffre entré par l'utilisateur*/
case 2: m=modification2(m);break;   
case 3: l=listerlivre(l);break;
case 4: m=listerlecteur(m);break;	
case 5: m=emprunt(m);break;
/*case 6: l=recherchelivre(l)*/
/*case 7: m=recherchelecteur(m)*/
    default:(printf("Erreur : Veuillez entrer un caractere valide\n\n"));
}
if (choix==8) break;    /*si tape 5 : on sort du programme*/
   	   
        }

free;    /*liberation memoire*/
/*getch();   /*suspend l'execution du programme jusqu'a appuyer sur Entrée*/
return 0;

}
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 nov. 2010 à 21:06
Et ça sert à quoi de faire une boucle sur une variable si on ne s'en sert même pas
if(tmp!=NULL){
  printf(" Livres enregistres :\n\n");}
while(tmp!=NULL)
{
printf("'%s' - '%s' ( %d )\n\n",l->infolivre.titre,l->infolivre.auteur,l->infolivre.code);
tmp=tmp->suivant;
}


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
11 nov. 2010 à 21:20
quelle variable je comprends pas?
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
11 nov. 2010 à 22:16
Si tu sais même pas ce que tu codes ça va jamais aller . 3 erreurs énormes ...
printf("'%s' - '%s' ( %d )\n\n",l->infolivre.titre,l->infolivre.auteur,l->infolivre.code);


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
11 nov. 2010 à 23:06
aie..je pense que cest dans la forme l->infolivre.X
je remplace l par nv ? aide moi stp
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 nov. 2010 à 00:39
nv n'existe même pas ... Faut évidemment mettre tmp.

VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
12 nov. 2010 à 01:02
javais deja essayé mais ca fait pareil. cest le premier terme enregistré qui s affiche plusieurs fois... cest pour ca que je comprends pas
0
cs_ghuysmans99 Messages postés 3982 Date d'inscription jeudi 14 juillet 2005 Statut Membre Dernière intervention 30 juin 2013 16
12 nov. 2010 à 01:28
Fonctionne chez moi. Vraiment trop compliqué de modifier une ligne
printf("'%s' - '%s' ( %d )\n\n",tmp->infolivre.titre,tmp->infolivre.auteur,tmp->infolivre.code); //@304


VB.NET is good ... VB6 is better
Utilise Réponse acceptée quand un post répond à ta question
0
nicolas92c Messages postés 32 Date d'inscription jeudi 5 novembre 2009 Statut Membre Dernière intervention 23 novembre 2010
12 nov. 2010 à 21:13
okok :)

j'ai d'autres pb.

j'ai créé une fonction recherchelecteur qui permet d'afficher l'emprunt d'un lecteur. mais quand j'enregistre un lecteur puis que j'execute cette fonction, ca m'affiche tjs "lecteur X non enregistré" (en gros le else). je suppose qu'il y a une erreur dans la ligne if(r==tmp->infolecteur.nom){ mais je ne vois pas...merci

//////*recherche lecteur*//////////

maillon2* recherchelecteur(maillon2* m)
{
liste2 tmp=m;
char r[20];
      if(tmp==NULL) 
             /*si la liste est nulle on imprime "la liste est vide"*/
      {
      printf("-----------------------------\n");                       
      printf("Aucun lecteur enregistre\n");
      printf("-----------------------------\n");
      
      }
     
if(tmp!=NULL){
  printf("Infos sur Mr/Mme : ");
  scanf("%s",&r);
  printf("\n");
  }
  
if(tmp!=NULL)
{
if(r==tmp->infolecteur.nom){
printf("%s %s a emprunte le livre %d\n\n",tmp->infolecteur.nom,tmp->infolecteur.prenom,tmp->infolecteur.codeemprunte);}
else{
     printf("Lecteur %s non enregistre\n\n",r);}
tmp=tmp->suivant2;
}

return m;
}
0
Rejoignez-nous