Jump to content

Pesquisa em arquivo .txt


francisco esley

Recommended Posts

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

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);
}
  • Vote 1
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.