Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida... o porque que esse código não funciona?


sumaya

Pergunta

Oi...

Estou a começar na area de programaçao, e mim pediram para CRIAR UM PROGRAMA PARA GESTAO de algo que eu queira, sendo que este programa tenha funçao de PESQUISAR, LISTAR, INSERIR, ATUALIZAR, APAGAR um ficheiro binario.

 

Alguem pode mim ajudar a fazer??

Comecei a fazer esse, para uma relação de pagamentos de uma empresa por exemplo, mas este não esta funcionar, com a função Salário, posso inserir NOME e IDADE, mas quando vou colocar SALÁRIO da um erro e não corre mais..... Alguém teria uma ideia de uma solução??? Por favor...

-----------------------------------------------------------------------------------------------------------------------------

 

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>

#include <ctype.h>

#define FICH "Dados.dat"

#define OP_INSERIR '1'
#define OP_ALTERAR '2'
#define OP_APAGAR '3'
#define OP_LISTAR '4'
#define OP_PESQUISAR '5'
#define OP_SAIR '0'

#define OP_PESQ_IDADE '1'
#define OP_PESQ_NOME '2'

    char *MainMenu[]={
    "1. Inserir Registo",
    "2. Alterar Registo",
    "3. Apagar Registo",
    "4. Listar Registos",
    "5. Pesquisas",
    "0. Sair",
    NULL
    };    
     
     
    char *PesqMenu[]= {
    "1. Pesquisar por Intervalo de Idades",
    "2. Pesquisar por Nome",
    "0. Voltar",
    NULL
    };
    
         FILE *fp;
    
    typedef struct
    {
        char Nome[30+1];
        int Idade;
        float Salario;
        char Status;    
    } PESSOA;
    
    void Mensagem(char *msg);
    
    void Ler_Pessoa(PESSOA *p)
    {
        printf("Nome     :"); gets(p->Nome);
        printf("Idade     :"); scanf("%d", &p->Idade);
        printf("Nome     :"); scanf("&f",p->Salario);
        p->Status=' ';
        fflush(stdin);    
    }

    void Mostrar_Pessoa(PESSOA p)
    {
        printf("%-30s %3d %10.2f\n",p.Nome,p.Idade,p.Salario);
    }
    
    void Adicionar_Pessoa(PESSOA p)
    {
        fseek(fp,0L, SEEK_END);
        if(fwrite(&p,sizeof(p),1,fp)!=1)
        Mensagem("Adicionar Pessoa: Falhou a escrita do Registo");
    }    
    
    void Mensagem(char *msg)
    {
        printf(msg);
        getchar();
    }
    
    void Inic()
    {
        fp=fopen(FICH, "r+b");
        if(fp==NULL)
        {
            fp=fopen(FICH,"w+b");
            if(fp==NULL)
            {
                fprintf(stderr, "ERRO FATAL: Impossivel Criar o Ficheiro de Dados\n");
                exit(1);
            }
        }
    }
    
    char Menu(char *Opcoes[])
    {
        int i;
        char ch;
        
        while(1)
        {
            printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n");
            for(i=0; Opcoes != NULL; i++)
            printf("\t\t%s\n\n",Opcoes);
            
                printf("\n\n\n\t\tOpcao:  ");
                ch= getchar(); 
                fflush(stdin);
                for(i=0; Opcoes != NULL; i++)
                if(Opcoes [0] ==ch)
                return ch;
        }
    }    
    
    void Inserir_Pessoa()
    {
        PESSOA x;
        Ler_Pessoa (&x);
        Adicionar_Pessoa(x);
    }
    
    void Alterar_Pessoa()
    {
        PESSOA x;
        long int n_reg;
        printf("Qual o Nº do Registo:  ");
        scanf("%ld", & n_reg);
        fflush(stdin);
        if(fseek(fp,(n_reg-1) * sizeof(PESSOA), SEEK_SET)!=0)
        {
            Mensagem("Registo Inexistente");
            return;
        }
        if(fread(&x, sizeof(PESSOA), 1,fp) !=1)
        {
            Mensagem("Problemas no registo");
            return;
        }
        
        if (x.Status=='*')
        {
            Mensagem("Um Registo Apagado nao pode ser alterado\n\n\n");
            return;
        }
        printf("\n\nDados Actuais\n\n");
        Mostrar_Pessoa(x);
        printf("\n\nNovos Dados\n\n");
        Ler_Pessoa(&x);
        
        fseek(fp, -(long) sizeof(PESSOA), SEEK_CUR);
    
        fwrite(&x,sizeof(PESSOA), 1, fp);
        fflush(fp);
        
        }
        
        void Apagar_Pessoa()
        {
            PESSOA x;
            long int n_reg;
            char resp;
            
            printf("Qual o Nº do Registo:  ");
            scanf("%ld", &n_reg);
            fflush(stdin);
            if (fseek(fp, (n_reg-1) *sizeof(PESSOA),SEEK_SET)!= 0)
            {
            Mensagem("Registo Inexistente");
            return;
            }
        if(fread(&x,sizeof(PESSOA),1,fp)!=1)
        {
            Mensagem("Problemas na Leitura do Registo");
            return;
        }
        
        if (x.Status=='*')
        {
            Mensagem("Registo ja esta apagado\n\n");
            return;
        }
        
        printf("\n\nDados atuais\n\n");
        Mostrar_Pessoa(x);
        printf("\n\nApagar o Registo (s/n)?    ");
        resp=getchar();
        fflush(stdin);
        
        if(toupper(resp) !='S') return;
        
        x.Status='*';
        fseek(fp,-(long) sizeof(PESSOA),SEEK_CUR);
        fwrite(&x,sizeof(PESSOA), 1, fp);
        fflush(fp);
        }
        
        void Listar(){
            long int N_Linhas = 0;
            PESSOA reg;
            rewind(fp);
            while(1)
            {
                if(fread(&reg,sizeof(reg),1,fp) !=1)
                break;
                if(reg.Status=='*')continue;
                Mostrar_Pessoa(reg);
                N_Linhas++;
                if(N_Linhas%20==0)
                Mensagem("PRIMA <ENTER> para continuar...");
            }
            Mensagem("\n\nPRIMA <ENTER> para continuar...");
        }
        
        
        void Pesquisar_Idades(int ini, int fim)
        {
            PESSOA reg;
            rewind(fp);
            
            while(fread(&reg,sizeof(PESSOA),1,fp))
            if(reg.Status !='*' && reg.Idade >=ini && reg.Idade <=fim)
            Mostrar_Pessoa(reg);
            
            Mensagem("\n\nPRIMA <ENTER> para continuar...   ");
        }
        
        void Pesquisar_Nome(char *s)
        {
            PESSOA reg;
            rewind(fp);
            
            while(fread(&reg,sizeof(PESSOA),1,fp))
            if(reg.Status!='*' && strstr(reg.Nome,s))
            Mostrar_Pessoa(reg);
            
            Mensagem("\n\nPRIMA <ENTER> para continuar...");
        }
 

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...