Controle de saude

18 respostas
J

ola pessoal, voces podem me ajudar a criar um sistema em java para controlar a saude de uma pessoa, seu imc, nivel de atividade fisica, etc, ou pelo menos um exemplo.

tenho o exercicios mas nao tenho base para iniciá-lo.

grato.

18 Respostas

gpd38

Coloque pelo menos o que vc quer fazer?

Sem saber por onde começar, como podemos te ajudar?

J

este seria o primeiro exemplo:

  1. Criar uma Classe Pessoa:

    • Atributos:
      atributo de nível de atividade física, que aceite somente os valores de 0 a 4. Onde:
      0 = sedentário
      1 = leve
      2 = moderado
      3 = intenso
      4 = muito intenso
      # lembre-se da possibilidade de controlar os valores atribuídos através dos métodos set.

    • Métodos:
      o crie um método que retorne a idade calculada, a partir da data de nascimento
      + pesquise no Google por algoritmos de calculo de idade com java

      o crie um método que calcule e retorne o gasto energético diário de uma pessoa, baseado nas seguintes fórmulas:
      
                  # MULHERES:
                        * GEB = 655,1 + (9,56 X P) + (1,85 X A) - (4,7 X I)
                  # MASCULINO:
                        * GEB = 66,5 + (13,7 X P) + (5 X A) - (6,8 X I)
                  # ONDE:
                        * GEB = gasto energético basal (resultado)
                        * P = peso em KG
                        * A = altura em cm
                        * I = idade em anos (ignora meses)
      
                  # PARA AMBOS OS SEXOS, calcular o custo adicional baseado no nível da atividade física:
                        * Sedentário = + 20 %
                        * Atividade leve = + 30 %
                        * Atividade Moderada = + 40 %
                        * Atividade Intensa = + 50 %
                        * Atividade Muito Intensa = + 70
      
gpd38

Vc tem alguma restrição em usar alguma estrutura de dados ou vc pode usar qualquer uma?

Vc ja tem alguma coisa implementada ?

J

tenho a classe pessoa apenas:


public class Pessoa {

private String nome;

private int idade;

private float altura;

private float peso;	

private char sexo;
public String getNome() {
	return nome;
}

public float getImc() {
	return peso / (altura * altura);
}


public void setNome(String nome) {
	this.nome = nome;
}
public int getIdade() {
	return idade;
}
public void setIdade(int idade) {
	this.idade = idade;
}
public float getAltura() {
	return altura;
}
public void setAltura(float altura) {
	this.altura = altura;
}
public float getPeso() {
	return peso;
}
public void setPeso(float peso) {
	this.peso = peso;
}
public char getSexo() {
	return sexo;
}
public void setSexo(char sexo) {
	if (sexo != 'M' && sexo != 'F') {
		sexo = 'I';
	}
	this.sexo = sexo;
}

public void setAtributos(String nome, int idade, float altura, float peso) {
	setNome(nome);
	setIdade(idade);
	setAltura(altura);
	setPeso(peso);
}

}

gpd38
static Scanner input = new Scanner(System.in);

	public static void main(String[] args) {
		Object vetor_pessoas[];
		Pessoa2 p;

		int n, idade;
		float altura, peso;
		String nome;
		char sexo;

		System.out.println("Digite a quantidade de pessoas");
		n = input.nextInt();
		vetor_pessoas = new Object[n];

		for (int i = 0; i < n; i++) {
			System.out.println("Digite o nome da " + (i + 1) + "ª pessoa");
			nome = input.next();
			System.out.println("Digite idade da " + (i + 1) + "ª pessoa");
			idade = input.nextInt();
			System.out.println("Digite a altura da " + (i + 1) + "ª pessoa");
			altura = input.nextFloat();
			System.out.println("Digite o peso da " + (i + 1) + "ª pessoa");
			peso = input.nextFloat();
			System.out.println("Digite o sexo da " + (i + 1) + "ª pessoa");
			sexo = input.next().charAt(0);

			p = new Pessoa2();
			p.setAtributos(nome, idade, altura, peso, sexo);
			vetor_pessoas[i] = p;
		}// for
	}// main

Esta é uma possivel implementação da classe main

J

ok, este tópico já ajudou e muito a implementação, vou montar agora o sistema e vou enviar para ver se está certo, ok ?

mas preciso alterar uma outra situação agora, ja fiz isso, :

public class ExameSaude {
private Pessoa pessoa;

public void setPessoa (Pessoa p) {
	pessoa = p;
}

public String getEstadoSaude() {
	// pede o imc para pessoa
	float imc = pessoa.getImc();
	
	// avalia o estado saude
	if (imc <= 18.5) {
		return "Abaixo";
	} else if (18.5 < imc && imc <= 25) {
		return "Normal";
	} else if (25 < imc && imc <= 30) {
		return "Acima";
	} else {
		return "Obeso";
	}
}

}

agora preciso alterar para isso:

Classe Exame de Saúde

* o retorno do método de avaliação do IMC, deve ser baseado em constantes com os seguintes valores:

      ABAIXO
      NORMAL
      ACIMA
      OBESO
                  # as constantes devem ser declaradas como públicas para que outros objetos possam utilizá-las
                  # cada valor acima deve ser declarado em uma constante de mesmo nome, e usado no momento de teste da avaliação do IMC

como poderia implementar este sistema ?

gpd38

ok, mas quando for postar codigo aqui, coloca entre as tags “[code/] [code/]”

As tags CODE estão no inicio desta pagina.

Clica nelas no inicio  coloca o que vc precisa e clica nela no final
J

ok, eu tenho o costume de passar para o bloco de notas primeiro, mas vou passar direto do eclipse agora

J

e se eu quiser implementar uma classe chamada treinador

alterando os testes comparativos com o resultado da avaliação do IMC e utilizar a comparação com as constantes do objeto utilizado de exame de saúde, eu poderia fazer isso ou altero a classe :
public class Treinador {
		public void avaliarTreinando (Pessoa p) {
			ExameSaude es = new ExameSaude();
			es.setPessoa(p);

			String estado = es.getEstadoSaude();
		
			String msg = "";
		if (estado.equals("Abaixo")) {
			msg = msg + "Ganho de massa";
		} else if (estado.equals("Normal")) {
			msg = msg + "Manutenção";
		} else {
			msg += "Perda de gordura";
		}
		
			System.out.println("Treinando " + p.getNome() + " treinamento indicado " + msg);

	}
}
gpd38

Pode fazer isso sim.
No caso vc terá as classes

.Treinador
.ExameSaude
.Pessoa

J

e como fica o retorno da avaliação do imc ?

gpd38

Nao entendi muito bem pq vc usou msg+=

Ps: sei que msg+= é a mesma coisa que msg = msg + …

Para o retorno coloca return(msg); O metodo principal que será o que chama tera que armazenar a resposta

J

isso quer dizer que o código não mudaria por ocasião do return ?

gpd38
public class ExameSaude {   
 private Pessoa pessoa;      
 public void setPessoa (Pessoa p) {   
 pessoa = p;   
 }      
 public String getEstadoSaude() {   
 // pede o imc para pessoa   
 float imc = pessoa.getImc();      
 // avalia o estado saude   
 if (imc <= 18.5) {   
 return "Abaixo";   
 } else if (18.5 < imc && imc <= 25) {   
 return "Normal";   
 } else if (25 < imc && imc <= 30) {   
 return "Acima";   
 } else {   
 return "Obeso";   
 }   
 }   
 }
agora preciso alterar para isso: Classe Exame de Saúde o retorno do método de avaliação do IMC, deve ser baseado em constantes com os seguintes valores:

ABAIXO
NORMAL
ACIMA
OBESO
as constantes devem ser declaradas como públicas para que outros objetos possam utilizá-las
cada valor acima deve ser declarado em uma constante de mesmo nome, e usado no momento de teste da avaliação do IMC

como poderia implementar este sistema ?
Acho que o que vc quer é isso
public String ABAIXO = "Abaixo";
public String NORMAL= "Normal";
public String ACIMA= "Acima";
public String OBESO= "Obesa";

public String Avaliacao(float imc){
 if (imc <= 18.5) {   
    return ABAIXO;   
 } else if (18.5 < imc && imc <= 25) {   
    return NORMAL;   
 } else if (25 < imc && imc <= 30) {   
    return ACIMA;   
 } else {   
    return OBESO;   
 }  
   return "";
}
Alguma variavel ira chamar esta função, tipo assim:(OBS: Não sei qual classe e qual variavel vc vai usar, isso é so um exemplo)
Pessoa P = new Pessoa();
. . .
float imc ;
String resposta_imc;
. . .
resposta_imc = P.Avaliacao(imc);
System.out.println(" A pessoa esta "+imc);
J

ok, eu a solução do return foi o desvio condicional

public String ABAIXO = "Abaixo";  
	public String NORMAL= "Normal";  
	public String ACIMA= "Acima";  
	public String OBESO= "Obesa";  

	public String Avaliacao(float imc){  
	if (imc <= 18.5) {     
	  return ABAIXO;     
	 } else if (18.5 < imc && imc <= 25) {     
	  return NORMAL;     
	 } else if (25 < imc && imc <= 30) {     
	     return ACIMA;     
	 } else {     
	     return OBESO;     
	 }    
	    return "";  
	 }


""""""""ele aceitou o teste agora""""""""

pedroroxd
Jose_48:
ok, eu a solução do return foi o desvio condicional
public String ABAIXO = "Abaixo";  
	public String NORMAL= "Normal";  
	public String ACIMA= "Acima";  
	public String OBESO= "Obesa";  

	public String Avaliacao(float imc){  
	if (imc <= 18.5) {     
	  return ABAIXO;     
	 } else if (18.5 < imc && imc <= 25) {     
	  return NORMAL;     
	 } else if (25 < imc && imc <= 30) {     
	     return ACIMA;     
	 } else {     
	     return OBESO;     
	 }    
	    return "";  
	 }
""""""""ele aceitou o teste agora""""""""
Pra que esse tanto de declaração de string?
public String Avaliacao(float imc){  
	if (imc <= 18.5) {     
	  return "abaixo";     
	 } else if (18.5 < imc && imc <= 25) {     
	  return "normal";     
	 } else if (25 < imc && imc <= 30) {     
	     return "acima";     
	 } else {     
	     return "obesa";     
	 }    
	    return "";  
	 }
J

ele funcionou também,

mas da mesma forma achei interessante as declarações do tipo string .

Ironlynx

Jose_48, vc não precisa seguir a risca a forma que o seu professor escreveu.
Vc pode ABAIXO, NORMAL, ACIMA e OBESO e tacar numa interface, já que são constantes que deverão estar acessíveis a N membros, só para citar um exemplo(o mesmo pode ser feito com SEDENTÀRIO e outros).

Criado 28 de abril de 2010
Ultima resposta 29 de abr. de 2010
Respostas 18
Participantes 4