Ir ao conteúdo
  • Cadastre-se
WASSANTOS

Preciso implementar nesse codigo uma condicao de prioridade

Recommended Posts

#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 ??????

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×