Buscar

biblioteca

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

struct info_aluno
{
char sigla;
char RA[7];
int dia_ret; // dia – máx=31
int mes_ret; // mes: fev=28 dias
int dia_dev; // mes: abril=jun=set=nov=30 dias
int mes_dev; // os demais = 31 dias
};
struct info_livro
{
char sigla; // [L]ivre, [E]mprestado, [R]eservado
int reg; // registro do livro
};
typedef struct aluno
{
char nome[80];
char RA[7];
int emprestado; 
int reservado; 
struct info_livro tabela[4]; 
}aluno; 
typedef struct livro
{
int reg; // gerado automaticamente
char titulo[80];
char autor[80];
struct info_aluno status[2]; //Obs.: (p->status+i)->sigla
} livro;
//-----------------------------Alunos-----------//
 //
void aloca_alunos(aluno **p, int quant); //
void cadastra_aluno(aluno *p_alu); //
void grava_aluno(aluno *p_aluno); //
int conta_cadastros_de_alunos(); //
void mostra_alunos(aluno *p, int qtde); //
void consulta_parcial_RA(aluno *p, int qtde); // 
//----------------------------------------------//
//-----------------------------Livros---------------------//
void aloca_livros(livro **p, int quant); //
void cadastra_livros(livro *p_liv); //
void grava_livro(livro *p_liv); // 
void mostra_livros(livro *p_liv,int qtde); //
int conta_livros_cadastrados(); //
void consulta_parcial_por_registro(livro *p, int qtde); //
void consulta_livro_por_titulo(livro *p,int qtde); //
void consulta_livro_por_sigla(livro *p,int qtde); //
//--------------------------------------------------------//
void empresta_reserva(aluno *ptr_aluno,livro *ptr_livro);
int busca_espaco_em_alunos(aluno *p,int RA);
int main()
{
char op;
int opcao;
int escolha;
int tam=0;
int tamlivros=0;
aluno *ptr_aluno=NULL;
livro *ptr_livro=NULL;
aloca_livros(&ptr_livro,1);
aloca_alunos(&ptr_aluno,1);
do
{
tam=conta_cadastros_de_alunos();
tamlivros=conta_livros_cadastrados();
 fflush(stdin);
 printf("\n [1]- Cadastra aluno \n [2]- Cadastrar Livros \n [3]- Consultar cadastros \n [4]- Consultar acervo\n [5]- Emprestar/Reservar\n\n\n");
 scanf("%i", &opcao);
 fflush(stdin);
 system("cls");
 switch (opcao)
 {
 case 1:
 printf("\n Voce optou pela opcao cadastra aluno\n\n");
 cadastra_aluno(ptr_aluno);
 break;
 case 2:
 printf("\n Voce optou pela opcao cadastra livro");
 cadastra_livros(ptr_livro);
 break;
 case 3:
 printf("\n Qual o tipo de consulta que deseja realizar?\n[1]-Total\n[2]-Parcial");
 scanf("%i", &escolha);
 if(escolha==1)
 {
 printf("\n Voce optou pela opcao consultar cadastro de alunos");
 mostra_alunos(ptr_aluno,tam);
 }
 else if(escolha==2)
 {
 printf("\n Voce optou pelo cadastro parcial");
 consulta_parcial_RA(ptr_aluno,tamlivros);
 }
 break;
 case 4:
 printf("\n[1]-Consulta Total\n[2]-Consulta parcial (registro)\n[3]-Consulta parcial (titulo)\n[4]-Consulta parcial (silga(L/R/E))");
 scanf("%i", &escolha);
 if(escolha==1)
 {
 printf("\n Voce optou pela opcao de consultar todos os livros do acervo");
 mostra_livros(ptr_livro,tamlivros);
 }
 else if(escolha==2)
 {
 printf("\n Voce optou pelo cadastro parcial de livros por registro");
 consulta_parcial_por_registro(ptr_livro,tamlivros);
 }
 else if (escolha==3)
 {
 printf("\n Voce optou pelo cadastro parcial de livros por titulo");
 consulta_livro_por_titulo(ptr_livro,tamlivros);
 }
 else if(escolha==4)
 {
 printf("\n Voce optou pelo cadastro parcial de livros por sigla");
 consulta_livro_por_sigla(ptr_livro,tamlivros);
 }
 break;
 case 5:
 empresta_reserva(ptr_aluno,ptr_livro);
 break;
 default:
 break;
 }
 fflush(stdin);
 printf("\n deseja continuar?");
 scanf("%c", &op);
 fflush(stdin);
 system("cls");
} while (op!='n' && op!= 'N');
}
void aloca_alunos(aluno **p, int quant)
{
 if((*p= (aluno *)realloc(*p,quant*sizeof(aluno)))==NULL)
 {
 printf(" \n erro na alocação de memoria para alunos");
 exit(1);
 }
 
}
void cadastra_aluno(aluno *p_alu)
{
printf("\n");
system("cls");
printf("\n Digite o nome do aluno a ser cadastrado: ");
gets(p_alu->nome);
printf("\n Digite o RA do aluno em questao : ");
gets(p_alu->RA);
p_alu->emprestado=0;
p_alu->reservado=0;
(p_alu->tabela+0)->sigla= 'L';
(p_alu->tabela+1)->sigla= 'L';
(p_alu->tabela+2)->sigla= 'L';
(p_alu->tabela+3)->sigla= 'L';
(p_alu->tabela+0)->reg=0;
(p_alu->tabela+1)->reg=0;
(p_alu->tabela+2)->reg=0;
(p_alu->tabela+3)->reg=0;
grava_aluno(p_alu);
}
void grava_aluno(aluno *p_aluno)
{
FILE *fptr=NULL;
if((fptr=fopen("alunos.bin","ab"))==NULL){printf("\n Erro ao inicializar o arquivo bin");}
else{fwrite(p_aluno,sizeof(aluno),1,fptr);}
fclose(fptr);
}
int conta_cadastros_de_alunos()
{
FILE *fptr;
int f=0;
if((fptr=fopen("alunos.bin", "rb"))==NULL)
{
 printf("\n Erro ao abiri aqruivo bin");
}
else
{
fseek(fptr,0,2);
f=ftell(fptr)/sizeof(aluno);
fclose(fptr);
}
fclose(fptr);
return f;
}
void mostra_alunos(aluno *p, int qtde)
{
 FILE *fptr;
 int i;
 int j;
 if((fptr=fopen("alunos.bin","rb"))==NULL)
 {
 }
 else
 {
 for(i=0;i<qtde;i++)
 {
 fseek(fptr,i*sizeof(aluno),0);
 fread(p,sizeof(aluno),1,fptr);
 printf("\n Nome: %s \n RA: %s \n Emprestado: %i \n Reservado: %i", p->nome,p->RA,p->emprestado,p->reservado);
 for (j = 0; j <4; j++)
 {
 printf("\nTabelas: sigla %c------ reg %i \n", (p->tabela+j)->sigla,(p->tabela+j)->reg);
 }
 }
 
 }
 
}
void cadastra_livros(livro *p_liv)
{
int registro=0;
registro=conta_livros_cadastrados()+1;
p_liv->reg=registro;
printf("\n Digite o autor : ");
fflush(stdin);
gets(p_liv->autor);
fflush(stdin);
printf("\n Digite o nome da obra: ");
fflush(stdin);
gets(p_liv->titulo);
fflush(stdin);
(p_liv->status+0)->sigla='L';
(p_liv->status+1)->sigla='L';
(p_liv->status+0)->dia_ret=0;
(p_liv->status+0)->mes_ret=0;
(p_liv->status+0)->dia_dev=0;
(p_liv->status+0)->mes_dev=0;
(p_liv->status+1)->dia_ret=0;
(p_liv->status+1)->mes_ret=0;
(p_liv->status+1)->dia_dev=0;
(p_liv->status+1)->mes_dev=0;
 
printf("%c", p_liv->status->sigla);
grava_livro(p_liv);
}
int conta_livros_cadastrados()
{
FILE *fptr;
int f=0;
if((fptr=fopen("livros.bin","rb"))==NULL)
{
 printf("\n Falha ao abrir arquivo binario");
}
else
{
 fseek(fptr,0,2);
 f=ftell(fptr)/sizeof(livro);
 fseek(fptr,0,0);
 fclose(fptr);
 return f;
}
fclose(fptr);
return f;
}
void grava_livro(livro *p_liv)
{
FILE *fptr=NULL;
if((fptr=fopen("livros.bin", "ab"))==NULL)
{
 printf("\n Erro ao abrir arquivo");
}
else
{
 fwrite(p_liv,sizeof(livro),1,fptr);
 
}
fclose(fptr);
}
void aloca_livros(livro **p, int quant)
{
 if((*p= (livro *)realloc(*p,quant*sizeof(livro)))==NULL)
 {
 printf(" \n erro na alocação de memoria para livros");
 exit(1);
 }
}
void mostra_livros(livro *p_liv,int qtde)
{
 printf("\n Funcao mostra livros");
 FILE *fptr=NULL;
 int i;
 
 if((fptr=fopen("livros.bin","rb"))==NULL)
 {
 printf("\n Erro ao abrir arquivo");
 }
 else
 {
 for(i=0;i<qtde;i++)
 {
 
 fseek(fptr,i*sizeof(livro),0);
 fread(p_liv,sizeof(livro),1,fptr);
 printf("\n Titulo: %s \n Autor: %s \n Registro: %.4i \n", p_liv->titulo,p_liv->autor,p_liv->reg);
 printf(" sigla
-%c\n",(p_liv->status+0)->sigla);
 printf(" sigla -%c\n",(p_liv->status+1)->sigla);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p_liv->status+0)->dia_ret,(p_liv->status+0)->mes_ret,(p_liv->status+0)->dia_dev,(p_liv->status+0)->mes_dev);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p_liv->status+1)->dia_ret,(p_liv->status+1)->mes_ret,(p_liv->status+1)->dia_dev,(p_liv->status+1)->mes_dev);
 
 }
 fclose(fptr);
 }
 fclose(fptr);
}
void consulta_parcial_RA(aluno *p, int qtde)
{
 FILE *fptr;
 
 int j;
 char RAlocal[7];
 printf("\n Digite o Ra");
 fflush(stdin);
 gets(RAlocal);
 fflush(stdin);
 if((fptr=fopen("alunos.bin","rb"))==NULL)
 {
 printf("\n Erro ao abrir o arquivo bin");
 }
 else
 {
 for(j=0;j<qtde;j++)
 fseek(fptr,j*sizeof(aluno),0);
 fread(p,sizeof(aluno),1,fptr);
 
 if(strcmp(RAlocal,p->RA)==0)
 {
 printf("\nNome: %s", p->nome);
 printf("\n Emprestados: %i - Reservados: %i", p->emprestado,p->reservado);
 printf("\n Tabela 1 : %c ----- %i", (p->tabela+0)->sigla,(p->tabela+0)->reg);
 printf("\n Tabela 2 : %c ----- %i", (p->tabela+1)->sigla,(p->tabela+1)->reg);
 printf("\n Tabela 3 : %c ----- %i", (p->tabela+2)->sigla,(p->tabela+2)->reg);
 printf("\n Tabela 4 : %c ----- %i", (p->tabela+3)->sigla,(p->tabela+3)->reg);
 }
 else
 {
 printf("\n RA nao encontrado");
 }
 }
 fclose(fptr);
 }
void consulta_parcial_por_registro(livro *p, int qtde)
{
 FILE *fptr;
 int Reg;
 int i;
 printf("\n Insira o titulo do livro que deseja buscar");
 fflush(stdin);
 scanf("%i", &Reg);
 fflush(stdin);
 if((fptr=fopen("livros.bin","rb"))==NULL)
 {
 printf("\n erro ao abrir arquivo bin");
 }
 else
 {
 for (i = 0; i < qtde; i++)
{
 fseek(fptr,i*sizeof(livro),0);
 fread(p,sizeof(livro),1,fptr);
 if (Reg==(p->reg))
 {
 printf("\n Titulo: %s \n Autor: %s \n Registro: %.4i \n", p->titulo,p->autor,p->reg);
 printf(" sigla -%c\n",(p->status+0)->sigla);
 printf(" sigla -%c\n",(p->status+1)->sigla);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p->status+0)->dia_ret,(p->status+0)->mes_ret,(p->status+0)->dia_dev,(p->status+0)->mes_dev);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p->status+1)->dia_ret,(p->status+1)->mes_ret,(p->status+1)->dia_dev,(p->status+1)->mes_dev);
 }
 else
 {
 printf("\n Registro nao encontrado");
 }
 
}
}
 
 fclose(fptr);
}
void consulta_livro_por_titulo(livro *p,int qtde)
{
 FILE *fptr;
 char titulo[80];
 int i;
 printf("\n Insira o titulo do livro que deseja buscar");
 fflush(stdin);
 gets(titulo);
 fflush(stdin);
 if((fptr=fopen("livros.bin","rb"))==NULL)
 {
 printf("\n erro ao abrir arquivo bin");
 }
 else
 {
 for (i = 0; i < qtde; i++)
{
 fseek(fptr,i*sizeof(livro),0);
 fread(p,sizeof(livro),1,fptr);
 if(strcmp(titulo,p->titulo)==0)
 {
 printf("\n Titulo: %s \n Autor: %s \n Registro: %.4i \n", p->titulo,p->autor,p->reg);
 printf(" sigla -%c\n",(p->status+0)->sigla);
 printf(" sigla -%c\n",(p->status+1)->sigla);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p->status+0)->dia_ret,(p->status+0)->mes_ret,(p->status+0)->dia_dev,(p->status+0)->mes_dev);
 printf("\n Retirada em: %i/%i | Devolucao em %i/%i",(p->status+1)->dia_ret,(p->status+1)->mes_ret,(p->status+1)->dia_dev,(p->status+1)->mes_dev);
 break;
 }
 else
 
 {
 printf("Titulo nao encontrado");
 }
}
}
 
 fclose(fptr);
}
void consulta_livro_por_sigla(livro *p,int qtde)
{
 FILE *fptr;
 int i;
 int op;
 printf("\n Insira o status do livro que deseja buscar");
 printf("\n[1]- L-(LIVRE)\n[2]- E-(EMPRESTADO)\n[3]-R(RESERVADO)");
 fflush(stdin);
 scanf("%i",&op);
 fflush(stdin);
 fflush(stdin);
 if((fptr=fopen("livros.bin","rb"))==NULL)
 {
 printf("\n erro ao abrir arquivo bin");
 }
 else
 {
 if(op==1)
 {
 printf("\n Buscando pela sigla L");
 for ( i=0;i<qtde;i++)
 {
 fseek(fptr,i*sizeof(livro),0);
 fread(p,sizeof(livro),1,fptr);
 if ((p->status)->sigla=='L')
 {
 printf("\nRegistro: %i\nTitulo: %s\nAutor: %s \nSigla 1: %c\nSigla 2: %c\n\n", p->reg,p->titulo,p->autor,(p->status+0)->sigla,(p->status+1)->sigla);
 break;
 }
 else
 {
 printf("\n Nada encontrado");
 break;
 }
 
 }
 }
 if(op==2)
 {
 printf("\n Buscando pela sigla E");
 for ( i=0;i<qtde;i++)
 {
 fseek(fptr,i*sizeof(livro),0);
 fread(p,sizeof(livro),1,fptr);
 if ((p->status)->sigla=='E')
 {
 printf("\nRegistro: %i\nTitulo: %s\nAutor: %s \nSigla 1: %c\nSigla 2: %c\n\n", p->reg,p->titulo,p->autor,(p->status+0)->sigla,(p->status+1)->sigla);
 }
 else
 {
 printf("\n Nada encontrado");
 break;
 }
 
 }
 }
 if(op==3)
 {
 printf("\n Buscando pela sigla R");
 for ( i=0;i<qtde;i++)
 {
 fseek(fptr,i*sizeof(livro),0);
 fread(p,sizeof(livro),1,fptr);
 if ((p->status)->sigla=='R')
 {
 printf("\nRegistro: %i\nTitulo: %s\nAutor: %s \nSigla 1: %c\nSigla 2: %c\n\n", p->reg,p->titulo,p->autor,(p->status+0)->sigla,(p->status+1)->sigla);
 }
 else
 {
 printf("\n Nada encontrado");
 break;
 }
 
 }
 }
 
 }
 
fclose(fptr);
}
void empresta_reserva(aluno *ptr_aluno,livro *ptr_livro)
{
FILE *fptr;
FILE *aux;
char RA[7];
char titulo[80];
int i=0;
int j=0;
int posialunos=0;
int posilivros=0;
int livre= 0;
int contalunos=conta_cadastros_de_alunos();
int contalivros=conta_livros_cadastrados();
if((fptr=fopen("alunos.bin","rb"))==NULL)
{
 printf("\n Falha ao abrir arquivo bin");
}
else
{
 printf("\n Digite o RA que deseja acesar: ");
 fflush(stdin);
 gets(RA);
 fflush(stdin);
 for ( i = 0; i < contalunos; i++)
 {
 fseek(fptr,i*sizeof(aluno),0);
 fread(ptr_aluno,sizeof(aluno),1,fptr);
 if(strcmp(RA,ptr_aluno->RA)==0)
 {
 printf("\n Aluno encontrado");
 posialunos=i;
 break;
 }
 else
 {
 printf("\n Cadastro nao encontrado");
 fclose(fptr);
 exit(1);
 }
 }
 
}
fclose(fptr);
if((fptr=fopen("livros.bin","rb"))==NULL)
{
 printf("\n Falha ao abrir arquivo bin");
}
else
{
 printf("\n Digite o Titulo do livro que deseja acesar: ");
 fflush(stdin);
 gets(titulo);
 fflush(stdin);
 for ( j = 0; j < contalivros; j++)
 {
 fseek(fptr,j*sizeof(livro),0);
 fread(ptr_livro,sizeof(livro),1,fptr);
 if(strcmp(titulo,ptr_livro->titulo)==0)
 {
 printf("\n Livro encontrado");
 posilivros=j;
 break;
 }
 else
 {
 printf("\n Livro nao encontrado");
 
 }
 
 }
 
}
fclose(fptr);
///////////gravação
if((fptr=fopen("livros.bin","rb+"))==NULL)
{
printf("\n Falha ao abrir
arquivo bin");
}
else
{ 
 if((aux=fopen("alunos.bin","rb+"))==NULL)
 {
 printf("\n Nao foi possivel abrir o arquivo bin");
 }
 else
 {
 
 fseek(fptr,posilivros*sizeof(livro),0);
 fread(ptr_livro,sizeof(livro),1,fptr);
 if((ptr_livro->status+0)->sigla =='L')
 {
 
 (ptr_livro->status+0)->sigla='E';
 fseek(fptr,posilivros*sizeof(livro),0);
 fwrite(ptr_livro,sizeof(livro),1,fptr);
 }
 else if ((ptr_livro->status+0)->sigla =='E' && (ptr_livro->status+1)->sigla=='L' )
 {
 printf("\n Nao podemos emprestar este livro pois ja esta emprestado, porem livre para reseva");
 (ptr_livro->status+1)->sigla='R';
 fseek(fptr,posilivros*sizeof(livro),0);
 fwrite(ptr_livro,sizeof(livro),1,fptr);
 }
 else if((ptr_livro->status+1)->sigla=='R')
 {
 printf("\n Livro reservado, lamentamos..");
 }
 }
 fclose(aux);
}
fclose(fptr);
}
int busca_espaco_em_alunos(aluno *p,int RA) // retorn valor para incrementar em status sigla e verificar espaços livres
{
FILE *fptr;
int i;
int j;
int cont=0;
int quant=conta_cadastros_de_alunos();
if(fptr=fopen("alunos.bin","rb")==NULL)
{
 printf("erro ao abrir arquivo bin");
}
else
{
 for ( i = 0; i < 4; i++)
 {
 fseek(fptr,i*sizeof(aluno),0);
 fread(p,sizeof(aluno),1,fptr);
 if(strcmp(RA,p->RA)==0) 
 {
 for ( j = 0; j < 4; j++)
 {
 if((p->tabela+j)->sigla=='L')
 cont++;
 }
 
 } 
 }
 
}
return cont;
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando