Ir ao conteúdo
  • Cadastre-se

Preciso implementar nesse codigo uma condicao de prioridade


WASSANTOS

Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <conio.h>
#define BUFFER 64

     //TRABALHO ACADEMICO DE CADASTRO E ENTRADA DE PACIENTES EM HOSPITAL POR NIVEL DE CLASSIFICACAO DE RISCO
typedef struct lista {
        char *nome;
        char *gravidade;
        int idade;

        struct lista *proximo;
}

Dados;

Dados *inicia_dados(char *nome, char *gravidade, int idade);
Dados *insere_dados(Dados *dados, char *nome, char *gravidade, int idade);
void exibe_dados(Dados *dados);
void busca_dados(Dados *dados, char *chave);
Dados *deleta_dados(Dados *dados);
int checa_vazio(Dados *dados);


void insere(void);
void exibe(void);
void busca(void);
void deleta(void);

Dados *principal = NULL;

Dados *inicia_dados(char *nome, char *gravidade, int idade) {

        Dados *novo;

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

        return novo;
}


Dados *insere_dados(Dados *dados, char *nome, char *gravidade, int idade) {

        Dados *novo;

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

        return novo;
}

void exibe_dados(Dados *dados) {

        fprintf(stdout, " Lista de pacientes:\n\n");

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

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

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, "Gravidade: %s\n", dados->gravidade);
                        fprintf(stdout, "Idade: %d\n", dados->idade);
                        fprintf(stdout, "------------------------\n");
                        achou++;
                }
        }

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

        sleep(1);
        getch();
}


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;
}
int checa_vazio(Dados *dados) {

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

void insere(void) {

        char *nome;
        char *gravidade;
        int idade;

        nome = (char *)malloc(BUFFER);
        gravidade = (char *)malloc(BUFFER);

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

        fprintf(stdout, "\n\nInforme a classificacao de risco do paciente: \n----> ");
        fprintf(stdout, "Vermelho(alto risco) - Amarelo(medio risco) - Verde(baixo risco) \n");
        scanf("%s", gravidade);
        fprintf(stdout, "\n");

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

        if (principal == NULL)
                principal = inicia_dados(nome, gravidade, idade);
        else
                principal = insere_dados(principal, nome, gravidade, 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 paciente 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\t\t\t HOSPITAL DE URGENCIA E EMERGENCIA \n\n");
                fprintf(stdout, "\t**********************Escolha uma opcao:************************* \n\n");
                fprintf(stdout, "\n1 - \t NOVO PACIENTE\n");
                fprintf(stdout, "\n2 - \t EXIBIR PACIENTES CADASTRADOS\n");
                fprintf(stdout, "\n3 - \t BUSCAR PACIENTE\n");
                fprintf(stdout, "\n4 - \t DELETAR DADOS\n");
                fprintf(stdout, "\n5 - \t 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;
                }

                 }

        while (escolha > 0); 

        return 0;
}
 

adicionado 1 minuto depois

PRIORIDADE POR GRAVIDADE DO PACIENTE, SE O CASO FOR GRAVE O PACIENTE DEVE PASSAR PARA O TOPO DA LISTA. MELHOR FORMA DE FAZER ISSO ??????

Link para o comentário
Compartilhar em outros sites

Em vez de usar char *gravidade, você pode usar um inteiro para determinar se é grave, ou não, exemplo:

//Macros
#define UTI 2
#define GRAVE 1
#define NORMAL 0

Existe dois momentos que você pode organizar, quando você estiver adicionando, ou após ter adicionado todos, porém o mais fácil é depois de ter adicionado todos cadastros.

Seria bom criar uma função para fazer a troca, onde ela organiza dependendo da gravidade.

Usando dois loops, um que seleciona um cadastro e outro loop dentro, vai procurando uma gravidade maior que o selecionado, se achar, é feito a troca.

Duvidas pode perguntar.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...