Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

gérer une bibliothéque



  1. #1
    sali2801

    gérer une bibliothéque


    ------

    salu à tous, je me presente; je suis une debutante en C
    je suis entrain de créer un programme qui gére un ensemble de livres d'une petite bibliothéque
    pour cela ma phase01 est de construire une fonction qui permet de créer l'ensembles des livres dans un tableau MAX=500.
    j'ai essayer de realiser cette fonction..... ça marche pas et j'ai pas mal de question

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <conio.h>
    
    typedef struct livre livre;
    struct livre
    {
        int Cote;
        char Titre[100];
        enum Categorie {Conte,Fiction,Policier,Roman,Histoire};
        int Annee_edition;
        int Emprunter;
    
    };
    void Creation (int taille)
    {
        int i=0; livre fiche_livre[500];
        printf(" \n\n\t CREATION D\'ENSEMBLES DES LIVRES EN COURS ...  \n\n ");
        printf("  Veuillez saisir le numero du cote ");
        scanf("%d",&fiche_livre[i].Cote);
        printf("\n\n");
        printf("  Veuillez saisir le titre du livre ");
        scanf("%s",&fiche_livre[i].Titre);
        printf("\n\n");
        printf("  Veuillez saisir la catégorie du livre ");
        scanf("%d",&fiche_livre[i].Categorie);
        printf("\n\n");
        do{
        printf("  Veuillez saisir l'annee d\'edition du livre(comprise entre 1900 et 2010) ");
        scanf("%d",&fiche_livre[i].Annee_edition);
        printf("\n\n");}while (fiche_livre.Annee_edition<1900 || fiche_livre.Annee_edition>2010);
        printf("  Veuillez priciser l'emprunte du livre ");
        scanf("%d",&L[i].Emprunter);
        printf("\n\n")
    }
    
    int main()
    {
    
    int taille=0;
    printf(" Veuillez saisir la taille du tableau ");
    scanf("%d",taille);
    Creation(taille);
        return 0;
    
    }

    Q1*pour ma struct j'ai mis
    enum Categorie {conte,Fiction,Policier,Roman, Histoire}; j'ai l'impression que c'est pas permis de faire ça dans une structure car ça plente juste au_dessous scanf("%d",&fiche_livre[i].Categorie); ?????

    Q1.2** j'ais mis aussi int Emprunter sachant que Emprunter doit etre normalemnt un booléan et la je trouve pas comment définir ce type dans un structure et puis la meme chose pour son
    Code:
    printf("  Veuillez priciser l'emprunte du livre ");
        scanf("%d",&L[i].Emprunter);
    ????


    Q2*Maitenant passant à scanf("%s",&fiche_livre[i].Titre); là j'ai un problem quand je saisie une chainequi ne contient pas de blanc ça marche tres bien mais avec un blanc ça marche pas.J'ai essayer la fonction "GETS" mais...ops:....je sais pas ça n'as pas marcher -peut etre un mal utilisation?-

    un aide de votre bienveillance.....des idéé pour l'amélioration je les aime bien.
    merci

    -----

  2. Publicité
  3. #2
    bzh_nicolas

    Re : gérer une bibliothéque

    Q1 : tu ne peux pas lire directement un type énuméré (ou alors il faut entrer un entier au clavier). Tu dois lire une chaine et suivant les cas en déduire le type énum.
    Q1.2 : tu peux faire un typedef enum.
    Pour les 2 questions au dessus, j'aurais créé les type enum en dehors de la structure avant de déclarer une variable des types nouvellement créés dans la structure (je ne sais pas si je suis clair).
    Q2 : normal, c'est ainsi que fonctionne scanf, il considère l'espace comme une séparation de 2 variables.
    gets est en effet la solution.

    Autre remarque : tel que tu crée ta liste de livre là, tu pourras pas la réutiliser en dehors de ta fonction Creation.

    P.S. conio.h (et les fonctions qu'il comporte) ne fait pas partie des standards du C. Si tu peux, évite de l'utiliser (surtout qu'il n'y a rien dans ton code, qui me saute aux yeux en tout cas, l'utilisant).
    Attention à la ligne suivante, tu as oublié le & :
    Code:
    scanf("%d",taille);

  4. #3
    sali2801

    Re : gérer une bibliothéque

    LA SUITE ............. :help:




    MA dexieume phase est d'ecrire une fonction qui permet de sauvegarder le tableau trié d'apres la cote dans un fichier
    ce que je vois pas tres clair est ce que le tableau contient que le numero de cote ou bien tout la fiche du livre la structure au_dessus
    que pensez vous en fait l'ennoncé n'est pas clair du tout

    Je cherche des idéés dans les deux ças,
    moi j'ai pensé pour le 1ier ças de placer un tableau dans la fonction creation -au_dessu- qui se remplit à chaque saisie du numero de cote mais ça n'as pas marcher -trop parler voila le code-


    Code:
    #include <stdio.h>
    #include <stdlib.h>       /*tout ça rien veuillez jeter u coup d'oeil dans*/
    #include <string.h>          /*la focntion Creation*/
    #include <conio.h>
    typedef enum Categorie Categorie;
    enum Categorie {Conte,Fiction,Policier,Roman,Histoire};
    typedef enum Boolean Boolean;
    enum Boolean { Oui,Non};
    typedef struct livre livre;
    struct livre
    {
        int Cote;
        char Titre[100];
        Categorie  categorie;
        int Annee_edition;
        Boolean Emprunter;
    
    };
    void Creation (int taille,livre fiche_livre[]);
    
    int main()
    {
    
    int i=0,taille=0; livre fiche_livre[500]; livre *point=&fiche_livre;
    printf(" Veuillez saisir la taille du tableau ");
    scanf("%d",&taille);
    Creation(taille,point);
    
    
        printf("        \n\n\t LA LISTE DES FICHES LIVRES ...  \n\n ");
        for (i=0;i<taille;i++)
      {
        printf("                \tFICHE_LIVRE NUMERO %d\n\n\n",i            );
        printf("   Numero de cote:%d \n\n ",fiche_livre[i].Cote             );
        printf("  Titre du livre:%s \n\n ",fiche_livre[i].Titre             );
        switch (fiche_livre[i].categorie)
        {
            case 0:
               printf("  Categorie du livre: conte \n\n");
               break;
            case 1:
               printf("  Categorie du livre: Fiction \n\n");
               break;
            case 2:
                printf("  Categorie du livre: policier \n\n");
                break;
            case 3:
                printf("  Categorie du livre: roman \n\n   ");
                break;
            case 4:
                printf("  Categorie du livre: histoire \n\n" );
                break;
        }
         printf("   Annee d\'edition:%d\n\n",fiche_livre[i].Annee_edition);
          switch (fiche_livre[i].Emprunter)
        {
            case 0:
               printf("   le livre est: emprunte \n");
               break;
            case 1:
               printf("   le livre est: disponible\n");
               break;
        }
    
         printf("\n\n");
          }
    
    
    return 0;}
     /* **********voila ma fonction CREATION***************/
    
    
    void Creation (int taille,livre fiche_livre[])
    {
        int i=0,choix=0, choix2=0; char titre[100]; livre *T;
        printf(" \n\n\t CREATION D\'ENSEMBLES DES LIVRES EN COURS ...  \n\n ");
        for (i=0;i<taille;i++)
      {
        printf("                \tLIVRE NUMERO %d\n\n\n",i            );
        printf("  Veuillez saisir le numero du cote "                 );
        scanf("%d",&fiche_livre[i].Cote                               );
        T[i]=&(fiche_livre[i].Cote);
        printf("\n\n");
        printf("  Veuillez saisir le titre du livre ( max.100 ) ");
        gets(titre);
        gets(fiche_livre[i].Titre);
        printf("\n\n");
        do{
        printf("  Veuillez saisir la categorie du livre\n\n");
        printf("                       0.Conte (0)\n"       );
        printf("                       1.Fiction (1)\n"     );
        printf("                       2.Policie (2)\n"     );
        printf("                       3.Roman (3) \n "     );
        printf("                      4.Histoire (4)\n"     );
        scanf("%d",&choix);}while (choix < 0 || choix > 5);
        fiche_livre[i].categorie=choix;
        printf("\n\n");
        do{
        printf("  Veuillez saisir l'annee d\'edition du livre (comprise entre 1900 et 2010) ");
        scanf("%d",&fiche_livre[i].Annee_edition);
        printf("\n\n");} while (fiche_livre[i].Annee_edition<1900 || fiche_livre[i].Annee_edition>2010);
        do{
        printf("  Veuillez priciser l'emprunte du livre\n\n "  );
        printf("               =====> 0.Emprunte(0)\n"       );
        printf("                =====> 1.Disponible(1)\n"      );
        scanf("%d",& choix2);} while (choix2 < 0 || choix2>1);
        fiche_livre[i].Emprunter=choix2;
        printf("\n\n");
      }
    }

  5. #4
    whoami

    Re : gérer une bibliothéque

    Bonjour,
    Citation Envoyé par sali2801 Voir le message
    ce que je vois pas tres clair est ce que le tableau contient que le numero de cote ou bien tout la fiche du livre la structure au_dessus
    Tu devrais le savoir, c'est ton programme ...

    ... sinon, c'est que tu programmes plus ou moins au hasard, et là, tu serais très mal parti !!

  6. #5
    sali2801

    Re : gérer une bibliothéque

    Citation Envoyé par whoami Voir le message
    Bonjour,

    Tu devrais le savoir, c'est ton programme ...

    ... sinon, c'est que tu programmes plus ou moins au hasard, et là, tu serais très mal parti !!
    OK d'accord on suppose que je sais ce qu'est demandé mais je cherche maintenant des idéé sur les methode et un aide sur mon idéé

  7. A voir en vidéo sur Futura
  8. #6
    sali2801

    Re : gérer une bibliothéque

    quelqu'un for helping!!!!!!!!!!!!

    la suite ...........

    ma 3eme phase est d'ecrire une fonction afin de sauvgarder mon tableau trié dans un fichier à condition que cette sauvegarde est declenché soit
    *à la fin de la creation -<taille valeur="ttpetit">la fonction tout au debut-</taille>
    *par le choix de lutilisateur
    *apres modification

    bref, ce que j'ai maintenant comme idéé :euh: :euh: est de charger tout le tableau d'un seul coup dans le fichie .
    ..j'ai essayer avec ce code mais ça marche pas... quand je veux restaurer mon tableau il me renvoi juste numero 1



    Code:
    int main()
    {
       FILE* fichier=NULL;
       fichier = fopen("fichier.txt","wb");
       int taille=0; int i=0;
       livre fiche_livre[500]={0};
       printf(" Veuillez saisir la taille du tableau ");
       scanf("%d",&taille);
       Creation(taille,fiche_livre);
       tri (fiche_livre,taille);
       for (i=0;i<3;i++)
          {
           fwrite(fiche_livre,sizeof(livre),1,fichier);
              }
              fclose(fichier);
        fichier = fopen("fichier.txt","rb");
        for (i=0;i<3;i++)
        {
            fread(&fiche_livre[i],sizeof (livre),1,fichier);
        }
        fclose(fichier);
    
        //AFFICHAGE(taille,fiche_livre);
    
    
       return 0;
    }
    que pensez vous du choix de mode "rb"?????? mon choix est hasard!! ops:



    euh ...en realité je vois pas tres clair comment faire pour travailler sur ces condition .....DES idéés??? si ça vous gene pas!!!
    *à la fin de la creation
    *par le choix de lutilisateur
    *apres modification

    merci

  9. Publicité
  10. #7
    Jack

    Re : gérer une bibliothéque

    Code:
       for (i=0;i<3;i++)
          {
             fwrite(fiche_livre,sizeof(livre),1,fichier);
          }
    fiche_livre pointe sur le début de ton tableau. Tu vas donc sauver 3 fois le premier élément du tableau. Est-ce l'effet voulu?

    quand je veux restaurer mon tableau il me renvoi juste numero 1
    Quelle fonction te renvoie ce 1?
    si c'est
    Code:
            fread(&fiche_livre[i],sizeof (livre),1,fichier);
    c'est normal, vu que tu demandes à lire un élément.

    A+

  11. #8
    sali2801

    Re : gérer une bibliothéque

    Citation Envoyé par Jack Voir le message
    Code:
       for (i=0;i<3;i++)
          {
             fwrite(fiche_livre,sizeof(livre),1,fichier);
          }
    fiche_livre pointe sur le début de ton tableau. Tu vas donc sauver 3 fois le premier élément du tableau. Est-ce l'effet voulu?

    Quelle fonction te renvoie ce 1?
    si c'est
    Code:
            fread(&fiche_livre[i],sizeof (livre),1,fichier);
    c'est normal, vu que tu demandes à lire un élément.

    A+

    euh... oui j'ai compris mais fautes mais je vois pas les solutions
    si ça ne géne pas votre bienveillance peux_je les avoir de votre part????

  12. #9
    Jack

    Re : gérer une bibliothéque

    et quel est le problème exactement?

    A+

Sur le même thème :

Discussions similaires

  1. Comment gérer une hotte et un poele dans une maison étanche
    Par stein42 dans le forum Habitat bioclimatique, isolation et chauffage
    Réponses: 140
    Dernier message: 31/07/2010, 13h26
  2. Gérer une interruption avec un pic
    Par electroniquedu62 dans le forum Électronique
    Réponses: 2
    Dernier message: 15/01/2010, 17h09
  3. gérer une carte à travers une bdd
    Par amoura2009 dans le forum Électronique
    Réponses: 2
    Dernier message: 06/05/2009, 22h43
  4. gerer une Dll avec Borland C++
    Par Jack dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 19/01/2008, 17h26
  5. gerer une permission sur free
    Par lechat dans le forum Internet - Réseau - Sécurité générale
    Réponses: 1
    Dernier message: 23/10/2005, 19h00