Programme pour gérer une bdd de livres

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

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.