Gestion de bibliotheque

Description

ce code sert à ajouter un lecteur ,supprimer,modifier ou le lister , de meme des livres ,
puis on emprunte des livres de la bibliotheque en precisant la date ,le num de l'operation ,et le type ( 1 : emprunt ou 2 : remise ) et l'id de l'emprunteur et la cote du livre .

Source / Exemple :


//traite avec visuel c++

#include<stdio.h>
#include<conio.h>
#include<string.h>

typedef struct 
{
char nom[20];
char prenom[20];
unsigned id ;
}lecteur;

typedef struct 
{
char titre[20];
char auteur[20];
unsigned cote ;
}livre;

typedef struct
{int type;
}typeoperator;

typedef struct
{
int jour,mois,annee;
}date;

typedef struct
{
unsigned numop;
typeoperator typeop;
date dateop;
unsigned idlecteur;
unsigned idlivre;
}gestionemprunt;

/* void saisir_lecteur(lecteur *l);
void afficher_lecteur(lecteur l);
void ajouter_lecteur(lecteur l,char *nomfichier);
void lister_lecteur(char *nomfichier);
void modifier_lecteur(lecteur l,unsigned id,char *nomfichier);
void supprimer_lecteur(unsigned id,char *nomfichier); */

///////////////////////////////////////////////////////

///////////////////////////////////////////////////////:
int recherche_livre (char *nomfichier2,unsigned cote)
{
int u=0;
gestionemprunt ge;
FILE *fp;
 if(fp=fopen(nomfichier2,"r+b"))
 {
fseek(fp,0,0);
   while(!feof(fp))
   {
	  fread(&ge,sizeof(gestionemprunt),1,fp);
	  if(!feof(fp)&&ge.idlivre==cote)
	  {
		  u=1;
		  return(u);
	  }
   }
   fclose(fp);
 }

return(u);
}

///////////////////////////////////////////////////////
int recherche (char *nomfichier, unsigned id)
{
int u=0;
lecteur l;
FILE *fp;
 if(fp=fopen(nomfichier,"r+b"))
 {
fseek(fp,0,0);
   while(!feof(fp))
   {
	  fread(&l,sizeof(lecteur),1,fp);
	  if(!feof(fp)&&l.id==id)
	  {
		  u=1;
		  return(u);
	  }
   }
   fclose(fp);
 }

return(u);
}
////////////////////////////////////////////////////////
int existe (char *nomfichier, unsigned numop)
{
int u=0;
gestionemprunt g;
FILE *fp;
 if(fp=fopen(nomfichier,"r+b"))
 {
fseek(fp,0,0);
   while(!feof(fp))
   {
	  fread(&g,sizeof(gestionemprunt),1,fp);
	  if(!feof(fp)&&g.numop==numop)
	  {
		  u=1;
		  return(u);
	  }
   }
   fclose(fp);
 }
return(u);
}
///////////////////////////////////////////////////////
unsigned test(char *nomfich2,unsigned numop)
{
gestionemprunt g;
FILE *fp;
 if(fp=fopen(nomfich2,"r+b"))
 {
fseek(fp,0,0);
   while(!feof(fp))
   {
	  fread(&g,sizeof(gestionemprunt),1,fp);
	  if(!feof(fp)&&g.numop==numop)
	  {
		  
		  return(g.idlivre);
	  }
   }
   fclose(fp);
 }

}
/////////////////////////////////////////////////////////
unsigned test1(char *nomfich2,unsigned id)
{
gestionemprunt g;
FILE *fp;
 if(fp=fopen(nomfich2,"r+b"))
 {
fseek(fp,0,0);
   while(!feof(fp))
   {
	  fread(&g,sizeof(gestionemprunt),1,fp);
	  if(!feof(fp)&&g.idlecteur==id)
	  {
		 fseek(fp,-sizeof(g),1);
		  return(g.numop);
	  }
   }
   fclose(fp);
 }

}

////////////////////////////////////////////////////////
void saisir_lecteur(lecteur *l)
{

printf("donner les nouvelles informations du lecteur");
printf("id?\n");
scanf("%d",&l->id);

printf("Nom?\n");
scanf("%s",l->nom);
printf("prenom ?\n");
scanf("%s",l->prenom);
}
/////////////////////////////////////////////////////////
void saisir__lecteur(lecteur *l,char *nomfich)
{
do
{
printf("donner les nouvelles informations du lecteur");
printf("id?\n");
scanf("%d",&l->id);
if(recherche(nomfich,l->id)==1)
printf("id existant");
}while(recherche(nomfich,l->id)==1);

printf("Nom?\n");
scanf("%s",l->nom);
printf("prenom ?\n");
scanf("%s",l->prenom);
}

////////////////////////////////////////////////////////
void afficher_lecteur(lecteur l)
{

printf("\n");
printf("Le lecteur ");
printf("id : %d  ",l.id);
printf("Nom :%s  ",l.nom);
printf("prenom : %s  ",l.prenom);
}
////////////////////////////////////////////////////////

void ajouter_lecteur(lecteur l,char *nomfichier)
{
FILE *fp;
lecteur tmp;
 
if(fp=fopen(nomfichier,"a+b"))
 {
	fseek(fp,0,0);
	while(!feof(fp))
	{
		fread(&tmp,sizeof(lecteur),1,fp);
        if(tmp.id==0||feof(fp))
		{
			fseek(fp,-sizeof(lecteur),1);
			fwrite(&l,sizeof(lecteur),1,fp);
	         break;
		}
	}
    
 }
  else  
	 printf("erreur !!");
fclose(fp);
}

/////////////////////////////////////////////////////////:

void lister_lecteur(char *nomfichier)
{
FILE *fp;
lecteur l;
 if (fp=fopen(nomfichier,"r+b"))
 {
  fseek(fp,0,0);
    
  while(!feof(fp))
  {	
	 fread(&l,sizeof(lecteur),1,fp);
     
	 if(!feof(fp)&&l.id)
	 afficher_lecteur(l);
	 
  }
 }
fclose(fp);

} 

/////////////////////////////////////////////////////////////////////

void modifier_lecteur(lecteur l,unsigned id,char * nomfichier)
{
FILE *fp;
lecteur tmp;

  if(fp=fopen(nomfichier,"r+b"))
  {
	 fseek(fp,0,0);
	   while(!feof(fp))
	   {
		 fread (&tmp,sizeof(lecteur),1,fp);
			if(!feof(fp))
			{
				 if(tmp.id==id)
					 

				 {
					fseek(fp,-sizeof(lecteur),SEEK_CUR);
					fwrite(&l,sizeof(lecteur),1,fp);
					break;
				 } 
			}
				
			else
			
          	   printf("Enregistrement non trouvée");
	   }
	 }
	  else
	  printf("erreur");
  
  fclose(fp);
}
//////////////////////////////////////////////////////////////////////////:
void supprimer_lecteur(unsigned id,char * nomfichier)
{

	
	lecteur supl={0,"",""};
		
	modifier_lecteur(supl,id,nomfichier);		
        
  }

///////////////////////////////////////////////////////////////////////

void saisir_livre(livre *l)
{
printf("donner les nouvelles informations du livre");
printf("cote?\n");
scanf("%d",&l->cote);
printf("Titre?\n");
scanf("%s",l->titre);
printf("auteur ?\n");
scanf("%s",l->auteur);
}
////////////////////////////////////////////////////////
void saisir__livre(livre *l,char *nomfich1)
{
do
{
printf("donner les nouvelles informations du livre");
printf("cote?\n");
scanf("%d",&l->cote);
if(recherche(nomfich1,l->cote)==1)
printf("Cote existant");
}while(recherche(nomfich1,l->cote)==1);

printf("Titre?\n");
scanf("%s",l->titre);
printf("auteur ?\n");
scanf("%s",l->auteur);
}
////////////////////////////////////////////////////////
void afficher_livre(livre l)
{

printf("\n");
printf("Le livre ");
printf("cote : %d  ",l.cote);
printf("titre:%s  ",l.titre);
printf("auteur : %s  ",l.auteur);
}
////////////////////////////////////////////////////////

void ajouter_livre(livre l,char *nomfichier)
{
FILE *fp;
livre tmp;
 if(fp=fopen(nomfichier,"a+b"))
 {
	fseek(fp,0,0);
	while(!feof(fp))
	{
		fread(&tmp,sizeof(livre),1,fp);
        if(tmp.cote==0||feof(fp))
		{
			fseek(fp,-sizeof(livre),1);
			fwrite(&l,sizeof(livre),1,fp);
	         break;
		}
	}
    fclose(fp);
 }

  else  
	 printf("erreur !!");

}

/////////////////////////////////////////////////////////:

void lister_livre(char *nomfichier)
{
FILE *fp;
livre l;
 if (fp=fopen(nomfichier,"r+b"))
 {
  fseek(fp,0,0);
    
  while(!feof(fp))
  {	
	 fread(&l,sizeof(livre),1,fp);
     
	 if(!feof(fp)&&l.cote)
	 afficher_livre(l);
	 
  }
 }
fclose(fp);

} 

/////////////////////////////////////////////////////////////////////

void modifier_livre(livre l,unsigned cote,char * nomfichier)
{
FILE *fp;
livre tmp;

  if(fp=fopen(nomfichier,"r+b"))
  {
	 fseek(fp,0,0);
	   while(!feof(fp))
	   {
		 fread (&tmp,sizeof(livre),1,fp);
			if(!feof(fp))
			{
				 if(tmp.cote==cote)
					 

				 {
					fseek(fp,-sizeof(livre),SEEK_CUR);
					fwrite(&l,sizeof(livre),1,fp);
					break;
				 } 
			}
				
			else
			
          	   printf("Enregistrement non trouvée");
	   }
	 }
	  else
	  printf("erreur");
  
  fclose(fp);
}
//////////////////////////////////////////////////////////////////////////:
void supprimer_livre(unsigned cote,char * nomfichier)
{
	livre supl={0,"",""};
		
	modifier_livre(supl,cote,nomfichier);		

}

////////////////////////////////////////////////////////
date saisir_date()
{
date d;
	printf("Donner le jour,mois ,annee");
scanf("%d%d%d",&d.jour,&d.mois,&d.annee);
return d;
}
void affiche_date(date d)
{
printf("date : %d/%d/%d",d.jour,d.mois,d.annee);
}

///////////////////////////////////////////////////////
void saisir_operation(gestionemprunt *ge,char *nomfich,char *nomfich1,char *nomfich2)
{
unsigned cot;
	printf("Donner le numero de l'operation\n");
scanf("%d",&ge->numop);

do
{
printf("Donner le type d'operator\n");
scanf("%d",&ge->typeop.type);
}
while( ge->typeop.type >2 ||ge->typeop.type <1);
printf("Date \n");
ge->dateop=saisir_date();

do
{
printf("Donner l'id du lecteur\n");
scanf("%d",&ge->idlecteur);

if ( recherche(nomfich,ge->idlecteur)==0)
printf("Id innexistant !!!");
}while(( recherche(nomfich,ge->idlecteur)==0));

do
{
printf("donner l'id du livre\n");
scanf("%d",&ge->idlivre);

if(recherche(nomfich1,ge->idlivre)==0)
printf("Cote innexistant !!!");

  
//if(recherche_livre(nomfich2,cot)==1)
//printf("deja emprunté");

  }while((recherche(nomfich1,ge->idlivre)==0));//||recherche_livre(nomfich2,cot)==1);
}

////////////////////////////////////////////////////////
void saisir__operation(gestionemprunt *ge,char *nomfich,char *nomfich1,char *nomfich2)
{

do
{
printf("Donner le numero de l'operation\n");
scanf("%d",&ge->numop);
if(existe(nomfich2,ge->numop)==1)
printf("Op existante");
}while(existe(nomfich2,ge->numop)==1);

do
{
printf("Donner le type d'operator\n");
scanf("%d",&ge->typeop.type);
}
while( ge->typeop.type >2 ||ge->typeop.type <1);
printf("Date \n");
ge->dateop=saisir_date();
do
{
printf("Donner l'id du lecteur\n");
scanf("%d",&ge->idlecteur);
if ( recherche(nomfich,ge->idlecteur)==0)
printf("Id innexistant !!!");

}while(( recherche(nomfich,ge->idlecteur)==0));

do
{
  printf("donner l'id du livre\n");
  scanf("%d",&ge->idlivre);
   if(recherche(nomfich1,ge->idlivre)==0)
   printf("Cote innexistant !!!");

if(recherche_livre(nomfich2,ge->idlivre)==1)
printf("deja emprunté"); 
   
}while((recherche(nomfich1,ge->idlivre)==0)||recherche_livre(nomfich2,ge->idlivre)==1);
}

/////////////////////////////////////////////////////////
void affiche_operation(gestionemprunt ge)
{
printf("numop : %d",ge.numop);
printf("typeop %d",ge.typeop);
printf("date :");
affiche_date(ge.dateop);
printf("id lecteur : %d ",ge.idlecteur);
printf("id livre :%d",ge.idlivre);
printf("\n");
}
/////////////////////////////////////////////////

void ajouter_operation(gestionemprunt ge,char *nomfichier)
{
FILE *fp;
gestionemprunt tmp;

 if(fp=fopen(nomfichier,"a+b"))
 {
	fseek(fp,0,0);
	while(!feof(fp))
	{
		fread(&tmp,sizeof(gestionemprunt),1,fp);
		if(feof(fp)||ge.numop==0)
		{
			fseek(fp,-sizeof(gestionemprunt),1);
			fwrite(&ge,sizeof(gestionemprunt),1,fp);
			break;
		}
	}
     fclose(fp);

 }
else  printf("erreur");
}

////////////////////////////////////////////////////////
 /*gestionemprunt efface(gestionemprunt *ge)
 {
 ge->numop=0;
 
 return *ge;
 }*/

//////////////////////////////////////////////////////////
/*void supprimer_operation(unsigned numop,char *nomfichier)
{
FILE *fp;
gestionemprunt tmp;

gestionemprunt *ge;

ge->numop=0;
 

  if(fp=fopen(nomfichier,"r+b"))
  {
  fseek(fp,0,0);
    while(!feof(fp))
	{
     fread(&tmp,sizeof(gestionemprunt),1,fp);
       if(!feof(fp))
	   {
         if(tmp.numop==numop)
		 {
		 fseek(fp,-sizeof(tmp),1);
		 fwrite(&ge,sizeof(tmp),1,fp);
         break;
		 }
       else printf("enregistrement non trouvee");
 
	   }
     fclose(fp);
	}
}else printf("erreur!!");

}*/
//////////////////////////////////////////////////////////
void modifier_operation(gestionemprunt ge,unsigned numop,char *nomfichier)
{
FILE *fp;
gestionemprunt tmp;
 if(fp=fopen(nomfichier,"r+b"))
 {
	fseek(fp,0,0);
	while(!feof(fp))
	{
		fread(&tmp,sizeof(gestionemprunt),1,fp);
		if(!feof(fp))
		{
			if(tmp.numop==numop)
			{
				fseek(fp,-sizeof(gestionemprunt),1);
				fwrite(&ge,sizeof(gestionemprunt),1,fp);
				break;
			}
			
		}
		else printf("enregistrement non trouvee");
		
	}

 }
	else printf("erreur d'ouverture");
fclose(fp); 

}
//////////////////////////////////////////////////////////
void supprimer_operation(unsigned numop,char *nomfichier)
{
gestionemprunt sup;
sup.numop=0;
sup.idlecteur=0;
sup.idlivre=0;
sup.typeop.type=0;
sup.dateop.annee=0;
sup.dateop.jour=0;
sup.dateop.mois=0;
modifier_operation(sup,numop,nomfichier);
}

/////////////////////////////////////////////////////////
void lister_operation(char *nomfichier)
{
FILE *fp;
gestionemprunt ge;
 if(fp=fopen(nomfichier,"r+b"))

 {
	 fseek(fp,0,0);
	 while(!feof(fp))
	 {
		 fread(&ge,sizeof(gestionemprunt),1,fp);
		 if(ge.numop!=0 && !feof(fp))
	        affiche_operation(ge);
	 }
     fclose(fp);
 }
else printf("erreur");
}

///////////////////////////////////////////////////////////

void main()
{
char nomfich[10];
char nomfich1[10];
char nomfich2[10];
lecteur l;
int choix;
unsigned id;

livre lv;
unsigned cote;

gestionemprunt ge;
unsigned numop;
unsigned cot;
unsigned num;
printf("donner le nom du fichier a creer pour lecteur\n ");
scanf("%s",nomfich);
printf("donner le nom du fichier a creer pour livre\n ");
scanf("%s",nomfich1);

printf("donner le nom du fichier a creer pour la gestion\n ");
scanf("%s",nomfich2);

 do
 {
	
	 printf("donner votre choix : \n");
	printf("1: pour ajouter ,2 : pour modifier ,3 : pour supprimer ,4 pour lister  \n");
	printf("5: pour ajouter livre ,6: pour modifier livre,7:pour supprimer livre,8:pour lister livre \n");
printf("9 : pour ajouter operation ,10 :modifier operation 11 : supprimer operation ,12 lister operation \n");

	scanf("%d",&choix);

switch(choix)
{
case 1 : saisir__lecteur(&l,nomfich);
	     ajouter_lecteur(l,nomfich);
         

break;

case 2: saisir_lecteur(&l);
	   
	printf("donner l'id a chercher \n");
	scanf("%u",&id);
	
	if ( recherche(nomfich,l.id)==0 ||  l.id==id )	
		
		modifier_lecteur(l,id,nomfich);
		else printf("Cle EXISTE");

		break;

case 3: printf("donner l'id a chercher \n");
	    scanf("%u",&id);
	    supprimer_lecteur(id,nomfich);
        
		while(existe(nomfich2,id)==1)
		{num=test1(nomfich2,id);
		supprimer_operation(num,nomfich2);
		}
		break;

case 4:lister_lecteur(nomfich);
break;

case 5 : saisir__livre(&lv,nomfich1);
	     if ( recherche(nomfich1,lv.cote)==0)
	      ajouter_livre(lv,nomfich1);
else      printf("Cote EXISTANT");
		 break;

case 6: saisir_livre(&lv);
		
	    printf("donner le cote a chercher \n");
	    scanf("%u",&cote);
	     if ( recherche(nomfich1,lv.cote)==0 ||cote==lv.cote)
		modifier_livre(lv,cote,nomfich1);
		else printf("Cote EXISTE");
		 break;

case 7: printf("donner le  cote a chercher \n");
	    scanf("%u",&cote);
	    supprimer_livre(cote,nomfich1);
        
		//while(existe(nomfich2,cote)==1)
         //{
		 //num=test1(nomfich2,cote);
		 //supprimer_operation(num,nomfich2);
		 //}
		break;

case 8:lister_livre(nomfich1);
break;
	
case 9 :saisir__operation(&ge,nomfich,nomfich1,nomfich2); 
	    ajouter_operation(ge,nomfich2);
		
break;

case 10 :saisir_operation(&ge,nomfich,nomfich1,nomfich2);
	
	printf("donner le numero d'operation à modifier\n");
	scanf("%d",&numop);
    cot=test(nomfich2,numop);
	if ( existe(nomfich2,ge.numop)==0||numop==ge.numop)
	 if(cot==ge.idlivre||recherche_livre(nomfich2,ge.idlivre)==0)
		modifier_operation(ge,numop,nomfich2);  
         else printf("Livre deja emprunte");	
		
			 else printf("Op EXISTE");
		 
	break;

case 11 :printf("Donner le num d'operateur a supprimer \n");
	scanf("%d",&ge.numop);
	supprimer_operation(ge.numop,nomfich2);
break;

case 12:
lister_operation(nomfich2);
break;
} 
 }while(choix!=13);

}

Conclusion :


,mais son defaut qu'il y on a des contraintes qui ne sont pas encore traités , et je cherche une aide .
ce code sera termine dans 3 semaines au max

Codes Sources

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.