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 );
}
Pergunta
NataliaSine
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:
PROGRAMA COM ARQUIVOSLink para o comentário
Compartilhar em outros sites
6 respostass 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.