Buscar

Faça um programa cadastre uma Fila de usuários. Implemente o menu de opções abaixo

💡 3 Respostas

User badge image

Joao Andre MArtins Dias

ListaDE.h
//--------------------------------------------------------------------------

    struct Pessoa {
        int codigo;
        char nome[40];
        char idade;
    };
    typedef struct Pessoa pessoa;

    struct DoubleLL {
        pessoa dados;
        struct DoubleLL *prox, *ant;
    };
    typedef struct DoubleLL list;
    //--------------------------------------------------------------------------
    void enqueue(list **l, pessoa info);
    list* deenque(list **l);
    void init(list **l);
    void exibe(list *l);
    list* busca(list *l, pessoa info);
    list* meio(list *l);
    void exclui(list **l, pessoa info);
    //--------------------------------------------------------------------------

    void init(list **l) {
        *l = NULL;
    }
    //--------------------------------------------------------------------------

    list* deenque(list **l) {
        list *aux;
        aux = *l;
        *l = (*l)->prox;
        (*l)->ant = NULL;
        return aux;

    }

    void enqueue(list **l, pessoa info) {
        list *aux, *nova = (list*) malloc(sizeof (list));
        nova->dados.codigo = info.codigo;
        strcpy(nova->dados.nome, info.nome);
        nova->dados.idade = info.idade;
        nova->ant = nova->prox = NULL;
        if (*l == NULL)
            *l = nova;
        else {
            aux = *l;
            while (aux->prox != NULL) {
                aux = aux->prox;
            }
            nova->ant = aux;
            aux->prox = nova;
        }
    }
    //--------------------------------------------------------------------------

    list* meio(list *l) {
        list *aux = l, *meio = aux;
        int cont = 1;
        while (aux->prox != NULL) {
            aux = aux->prox;
            if (cont % 2 == 0) {
                meio = meio->prox;
            }
            cont++;
        }
        return meio;
    }
    //--------------------------------------------------------------------------

    void exibe(list *l) {
        while (l != NULL) {
            printf("[%d] - [%s]\n", l->dados.codigo, l->dados.nome);
            l = l->prox;
        }

    }
    //--------------------------------------------------------------------------

    list* busca(list *l, pessoa info) {
        while (l != NULL && strcmp(info.nome, l->dados.nome) != 0 && l->dados.codigo != info.codigo) {
            l = l->prox;
        }
        return l;
    }
    //--------------------------------------------------------------------------

    list* getFim(list *l) {
        while (l->prox != NULL)
            l = l->prox;
        return l;
    }
    //--------------------------------------------------------------------------

    void exclui(list **l, pessoa info) {
        list *aux = busca(*l, info);
        if ((*l)->prox == NULL) {
            *l = NULL;
            free(aux);
        } else if (aux->ant == NULL) {
            *l = (*l)->prox;
            free(aux);
        } else if (aux->prox == NULL) {
            aux->ant->prox = NULL;
            aux->ant = NULL;
            free(aux);

        } else {
            aux->ant->prox = aux->prox;
            aux->prox->ant = aux->ant;
            free(aux);
        }
    }
    //--------------------------------------------------------------------------

    void selecaoDireta(list **l) {
        char menor[40];
        list *i = *l, *j = NULL;
        while (i->prox != NULL) {
            strcpy(menor, i->dados.nome);
            j = i->prox;
            while (j != NULL) {
                if (strcmp(j->dados.nome, menor) < 0) {
                    strcpy(menor, j->dados.nome);
                    strcpy(j->dados.nome, i->dados.nome);
                    strcpy(i->dados.nome, menor);
                }
                j = j->prox;
            }
            i = i->prox;
        }
    }

// arquivo principal
#include"ListaDE.h"
int main(int argc, char** argv) {
    int op = 0;
    pessoa nova;
    list *lista;
    init(&lista);
    while (op != 6) {
        printf("[ 1 ] - Inserir\n");
        printf("[ 2 ] - Excluir\n");
        printf("[ 3 ] - Consultar\n");
        printf("[ 4 ] - Listar\n");
        printf("[ 5 ] - Ordenar\n");
        printf("[ 6 ] - Sair\n");
        scanf("%d", &op);
        switch (op) {
            case 1:
                do {
                    printf("Codigo:\n");
                    scanf("%d", &nova.codigo);
                    printf("Nome:\n");
                    scanf("%s", &nova.nome);
                    fflush(stdin);
                    printf("Idade:\n");
                    scanf("%d", &nova.idade);
                    printf("----------\n");
                    enqueue(&lista, nova);
                } while (nova.codigo != 0);
                break;
            case 2:
                printf("Entre com o codigo e o nome da pessoa:\n");
                printf("Codigo:\n");
                scanf("%d", &nova.codigo);
                printf("Nome:\n");
                scanf("%s", &nova.nome);
                fflush(stdin);
                exclui(&lista, nova);
                break;
            case 3:
                printf("Entre com o codigo e o nome da pessoa:\n");
                printf("Codigo:\n");
                scanf("%d", &nova.codigo);
                printf("Nome:\n");
                scanf("%s", &nova.nome);
                fflush(stdin);
                printf("\n[%d] - [%s]\n", busca(lista, nova)->dados.codigo, busca(lista, nova)->dados.nome);

                break;
            case 4:
                exibe(lista);
                break;
            case 5:
                selecaoDireta(&lista);
                break;
        }
    }

2
Dislike0
User badge image

Joao Andre MArtins Dias

Parceiro o primeiro arquivo é uma Lista duplamente encadeada, que utilizei como disciplina de acesso uma fila (FIFO)

Tem um método de ordenação(Seleção Direta) por que bolha de cú é rola...  Ordena as pessoas por nome.

Depois no main é so um carai de menu chamando as funções, mas pelo amor de deus, separem em dois arquivos, um .h ou .c e faça o include da ListaDE.h ou .c no main.c... Espero que ajude.

1
Dislike0
User badge image

RD Resoluções

Faça:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <conio.h>  //clrscr

#define BUFFER 64

/* Estrutura da lista declarada para armazenar nossos dados. */
typedef struct lista {
        char *nome;
        int idade;
        struct lista *proximo;
} Dados;

/* Prototipo das funcoes de manuseio dos dados. */
Dados *inicia_dados(char *nome, int idade);
Dados *insere_dados(Dados *dados, char *nome, int idade);
void exibe_dados(Dados *dados);
void busca_dados(Dados *dados, char *chave);
Dados *deleta_dados(Dados *dados);
int checa_vazio(Dados *dados);

/* Prototipo das funcoes do menu.*/
void insere(void);
void exibe(void);
void busca(void);
void deleta(void);

/* Inicializa a estrutura de dados principal. */
Dados *principal = NULL;

/* Cria a nova lista apontando o proximo no para NULL. */
Dados *inicia_dados(char *nome, int idade) {

        Dados *novo;

        novo = (Dados *)malloc(sizeof(Dados));
        novo->nome = (char *)malloc(strlen(nome)+1);
        strncpy(novo->nome, nome, strlen(nome)+1);
        novo->idade = idade;
        novo->proximo = NULL;

        return novo;
}

/* Como a lista nao esta mais vazia, apontamos o proximo no para lista anterior. */
Dados *insere_dados(Dados *dados, char *nome, int idade) {

        Dados *novo;

        novo = (Dados *)malloc(sizeof(Dados));
        novo->nome = (char *)malloc(strlen(nome)+1);
        strncpy(novo->nome, nome, strlen(nome)+1);
        novo->idade = idade;
        novo->proximo = dados;

        return novo;
}

/* Percorre todos os campos da lista e imprime ate o ponteiro proximo chegar em NULL. */
void exibe_dados(Dados *dados) {

        fprintf(stdout, "Cadastro:\n\n");

        fprintf(stdout, "------------------------\n");

        for (; dados != NULL; dados = dados->proximo) {
                fprintf(stdout, "Nome: %s\n", dados->nome);
                fprintf(stdout, "Idade: %d\n", dados->idade);
                fprintf(stdout, "------------------------\n ");
        }
        printf("Pressione uma tecla para continuar.");
        getch();
}

/* Percorre cada ponta comparando o nome com a chave. */
void busca_dados(Dados *dados, char *chave) {

        int achou = 0;

        fprintf(stdout, "Cadastro:\n\n");
        for (; dados != NULL; dados = dados->proximo) {
                if (strcmp(chave, dados->nome) == 0) {

                        fprintf(stdout, "------------------------\n");
                        fprintf(stdout, "Nome: %s\n", dados->nome);
                        fprintf(stdout, "Idade: %d\n", dados->idade);
                        fprintf(stdout, "------------------------\n");
                        achou++;
                }
        }

        if (achou == 0)
                fprintf(stdout, "Nenhum resultado encontrado.\nPressione uma tecla para continuar.\n");
        else
                fprintf(stdout, "Foram encontrados %d registros. \nPressione uma tecla para continuar.\n", achou);

        sleep(1);
        getch();
}

/* Deleta o ultimo registro inserido. */
Dados *deleta_dados(Dados *dados) {

        Dados *novo;

        novo = dados->proximo;

        free(dados->nome);
        free(dados);

        fprintf(stdout, "O ultimo registro inserido foi deletado com sucesso.\\n");
        sleep(1);

        return novo;
}

/* a pena checa se a lista e NULL ou nao. */
int checa_vazio(Dados *dados) {

        if (dados == NULL) {
                fprintf(stdout, "Lista vazia!\\n");
                sleep(1);
                return 1;
        } else
                return 0;
}

/* Obtem os dados necessarios para chamar as funcoes de manuseio de dados. */
void insere(void) {

        char *nome;
        int idade;

        nome = (char *)malloc(BUFFER);

        fprintf(stdout, "\n\nDigite o Nome: \n----> ");
        scanf("%s", nome);
        fprintf(stdout, "\n");

        fprintf(stdout, "Digite a Idade: \n----> ");
        scanf("%d", &idade);
        fprintf(stdout, "\n");

        if (principal == NULL)
                principal = inicia_dados(nome, idade);
        else
                principal = insere_dados(principal, nome, idade);
}

void exibe(void) {

        if (!checa_vazio(principal))
                exibe_dados(principal);

}

void busca(void) {

        char *chave;

        if (!checa_vazio(principal)) {

                chave = (char *)malloc(BUFFER);

                fprintf(stdout, "Digite o nome para buscar: \\n--> ");
                scanf("%s", chave);

                busca_dados(principal, chave);
                getch();
        }
}

void deleta(void) {

        if (!checa_vazio(principal))
                principal = deleta_dados(principal);
}

int main(void) {

        char escolha;

        do {
                system("cls"); 
                fprintf(stdout, "\n Cadastro de Pessoas\n\n");
                fprintf(stdout, "Escolha uma opcao: \n\n");
                fprintf(stdout, "1 - Insere Dados\n");
                fprintf(stdout, "2 - Exibe Dados\n");
                fprintf(stdout, "3 - Busca Dados\n");
                fprintf(stdout, "4 - Deleta Dados\n");
                fprintf(stdout, "5 - Sair\n\n");

                scanf("%c", &escolha);

                switch(escolha) {
                        case '1':
                                insere();
                                break;

                        case '2':
                                exibe();
                                break;

                        case '3':
                                busca();
                                break;

                        case '4':
                                deleta();
                                break;

                        case '5':
                                exit(0);
                                break;

                        default:
                                fprintf(stderr,"Digite uma opcao valida!\\n");
                                sleep(1);
                                break;
                }

                //getchar(); /* E para impedir sujeira na entrada da escolha. Nao lembro de nada melhor tambem.   */
        }

        while (escolha > 0); /* Loop Principal. */

        return 0;
}
0
Dislike0

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

✏️ Responder

SetasNegritoItálicoSublinhadoTachadoCitaçãoCódigoLista numeradaLista com marcadoresSubscritoSobrescritoDiminuir recuoAumentar recuoCor da fonteCor de fundoAlinhamentoLimparInserir linkImagemFórmula

Para escrever sua resposta aqui, entre ou crie uma conta

User badge image

Outros materiais