Por favor se alguém conseguir me ajudar com um trabalho da faculdade, preciso criar uma agenda de contatos com nome, numero e email. Já tenho uma parte da lista feita, mas ela possui apenas int, preciso adicionar string nela, ou seja, substituir int dado por char nome[50], char numero[15], char email[50]. Segue o código e o que devo fazer
Desenvolva um programa que emule as características de uma agenda de contatos em um celular. A lista deve conter as seguintes características: 1. (20% da nota) Deve-se ter uma lista de contatos de pessoas. Para criar esta lista utilize uma LISTA ENCADEADA. Deve-se armazenar o nome completo de cada pessoa, e-mail para contato e telefone celular. Para inserção dos dados, você pode criar uma leitura dos dados através de um menu na tela ou já deixá-los armazenados em um arquivo e só carregar este arquivo. Ou ambas soluções; 2. (20% da nota) Deve-se existir um menu na tela. Este menu deve permitir a inserção e remoção de novos contatos (caso optado pela inserção manual de dados) e a edição dos contatos já existentes. Deve-se também listar todos os contatos da lista e permitir sair do programa. A inserção de mais funções no menu fica a critério do aluno; 3. (30% da nota) Ao listar os contatos, dê para o usuário a opção de lista-los na ordem dos contatos cadastrados (ordem de inserção). Ao listar, liste todos os dados do usuário. Ao listar os contatos, dê para o usuário a opção de lista-los por ordem alfabética de nomes. O usuário também poderá escolher se deseja ordenar por nome de contatos (A-Z ou Z-A). Para a ordenação, utilize o MERGE SORT ou o QUICK SORT. A ordenação deve ser feita nos PONTEIROS de cada nó da lista; 4. (30% da nota) Crie uma FILA com contatos favoritos do usuário. Dê um limite para esta fila (5 ou 10 contatos por exemplo). Quando o usuário tentar adicionar aos favoritos um contato maior que o tamanho da fila, remova automaticamente um contato de acordo com as características de operação de uma fila;
#include<stdio.h>
#include<stdlib.h>
int menu();
void InserirInicio(int num);
void InserirFim(int num);
void InserirMeio(int num, int posicao);
int Remover(int num);
void Listar();
struct ElementoDaLista_Simples {
int dado;
struct ElementoDaLista_Simples *prox;
} *Head;
int main() {
int op, num, pos, c;
Head = NULL;
while (1) {
op = menu();
switch (op) {
case 1:
printf("Digite o numero desejado: ");
scanf_s("%d", &num);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
InserirInicio(num);
break;
case 2:
printf("Digite o numero desejado: ");
scanf_s("%d", &num);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
InserirFim(num);
break;
case 3:
printf("Digite o numero desejado: ");
scanf_s("%d", &num);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
printf("Digite a posicao que deseja inserir: ");
scanf_s("%d", &pos);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
InserirMeio(num, pos);
break;
case 4:
int res;
printf("Digite o numero a ser removido: ");
scanf_s("%d", &num);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
res = Remover(num);
if (res == 1)
printf("Numero removido.");
else
printf("Numero não encontrado.");
break;
case 5:
Listar();
break;
case 6:
return 0;
default:
printf("Invalido\n");
}
}
return 0;
}
int menu() {
int op, c;
system("Cls");
printf("1.Inserir no inicio da lista encadeada simples\n");
printf("2.Inserir no fim da lista encadeada simples\n");
printf("3.Inserir no meio da lista encadeada simples\n");
printf("4.Remover da lista encadeada simples\n");
printf("5.Listar a lista encadeada simples\n");
printf("6.Sair\n");
printf("Digite sua escolha: ");
scanf_s("%d", &op);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
system("Cls");
return op;
}
void InserirInicio(int num)
{
ElementoDaLista_Simples *NovoElemento;
NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
NovoElemento->dado = num;
if (Head == NULL)
{
Head = NovoElemento;
Head->prox = NULL;
}
else
{
NovoElemento->prox = Head;
Head = NovoElemento;
}
}
void InserirFim(int num)
{
ElementoDaLista_Simples *NovoElemento;
NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoDaLista_Simples *ElementoVarredura;
ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
NovoElemento->dado = num;
if (Head == NULL)
{
Head = NovoElemento;
Head->prox = NULL;
}
else
{
ElementoVarredura = Head;
while (ElementoVarredura->prox != NULL)
ElementoVarredura = ElementoVarredura->prox;
ElementoVarredura->prox = NovoElemento;
NovoElemento->prox = NULL;
}
}
void InserirMeio(int num, int posicao)
{
ElementoDaLista_Simples *NovoElemento;
NovoElemento = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoDaLista_Simples *ElementoVarredura;
ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoDaLista_Simples *ElementoAuxiliar;
ElementoAuxiliar = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
NovoElemento->dado = num;
if (posicao == 0)
{
Head = NovoElemento;
Head->prox = NULL;
}
else
{
ElementoVarredura = Head;
for (int i = 0; i < posicao - 1; i++)
ElementoVarredura = ElementoVarredura->prox;
ElementoAuxiliar = ElementoVarredura->prox;
ElementoVarredura->prox = NovoElemento;
NovoElemento->prox = ElementoAuxiliar;
}
}
int Remover(int num)
{
ElementoDaLista_Simples *ElementoVarredura;
ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoDaLista_Simples *Anterior;
Anterior = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoVarredura = Head;
while (ElementoVarredura != NULL) {
if (ElementoVarredura->dado == num) {
if (ElementoVarredura == Head) {
Head = ElementoVarredura->prox;
free(ElementoVarredura);
return 1;
}
else {
Anterior->prox = ElementoVarredura->prox ;
free(ElementoVarredura);
return 1;
}
}
else {
Anterior = ElementoVarredura;
ElementoVarredura = ElementoVarredura->prox;
}
}
return 0;
}
void Listar()
{
ElementoDaLista_Simples *ElementoVarredura;
ElementoVarredura = (struct ElementoDaLista_Simples *)malloc(sizeof(struct ElementoDaLista_Simples));
ElementoVarredura = Head;
if (ElementoVarredura == NULL) {
return;
}
while (ElementoVarredura != NULL) {
printf("%d ", ElementoVarredura->dado);
ElementoVarredura = ElementoVarredura->prox;
}
printf("\n");
system("pause");
return;
}
Agradeço desde já.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Referencia para o menu
int menu();
void Inicio();
void Meio();
void Fim();
int Remover();
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
// Struct para inserção das variaveis nome, numero e email
struct Contatos
{
char nome[50];
char numero[15];
char email[50];
int posicao;
struct Contatos* proximo;
} *Head;
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int main() {
int opcao;
Head = NULL;
while (1)
{
opcao = menu();
switch (opcao)
{
case 1:
Inicio();
break;
case 2:
Meio();
break;
case 3:
Fim();
break;
case 4:
Remover();
break;
}
}
return 0;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//menu de teclas para escolha da opção
int menu() {
int opcao;
int c;
system("Cls");
printf("1- Adicionar contato no inicio da lista\n");
printf("2- Adicionar contato em alguma posição na lista\n");
printf("3- Adicionar contato no final da lista\n");
printf("4- Remover contato\n");
printf("5- Listar contato por ordem de inserção\n");
printf("6- Listar contato por ordem A-Z\n");
printf("7- Listar contato por ordem Z-A\n");
printf("8- Créditos\n");
printf("9- Sair\n");
printf("Digite uma opção: \n");
scanf_s("%d", &opcao);
while ((c = getchar()) != '\n' && c != EOF) {} // sempre limpe o buffer do teclado.
system("cls");
return opcao;
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
//Caso opção 1, digite as variaveis e crie uma nova struct para salvar.
void Inicio() {
typedef struct Contatos cont;
cont pessoa, * p;
p = &pessoa;
p->nome;
p->numero;
p->email;
printf("Digite seu nome: \n");
fflush(stdin);
fgets(p->nome, 50, stdin);
printf("Digite seu numero: \n");
fflush(stdin);
fgets(p->numero, 15, stdin);
printf("Digite seu email: \n");
fflush(stdin);
fgets(p->email, 50, stdin);
cont* NovoContato;
NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
NovoContato->nome;
NovoContato->numero;
NovoContato->email;
if (Head == NULL)
{
Head = NovoContato;
Head->proximo = NULL;
}
else
{
NovoContato->proximo = Head;
system("pause");
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Meio() {
int posicao;
typedef struct Contatos cont;
cont pessoa, * p;
p = &pessoa;
p->nome;
p->numero;
p->email;
printf("Digite seu nome: \n");
fflush(stdin);
fgets(p->nome, 50, stdin);
printf("Digite seu numero: \n");
fflush(stdin);
fgets(p->numero, 15, stdin);
printf("Digite seu email: \n");
fflush(stdin);
fgets(p->email, 50, stdin);
printf("Digite a posicao que deseja inserir: ");
scanf_s("%d", &posicao);
cont* NovoContato;
NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
Contatos* ElementoVarredura;
ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
Contatos* ElementoAuxiliar;
ElementoAuxiliar = (struct Contatos*)malloc(sizeof(struct Contatos));
NovoContato->nome;
NovoContato->numero;
NovoContato->email;
if (posicao == 0)
{
Head = NovoContato;
Head->proximo = NULL;
}
else
{
ElementoVarredura = Head;
for (int i = 0; i < posicao - 1; i++)
ElementoVarredura = ElementoVarredura->proximo;
ElementoAuxiliar = ElementoVarredura->proximo;
ElementoVarredura->proximo = NovoContato;
NovoContato->proximo = ElementoAuxiliar;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
void Fim() {
typedef struct Contatos cont;
cont pessoa, * p;
p = &pessoa;
p->nome;
p->numero;
p->email;
printf("Digite seu nome: \n");
fflush(stdin);
fgets(p->nome, 50, stdin);
printf("Digite seu numero: \n");
fflush(stdin);
fgets(p->numero, 15, stdin);
printf("Digite seu email: \n");
fflush(stdin);
fgets(p->email, 50, stdin);
Contatos* NovoContato;
NovoContato = (struct Contatos*)malloc(sizeof(struct Contatos));
Contatos* ElementoVarredura;
ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
NovoContato->nome;
NovoContato->numero;
NovoContato->email;
if (Head == NULL)
{
Head = NovoContato;
Head->proximo = NULL;
}
else
{
ElementoVarredura = Head;
while (ElementoVarredura->proximo != NULL)
ElementoVarredura = ElementoVarredura->proximo;
ElementoVarredura->proximo = NovoContato;
NovoContato->proximo = NULL;
}
}
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
int Remover() {
int res;
char num;
printf("Digite seu numero: \n");
fflush(stdin);
fgets(p->numero, 15, stdin);
res = Remover();
if (res == 1)
printf("Numero removido.");
else
printf("Numero não encontrado.");
Contatos* ElementoVarredura;
ElementoVarredura = (struct Contatos*)malloc(sizeof(struct Contatos));
Contatos* Anterior;
Anterior = (struct Contatos*)malloc(sizeof(struct Contatos));
ElementoVarredura = Head;
while (ElementoVarredura != NULL) {
if (ElementoVarredura->numero == num) {
if (ElementoVarredura == Head) {
Head = ElementoVarredura->proximo;
free(ElementoVarredura);
return 1;
}
else {
Anterior->proximo = ElementoVarredura->proximo;
free(ElementoVarredura);
return 1;
}
}
else {
Anterior = ElementoVarredura;
ElementoVarredura = ElementoVarredura->proximo;
}
}
return 0;
}
Uma das minhas tentativas de faze-lo