Boa tarde tenho um código de um trabalho de faculdade, onde preciso fazer uma busca em um segundo arquivo.
O código é para gerenciar uma livraria e a função que estou empacado é a de listarLivros(), onde no cadastro de livros eu tenho o código da categoria, editora e autores, eu precisava trazer a descrição e nome deles e não os códigos e não estou sabendo montar.
segue a função em questão e em seguida o código completo.
void listarLivros(){
FILE *fpLivro;
FILE *fpCategorias;
FILE *fpEditoras;
FILE *fpAutores;
struct c_livro livro;
struct c_categorias categoria;
int n, chave;
char desc[30], c;
fpLivro = fopen(LIVROS,"rb");
fpCategorias = fopen(CATEGORIAS,"rb");
printf("\n * * * Relatorio de Todos os Livros * * *\n");
printf("\n--------------------------------------");
printf("\nCodigo Titulo ");
printf("\n--------------------------------------");
while (fread(&livro,sizeof(livro),1,fpLivro)==1){
printf("\n%-6i | %-30s | %-5i",livro.codigo,livro.titulo,livro.codigoCategoria);
}
fclose(fpLivro);
fclose(fpCategorias);
printf("\n\n\n\n");
system("pause");
}
Aqui em baixo segue o código completo:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define LIVROS "Livros.dat"
#define AUTORES "Autores.dat"
#define CATEGORIAS "Categorias.dat"
#define EDITORAS "Editoras.dat"
struct c_livro{
int codigo;
char titulo [30];
float preco;
int codigoAutor1;
int codigoAutor2;
int codigoAutor3;
int codigoAutor4;
int codigoCategoria;
int codigoEditora;
int edicao;
int anoPublicacao;
int quantidadeEstoque;
};
struct c_autores{
int codigo;
char sobrenome [30];
char nome [30];
};
struct c_categorias{
int codigo;
char descricao [30];
};
struct c_editoras{
int codigo;
char nome [30];
char contato [10];
char telefone [10];
char email [10];
};
void cadLivros(){
FILE *fpLivro;
struct c_livro livro;
char opc;
int q=0,i=0;
printf("\n--*-*-*- Cadastro de Livro -*-*-*--\n");
printf("\nInforme o Codigo ou digite 0 para retornar: ");
fflush(stdin);
scanf("%i",&livro.codigo);
i = livro.codigo;
if (i==0){
system("cls");
return;
}
printf("Informe o Titulo: ");
fflush(stdin);
gets(livro.titulo);
printf("Informe o Preco: ");
fflush(stdin);
scanf("%f",&livro.preco);
printf("Quantos autores sera cadastrados? (1 a 4): ");
scanf("%i",&q);
if (q==1){
printf("Informe o codigo do Autor 1: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor1);
}
else if (q==2){
printf("Informe o codigo do Autor 1: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor1);
printf("Informe o codigo do Autor 2: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor2);
}
else if (q==3){
printf("Informe o codigo do Autor 1: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor1);
printf("Informe o codigo do Autor 2: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor2);
printf("Informe o codigo do Autor 3: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor3);
}
else if (q==4){
printf("Informe o codigo do Autor 1: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor1);
printf("Informe o codigo do Autor 2: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor2);
printf("Informe o codigo do Autor 3: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor3);
printf("Informe o codigo do Autor 4: ");
fflush(stdin);
scanf("%i",&livro.codigoAutor4);
}
printf("Informe o codigo da categoria: ");
fflush(stdin);
scanf("%i",&livro.codigoCategoria);
printf("Informe o codigo da editora: ");
fflush(stdin);
scanf("%i",&livro.codigoEditora);
printf("Informe a edicao: ");
fflush(stdin);
scanf("%i",&livro.edicao);
printf("Informe o ano de publicacao (AAAA): ");
fflush(stdin);
scanf("%i",&livro.anoPublicacao);
printf("Informe a quantidade em estoque: ");
fflush(stdin);
scanf("%i",&livro.quantidadeEstoque);
printf("\nSalvar?(S/N) ");
fflush(stdin);
scanf("%c",&opc);
if ((opc!='S')&&(opc!='s')){
printf("\nOperacao Cancelada!");
return;
}
fpLivro = fopen("Livros.dat","ab");
fwrite(&livro,sizeof(livro),1,fpLivro);
fclose(fpLivro);
printf("\nLivro cadastrado com sucesso.");
system("cls");
}
void cadAutores(){
FILE *fpAutores;
struct c_autores autor;
char opc;
int i;
printf("\n--*-*-*- Cadastro de Autores -*-*-*--\n");
printf("\nInforme o Codigo ou digite 0 para retornar: ");
fflush(stdin);
scanf("%i",&autor.codigo);
i = autor.codigo;
if (i==0){
system("cls");
return;
}
printf("Informe o nome: ");
fflush(stdin);
gets(autor.nome);
printf("Informe o sobrenome: ");
fflush(stdin);
gets(autor.sobrenome);
printf("\nSalvar?(S/N) ");
fflush(stdin);
scanf("%c",&opc);
if ((opc!='S')&&(opc!='s')){
printf("\nOperacao Cancelada!");
return;
}
fpAutores = fopen("Autores.dat","ab");
fwrite(&autor,sizeof(autor),1,fpAutores);
fclose(fpAutores);
printf("\nAutor cadastrado com sucesso.");
system("cls");
}
void cadCategorias(){
FILE *fpCategorias;
struct c_categorias categoria;
char opc;
int i;
printf("\n--*-*-*- Cadastro de Categorias -*-*-*--\n");
printf("\nInforme o Codigo ou digite 0 para retornar: ");
fflush(stdin);
scanf("%i",&categoria.codigo);
i = categoria.codigo;
if (i==0){
system("cls");
return;
}
printf("Informe a descricao: ");
fflush(stdin);
gets(categoria.descricao);
printf("\nSalvar?(S/N) ");
fflush(stdin);
scanf("%c",&opc);
if ((opc!='S')&&(opc!='s')){
printf("\nOperacao Cancelada!");
return;
}
fpCategorias = fopen("Categorias.dat","ab");
fwrite(&categoria,sizeof(categoria),1,fpCategorias);
fclose(fpCategorias);
printf("\nCategoria cadastrada com sucesso.");
system("cls");
}
void cadEditoras(){
FILE *fpEditoras;
struct c_editoras editora;
char opc;
int i;
printf("\n--*-*-*- Cadastro de Editoras -*-*-*--\n");
printf("\nInforme o Codigo ou digite 0 para retornar: ");
fflush(stdin);
scanf("%i",&editora.codigo);
i = editora.codigo;
if (i==0){
system("cls");
return;
}
printf("Informe o nome: ");
fflush(stdin);
gets(editora.nome);
printf("Informe o contato: ");
fflush(stdin);
gets(editora.contato);
printf("Informe o telefone: ");
fflush(stdin);
gets(editora.telefone);
printf("Informe o email: ");
fflush(stdin);
gets(editora.email);
printf("\nSalvar?(S/N) ");
fflush(stdin);
scanf("%c",&opc);
if ((opc!='S')&&(opc!='s')){
printf("\nOperacao Cancelada!");
return;
}
fpEditoras = fopen("Editoras.dat","ab");
fwrite(&editora,sizeof(editora),1,fpEditoras);
fclose(fpEditoras);
printf("\nEditora cadastrada com sucesso.");
system("cls");
}
void listarLivros(){
FILE *fpLivro;
FILE *fpCategorias;
FILE *fpEditoras;
FILE *fpAutores;
struct c_livro livro;
struct c_categorias categoria;
int n, chave;
char desc[30], c;
fpLivro = fopen(LIVROS,"rb");
fpCategorias = fopen(CATEGORIAS,"rb");
printf("\n * * * Relatorio de Todos os Livros * * *\n");
printf("\n--------------------------------------");
printf("\nCodigo Titulo ");
printf("\n--------------------------------------");
while (fread(&livro,sizeof(livro),1,fpLivro)==1){
printf("\n%-6i | %-30s | %-5i",livro.codigo,livro.titulo,livro.codigoCategoria);
}
fclose(fpLivro);
fclose(fpCategorias);
printf("\n\n\n\n");
system("pause");
}
void listarCategorias(){
FILE *fpCategoria;
struct c_categorias categoria;
fpCategoria = fopen(CATEGORIAS,"rb");
printf("\n * * * Relatorio de Todos as Categorias * * *\n");
printf("\n--------------------------------------");
printf("\nCodigo Descricao ");
printf("\n--------------------------------------");
while (fread(&categoria,sizeof(categoria),1,fpCategoria)==1){
printf("\n%-6i | %-30s",categoria.codigo ,categoria.descricao);
}
fclose(fpCategoria);
printf("\n\n\n\n");
system("pause");
}
void listarAutores(){
FILE *fpAutores;
struct c_autores autor;
fpAutores = fopen(AUTORES,"rb");
printf("\n * * * Relatorio de Todos os Autores * * *\n");
printf("\n--------------------------------------");
printf("\nCodigo Sobrenome ,Nome");
printf("\n--------------------------------------");
while (fread(&autor,sizeof(autor),1,fpAutores)==1){
printf("\n%-6i | %-10s, %s",autor.codigo,autor.sobrenome,autor.nome);
}
fclose(fpAutores);
printf("\n\n\n\n");
system("pause");
}
void listarEditoras(){
FILE *fpEditoras;
struct c_editoras editora;
fpEditoras = fopen(EDITORAS,"rb");
printf("\n * * * Relatorio de Todos as Editoras * * *\n");
printf("\n-------------------------------------------------");
printf("\nCodigo nome Contato");
printf("\n-------------------------------------------------");
while (fread(&editora,sizeof(editora),1,fpEditoras)==1){
printf("\n%-6i | %-30s %s",editora.codigo,editora.nome,editora.contato);
}
fclose(fpEditoras);
printf("\n\n\n\n");
system("pause");
}
void excluirCategoria(){
FILE *fpCategorias, *fpCategoriasTemp;
struct c_categorias categoria;
int cod, achou=0, i;
char opc;
printf("\nDigite o Codigo da categoria a ser EXCLUIDA ou 0 para retornar: ");
fflush(stdin);
scanf("%i",&cod);
i = cod;
if (i==0){
system("cls");
return;
}
fpCategorias = fopen(CATEGORIAS,"rb");
while ((achou==0)&&(fread(&categoria,sizeof(categoria),1,fpCategorias)==1)){
if (categoria.codigo == cod){
printf("\nCodigo: %i",categoria.codigo);
printf("\nDescricao: %s",categoria.descricao);
achou=1;
}
}
fclose(fpCategorias);
if (!achou){
printf("\n Categoria não Localizada!!");
return;
}
printf("\nConfirma Exclusao?(S/N) ");
fflush(stdin); scanf("%c",&opc);
if ((opc!='S')&&(opc!='s')){
printf("\nEXCLUSAO Cancelada.");
return;
}
fpCategorias = fopen(CATEGORIAS,"rb");
fpCategoriasTemp = fopen("CategoriasTemp.dat","wb");
while(fread(&categoria,sizeof(categoria),1,fpCategorias)==1){
if (categoria.codigo!=cod)
fwrite(&categoria,sizeof(categoria),1,fpCategoriasTemp);
}
fclose(fpCategorias);
fclose(fpCategoriasTemp);
system("del Categorias.dat");
system("ren CategoriasTemp.dat Categorias.dat");
printf("\nCategoria Excluida com Sucesso.");
}
void consTituloPChave(){
FILE *fplivro;
struct c_livro livro;
char palavra[30];
int achou=0, i;
printf("\nDigite a Palavra-Chave ou 0 para retornar: ");
fflush(stdin);
gets(palavra);
i = livro.codigo;
if (i==0){
system("cls");
return;
}
fplivro = fopen(LIVROS,"rb");
while (fread(&livro,sizeof(livro),1,fplivro)==1){
if (strstr(livro.titulo,palavra)!=NULL){
achou++;
if (achou==1){
printf("\nCodigo Titulo");
}
printf("\n%-6i %-30s",livro.codigo,livro.titulo);
}
}
if (achou==0){
printf("\nNenhum Livro Encontrado com a palavra %s no Titulo.",palavra);
}
fclose(fplivro);
printf("\n\n\n\n");
system("pause");
}
void consAutor(){
FILE *fpAutores;
struct c_autores autor;
int achou=0,i;
char nom[50], temp[50];
printf("\nConsulta de Autor\n\n\n ");
printf("\nDigite o nome ou inicio do nome do autor a ser Localizado: ");
fflush(stdin);
gets(nom);
fpAutores = fopen(AUTORES,"rb");
while ((achou==0)&&(fread(&autor,sizeof(autor),1,fpAutores)==1)){
if (strstr(autor.nome,nom)!=NULL){
printf("\nNome: %s",autor.nome);
printf("\nSobrenome: %s",autor.sobrenome);
achou=1;
}
}
if (!achou){
printf("\n Autor não Localizado!!\n\n\n\n\n\n\n");
}
fclose(fpAutores);
printf("\n\n\n\n");
system("pause");
system("cls");
}
main(){
int op;
do{
printf("\n\n # # # Livraria # # # \n");
printf("\n-------------------------------------------------------");
printf("\n\n # # # MENU PRINCIPAL # # # \n");
printf("\n---------------------------------");
printf("\n CADASTROS ");
printf("\n---------------------------------");
printf("\n 1 --> Cadastro de Livros");
printf("\n 2 --> Cadastro de Autores");
printf("\n 3 --> Cadastro de Categorias");
printf("\n 4 --> Cadastro de Editoras");
printf("\n----------------------------------");
printf("\n RELATORIOS ");
printf("\n----------------------------------");
printf("\n 5 --> Listar todos os Livros");
printf("\n 6 --> Listar todos os Autores");
printf("\n 7 --> Listar todos as Categorias");
printf("\n 8 --> Listar todos as Editoras");
printf("\n--------------------------------");
printf("\n EXCLUSAO ");
printf("\n--------------------------------");
printf("\n 9 --> Excluir Categoria");
printf("\n---------------------------------");
printf("\n CONSULTAS ");
printf("\n---------------------------------");
printf("\n 10 --> Consultar Livro por Palavra-Chave no Titulo");
printf("\n 11 --> Consultar autor por inicial do nome");
printf("\n\n------------SAIR------------");
printf("\n\n 0 --> Sair");
printf("\n\n opcao --> ");
fflush(stdin); scanf("%i",&op);
switch(op){
case 1:
system("cls");
cadLivros();
break;
case 2:
system("cls");
cadAutores();
break;
case 3:
system("cls");
cadCategorias();
break;
case 4:
system("cls");
cadEditoras();
break;
case 5:
system("cls");
listarLivros();
break;
case 6:
system("cls");
listarAutores();
break;
case 7:
system("cls");
listarCategorias();
break;
case 8:
system("cls");
listarEditoras();
break;
case 9:
system("cls");
excluirCategoria();
break;
case 10:
system("cls");
consTituloPChave();
break;
case 11:
system("cls");
consAutor();
break;
}
}while(op!=0);
}