/* Prof. Enrique Ortega e monitor Aline Gimenez */
/* programa Cálculo de Propriedades Físicas e Reológicas em Alimentos*/

// Bibliotecas utilizadas
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
import java.text.*;


public class alimento extends Applet implements ItemListener  //Criação da Classe alimento
{

//Declaração das Váriáveis
double t, agua, proteina, cinzas, carboidrato, lipideo,fibras,d,cp,k,cal;
double p,g,ca,f,ci,a;

// Define o formato numérico que os valores serão impressos
NumberFormat nf2 = NumberFormat.getNumberInstance();

Label l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12,l13,l14,l15;

Panel p1,p2,p3,p4,p5,p6,p7,p8;


TextField tf01 = new TextField("Fanta Laranja",30);//alimento
TextField tf02 = new TextField("88",5);//agua
TextField tf03 = new TextField("0",5);//proteina
TextField tf04 = new TextField("0",5);//lipideos
TextField tf05 = new TextField("12",5);//carboidrato
TextField tf06 = new TextField("0",5);//cinzas
TextField tf07 = new TextField("0",5);//fibras

TextField tf08 = new TextField("",10);//resultado

TextField tf09 = new TextField("10",5);//temperatura

Checkbox[] cb1=new Checkbox[4];
CheckboxGroup cbg = new CheckboxGroup();


/* Inicio dos Métodos para Cálculos deste programa*/

//Método para Cálculo de Densidade (kg/m3)
double Densidade (double proteina,double gordura,double carboidrato,double fibras, double cinzas, double agua, double t)

  {
	  p=1.3299E-3-5.1840E-1*t;
	  g=9.2559E2-4.1757E-1*t;
	  ca=1.5991E3-3.1046E-1*t;
	  f=1.3115E3-3.6589E-1*t;
	  ci=2.4238E3-2.8063E-1*t;
	  a=1000.0163-0.019620666*t-0.0034517530*t*t-4.0295927E-5*t*t*t+6.0425178E-7*t*t*t*t-3.362154E-9*t*t*t*t*t+8.5021633E-12*t*t*t*t*t*t-8.2532596E-15*t*t*t*t*t*t*t;
  return ((proteina*p+gordura*g+carboidrato*ca+fibras*f+cinzas*ci+agua*a)/100);
  }

//Método para Cálculo de Calor Específico (J/kg.ºC)
double Caloresp (double proteina,double gordura,double carboidrato,double fibras, double cinzas, double agua, double t)

  {
	  p=2.0082+1.2089E-3*t-1.3129E-6*t*t;
	  g=1.9842+1.4733E-3*t-4.8008E-6*t*t;
	  ca=1.5488+1.9625E-3*t-5.9399E-6*t*t;
	  f=1.8459+1.8306E-3*t-4.6509E-6*t*t;
	  ci=1.029+1.8896E-3*t-3.6817E-6*t*t;
	  a=(0.99450036+0.0034583926*t-1.9662498E-4*t*t+3.9480288E-6*t*t*t-3.6765615E-8*t*t*t*t+1.7415129E-10*t*t*t*t*t-4.0643876E-13*t*t*t*t*t*t+3.7192251E-16*t*t*t*t*t*t*t)*4.18E-3;

  return ((proteina*p+gordura*g+carboidrato*ca+fibras*f+cinzas*ci+agua*a)/100);
  }


 //Método para Cálculo de Condutividade Termica (W/mºC)
 double Condutividade (double proteina,double gordura,double carboidrato,double fibras, double cinzas, double agua, double t)

   {
 	  p=0.17881+1.1958E-3*t-2.7178E-6*t*t;
 	  g=0.18071-2.7604E-3*t-1.7749E-7*t*t;
 	  ca=0.20141+1.3874E-3*t-4.3312E-6*t*t;
 	  f=0.18331+1.2497E-3*t-3.1683E-6*t*t;
 	  ci=0.32962+1.4011E-3*t-2.9069E-6*t*t;
 	  a=(0.47544091+0.0021600042*t-1.4598133E-5*t*t+4.4970702E-8*t*t*t-6.8959266E-1*t*t*t*t)*4.18E-3/3600;

 	  return ((proteina*p+gordura*g+carboidrato*ca+fibras*f+cinzas*ci+agua*a)/100);
  }

  //Método para Valor Calórico Teórico (Kcal/100g)
   double Caloria (double proteina,double gordura,double carboidrato)

     {
   	  p=4*proteina;
   	  g=9*gordura;
   	  ca=4*carboidrato;
   	  return ((p+g+ca));
  }

/* Fim dos Métodos*/


public void init() // inicio do programa
{
   setLayout(new BorderLayout()); // Layout de paineis
   setBackground(Color.cyan);

   nf2.setMaximumFractionDigits(2); // formato com 2 casas decimais

   // Título do Programa
   p1=new Panel(); add("North",p1);
   p1.setLayout(new FlowLayout());
   l1=(new Label("PROGRAMA PARA CALCULO DE PROPIEDADES FÍSICAS DE ALIMENTOS",Label.CENTER));
   l1.setBackground(Color.blue); // Define a cor de fundo
   l1.setForeground(Color.white);//Define a cor da letra
   p1.add(l1);
   p1.setBackground(Color.blue);

   p2=new Panel(); add("Center",p2);
   p2.setLayout(new BorderLayout());
   p3=new Panel(); p2.add("North",p3);
   p3.setBackground(Color.pink);
   p3.setLayout(new FlowLayout());
   p3.add(new Label(""));p3.add(new Label(""));
   l2=(new Label("Alimento :"));l2.setBackground(Color.pink);p3.add(l2);p3.add(tf01);

   p6=new Panel(); p2.add("West",p6);
   p6.setLayout(new BorderLayout());

   p4=new Panel(); p2.add("East",p4);
   p4.setLayout(new GridLayout(8,2,5,0));
   l5=(new Label("Agua [%]:"));l5.setBackground(Color.cyan);p4.add(l5);p4.add(tf02);
   l6=(new Label("Proteina[%]:"));l6.setBackground(Color.cyan);p4.add(l6);p4.add(tf03);
   l7=(new Label("Lipídeos [%]:"));l7.setBackground(Color.cyan);p4.add(l7);p4.add(tf04);
   l8=(new Label("Carboidrato [%]:"));l8.setBackground(Color.cyan);p4.add(l8);p4.add(tf05);
   l9=(new Label("Cinzas [%]:"));l9.setBackground(Color.cyan);p4.add(l9);p4.add(tf06);
   l10=(new Label("Fibras [%]:"));l10.setBackground(Color.cyan);p4.add(l10);p4.add(tf07);
   p4.add(new Label("Temperatura:")); p4.add(tf09);
   p4.add(new Label(""));p4.add(new Label(""));


   p7=new Panel(); p6.add("North",p7);
   p7.setLayout(new GridLayout(5,1,5,0));
   p7.setBackground(Color.cyan);
   l11=(new Label("Defina a Propriedade a ser Calculada",Label.CENTER));l11.setForeground(Color.red);p7.add(l11);
   p7.add(cb1[0]=new Checkbox("Calor Específico [J/kgºC]",cbg,true));
   p7.add(cb1[1]=new Checkbox("Condutividade Térmica [W/mºC]",cbg,false));
   p7.add(cb1[2]=new Checkbox("Densidade [kg/m3]",cbg,false));
   p7.add(cb1[3]=new Checkbox("Valor Calórico [kcal]",cbg,false));
   cb1[0].addItemListener(this);
   cb1[1].addItemListener(this);
   cb1[2].addItemListener(this);
   cb1[3].addItemListener(this);
   p7.setBackground(Color.cyan);

   //Botão para Cálculo
   p8= new Panel(); p6.add("South",p8);
   p8.setLayout(new FlowLayout());
   p8.setBackground(Color.cyan);
   p8.add(new Label("Resultado:")); p8.add(tf08);


}



// inicio dos cálculos de acordo com a propriedade requerida
	public void itemStateChanged(ItemEvent e)
	{
		 //este bloco informa ao programa de quais "caixinhas" ele deve atribuir cada variável
		 //de entrada, ou seja as variáveis necessárias para os cálculos
		 t=Double.valueOf(tf09.getText()).doubleValue();
		 agua=Double.valueOf(tf02.getText()).doubleValue();
		 proteina=Double.valueOf(tf03.getText()).doubleValue();
		 carboidrato=Double.valueOf(tf05.getText()).doubleValue();
		 cinzas=Double.valueOf(tf06.getText()).doubleValue();
		 fibras=Double.valueOf(tf07.getText()).doubleValue();
	     lipideo=Double.valueOf(tf04.getText()).doubleValue();


		 //Iniciar os cálculos, através dos métodos declarados no inicio do programa

	     d=Densidade(proteina,lipideo,carboidrato,fibras,cinzas,agua,t);

	     cp=Caloresp(proteina,lipideo,carboidrato,fibras,cinzas,agua,t);

	     k=Condutividade(proteina,lipideo,carboidrato,fibras,cinzas,agua,t);

         cal=Caloria(proteina,lipideo,carboidrato);


		 if(e.getItem()=="Calor Específico [J/kgºC]")
		  {
		   tf08.setText(String.valueOf(nf2.format(cp)));
	      }
	     if(e.getItem()=="Condutividade Térmica [W/mºC]")
		  {
		   tf08.setText(String.valueOf(nf2.format(k)));
	      }
	     if(e.getItem()=="Densidade [kg/m3]")
		  {
		   tf08.setText(String.valueOf(nf2.format(d)));
	      }
	      if(e.getItem()=="Valor Calórico [kcal]")
		  {
		   tf08.setText(String.valueOf(nf2.format(cal)));
	      }
    }



}//fim do programa



