Baixe o app para aproveitar ainda mais
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; }
Compartilhar