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

Ajuda com arquivos


NataliaSine

Pergunta

Ola pessoal, estou fazendo segundo modulo de c na facul, e infelizmente perdi varias aulas por problemas pessoais...consegui recuperar todas as materias mas C é uma bola de neve...

Tenho que fazer um programa de cadastro que use alocação dinamica e tambem arquivos, porem estou com dificuldades para colocar os dois juntos...

Tenho o programa já com alocaçao feito, e tenho um só de arquivos sem alocaçao...Ate que já consegui fazer bastante coisa pelo que eu perdi, mas isso realmente não to conseguindo, quem puder me ajudar ficarei muito grata!

PROGRAMA COM ALOCAÇÃO:

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


typedef struct{
    int codigo;
    char titulo[50];
    char autor[50];
    char ISBN[100];
} Livro;


typedef struct {
    Livro *vetLivros;     //ponteiro para vetor de Livros
    int tamanho;       //tamanho do vetor ptrLivros
} CadastroDeLivros;

int InserirLivro( CadastroDeLivros *pCadastro );

int AlterarLivro ( CadastroDeLivros *pCadastro, int codigoDoLivro );

int ExibirLivro ( CadastroDeLivros *pCadastro, int codigoDoLivro );

int ExcluirLivro( CadastroDeLivros *pCadastro, int codigoDoLivro );

Livro *PesquisarLivro( CadastroDeLivros *pCadastro, int codigoDoLivro );

void CadastrarLivro( Livro *pLivro );


typedef enum {INSERIR=1, ALTERAR, EXIBIR, EXCLUIR, SAIR} opcaoDeMenu;

int main(int argc, char *argv[])
{
    opcaoDeMenu opcao = 0;
    int codigoDoLivro = 0;
    CadastroDeLivros *pCadastro = malloc(sizeof(CadastroDeLivros));
    if(pCadastro==0)
    return 1;
    pCadastro->vetLivros = 0;
    pCadastro->tamanho = 0;

        while( opcao != SAIR )
        {
        printf( "Menu: (1) Inserir (2) Alterar (2) Exibir (2) Excluir (3) Sair\n" );
        scanf( "%d", &opcao );
        switch( opcao ) {
            case INSERIR:
                if ( InserirLivro( pCadastro ) == 1 )
                printf( "Erro ao inserir livro!\n" );
            break;
            case ALTERAR:
                printf( "Digite o codigo do produto: " );
                scanf( "%d", &codigoDoLivro );
                if( AlterarLivro( pCadastro, codigoDoLivro ) == 1 )
                {
                    printf( "ERRO: produto não encontrado!\n\n" );
                    system("pause");
                }
                                printf ("Alteracao feita com sucesso!");

            break;
            case EXIBIR:
                printf( "Digite o codigo do produto: " );
                scanf( "%d", &codigoDoLivro );
                if( ExibirLivro( pCadastro, codigoDoLivro ) == 1 )
                {
                    printf( "ERRO: produto não encontrado!\n\n" );
                    system("pause");
                }
                break;

            case EXCLUIR:
                printf( "Digite o codigo do livro: " );
                scanf( "%d", &codigoDoLivro );
                if ( ExcluirLivro( pCadastro, codigoDoLivro )== 1)
                printf( "Erro ao EXCLUIR livro!\n" );
            break;
                        }
        }
free(pCadastro);
pCadastro = 0;
return 0;
}

void CadastrarLivro( Livro *pLivro )

{
    printf( "Codigo: " );
    scanf( "%d", &pLivro->codigo );
    fflush( stdin );

    printf( "Titulo: " );
    gets( pLivro->titulo );
    fflush( stdin );

    printf( "Autor: " );
    gets( pLivro->autor );
    fflush( stdin );

    printf( "ISBN: " );
    gets( pLivro->ISBN );
    fflush( stdin );


}

int InserirLivro( CadastroDeLivros *pCadastro )
{
    Livro   *vetAux   =   realloc(pCadastro->vetLivros,   (pCadastro->tamanho+1)   *
    sizeof(Livro));
    if(!vetAux)
    return 1;
    pCadastro->vetLivros = vetAux;
    CadastrarLivro(&pCadastro->vetLivros[pCadastro->tamanho]);
    pCadastro->tamanho++;
}



int AlterarLivro( CadastroDeLivros *pCadastro, int codigoDoLivro )
{

  Livro *pLivro = PesquisarLivro( pCadastro, codigoDoLivro );
            if( pLivro )
            {
                CadastrarLivro( pLivro );
                return 0;
            }
            return 1;

}


/* implementação da funçao 'ExcluirProduto' */
int ExibirLivro( CadastroDeLivros *pCadastro, int codigoDoLivro )
{

            Livro *ptrLivro = PesquisarLivro( pCadastro, codigoDoLivro );

            if( ptrLivro ==0 )
                return 1;

            printf( "Codigo: %d\n", ptrLivro->codigo );
            printf( "Titulo: %s\n", ptrLivro->titulo );
            printf( "Autor: %s\n",ptrLivro->autor );
            printf( "ISBN: %s\n",ptrLivro->ISBN );



}


int ExcluirLivro( CadastroDeLivros *pCadastro, int codigoDoLivro )
{
Livro *pLivro = PesquisarLivro(pCadastro, codigoDoLivro);
if(!pLivro)
return 1;
*pLivro = pCadastro->vetLivros[pCadastro->tamanho - 1];
pCadastro->tamanho--;
pCadastro->vetLivros = realloc(pCadastro->vetLivros, pCadastro->tamanho *
sizeof(Livro));



}

Livro *PesquisarLivro( CadastroDeLivros *pCadastro, int codigoDoLivro )
{
    Livro *pLivro = pCadastro->vetLivros;
    if( pLivro )
    {
        while( pLivro < &pCadastro->vetLivros[pCadastro->tamanho] )
        {
            if( pLivro->codigo == codigoDoLivro )
                return pLivro;
            pLivro++;
        }
    }
    return 0;
}
PROGRAMA COM ARQUIVOS
#include <stdio.h>
#include <string.h>


typedef struct _data {
       int dia;
       int mes;
       int ano;
} Data;

/* definição do tipo Funcionario */
typedef struct {
        int codigo;
        char nome[50];
        Data nascimento;
        float salario;
} Funcionario;

/* Permite a inserção de um novo Funcionario. */
int InserirFuncionario();
/* Exibe um Funcionario previamente cadastrado. */
int ExibirFuncionario( int codigoDoFuncionario );
/* Permite a alteração de um novo Funcionario previamente cadastrado. */
int AlterarFuncionario( int codigoDoFuncionario );
/* Exclui um Funcionario previamente cadastrado. */
int ExcluirFuncionario( int codigoDoFuncionario );
/* Lista Funcionarios previamente cadastrados. */
int ListarFuncionarios();
/* Permite o cadastro dos dados de um Funcionario, exceto o código. */
void Cadastrar( Funcionario *ptrFuncionario );



/* Implementação da função InserirFuncionario. */
int InserirFuncionario(  )
{
    FILE *ptrArquivo=0;
    Funcionario funcionario;
    /* abre o arquivo */
    if( ( ptrArquivo = fopen( "Funcionarios.txt", "ab" ) ) == NULL )
    {
        printf( "Erro ao abrir o arquivo!\n" );
        return 1;
    }
    /* cadastra o funcionario */
    printf( "\nCodigo: " );
    scanf( "%d", &funcionario.codigo );
    fflush( stdin );
    Cadastrar( &funcionario );
    /* escreve os dados do funcionario no arquivo */
    if( ( fwrite( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) ) != 1 )
    {
        printf( "Erro ao gravar funcionario no arquivo!\n" );
        return 1;
    }
    printf( "\n\nFuncionario gravado no arquivo com sucesso!\n" );
    fclose( ptrArquivo );
    ptrArquivo = 0;
    return 0;
}

/* Implementação da função ExibirFuncionario. */
int ExibirFuncionario( int codigoDoFuncionario )
{
    FILE *ptrArquivo=0;
    Funcionario funcionario;
    /* abre o arquivo */
    if( ( ptrArquivo = fopen( "Funcionarios.txt", "r" ) ) == NULL )
    {
        printf( "Erro ao abrir o arquivo!\n" );
        return 1;
    }
    /* percorre o arquivo procurando o funcionario com o código recebido como parâmetro. */
    while( fread( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) )
    {
           if( funcionario.codigo == codigoDoFuncionario )
           {
                printf( "Codigo: %d\n", funcionario.codigo );
                printf( "Nome: %s\n", funcionario.nome );
                printf( "Data de Nascimento: %2.2d/%2.2d/%2.2d\n",
                        funcionario.nascimento.dia,
                        funcionario.nascimento.mes,
                        funcionario.nascimento.ano );
                printf( "Salario (R$): %.2f\n", funcionario.salario );

                fclose( ptrArquivo );
                ptrArquivo = 0;
                return 0;
           }
    }

    printf( "funcionario não encontrado!\n" );
    fclose( ptrArquivo );
    ptrArquivo = 0;
    return 1;
}

/* Implementação da função AlterarFuncionario. */
int AlterarFuncionario( int codigoDoFuncionario )
{
    FILE *ptrArquivo=0;
    Funcionario funcionario;
    /* abre o arquivo */
    if( ( ptrArquivo = fopen( "Funcionarios.txt", "r+" ) ) == NULL )
    {
        printf( "Erro ao abrir o arquivo!\n" );
        return 1;
    }
    /* percorre o arquivo procurando o funcionario com o código recebido como parâmetro. */
    while( fread( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) )
    {
           if( funcionario.codigo == codigoDoFuncionario )
           {
                /* refaz o cadastro do funcionario. */
                Cadastrar( &funcionario );
                /* retorna "um" funcionario no arquivo. */
                fseek( ptrArquivo, -sizeof( funcionario ), SEEK_CUR );
                /* sobrescreve os dados do funcionario no arquivo. */
                if( ( fwrite( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) ) != 1 )
                {
                    printf( "Erro ao gravar funcionario no arquivo!\n" );
                    fclose( ptrArquivo );
                    ptrArquivo = 0;
                    return 1;
                }
                   printf( "funcionario salvo com sucesso no arquivo!\n" );
                fclose( ptrArquivo );
                ptrArquivo = 0;
                return 0;
           }
    }

    printf( "funcionario não encontrado!\n" );
    fclose( ptrArquivo );
    ptrArquivo = 0;
    return 1;
}

/* Implementação da função ExcluirFuncionario. */
int ExcluirFuncionario( int codigoDoFuncionario )
{
    FILE *ptrArquivo=0;
    Funcionario funcionario;
    /* abre o arquivo */
    if( ( ptrArquivo = fopen( "Funcionarios.txt", "r+" ) ) == NULL )
    {
        printf( "Erro ao abrir o arquivo!\n" );
        return 1;
    }
    /* percorre o arquivo procurando o funcionario com o código recebido como parâmetro. */
    while( fread( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) )
    {
           if( funcionario.codigo == codigoDoFuncionario )
           {
                /* "zera" os dados do funcionario. */
                funcionario.codigo = 0;
                strcpy( funcionario.nome, "" );
                funcionario.nascimento.dia = 0;
                funcionario.nascimento.mes = 0;
                funcionario.nascimento.ano = 0;
                   funcionario.salario = 0;
                /* retorna "um" funcionario no arquivo. */
                fseek( ptrArquivo, -sizeof( funcionario ), SEEK_CUR );
                /* sobrescreve os dados do funcionario no arquivo. */
                if( ( fwrite( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) ) != 1 )
                {
                    printf( "Erro ao excluir funcionario!\n" );
                    fclose( ptrArquivo );
                    ptrArquivo = 0;
                    return 1;
                }
                   printf( "funcionario excluido com sucesso!\n" );
                fclose( ptrArquivo );
                ptrArquivo = 0;
                return 0;
           }
    }

    printf( "funcionario não encontrado!\n" );
    fclose( ptrArquivo );
    ptrArquivo = 0;
    return 1;
}

/* Implementação da função ListarFuncionarios. */
int ListarFuncionarios()
{
    FILE *ptrArquivo=0;
    Funcionario funcionario;
    /* abre o arquivo */
    if( ( ptrArquivo = fopen( "Funcionarios.txt", "r+" ) ) == NULL )
    {
        printf( "Erro ao abrir o arquivo!\n" );
        return 1;
    }
    printf( "Codigo Nome%14s   Salario\n", "" );
    printf( "------+------------------+---------\n" );
    /* percorre o arquivo procurando o funcionario com o código recebido como parâmetro. */
    while( fread( &funcionario, sizeof( funcionario ), 1, ptrArquivo ) )
    {
          if( funcionario.codigo )
          {
              printf( "%-6.6d %-18.18s %9.2f \n", funcionario.codigo, funcionario.nome, funcionario.salario );
          }
    }

    fclose( ptrArquivo );
    ptrArquivo = 0;
    return 1;
}

/* Implementação da função Cadastrar. */
void Cadastrar( Funcionario *ptrFuncionario )
{
    printf("Nome: ");
    gets( ptrFuncionario->nome );
    fflush( stdin );
    printf( "Data de Nascimento [dd/mm/aaaa]: ");
    scanf( "%d/%d/%d",
           &ptrFuncionario->nascimento.dia,
           &ptrFuncionario->nascimento.mes,
           &ptrFuncionario->nascimento.ano );
    fflush( stdin );
    printf( "Salario (R$): " );
    scanf( "%f", &ptrFuncionario->salario );
    fflush( stdin );
}

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
Olá NataliaSine

Desculpe, mas não entendi a sua dúvida. Você quer unir estes dois códigos em um só? Quer mantê-los separados mas que trabalhem juntos?

Ola, tenho que fazer um programa que tenha alocaçao dinamica e arquivos juntos, eu já fiz a alocaçao dinamica (primeiro programa do post) agora falta eu colocar arquivos tambem só que não estou conseguindo, o segundo programa coloquei como exemplo!

Link para o comentário
Compartilhar em outros sites

  • 0

Não são permitidos up's de acordo com a regra 3.8 (ver regras)

3.8 Não é permitida a postagem de mensagens com a finalidade de manter o tópico no início da lista (up), nem de mensagens que não se refiram ao assunto do tópico (flood). Caso isso ocorra, as mensagens serão excluídas e os autores, advertidos.
Link para o comentário
Compartilhar em outros sites

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,2k
    • Posts
      652k
×
×
  • Criar Novo...