Programme pour gérer une bdd de livres

Soyez le premier à donner votre avis sur cette source.

Snippet vu 5 259 fois - Téléchargée 30 fois

Contenu du snippet

Bon, déjà il faut comprendre le principe sur lequel je me suis basé :
-Un programme qui remplit un fichier de structures Livre(Titre, auteur, editeur, Nombre d'exemplaires disponibles)
-Et un autre programme qui fait le traitement selon ce que vous avez choisi(ajouter/supprimer un livre/exemplaire, consulter un livre...)

Mais, l'execution du programme livre_2.exe suffit..

Source / Exemple :


/****************************************

      • Livre_1.cpp ***
                                                                                • /
//Remplissage initial du fichier #include <stdio.h> #include <stdlib.h> #include <string.h> struct livre { char titre[20]; char auteur[20]; char editeur[20]; int nb_ex; } T[1000]; int main(void) { int N,i; FILE *f; char pass[20]; printf("Entrez le pass : "); gets(pass); if(strcmp(pass,"soufiane")!=0) { printf("Mot de passe incorrect\n"); system("pause"); exit(1); } f=fopen("livre","w"); do { system("cls"); printf("Entrez le nombre de livres a entrer : "); scanf("%d",&N); } while(N<1 || N>900); for(i=0;i<N;i++) { printf("Livre N%d ----------------------\n",i+1); fflush(stdin); printf("Titre : "); gets(T[i].titre); printf("Auteur : "); gets(T[i].auteur); printf("Editeur : "); gets(T[i].editeur); printf("Nombres d'exemplaires : "); scanf("%d",&T[i].nb_ex); } fwrite(T,sizeof(struct livre),N,f); fclose(f); system("pause"); return 0; } /**************************************
        • FIN DU PREMIER PROGRAMME *********
                                                                              • /
/****************************************
      • Livre_2.cpp ***
                                                                                • /
#include <stdio.h> #include <stdlib.h> #include <string.h> struct livre { char titre[20]; char auteur[20]; char editeur[20]; int nb_ex; } T[1000]; int if_exists(livre T[],int N, char c_livre[], FILE *f); void ajouter_livre(livre T[],int N, FILE *f); int consulter(livre T[], int N, char c_livre[], FILE *f); void modif_ex(livre T[], int N, char c_livre[], char signe, FILE *f); void suppr_livre(livre T[], int N, char c_livre[], FILE *f); int main() { int N,i,c,choix; FILE *f; char c_livre[20]; system("D:\\livre_1.exe || pause"); f=fopen("livre","r+"); if(f==NULL) { printf("Impossible d'ouvrir le fichier !\n"); system("pause"); exit(1); } fseek(f,0,2); N=ftell(f)/sizeof(struct livre); fseek(f,0,0); fread(T,sizeof(struct livre),N,f); do { do{ system("cls"); fflush(stdin); printf("Que voulez-vous faire ?\n "); printf("1 : Ajouter un livre.\n"); printf(" 2 : Consulter un livre.\n"); printf(" 3 : Ajouter un exemplaire.\n"); printf(" 4 : Retirer un exemplaire.\n"); printf(" 5 : Supprimer un livre.\n"); printf(" 0 : Quitter.\n"); printf("Votre choix : "); scanf("%d",&choix); fflush(stdin); } while(choix<0 || choix>5); switch(choix) { case 1 : ajouter_livre(T,N,f); N++;break; case 2 : fflush(stdin); printf("Entrez le livre a consulter : "); gets(c_livre); if(consulter(T, N, c_livre, f)==N) printf("Livre non trouve.\n"); else { printf("Livre trouve.\n"); printf("TITRE\tAUTEUR\tEDITEUR\tNOMBRE D'EXEMPLAIRES\n"); printf("%s\t%s\t%s\t%d\n",T[c].titre,T[c].auteur,T[c].editeur,T[c].nb_ex); } break; case 3 : fflush(stdin); printf("Entrez le livre dont vous voulez ajouter un exemplaire : "); gets(c_livre); modif_ex(T, N, c_livre, '+', f); break; case 4 : printf("Entrez le livre dont vous voulez supprimer un exemplaire : "); gets(c_livre); modif_ex(T, N, c_livre, '-', f); break; case 5 : printf("Entrez le livre a supprimer : "); gets(c_livre); suppr_livre(T, N, c_livre, f); N--;break; case 0 : exit(1);break; default : printf("Choix incorrect."); } printf("\n"); printf("TITRE\t\t\tAUTEUR\t\t\tEDITEUR\t\tNB EXEMPLAIRES\n"); for(i=0;i<N;i++) printf("%s\t\t\t%s\t\t\t%s\t\t\t%d\n",T[i].titre,T[i].auteur,T[i].editeur,T[i].nb_ex); system("pause"); } while(1); fclose(f); system("pause"); return 0; } int if_exists(livre T[],int N, char c_livre[], FILE *f) { int V=0, i=0; while(strcmp(c_livre,T[i].titre)!=0 && i<N) i++; if(i!=N) V=1; return V; } void ajouter_livre(livre T[], int N, FILE *f) { fflush(stdin); printf("Entrez le titre du livre : "); gets(T[N].titre); while(if_exists(T,N,T[N].titre,f)) { printf("Fichier deja dans la liste.\n"); printf("Entrez un nouveau titre : "); gets(T[N].titre); } printf("Entrez l'auteur : "); gets(T[N].auteur); printf("Entrez l'editeur : "); gets(T[N].editeur); printf("Entrez le nombre d'exemplaires : "); scanf("%d",&T[N].nb_ex); fseek(f,0,2); fwrite(&T[N],sizeof(struct livre),1,f); } int consulter(livre T[], int N, char c_livre[], FILE *f) { int i=0; while(strcmp(c_livre,T[i].titre)!=0 && i<N) i++; return i; } void modif_ex(livre T[], int N, char c_livre[], char signe, FILE *f) { int c; c=consulter(T,N,c_livre,f); if(c>=N) printf("Livre non trouve."); else { if(signe=='+') T[c].nb_ex++; else { if(T[c].nb_ex==0) printf("Stock epuise."); else T[c].nb_ex--; } fseek(f,c*sizeof(struct livre),0); fwrite(&T[c],sizeof(struct livre),1,f); } } void suppr_livre(livre T[], int N, char c_livre[], FILE *f) { int c,i; c=consulter(T,N,c_livre,f); if(c>=N) printf("Livre non trouve."); else { for(i=c;i<N;i++) { strcpy(T[i].titre,T[i+1].titre); strcpy(T[i].auteur,T[i+1].auteur); strcpy(T[i].editeur,T[i+1].editeur); T[i+1].nb_ex=T[i].nb_ex; } } } /************************************
      • FIN DU 2EME FICHIER ***
                                                                          • /

Conclusion :


P.S.: Ce programme n'est déstiné qu'à des fins personnels pour pratiquer en C, le principe est assez simple, le code aussi d'ailleurs :] j'ai fait le choix d'utiliser les fichiers au lieu d'une bdd vu que j'avais besoin de maitriser les fichiers =] tout cela sous DOS =] je ne suis pas sûr de la portablitié de ce programme, moi je l'ai fait sous dev-c++ =]

A voir également

Ajouter un commentaire

Commentaires

Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
1
J'ain une question. Si tu écrit dans le fichier une structure dont un des membres est vide, est ce que la lecture dans le fichier se fera normalement ?
Messages postés
947
Date d'inscription
mercredi 19 novembre 2003
Statut
Membre
Dernière intervention
5 avril 2008
3
Juste une chose:
Hash ton mot de passe en utiliser le md5, sa sera plus efficace et plus instructif.
Messages postés
5
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
29 avril 2006

Si tu voulais mettre une note tu metterais combien ? :]
Messages postés
15
Date d'inscription
lundi 14 mars 2005
Statut
Membre
Dernière intervention
6 juin 2005

c'est mieux maintenant
il fallait mettre une remarque que le code est pas executable si losrque tu compile chak programme à part
Messages postés
5
Date d'inscription
samedi 23 octobre 2004
Statut
Membre
Dernière intervention
29 avril 2006

enfait j'ai eu un pb pour mettre le zip donc j'ai mit ici les 2 programmes :]
il s'agit là de deux programmes ^^ celui qui initialise les données dans le fichier et l'autre qui fait le traitement voulu ^^ (je modifie ça tout de suit pour que ca soit plus claire)
Merci pour ton commentaire :]
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.