Página 1 de 3 123 ÚltimoÚltimo
+ Responder ao Tópico



  1. Olá a todos, estou desenvolvendo um programa de cadastro simples em c para trabalho da faculdade so que estou com problemas na função de pesuisa desse programa, não estou conseguindo implemanta-la. Alguem poderia me ajudar com essa função. Segue abaixo meu codigo fonte para avaliarem. Desde já agradeço.

    Código c:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    struct funcionario
    {
        char nome[50];
        char endereco[100];
        char nascimento[10];
        char sexo[20];
        char telefone[20];
        char cargo[40];
    };
    typedef struct funcionario Fun;
    //Variaveis Globais
    Fun cadastro[1000];
    int conta = 0;
    //função menu - cria interface com o usuário
    int menu()
    {
        int op;
     
        printf("----------------------------\n");
        printf("- Cadastro de Funcionarios -\n");
        printf("----------------------------\n");
        printf("- 1. Incluir               -\n");
        printf("- 2. Consultar             -\n");
        printf("- 3. Apagar                -\n");
        printf("- 4. Alterar               -\n");
        printf("- 5. Sair                  -\n");
        printf("----------------------------\n");
        printf("Escolha uma opcao: ");
        scanf("%d",&op);    
        return op;
    }
    //função incluir - cadastra informações dos funcionarios
    void incluir()
    {
        system("cls");
        printf("Nome: ");
        fflush(stdin);
        gets(cadastro[conta].nome);
        printf("\n");
     
        printf("Endereco: ");
        fflush(stdin);
        gets(cadastro[conta].endereco);
        printf("\n");
     
        printf("Data de Nascimento: ");
        fflush(stdin);
        gets(cadastro[conta].nascimento);
        printf("\n");
     
        printf("Sexo: ");
        fflush(stdin);
        gets(cadastro[conta].sexo);
        printf("\n");
     
        printf("Telefone: ");
        fflush(stdin);
        gets(cadastro[conta].telefone);
        printf("\n");
     
        printf("Cargo: ");
        fflush(stdin);
        gets(cadastro[conta].cargo);
        printf("\n");
     
        conta++;
     
        return;
    }
    void consultar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja consultar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strcmp(aux,cadastro[x].nome))
            {
                printf("Dados do Funcionario:\n\n");
                printf("Nome: %s\n\n",cadastro[x].nome);
                printf("Endereco: %s\n\n",cadastro[x].endereco);
                printf("Data de nascimento: %s\n\n",cadastro[x].nascimento);
                printf("Sexo: %s\n\n",cadastro[x].sexo);
                printf("Telefone: %s\n\n",cadastro[x].telefone);
                printf("Cargo: %s\n\n",cadastro[x].cargo);
                system("pause");
                goto pula;
            }
        }
        printf("Nome nao encontrado\n\n");
        system("pause");
        pula:;
    }
    void apagar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja apagar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(aux[x] == cadastro[x].nome[x])
            {
                free(cadastro[x].nome);
                free(cadastro[x].endereco);
                free(cadastro[x].nascimento);
                free(cadastro[x].sexo);
                free(cadastro[x].telefone);
                free(cadastro[x].cargo);
            }
        }
    }
    void sair()
    {
        system("cls");
        printf("Fim do programa\n\n");
        system("pause");
     
        return;
    }
    int main(int argc, char *argv[])
    {
        int op;
     
     
        do
        {
            system("cls");
            op = menu();
     
            switch(op)
            {
                case 1:
                     incluir();
                     break;
                case 2:
                     consultar();
                     break;
                case 3:
                     apagar();
                     break;
                case 4:
                     //alterar();
                     break;
                case 5:
                     sair();
                     break;
                default:
                     system("cls");
                     printf("Opcao invalida\n\n");
                     system("pause");
                     system("cls");
            }
        }while(op != 5);      
     
        return 0;
    }
    Última edição por osmano807; 14-10-2010 às 14:17.

  2. Acho que é isso (precisa da <string.h>)
    Código c:
     if(strstr(cadastro[x].nome, aux))

    Ah, mais uma coisa: Não use fflush(stdin)
    http://www.gidnetwork.com/b-57.html
    Nem gets: http://www.gidnetwork.com/b-56.html
    Última edição por osmano807; 14-10-2010 às 14:21.



  3. Meu amigo muito obrigado, deu certo. Agora eu estou com outra dúvida, na função excluir vou usar o comando if(strstr(cadastro[x].nome, aux)) e se ele encontrar terei que zerar as variaveis da struct, mas como zera-las? Se eu coloco cadastro[x].nome, aux = 0 por exemplo da pau, se eu uso free não acontece nada. Ah e na função pesquisa teria alguma maneira de eu não ter que usar o comando goto. Se codigo abaixo:

    Código c:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    struct funcionario
    {
        char nome[50];
        char endereco[100];
        char nascimento[10];
        char sexo[20];
        char telefone[20];
        char cargo[40];
    };
    typedef struct funcionario Fun;
     
    //Variaveis Globais
    Fun cadastro[1000];
    int conta = 0;
     
    //função menu - cria interface com o usuário
    int menu()
    {
        int op;
     
        printf("----------------------------\n");
        printf("- Cadastro de Funcionarios -\n");
        printf("----------------------------\n");
        printf("- 1. Incluir               -\n");
        printf("- 2. Consultar             -\n");
        printf("- 3. Apagar                -\n");
        printf("- 4. Alterar               -\n");
        printf("- 5. Sair                  -\n");
        printf("----------------------------\n");
        printf("Escolha uma opcao: ");
        scanf("%d",&op);    
     
        return op;
    }
     
    //função incluir - cadastra informações dos funcionarios
    void incluir()
    {
        system("cls");
        printf("Nome: ");
        fflush(stdin);
        gets(cadastro[conta].nome);
        printf("\n");
     
        printf("Endereco: ");
        fflush(stdin);
        gets(cadastro[conta].endereco);
        printf("\n");
     
        printf("Data de Nascimento: ");
        fflush(stdin);
        gets(cadastro[conta].nascimento);
        printf("\n");
     
        printf("Sexo: ");
        fflush(stdin);
        gets(cadastro[conta].sexo);
        printf("\n");
     
        printf("Telefone: ");
        fflush(stdin);
        gets(cadastro[conta].telefone);
        printf("\n");
     
        printf("Cargo: ");
        fflush(stdin);
        gets(cadastro[conta].cargo);
        printf("\n");
     
        conta++;
     
        return;
    }
     
    void consultar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja consultar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome, aux))
            {
                printf("Dados do Funcionario:\n\n");
                printf("Nome: %s\n\n",cadastro[x].nome);
                printf("Endereco: %s\n\n",cadastro[x].endereco);
                printf("Data de nascimento: %s\n\n",cadastro[x].nascimento);
                printf("Sexo: %s\n\n",cadastro[x].sexo);
                printf("Telefone: %s\n\n",cadastro[x].telefone);
                printf("Cargo: %s\n\n",cadastro[x].cargo);
                system("pause");
                goto pula;
            }
        }
        printf("Nome nao encontrado\n\n");
        system("pause");
        pula:;
     
    }
     
    void apagar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja apagar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome, aux))
            {
                cadastro[x].nome;
                cadastro[x].endereco;
                cadastro[x].nascimento;
                cadastro[x].sexo;
                cadastro[x].telefone;
                cadastro[x].cargo;
            }
        }
    }
     
    void sair()
    {
        system("cls");
        printf("Fim do programa\n\n");
        system("pause");
     
        return;
    }
     
    int main(int argc, char *argv[])
    {
        int op;
     
     
        do
        {
            system("cls");
            op = menu();
     
            switch(op)
            {
                case 1:
                     incluir();
                     break;
                case 2:
                     consultar();
                     break;
                case 3:
                     apagar();
                     break;
                case 4:
                     //alterar();
                     break;
                case 5:
                     sair();
                     break;
                default:
                     system("cls");
                     printf("Opcao invalida\n\n");
                     system("pause");
                     system("cls");
            }
        }while(op != 5);      
     
        return 0;
    }

  4. Vamos ver, para limpar uma string, o jeito certo é esse, que zera todos os char do array:
    Código c:
     memset(string, 0, TAMANHO_DA_STRING);
    Isso também funciona (só zera o primeiro, funciona porque strings são delimitadas por '\0', e se coloco o primeiro valor esse, ela fica com tamanho 0 [C strings são estranhas hehe]):
    Código c:
     string[0]='\0';

    Já na função de pesquisa, tente isso (não lembro se C aceita bool, então especifiquei com int, confirma, se não der certo tente com uma checagem no if por um valor):

    Código c:
        void consultar()
    {
        int x;
        char aux[50];
     
        system("cls");
        printf("Informe o nome do funcionario que deseja consultar: ");
        fflush(stdin);
        gets(aux);
        system("cls");
     
        int achado = 0 /* false */;
        for(x=0; x<conta; x++)
        {
            if(strstr(cadastro[x].nome, aux))
            {
                printf("Dados do Funcionario:\n\n");
                printf("Nome: %s\n\n",cadastro[x].nome);
                printf("Endereco: %s\n\n",cadastro[x].endereco);
                printf("Data de nascimento: %s\n\n",cadastro[x].nascimento);
                printf("Sexo: %s\n\n",cadastro[x].sexo);
                printf("Telefone: %s\n\n",cadastro[x].telefone);
                printf("Cargo: %s\n\n",cadastro[x].cargo);
                system("pause");
                achado = 1 /* true */;
                break;
            }
        }
        if(!achado) {
            printf("Nome nao encontrado\n\n");
            system("pause");
        }
     
    }
    Última edição por osmano807; 14-10-2010 às 14:56.



  5. Deu tudo certo, agora vou fazer a função alterar, depois que estiver pronto eu posto o codigo pro pessoal puder ver. Muito obrigado.
    Agora quanto a questão do fflush(stdin) eu dei uma olhada nos links que vc postou, eu vi que pode ser usado o scanf para fazer a limpeza do buffer como no exemplo:

    Código :
    scanf(%c%*c",&string[i]);

    O %*c elimina o ultimo caracter que seria "\n"

    Minha dúvida é no caso de eu ter uma string do tipo char com conteudo "azul marinho", nessa string existe um espaço no meio e quando pesso atraves do scanf ele sempre dá problema quando existem espaços no meio das palavras.

    Teria como contornar esse problema?

    Quanto ao gets, eu não entendi direito, mas o que vi é para usar fgets no lugar, é isso?

    Mias uma vez obrigado meu camarada






Tópicos Similares

  1. Dificultade em Cadastro
    Por isaquebrumel no fórum Servidores de Rede
    Respostas: 4
    Último Post: 28-12-2013, 07:54
  2. Estudo e Pesquisa em Engenharia de Telecomunicações
    Por telworld no fórum Assuntos não relacionados
    Respostas: 0
    Último Post: 30-11-2013, 19:57
  3. Menu Google De Resultado De Pesquisa Em Server Side Script X Sql
    Por tinario no fórum Servidores de Rede
    Respostas: 0
    Último Post: 23-06-2008, 15:25
  4. Formulario de cadastro em PHP
    Por no fórum Linguagens de Programação
    Respostas: 4
    Último Post: 03-05-2004, 23:52
  5. Problema em pesquisa no Forum
    Por PiTsA no fórum UnderLinux
    Respostas: 5
    Último Post: 13-02-2004, 13:06

Visite: BR-Linux ·  VivaOLinux ·  Dicas-L