Informatização de registros de saúde. Ultimamente, a questão da informatização dos registros de saúde tem feito parte dos noticiários. Essa possibilidade está sendo estudada com cuidado devido a preocupações com privacidade e segurança quanto a informações confidenciais, entre outras questões. A informatização de registros de saúde poderia facilitar o compartilhamento de perfis e históricos de saúde de pacientes entre diversos médicos. Isso poderia melhorar a qualidade do atendimento, ajudaria a evitar conflitos entre medicamentos e prescrição de receitas incorretas, reduziria custos e, nas salas de emergência, salvaria vidas. Neste exercício, você criará uma estrutura PerfilSaúde ‘inicial’ para uma pessoa. Os membros da estrutura deverão incluir nome, sobrenome, sexo, data de nascimento (consistindo em

atributos separados para dia, mês e ano de nascimento), altura (em centímetros) e peso (em quilos). Seu programa deverá ter uma função que receba esses dados e os utilize para definir os membros de uma variável PerfilSaúde. O programa também deverá incluir funções que calculem e retornem a idade do usuário em anos, a frequência cardíaca máxima e a frequência

cardíaca ideal (ver Exercício 3.48), e o índice de massa corporal (IMC; ver Exercício 2.32). O programa deverá pedir a informação da pessoa, criar uma variável PerfilSaúde para ela e exibir as informações dessa variável — o que inclui nome, sobrenome, sexo, data de nascimento, altura e peso; depois, deverá calcular e exibir a idade da pessoa em anos, seu IMC e suas frequências cardíacas máxima e ideal. Ele também deverá exibir a tabela de ‘valores de IMC’ do Exercício 2.32.

Passo 1

Usando as informações fornecidas, escreveremos um programa que usa uma estrutura HealthProfile e executa o seguinte:

Lê as informações da pessoa.

Cria uma variável HealthProfile para essa pessoa.

Exiba as informações do HealthProfile dessa pessoa, juntamente com a idade da pessoa, IMC, frequência cardíaca máxima e faixa de frequência cardíaca alvo e o gráfico de valores de IMC.

Para escrever este programa, primeiro declararemos os seguintes arquivos de cabeçalho.

#include // Para a operação de entrada e saída

#include // Para obter o dia atual do sistema

Em seguida, criaremos a estrutura HealthProfile para armazenar as informações da pessoa considerando as instruções fornecidas neste exercício.

Passo 2

struct HealthProfile{

char firstName[20];

char lastName[20];

char gender;

int birthMonth;

int birthDate;

int birthYear;

float height;

float weight;

};

Em seguida, vamos declarar os seguintes protótipos de função.

struct HealthProfile getPersonsInfo();

int getAge(int bMonth, int bDate, int bYear);

void displayHeartRateInfo(int age);

float getBMI(float height, float weight);

void displayHealthInfo(struct HealthProfile p);

Cada uma dessas funções será descrita e definida nas etapas seguintes.

A função getPersonsInfo lê as informações da pessoa, inicializa os membros da variável HealthProfile e retorna essa variável como HealthProfile da pessoa.

Para definir esta função, vamos

struct HealthProfile getPersonsInfo(){

// Cria uma variável de perfil de saúde

struct HealthProfile p;

// Obtém as informações da pessoa e define todos os membros da estrutura

printf("Enter your first name: ");

scanf("%[^\n]%*c", p.firstName);

printf("Enter your last name: ");

scanf("%[^\n]%*c", p.lastName);

printf("Enter your gender (m or f): ");

scanf("%c", &p.gender);

printf("Enter your birthday in the format mm/dd/yyyy: ");

scanf("%d/%d/%d", &p.birthMonth, &p.birthDate, &p.birthYear);

printf("Enter your height (in inches): ");

scanf("%f", &p.height);

printf("Enter your weight (in pounds): ");

scanf("%f", &p.weight);

// Por fim, retorna a variável do perfil de saúde da pessoa

return p;

}

A função getAge aceita o aniversário da pessoa (mês, data, ano) como entrada de parâmetro. Em seguida, calcula e retorna a idade da pessoa.

Para definir esta função, vamos

int getAge(int bMonth, int bDate, int bYear){

// Declara a variável para armazenar a idade da pessoa

int age;

// Obtém o dia atual do sistema

time_t currDate = time(NULL);

struct tm curr = *localtime(&currDate);

// Verifica se o dia atual é menor que o aniversário do usuário

// para determinar a idade correta da pessoa. Se for assim,

// este ano não deve ser contado

if( curr.tm_mday

(curr.tm_mday bMonth)){

curr.tm_year -= 1;

}

// Calcula a idade da pessoa e retorna esse resultado

age = (curr.tm_year + 1900) - bYear;

return age;

}

Passo 3

A função displayHeartRateInfo aceita como parâmetro a idade da pessoa. Em seguida, ele calcula e exibe a frequência cardíaca máxima e a faixa de frequência cardíaca alvo dessa pessoa.

Para definir esta função, vamos

void displayHeartRateInfo(int age){

// Declara as variáveis necessárias

// Para armazenar a frequência cardíaca máxima do usuário

int maxHeartRate;

// Para armazenar o intervalo alvo da pessoa (50 - 85%)

int minTargetRange, maxTargetRange;

// Calcula a frequência cardíaca máxima da pessoa e o intervalo alvo da frequência cardíaca.

maxHeartRate = 220 - age;

minTargetRange = maxHeartRate * 0.50;

maxTargetRange = maxHeartRate * 0.85;

// Exibe as informações de frequência cardíaca da pessoa

printf("\nHEART RATE INFORMATION\n");

printf("Maximum Heart Rate: %d bpm\n", maxHeartRate);

printf("Target Heart Rate range: %d to %d bpm\n", minTargetRange, maxTargetRange);

}

A função getBMI aceita a altura (em polegadas) e o peso (em libras) da pessoa como parâmetros. Em seguida, ele calcula e retorna o índice máximo do corpo da pessoa. Assim, teremos

float getBMI(altura de flutuação, peso de flutuação){

retorno (peso * 703) / (altura * altura);

}

A função displayHealthInfo aceita o HealthProfile da pessoa como parâmetro e exibe as informações do perfil dessa pessoa, juntamente com a idade da pessoa, IMC, frequência cardíaca máxima e faixa de frequência cardíaca alvo e o gráfico de valores de IMC.

Para definir esta função, faremos o seguinte

void displayHealthInfo(struct HealthProfile p){

// Exibe as informações da pessoa acessando os membros da estrutura printf("\n=================HEALTH PROFILE=================\n");

printf("Name: %s %s\n", p.firstName, p.lastName);

printf("Gender: %s\n", (p.gender == 'm') ? "Male" : "Female");

printf("Date of birth: %d/%d/%d\n", p.birthMonth, p.birthDate, p.birthYear);

printf("Height: %.2f\"\n", p.height);

printf("Weight: %.2f lbs\n", p.weight);

// Obtém e exibe a idade invocando a função getAge

int age = getAge(p.birthMonth, p.birthDate ,p.birthYear);

printf("Age: %d y/o \n", age);

// Obtém e exibe o IMC invocando a função getBMI

printf("BMI: %.2f\n", getBMI(p.height, p.weight));

// Exibe a frequência cardíaca máxima e o intervalo alvo da frequência cardíaca displayHeartRateInfo(age);

// Exibe o gráfico de IMC

printf("\nBMI VALUES\n"

"Underweight: less than 18.5\n"

"Normal: between 18.5 and 24.9\n"

"Overweight: between 25 and 29.9\n"

"Obese: 30 or greater\n");

}

Por fim, usaremos a função main para criar uma variável HealthProfile para a pessoa, ler as informações da pessoa e exibir as informações do perfil de saúde dessa pessoa.

int main(){

struct HealthProfile person = getPersonsInfo();

displayHealthInfo(person);

return 0;

}

Resposta

Ver o desenvolvimento.