Jump to content
Fórum Script Brasil
  • 0

Dúvida- Cadastro em C


brCode

Question

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

Edited by brCode
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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.

Edited by brCode
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      652k
×
×
  • Create New...