Ir ao conteúdo
  • Cadastre-se

C Exclusão Condicional - Struct (Registros)


Posts recomendados

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#define QTDE 1
typedef struct{
    int cod_medico;
    char nome_medico[50];
    char endereco_medico[100];
    float salario_medico;
}dadosM;
typedef struct{
    int cod_paciente;
    char nome_paciente[50];
    char endereco_paciente[100];
    int idade_paciente;
}dadosP;
typedef struct{
    int num_prontuario;
    char data[10];
    char diagnostico[50];
    int cod_medico;
    int cod_paciente;
}dadosC;
int main()
{
    setlocale(LC_ALL, "Portuguese");
    dadosM medicos[QTDE];
    dadosP pacientes[QTDE];
    dadosC consultas[QTDE];
    int opcao, i;
    do{
        printf("\nEscolha uma das opções abaixo:\n\n");
        printf("\n1 - Inclusão de Médicos");
        printf("\n2 - Inclusão de Pacientes");
        printf("\n3 - Inclusão de Consultas");
        printf("\n4 - Exclusão de Médico");
        printf("\n5 - Relatório - Consultas");
        printf("\n0 - Sair");
        printf("\nOpção: ");
        scanf("%d", &opcao);
        switch(opcao)
        {
            case 1:
                printf("\nSUBMENU DE INCLUSÃO DE MÉDICOS\n");
                for(i = 0;i < QTDE;i++)
                {
                    printf("\nMÉDICO %d", i + 1);
                    printf("\nCódigo: ");
                    scanf("%d", &medicos[i].cod_medico);
                    fflush(stdin);
                    printf("Nome: ");
                    gets(medicos[i].nome_medico);
                    printf("Endereço: ");
                    gets(medicos[i].endereco_medico);
                    printf("Salário: R$");
                    scanf("%f", &medicos[i].salario_medico);
                    printf("\nMÉDICO %d INCLUSO!\n", i + 1);
                }
                printf("\n\nMÉDICOS INCLUÍDOS!\n\n");
            break;
            case 2:
                printf("\nSUBMENU DE INCLUSÃO DE PACIENTES\n");
                for(i = 0;i < QTDE;i++)
                {
                    printf("\nPACIENTE %d", i + 1);
                    printf("\nCódigo: ");
                    scanf("%d", &pacientes[i].cod_paciente);
                    fflush(stdin);
                    printf("Nome: ");
                    gets(pacientes[i].nome_paciente);
                    printf("Endereço: ");
                    gets(pacientes[i].endereco_paciente);
                    printf("Idade: ");
                    scanf("%f", &pacientes[i].idade_paciente);
                    printf("\nPACIENTE %d INCLUSO!\n", i + 1);
                }
                printf("\n\nPACIENTES INCLUÍDOS!\n\n");
            break;
            case 3:
                printf("\nSUBMENU DE INCLUSÃO DE CONSULTAS\n");
                for(i = 0;i < QTDE;i++)
                {
                    printf("\nCONSULTA %d", i + 1);
                    printf("\nID Prontuário: ");
                    scanf("%d", &consultas[i].num_prontuario);
                    fflush(stdin);
                    printf("Data: ");
                    gets(consultas[i].data);
                    printf("Diagnóstico: ");
                    gets(consultas[i].diagnostico);
                    printf("Código - Médico: ");
                    scanf("%d", &consultas[i].cod_medico);
                    printf("Código - Paciente: ");
                    scanf("%d", &consultas[i].cod_paciente);
                    int j;
                    for(j = QTDE - 1;j >= 0;j--)
                    {
                        if(consultas[i].cod_medico == medicos[j].cod_medico)
                        {
                            if(consultas[i].cod_paciente == pacientes[j].cod_paciente)
                            {
                                printf("CONSULTA %d CADASTRADA!", i + 1);
                            }
                        }
                        else if(consultas[i].cod_medico == medicos[j].cod_medico &&
                                consultas[i].cod_paciente != pacientes[j].cod_paciente)
                        {
                            consultas[i].cod_medico = 0;
                            consultas[i].cod_paciente = 0;
                            strcpy(consultas[i].data, "NULL");
                            strcpy(consultas[i].diagnostico, "NULL");
                            consultas[i].num_prontuario = 0;
                            printf("\nCONSULTA NÃO CADASTRADA!\nPACIENTE %d NÃO CADASTRADO!", consultas[i].cod_paciente);
                        }
                        else if(consultas[i].cod_medico != medicos[j].cod_medico &&
                                consultas[i].cod_paciente == pacientes[j].cod_paciente)
                        {
                            consultas[i].cod_medico = 0;
                            consultas[i].cod_paciente = 0;
                            strcpy(consultas[i].data, "NULL");
                            strcpy(consultas[i].diagnostico, "NULL");
                            consultas[i].num_prontuario = 0;
                            printf("\nCONSULTA NÃO CADASTRADA!\MÉDICO %d NÃO CADASTRADO!", consultas[i].cod_medico);
                        }
                        else
                        {
                            consultas[i].cod_medico = 0;
                            consultas[i].cod_paciente = 0;
                            strcpy(consultas[i].data, "NULL");
                            strcpy(consultas[i].diagnostico, "NULL");
                            consultas[i].num_prontuario = 0;
                            printf("\nCONSULTA NÃO CADASTRADA!\MÉDICO %d & PACIENTE %d NÃO CADASTRADO!",
                                    consultas[i].cod_medico, consultas[i].cod_paciente);
                        }
                    }
                }
            break;
            case 4:
                printf("\nSUBMENU DE EXCLUSÃO DE MÉDICOS\n");
                for(i = 0;i < QTDE;i++)
                {
                    printf("\nMédico %s - Código: %d.", medicos[i].nome_medico, medicos[i].cod_medico);
                }
                int cod_exclusao;
                printf("Qual o código do médico que deseja excluir? ");
                scanf("%d", &cod_exclusao);
                for(j = QTDE - 1;j >= 0;j--)
                {
                    if(cod_exclusao == medicos[j].cod_medico)
                    {
                        if()
                        {
                            
                        }
                    }
                }
            break;
        }
    }while(opcao != 0);
    printf("\nOBRIGADO!");
    return 0;
}

Boa tarde, vocês poderiam me ajudar?

 

Estou com dúvida de como posso fazer para excluir um dado em C mediante a algumas condições, o exercício é: 

 

Faça um programa em C que utilize as informações a seguir:

Médicos            Pacientes              Consultas

Cod_medico    Cod_paciente         Num_prontuario

Nome               Nome                     Data

Endereco        Endereco                Diagnostico

Salario            Idade                      Cod_medico

                                                      Cod_paciente

O programa deverá:

(a) criar um procedimento para realizar inclusões no cadastro de pacientes e médicos;

(b) criar um procedimento para excluir um médico (lembre-se: se existir alguma consulta realizada por esse médico, ele não pode ser excluído)

(c) criar um procedimento para mostrar todas as consultas realizadas em uma data escolhida pelo usuário.

 

obs.: Na linha metodológica de Programação de Computadores, sei somente até o conceito de struct.

atenciosamente,

João Lucas

Duvida_Questao_14.JPG

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

simplesmente borre os dados do vetor. Se não quiser borrar basta por o código como 0, e não ter ele em conta. É dizer... Se uma casinha do vetor tiver o código zero, então é como se esse paciente não existice, quando você precisar guardar um novo paciente você guarda ele em alguma posição onde o código seja 0, pois nesta posição é como se fosse vazia, qualquer paciente terá um código diferente de zero, assim você reaproveita as posições do vetor. Quando for incerir um paciente novo procure uma a uma as posições até encontrar 0, e insira aí os dados do novo paciente. Tendeu?

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

15 minutos atrás, João Lucas Benício disse:

@vangodp sim amigo, mas vai que um médico tenha mais que uma consulta, como verifico ?

Essa é aproximadamente (se não) a pergunta que leva a resolução do exame. Qualquer tentativa de exemplificar essa questão sem pericia é direto ou indiretamente uma resposta, um desafio entanto.

 

Pra começar, descreva você a solução em forma de representação Descritiva Narrativa.

Sinto mais satisfação em ajudar do que prejudicar com resposta prontas.

 

Bons Estudos.

Link para o comentário
Compartilhar em outros sites

5 horas atrás, João Lucas Benício disse:

@vangodp sim amigo, mas vai que um médico tenha mais que uma consulta, como verifico ?

Você tentaria checar as consultas pelo código do medico.

 

outra ideia seria simplificar as estrutura, não sei se você percebeu mas as estruturas dos médicos e dos pacientes compartilham muito em comum.

Spoiler

#include <stdio.h>

/* Constantes */
#define T_NOME 20
#define T_ENDERECO 20
#define T_DATA 10

#define Q_MEDICOS 10
#define Q_PACIENTES 10
#define Q_CONSULTAS 10

/* Tipos */
typedef struct
{
  int codigo;
  char nome[T_NOME];
  char endereco[T_ENDERECO];
}info_basica_t;

typedef struct
{
  info_basica_t info;
  float salario;
  int usado;
}medico_t;

typedef struct
{
  info_basica_t info;
  int idade;
  int usado;
}paciente_t;

typedef struct
{
  int prontuario;
  char data[T_DATA];
  int cod_medico;
  int cod_paciente;
  int usado;
}consulta_t;

void PegaInfo(info_basica_t *info);

int main(void)
{
  medico_t medicos[Q_MEDICOS];
  paciente_t pacientes[Q_PACIENTES];
  consulta_t consultas[Q_CONSULTAS];
  int opcao,cont;
  /* Inicia os vetores */
  for(cont=0; cont<Q_MEDICOS; cont++)
    medicos[cont].usado=0;
  for(cont=0; cont<Q_MEDICOS; cont++)
    pacientes[cont].usado=0;
  for(cont=0; cont<Q_MEDICOS; cont++)
    consultas[cont].usado=0;
  do
  {
    /* Menu principal */
    printf("\nEscolha uma das opções abaixo:\n\n");
    printf("\n1 - Inclusão de Médicos");
    printf("\n2 - Inclusão de Pacientes");
    printf("\n3 - Inclusão de Consultas");
    printf("\n4 - Exclusão de Médico");
    printf("\n5 - Relatório - Consultas");
    printf("\n0 - Sair");
    printf("\nOpção: ");
    scanf("%i%*c",&opcao);
    switch(opcao)
    {
      case 1:
        for(cont=0; cont<Q_MEDICOS && medicos[cont].usado==1 ;cont++);
        printf("\nDigite as infomações do medico abaixo\n");
        PegaInfo(&medicos[cont].info);
        printf("\nDigite a quantidade do salario:\t");
        scanf("%f%*c",&medicos[cont].salario);
        medicos[cont].usado=1;
      break;
    }
  }while(opcao!=0);
  /* Mostra os medicos cadastrados */
  for(cont=0; cont<Q_MEDICOS && medicos[cont].usado==1; cont++)
  {
    printf("\nNome:\t%s",medicos[cont].info.nome);
    printf("\nEndereco:\t%s",medicos[cont].info.endereco);
    printf("\nCodigo:\t%i",medicos[cont].info.codigo);
  }
  return(0);
}

void PegaInfo(info_basica_t *info)
{
  printf("\nDigite o nome:\t");
  fgets(info->nome,T_NOME,stdin);
  printf("\nDigite o endereco:\t");
  fgets(info->endereco,T_ENDERECO,stdin);
  printf("\nDigite o codigo:\t");
  scanf("%i%*c",&info->codigo);
}

 

 

Link para o comentário
Compartilhar em outros sites

Em 19/03/2020 às 17:03, João Lucas Benício disse:

Faça um programa em C que utilize as informações a seguir:

Médicos            Pacientes              Consultas

Cod_medico    Cod_paciente         Num_prontuario

Nome               Nome                     Data

Endereco        Endereco                Diagnostico

Salario            Idade                      Cod_medico

                                                      Cod_paciente

O programa deverá:

(a) criar um procedimento para realizar inclusões no cadastro de pacientes e médicos;

(b) criar um procedimento para excluir um médico (lembre-se: se existir alguma consulta realizada por esse médico, ele não pode ser excluído)

(c) criar um procedimento para mostrar todas as consultas realizadas em uma data escolhida pelo usuário.

 

 

Esse é um enunciado bem besta.

  • Nada diz sobre as consultas. Apenas usar as informações. Então você pode ler de um arquivo umas consultas ou colocar umas a olho e pronto. Item (sem letra) ok. Não precisa criar consultas. Não está no enunciado. Não que isso acrescente muito já que o registro de consultas tem 5 campos apenas
     
  • Médicos e pacientes só tem 4 campos. E o item (a) só fala em inclusões. Então seria 🤔 ler 4 campos do teclado e colocar na lista correspondente.
     
  • excluir um médico? Você pega o tal Cod_Medico e vai lá na lista de Consultas e vê se tem uma com o Cod_Medico dele, e se tiver deixa pra la. Escreva algo na tela pra ficar claro que você viu, tipo 
    O Medico 'cod_Medico' tem consulta em 'Data' e entao nao pode ser excluido
    e não caia na tentação ingênua de por acentos e tal. Não faz parte do problema. (b)
     
  • mostrar as consultas que estão numa lista de consultas? E nao fala em ordem nem nada. Então não precisam estar ordenadas. Apenas um loop: passe por todas as consultas. Apenas um if. Liste apenas as que tem 'Data' igual a que o usuário especificou. (c)

    Agora isso não entendi mesmo:
#define QTDE 1
  
  // que pretende com um unico medico um unico paciente e uma so consulta?
  
    dadosM medicos[QTDE];
    dadosP pacientes[QTDE];
    dadosC consultas[QTDE];

    int qMedicos = 0; // deve imaginar que vai precisar saber quantos medicos tem ja
    int qPacientes = 0; // e pacientes
    int qConsultas = 0; // e consultas

Não vai muito longe com QTDE = 1...

 

Use um contador para cada tabela e quando incluir alguém incremente o correspondente. Quando excluir faça o óbvio e subtraia. Assim sempre saberá até onde procurar algo nas listas. Note que pelo enunciado só pode excluir médicos que não tenham consultas...

 

Pode ser uma pegadinha ou só uma bobagem de quem escreveu, mas o enunciado fala explicitamente em "consultas realizadas em uma data escolhida pelo usuário" e isso quer dizer passado. Já realizadas.

 

jlucas.png.3d7eff769a5376b487ca71a8652976a3.png

 

Lucas, você tem um livro-texto? uma apostila? Você sabe até o que leu no livro. Até o que aprendeu. Ninguém vai te impedir de aprender, exceto talvez você mesmo. Deve imaginar que nas páginas que você ainda não leu do livro tenha coisas que vão tornar seu trabalho mais fácil e não mais difícil. 

 

Não me leve a mal, mas em especial nesse campo essa ideia de "ainda não aprendi isso" não é nada saudável. Em geral os caras só pagam a gente pra fazer o que a gente não sabe :( ainda. Ou pagam bem pouco para fazer o bem simples.


 

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!