IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Gérer une petite bibliothèque avec le langage C


Sujet :

C

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2017
    Messages : 1
    Par défaut Gérer une petite bibliothèque avec le langage C
    Bonjour à tous et à toutes, j’espère que vous allez bien.
    Notre professeur vient de nous demander un projet que je n'arrive même pas à commencer ou à faire des schémas ( j'ai rien compris ) en plus je suis un débutant dans la programmation langage C donc prière à celui ou celle qui peut m'aider de me donner un coup de main et voici le travail demandé :
    L’objectif de ce projet est de manipuler les listes linéaires chainées (les fichiers texte, éventuellement les tableaux).
    On veut automatiser le fonctionnement d'une petite bibliothèque. Il s'agit d'enregistrer les livres nouvellement acquis / gérer les emprunts des livres / l'enregistrement des nouveaux abonnés (emprunteurs) / savoir le nombre d'emprunts par livre / par emprunteur, …etc.
    Fiche livre
    Un livre est caractérisé par les informations suivantes :

    La cote (un numéro séquentiel)
    Le titre (une chaine de caractère ne dépassant pas 100 caractères)
    L'auteur
    La date d'édition (doit être entre 1900 et 2016)
    L'éditeur,
    Les mots-clés (en nombre de 5 au maximum)
    Le résumé (ne dépassant pas 200 mots)
    Il faudra vérifier que l'ensemble des mots clés appartiennent bien au résumé.


    Fiche Emprunteur
    Elle contient :

    Le nom
    Le prénom
    L’adresse actuelle
    Le numéro de téléphone
    Un numéro d’ordre attribué à la première inscription
    La première date d’inscription.


    Fiche Emprunt
    Elle contient :

    L’emprunteur
    Le livre emprunté
    La date d’emprunt
    La date prévue de retour du livre
    Un champ qui renseigne sur l'état de l'emprunt (livre rendu ou pas)




    Remarques
    1// La durée d'emprunt est de 4 semaines.
    2// Un emprunteur n'a le droit d'emprunter qu'un seul livre
    3// Les livres sont en un seul exemplaire.
    4// Lorsque le livre est rendu, la date de retour effective est alors renseignée
    5// Si la durée d'emprunt est dépassée, des pénalités seront appliquées (on prévoit un champ pénalité dans la fiche emprunteur +1 pénalité pour chaque jour écoulé après la date de retour limite).
    6// L'application doit aussi offrir aux emprunteurs la possibilité de rechercher les livres qui peuvent les intéresser. La recherche peut s'effectuer par auteur ou par mot clé.
    7// La recherche par auteur doit retourner toutes les informations sur les livres dont le nom de l'auteur corresponde exactement à celui recherché
    8// La recherche par mots clé doit retourner tous les livres contenant les mots clé recherchés
    9// Les listes (livre, emprunteur, emprunt) doivent être construites à partir d'un fichier texte dont le format est donné en annexe.
    10// - Le modèle de LLC avec les structures (fiche livre, fiche emprunteur, fiche emprunt) ainsi que les différents modules doivent être créés dans une bibliothèque nommée Bib_LLC_BIBLIO.
    Travail demandé
    1. Donner les déclarations des structures : fiche livre, fiche emprunteur, fiche emprunt
    2. Les fonctions de création d'un livre, d'un emprunteur (inscription d'un abonné), d'un emprunt (les fonctions d'ajout dans une liste)
    3. La fonction de restitution d'un livre (le retour d'un livre).
    4. Donner le nombre d'emprunt par emprunteur.
    5. Afficher la liste des livres triée selon leur nombre d'emprunt (en indiquant ceux qui n'ont jamais été empruntés)
    6. Afficher pour chaque livre non-disponible, le nom de l’emprunteur et la date de retour
    7. Afficher la liste des emprunteurs pénalisés (en précisant leur pénalité). Il faut d'abord calculer les pénalités en cours.
    8. Eclater la liste des emprunts selon le critère : emprunt en cours ou pas (afficher ensuite les deux listes dans un fichier texte)
    9. La recherche d'un livre par auteur et par mot clés en indiquant pour chaque livre s'il est disponible ou pas.



    ANNEXE : Format des fichiers :

    1// Liste des livres :

    Les champs sont séparés par des blancs, les mots-clés sont délimités par des '(' et ')', le résumé est délimité par #
    Exemple : Cote titre auteur date_Edition Editeur (mots-clés1 mots-clés2 mot_clè3 ...) #résumé ............................................#
    Chaque élément de la liste sur une ligne différente



    2// Liste des emprunteurs :

    Tous les champs sont séparés par des blancs
    Nom prénom adresse téléphone numero_emprunteur
    Chaque élément de la liste sur une ligne différente



    3// Liste des emprunts :

    Les champs sont séparés par des blancs
    Cote_livre numero_emprunteur date_emprunt date_limite
    Chaque élément de la liste sur une ligne différente



    Merci d'avance.

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Je te remercie d'avoir rejoint notre communauté.
    Puisque tu l'as signée, j'imagine que tu as pris le temps de lire notre charte.

    Tu sais donc ce que dis son article IV-N.

    Quel est ton problème? Le tien, pas celui qui t'a été posé…

  3. #3
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par sidoutraikia Voir le message
    L’objectif de ce projet est de manipuler les listes linéaires chainées (les fichiers texte, éventuellement les tableaux).
    On veut automatiser le fonctionnement d'une petite bibliothèque.
    À la ligne de commande c'est assez simple ... mais je ne sais pas si cela va correspondre


    Tu vas avoir un
    *) Data_Handler, avec des requêtes comme AddBook, RemoveBook, BorrowBook, ...
    Avec une base de données et SQLite cela se fait simplement
    Sinon, pour aller au plus simple, tu peux faire des fichiers .csv pour stocker les livres, les emprunts, ...
    Par contre, les fichiers .csv ne sont pas Unicode (Par exemple Léon Tolstoï) [même si cela n'est pas vraiment un obstacle]

    *) Command_Parser. En effet, lorsque tu vas compiler tu vas avoir un exécutable (disons my_projet.exe).
    Et tu voudras faire "my_projet.exe -add_book ...", "my_projet.exe -remove_book ...", "my_projet.exe -borrow_book ..."

    *) Input_Parser. Parce que les données en entrée ne sont pas simples (au moins 4 ou 5 attributs).
    Pour aller au plus simple, tu peux faire des fichiers .json et utiliser la bibliothèque jansson

    Et ainsi faire "my_projet.exe -add_book books.json", "my_projet.exe -remove_book books.json", "my_projet.exe -borrow_book books.json"

    *) Data_Cache. Parce que jusqu'à maintenant, tu n'as aucune "listes linéaires chainées" . Donc il faudra faire un cache entre ton main et ton Data_Handler pour rapatrier tes données en mémoire, les modifier et en dernier lieu les stocker en dur (dans des fichiers ou dans ta base de données)


    Édit: Tu vas avoir des règles métier à trouver. Par exemple: Est-ce que tu peux supprimer un livre qui est en train d'être emprunté ?

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 838
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Citation Envoyé par foetus Voir le message
    ...Avec une base de données et SQLite cela se fait simplement
    Sinon, pour aller au plus simple, tu peux faire des fichiers .csv pour stocker les livres, les emprunts
    ...
    Par contre, les fichiers .csv ne sont pas Unicode (Par exemple Léon Tolstoï) [même si cela n'est pas vraiment un obstacle]
    ...
    Pour aller au plus simple, tu peux faire des fichiers .json et utiliser la bibliothèque jansson
    ...Donc il faudra faire un cache entre ton main et ton Data_Handler pour rapatrier tes données en mémoire, les modifier et en dernier lieu les stocker en dur (dans des fichiers ou dans ta base de données)...
    Es-tu certain que ton discours soit vraiment adapté au niveau du PO ???

    Citation Envoyé par sidoutraikia Voir le message
    Notre professeur vient de nous demander un projet que je n'arrive même pas à commencer ou à faire des schémas ( j'ai rien compris )
    A ce niveau là il serait peut-être utile de remettre en question ton choix de métier.

    Citation Envoyé par sidoutraikia Voir le message
    en plus je suis un débutant dans la programmation langage C
    Hum oui, peut-être mais bon, il n'y a aucun rapport entre "compréhension d'un problème et élaboration de sa solution" et "débuter dans un langage"...

    Citation Envoyé par sidoutraikia Voir le message
    L’objectif de ce projet est de manipuler les listes linéaires chainées (les fichiers texte, éventuellement les tableaux).
    Donc ici, soit tu es vraiment débutant mais parce que t'as rien suivi du cours (donc c'est de ta faute) ; soit tu n'es pas un débutant et donc tu nous ments. Parce que ce genre de manipulations, c'est bien au dessus du débutant...

    Citation Envoyé par sidoutraikia Voir le message
    Un livre est caractérisé par les informations suivantes :

    La cote (un numéro séquentiel)
    Le titre (une chaine de caractère ne dépassant pas 100 caractères)
    L'auteur
    La date d'édition (doit être entre 1900 et 2016)
    L'éditeur,
    Les mots-clés (en nombre de 5 au maximum)
    Le résumé (ne dépassant pas 200 mots)
    Il faudra vérifier que l'ensemble des mots clés appartiennent bien au résumé.
    Bon ben là, le plus simple est de créer une structure correspondant à ce format. Et comme il y a une notion de "date", à moins que tu ne veuilles utiliser le timestamp Unix, il faut aussi penser à créer ce type...
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct {
        unsigned short jj, mm, aa;
    } t_date;
     
    typedef struct {
        unsigned long cote;
        char titre[100];
        char auteur[10];
        t_date date_edit;
        char editeur[100];
        char mots_clefs[5][20];
        char resume[200][20];
    } t_livre;

    Ensuite ben à partir de là à toi de continuer tout seul, étape par étape, en associant les notions "physiques" indiquées dans l'énoncé aux notions "C". Dernier conseil: essaye de coder de petites fonctions qui ne font qu'une chose mais que tu pourras appeler chaque fois que tu veux faire cette chose; plutôt que de gros trucs impotents tellement ils seront énormes et où tu te retrouveras à recoder 10 fois le même travail...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé
    Homme Profil pro
    Analyste/ Programmeur
    Inscrit en
    Juillet 2013
    Messages
    4 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Analyste/ Programmeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4 772
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Es-tu certain que ton discours soit vraiment adapté au niveau du PO ???
    Presque

    Si c'est un projet, donc sidoutraikia doit avoir du temps pour le faire: 1 mois par exemple.

    Et ensuite, c'est du C très simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    typedef struct s_Data_Handler {
     
    //  ....
     
    //  sqlite3* handle;
    //  sqlite3_stmt* statement;
    } Data_Handler;
     
     
    unsigned char data_add_book(Data_Handler*, DATA_ERROR*);
     
    unsigned char data_remove_book(Data_Handler*, DATA_ERROR*);
     
    //  ....

    Et ensuite, pour les histoires de format CSV et json, ce sont les plus simples. Si on demande à sidoutraikia un projet, c'est qu'il y a eu des cours en informatique avant

    Et pour les histoires d'Unicode, il faut mieux faire de la prévention : sous Windows, trop souvent on enregistre en ANSI et il faut forcer pour enregistrer en UTF-8.

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Puisque tu as un professeur, je t'invite très vivement à lui demander conseil.
    Pour les trois raisons suivantes:
    1. Lui sait précisément ce qu'il a enseigné
    2. Il connaît votre environnement de travail
    3. Il sera content de voir ton intérêt pour son projet

    Cette dernière raison a un effet secondaire: comme tu l'auras sollicité, si ton rendu final du projet n'est pas satisfaisant, il sera plus indulgent qu'avec un élève qui n'aurait apparemment pas essayé.

    Il vaut toujours mieux reconnaître ne pas savoir et poser la question que le contraire.

    A présent, prends du papier, un crayon, et réfléchit à ce que dois faire le programme.
    Par exemple, tu pourrais réfléchir à comment vérifier que le programme fait précisément son travail, tout son travail, et seulement son travail.
    En général, on le vérifie point par point (et ca s'appelle du test unitaire)

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/11/2008, 22h12
  2. Quel langage pour gérer une petite base de données d'employés ?
    Par cervi dans le forum Langages de programmation
    Réponses: 28
    Dernier message: 21/09/2007, 10h56
  3. Réponses: 13
    Dernier message: 12/12/2006, 21h44
  4. [VBA-E]gérer une petite base de données
    Par massilia80 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2006, 13h59
  5. Une petite doute avec le cycle while
    Par Paulinho dans le forum C++
    Réponses: 3
    Dernier message: 06/11/2005, 10h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo