francisco esley Posted July 6, 2020 at 10:54 PM Report Share #618687 Posted July 6, 2020 at 10:54 PM Estou fazendo um trabalho da faculdade que é pedido para fazer um sistema de cadastro de livros de uma biblioteca, toda a parte de cadastro já está pronta porém falta a parte de pesquisa que é onde não sei como fazer pois sou novato na área de linguagem C estou deixando meu código aqui para que possa dar uma olhada e quem sabe me ajudar a como fazer uma pesquisa em um arquivo .txt #include <stdio.h> #include <stdlib.h> void menu(){ printf ("\n\n1 - Cadastrar\n"); printf ("2 - Listar todos os livros.\n"); printf ("3 - Listar todas as revistas.\n"); printf ("4 - Listar as obras por caixa.\n"); printf ("0 - Sair\n"); } FILE* AbreArquivo(char modo, char caminho[100]){ FILE *arquivo; switch(modo){ case 'g': arquivo = fopen(caminho,"wt"); break; case 'l': arquivo = fopen(caminho,"rt"); break; case 'a': arquivo = fopen(caminho,"a"); break; } if(arquivo==NULL){ printf("Nao foi possivel abrir o arquivo"); exit(0); } return arquivo; } void FecharArquivo(FILE *arquivo){ fclose(arquivo); } void Cadastra(char titulo[1000],char editora[1000], char autor[1000], int caixa, int ano, int ISBN){ FILE *arquivo; arquivo = AbreArquivo('a', "livros.txt"); fprintf(arquivo, "%s %s %s %d %d %d\n\n", titulo, autor, editora, caixa, ano, ISBN); FecharArquivo(arquivo); } void CadastraRevista(char titulo[70],char editora[70], char autor[70], int caixa, int ano, int ISBN){ FILE *arquivo; arquivo = AbreArquivo('a', "revistas.txt"); fprintf(arquivo, "%s %s %s %d %d %d\n\n", titulo, autor, editora, caixa, ano, ISBN); FecharArquivo(arquivo); } void Listar(){ FILE *arquivo; char titulo[1000]; char autor[1000]; char editora[1000]; int caixa; int ano; int ISBN; arquivo = AbreArquivo('l',"livros.txt"); printf("\t\t\t\t\t\tListando Livros....\n\n"); while(!feof(arquivo)){ fscanf(arquivo,"%1000[^\n] %1000[^\n] %1000[^\n] %d %d %d\n", &titulo, &autor, &editora, &caixa, &ano, &ISBN); setbuf(stdin,NULL); for(int i=0; i<120; i++)printf ("*"); printf("\nTitulo: %s\n \nAutor: %s\n \nEditora: %s\n \nCaixa: %d\n \nAno: %d\n \nISBN: %d\n\n", titulo, editora, autor, caixa, ano, ISBN); } FecharArquivo(arquivo); } void ListarRevista(){ FILE *arquivo; char titulo[1000]; char autor[1000]; char editora[1000]; int caixa; int ano; int ISBN; arquivo = AbreArquivo('l',"revistas.txt"); printf("\t\t\t\t\t\tListando Revistas....\n\n"); while(!feof(arquivo)){ fscanf(arquivo,"%70[^\n] %70[^\n] %70[^\n] %d %d %d\n", &titulo, &autor, &editora, &caixa, &ano, &ISBN); setbuf(stdin,NULL); for(int i=0; i<120; i++)printf ("*"); printf("\nTitulo: %s\n \nAutor: %s\n \nEditora: %s\n \nCaixa: %d\n \nAno: %d\n \nISBN: %d\n\n", titulo,editora ,autor , caixa, ano, ISBN); } FecharArquivo(arquivo); } int main(){ char titulo[1000]; char autor[1000]; char editora[1000]; int caixa; int ano; int ISBN; int opcao; int opcao2; int voltar; topo: do{ menu(); printf("\nDigite uma opcao: "); scanf("%d", &opcao); setbuf(stdin,NULL); system("cls"); if (opcao == 1 ){ printf("\t\t\t\t\t\tOBS:NAO USAR ACENTOS\n"); printf("\nDigite 1 para livros ou 2 para revistas: "); scanf("%d", &opcao2); system("cls"); }else{ goto listagem; } Cad: switch(opcao2){ case 1: printf("\t\t\t\t\t\tCadastrando Livros...\n\n"); printf("\nDigite o titulo: "); setbuf(stdin,NULL); fgets(titulo, 1000, stdin); printf("\nDigite o autor: "); setbuf(stdin,NULL); fgets(autor,1000, stdin); printf("\nDigite o editora: "); setbuf(stdin,NULL); fgets(editora, 1000, stdin); printf("\nDigite a caixa: "); scanf("%d", &caixa); printf("\nDigite o ano: "); scanf("%d", &ano); printf("\nDigite o ISBN: "); scanf("%d", &ISBN); Cadastra(titulo, autor, editora, caixa, ano, ISBN); printf("\n Digite 1 para continuar cadastrando e 2 para voltar ao menu: "); scanf("%d", &voltar); if(voltar==2){ system("cls"); goto topo; }else{ system("cls"); goto Cad; } system("cls"); break; case 2: printf("\t\t\t\t\t\tCadastrando Revistas...\n\n"); printf("\nDigite o titulo: "); setbuf(stdin,NULL); fgets(titulo, 100, stdin); printf("\nDigite o autor: "); setbuf(stdin,NULL); fgets(autor,70, stdin); printf("\nDigite o editora: "); setbuf(stdin,NULL); fgets(editora, 70, stdin); printf("\nDigite a caixa: "); scanf("%d", &caixa); printf("\nDigite o ano: "); scanf("%d", &ano); printf("\nDigite o ISBN: "); scanf("%d", &ISBN); CadastraRevista(titulo, autor, editora, caixa, ano, ISBN); printf("\n Digite 1 para continuar cadastrando e 2 para voltar ao menu: "); scanf("%d", &voltar); if(voltar==2){ system("cls"); goto topo; }else{ system("cls"); goto Cad; } system("cls"); break; } }while(opcao!=0); listagem: switch(opcao){ case 2: Listar(); system("pause"); system("cls"); goto topo; break; case 3: ListarRevista(); system("pause"); system("cls"); goto topo; break; case 4: printf("Opcao nao funcional!\n\n"); system("pause"); system("cls"); goto topo; case 0: printf("Finalizando......\n\n"); system("pause"); exit(0); default: printf("Erro "); system("pause"); system("cls"); goto topo; } return 0; } Link to comment Share on other sites More sharing options...
antseq Posted July 7, 2020 at 08:27 AM Report Share #618690 Posted July 7, 2020 at 08:27 AM 9 horas atrás, francisco esley disse: Estou fazendo um trabalho da faculdade que é pedido para fazer um sistema de cadastro de livros de uma biblioteca, toda a parte de cadastro já está pronta porém falta a parte de pesquisa que é onde não sei como fazer pois sou novato na área de linguagem C estou deixando meu código aqui para que possa dar uma olhada e quem sabe me ajudar a como fazer uma pesquisa em um arquivo .txt Viva, Não queres "literalmente" pesquisar um arquivo .txt; Pretendes pesquisar livros da tua biblioteca, portanto já tens o código praticamente (90%) feito na tua função "Listar" com algumas adaptações: void Pesquisar(char texto_a_pesquisar[1000]){ ... ... ... printf("\t\t\t\t\t\tPesquisando Livros por: %s ....\n\n", texto_a_pesquisar); while(!feof(arquivo)){ fscanf(arquivo,"%1000[^\n] %1000[^\n] %1000[^\n] %d %d %d\n", &titulo, &autor, &editora, &caixa, &ano, &ISBN); ... se 'titulo' contém texto_a_pesquisar ou se 'autor' contém texto_a_pesquisar ou se 'editora' contém texto_a_pesquisar ou se 'ISBN' contém texto_a_pesquisar => ENCONTRADO => printf("\nTitulo: %s\n \nAutor: %s\n \nEditora: %s\n \nCaixa: %d\n \nAno: %d\n \nISBN: %d\n\n", ..... } FecharArquivo(arquivo); } 1 Report Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now