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

Dúvida- Cadastro em C


brCode

Pergunta

Bom dia a todos,

Desejo fazer um cadastro de dados  no formato Tipo Abstrato de Dados, onde existe um arquivo main.c , outro StrCol.c e um header  StrCol.h. Entre os dados que se pretende cadastrar estão : nome,  uma lista de telefones e uma lista de e-mails do tipo StrCol . Desta forma, tenho a intenção de inserir na lista e listar os dados referente a um contato. 

Havia criado uma variável BLOCO para definir o tamanho de cada BLOCO na memória e uma variável MAX que diz respeito a quantidade máxima de blocos que se poder ter. Seguindo esse raciocínio , ao inserir um dado na lista, verifica-se primeiro se existe um contato e se também foram ocupados os blocos disponibilizados . Caso não exista nenhum contato é alocado na memória um array de ponteiros do tipo char, onde cada um deles irá apontar para um bloco de memória, de acordo com o tamanho do dado que o usuário for inserir. Caso já exista algum contato e se os blocos já foram  ocupados  não estourando o número máximo de blocos, então se faz uma realocação de memória, disponibilizando um novo bloco, sem perder os dados anteriores.  Havia criado no arquivo StrCol.h , uma struct StrCol onde dentro dela denominei um ponteiro para ponteiro lista(char** lista). Mas algumas informações estão meio desencontradas , pois eu já havia definido dentro de struct no arquivo StrCol.h  o campo MAX e BLOCOS, mas não sei como chamar isso no arquivo StrCol.c .

Tendo como base a ideia do programa , já explicada acima e sem querer me estender muito,  estou um pouco confuso e encontrando muita dificuldade em como criar uma lista de contatos dentro de main.c  e listar os dados como nome, e a lista de e-mails ou telefones referentes a cada contato. Fico muito agradecido caso alguém se proponha a me ajudar.

main.c.jpg

StrCol.c.jpg

StrCol.h.jpg

Editado por brCode
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa noite, não entendi essa parada de bloco, mas se sua dúvida é a captação dos dados no main, eis aqui um exemplo de uma agenda.

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

//estrutura de um contato.
struct contato{
	char nome[30];
	char telefone[11];
	char email[100];
};

struct contato obterContato(void){
	struct contato cont;
	
	printf("\tNome: ");
	gets(cont.nome);
	printf("\tTelefone: ");
	gets(cont.telefone);
	printf("\tEmail: ");
	gets(cont.email);
	return cont;
};
 
//estrutura de uma agenda.
struct agenda{
	contato *contato;
	agenda *proximo;
};

//criar uma agenda e retorna o seu inicio, ou seja, o primeiro registro da agenda.
agenda* criarAgenda(contato *contato){
	agenda *age=(agenda*) malloc(sizeof(agenda));
	age->contato=contato;
	age->proximo=NULL;
	return age;
}
//insere um contato em uma agenda que já existe, e retorna o seu ultimo registro, ou seja o final da fila.
agenda* inserirContatoNaAgenda(contato* cont, agenda *finalAgenda){
	finalAgenda->proximo=(agenda*) malloc(sizeof(agenda));
	finalAgenda=finalAgenda->proximo;
	finalAgenda->contato=cont;
	finalAgenda->proximo=NULL;
	return finalAgenda;	
}

void imprimirAgenda(agenda *inicioAgenda){
	agenda *pont=inicioAgenda;
	printf("NOME\tTELEFONE\tEMAIL");
	while(pont!=NULL){
		printf("\n %s \t %s \t %s",pont->contato->nome, pont->contato->telefone, pont->contato->email );
		pont=pont->proximo;
	}
}

int main(){
	struct contato cont;
	//criando a agenda.
	printf("\nPreencha as informacoes da agenda: \n");
	cont=obterContato();
	agenda *inicioAgenda=criarAgenda(&cont);
	agenda *fimAgenda=inicioAgenda;
	printf("\n");
	cont=obterContato();
	fimAgenda=inserirContatoNaAgenda(&cont, fimAgenda);
	//imprimindo a agenda.
	imprimirAgenda(inicioAgenda);
	
}

 

Link para o comentário
Compartilhar em outros sites

  • 0

Boa noite. Havia criado essa ideia como esboço inicial para fazer uma agenda simples, usando ponteiros e alocação dinâmica de memória criando um tipo abstrato de dados. Bloco se refere a um conjunto de endereços de memória onde serão armazenados os dados. Por exemplo, se forem destinados um total de 4 blocos no estágio inicial, quando esse limite de inserção de dados chegar ao fim, dobra-se o espaço de memória realocando este espaço, de modo que não se perca os dados anteriormente armazenados. Apesar de você ter dado um exemplo usando um raciocínio diferente do que estava pensando inicialmente, não usando também um tipo abstrato de dados, de qualquer forma, a sua sugestão já vai ajudar bastante naquilo que pretendo projetar mais pra frente, já que estava na dúvida em como listar os dados. Este tópico já pode ser encerrado, pois a dúvida foi solucionada. Muito obrigado pela ajuda e atenção.

Editado por brCode
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,3k
    • Posts
      652,3k
×
×
  • Criar Novo...