Pesquisar este blog

quinta-feira, 30 de junho de 2011

AVALIAÇÃO 30-06-2011

Responda as questões: 0,5 ponto por questão
Fazer 20 das 25 sendo que tem algumas obrigatórias.
        1. Cite os três participantes de uma aplicação Web  a nível  geral?
        2. Cite os  três  tipos de arquivos possíveis em uma aplicação Web feita no servidor Web do NetBeans?
        3. Qual a ideia básica do protocolo HTTP usado  na Web?
        4. Considerando o site http://www.google.com/ o que podemos afirmar sobre a página inicial acessada deste servidor?
        5. Qual a extensão de um arquivo em uma aplicação Web feita com ASP.NET? E para JSP?
        6. Se o browser não entende Linguagem Java, então quais são três as coisas que ele entende?
        7. Qual a função do Javascript em uma aplicação Web?
        8. *Qual a função do CSS em uma aplicação Web?
        9. Qual a função do HTML em uma aplicação Web?
        10. *Quando criamos um formulário em uma página JSP, qual a função do atributo action e atributo method da tag form?
        11. *Qual  é a diferença entre os métodos get e post em uma aplicação Web?
        12. Supondo um <input type="text" name="nome" id="nome" /> como podemos recuperar esse valor em um servlet?
        13. Se uma página JSP temos<%=media%> , significa dizer estamos usando o que?
        14. Se temos em página  JSP <%! public double  getMedia( int nota1, int nota2){ return (nota1+nota2)/2;}, significa que estamos usando o que?
        15. Se em uma página JSP temos: <% out.println("<h1>Bon dia </h1>%>, o que será produzido na tela do browser?
        16. Se temos  <jsp:useBean id="cart" scope="session" class="session.Carts" />  Qual é a classe do JavaBean? Qual é o nome o JavaBean?
        17. Crie uma aplicação Web no NetBeans usando div e usando CSS
        18. Crie um formulário nesta aplicação
        19. Crie um JavaBeans com a propriedade nome
        20. Instancie o JavaBean dentro de uma página JSP?
        21. Qual é o servidor web usado por uma aplicação Web no Net Beans?
        22. * Qual é o significado do número de porta em um servidor Web?
        23. Qual é o número da porta do servidor de banco de dados MySQL
        24. Crie uma base de dados no MySql com a tabela aluno que tem os campos nome e sobrenme
        25. * Cite a diferença entre escopo de sessão e escopo de página?

quinta-feira, 5 de maio de 2011

ATIVIDADE: BANCO DE DADOS

Nesta atividade cada equipe de 3 a 4 alunos deverá realizar as tarefas listadas abaixo e em seguida enviar para o e-mail leonardo.santos@etep.edu.br a pasta com os arquivos zipados.

Lista de Tarefas:
  1. Criar uma aplicação Web
  2. Criar uma página denominada sessao.jsp  que explica a diferença de escopo a nível de sessão e a nível de página
  3. Criar uma página denominada controlador.jsp que explica as funções do controlador
  4. Criar uma página denominada bean.jsp que explica
    •  as funções de um bean 
    • Como criar uma instância de um bean no controlador 
    • Como criar uma instância de um bean em uma página jsp
    • Como acessar o valor de uma propriedade de um bean
    • Como modificar o valor de uma propriedade de um bean
  5. Criar uma página denominada index.jsp que exibe todos os registros da tabela
  6. Criar uma página denominada impar.jsp que exibe todos os registros da tabela de id ímpar
  7. Criar uma página denominada par.jsp que exibe todos os registros da tabela de id par
  8. Criar uma página denominada  soment10.jsp que exibe somente os dez primeiros registros da tabela.
  9. Criar uma página denominada insert.jsp que  insere os dados de um novo registro a partir de um formulário
  10. Criar uma página denominada lista.jsp com os links para todas  outras páginas
**********
Base de dados: Use o código abaixo para criar a base de dados
**************

-- Copyright (c) 2010, Oracle and/or its affiliates. All rights reserved.
--
-- You may not modify, use, reproduce, or distribute this software
-- except in compliance with the terms of the license at:
-- http://developer.sun.com/berkeley_license.html
--
-- author: tgiunipero
--

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

DROP SCHEMA IF EXISTS `affablebean` ;
CREATE SCHEMA IF NOT EXISTS `affablebean` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci ;
USE `affablebean` ;

-- -----------------------------------------------------
-- Table `affablebean`.`customer`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `affablebean`.`customer` ;

CREATE  TABLE IF NOT EXISTS `affablebean`.`customer` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `email` VARCHAR(45) NOT NULL ,
  `phone` VARCHAR(45) NOT NULL ,
  `address` VARCHAR(45) NOT NULL ,
  `city_region` VARCHAR(2) NOT NULL ,
  `cc_number` VARCHAR(19) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
COMMENT = 'maintains customer details';


-- -----------------------------------------------------
-- Table `affablebean`.`customer_order`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `affablebean`.`customer_order` ;

CREATE  TABLE IF NOT EXISTS `affablebean`.`customer_order` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `amount` DECIMAL(6,2) NOT NULL ,
  `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  `confirmation_number` INT UNSIGNED NOT NULL ,
  `customer_id` INT UNSIGNED NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_customer_order_customer` (`customer_id` ASC) ,
  CONSTRAINT `fk_customer_order_customer`
    FOREIGN KEY (`customer_id` )
    REFERENCES `affablebean`.`customer` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'maintains customer order details';


-- -----------------------------------------------------
-- Table `affablebean`.`category`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `affablebean`.`category` ;

CREATE  TABLE IF NOT EXISTS `affablebean`.`category` (
  `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB
COMMENT = 'contains product categories, e.g., dairy, meats, etc.';


-- -----------------------------------------------------
-- Table `affablebean`.`product`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `affablebean`.`product` ;

CREATE  TABLE IF NOT EXISTS `affablebean`.`product` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT ,
  `name` VARCHAR(45) NOT NULL ,
  `price` DECIMAL(5,2) NOT NULL ,

  -- Delete after description is moved to resource bundle
  `description` TINYTEXT NULL ,

  `last_update` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  `category_id` TINYINT UNSIGNED NOT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `fk_product_category` (`category_id` ASC) ,
  CONSTRAINT `fk_product_category`
    FOREIGN KEY (`category_id` )
    REFERENCES `affablebean`.`category` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'contains product details';


-- -----------------------------------------------------
-- Table `affablebean`.`ordered_product`
-- -----------------------------------------------------
DROP TABLE IF EXISTS `affablebean`.`ordered_product` ;

CREATE  TABLE IF NOT EXISTS `affablebean`.`ordered_product` (
  `customer_order_id` INT UNSIGNED NOT NULL ,
  `product_id` INT UNSIGNED NOT NULL ,
  `quantity` SMALLINT UNSIGNED NOT NULL DEFAULT 1 ,
  PRIMARY KEY (`customer_order_id`, `product_id`) ,
  INDEX `fk_ordered_product_customer_order` (`customer_order_id` ASC) ,
  INDEX `fk_ordered_product_product` (`product_id` ASC) ,
  CONSTRAINT `fk_ordered_product_customer_order`
    FOREIGN KEY (`customer_order_id` )
    REFERENCES `affablebean`.`customer_order` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_ordered_product_product`
    FOREIGN KEY (`product_id` )
    REFERENCES `affablebean`.`product` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
COMMENT = 'matches products with customer orders and records their quantity';



SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


*************
Use o código abaixo para inserção de dados

*****************


USE affablebean;
INSERT INTO `category` (name) VALUES ('dairy'),('meats'),('bakery'),('fruit & veg');

USE affablebean;

INSERT INTO `product` (`name`, price, description, category_id) VALUES ('milk', 1.70, 'semi skimmed (1L)', 1);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('cheese', 2.39, 'mild cheddar (330g)', 1);

INSERT INTO `product` (`name`, price, description, category_id) VALUES ('butter', 1.09, 'unsalted (250g)', 1);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('free range eggs', 1.76, 'medium-sized (6 eggs)', 1);

INSERT INTO `product` (`name`, price, description, category_id) VALUES ('organic meat patties', 2.29, 'rolled in fresh herbs<br>2 patties (250g)', 2);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('parma ham', 3.49, 'matured, organic (70g)', 2);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('chicken leg', 2.59, 'free range (250g)', 2);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('sausages', 3.55, 'reduced fat, pork<br>3 sausages (350g)', 2);

INSERT INTO `product` (`name`, price, description, category_id) VALUES ('sunflower seed loaf', 1.89, '600g', 3);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('sesame seed bagel', 1.19, '4 bagels', 3);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('pumpkin seed bun', 1.15, '4 buns', 3);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('chocolate cookies', 2.39, 'contain peanuts<br>(3 cookies)', 3);

INSERT INTO `product` (`name`, price, description, category_id) VALUES ('corn on the cob', 1.59, '2 pieces', 4);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('red currants', 2.49, '150g', 4);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('broccoli', 1.29, '500g', 4);
INSERT INTO `product` (`name`, price, description, category_id) VALUES ('seedless watermelon', 1.49, '250g', 4);


--INSERT INTO `product` (`name`, price, category_id) VALUES ('milk', 1.70, 1);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('cheese', 2.39, 1);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('butter', 1.09, 1);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('free range eggs', 1.76, 1);
--
--INSERT INTO `product` (`name`, price, category_id) VALUES ('organic meat patties', 2.29, 2);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('parma ham', 3.49, 2);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('chicken leg', 2.59, 2);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('sausages', 3.55, 2);
--
--INSERT INTO `product` (`name`, price, category_id) VALUES ('sunflower seed loaf', 1.89, 3);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('sesame seed bagel', 1.19, 3);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('pumpkin seed bunbun', 1.15, 3);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('chocolate cookies', 2.39, 3);
--
--INSERT INTO `product` (`name`, price, category_id) VALUES ('corn on the cob', 1.59, 4);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('red currants', 2.49, 4);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('broccoli', 1.29, 4);
--INSERT INTO `product` (`name`, price, category_id) VALUES ('seedless watermelon', 1.49, 4);


--
-- Sample data for table `customer`
--

USE affablebean;
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Charlie Pace', 'c.pace@youareeverybody.com', '605434778', 'Široká 45', '1', '4224311324421331');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('MC Hammer', 'hammer@hammertime.com', '226884562', 'Ruská 11', '2', '4321123443211234');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Karel Gott', 'gott@karelgott.com', '224517995', 'Kostelní 83', '7', '3311332222444411');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Helena Vondráčková', 'h.vondrackova@seznam.cz', '224517995', 'Letohradská 18', '7', '1111222244443333');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Sawyer Ford', 'sawyer.ford@gmail.com', '204888845', 'Dušní 87', '1', '2222333311114444');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Dalibor Janda', 'dalibor@dalibor.cz', '728331184', 'Krkonošská 9', '3', '3111444222212334');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Richard Genzer', 'r.genzer@nova.cz', '737610775', 'Plzeňská 131', '5', '2244443321123311');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Iveta Bartošová', 'i.bartosova@volny.cz', '734556133', 'Prokopská 60', '1', '3333111144442222');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Jin-Soo Kwon', 'jin.kwon@hotmail.kr', '606338909', 'Ve Střešovičkách 49', '6', '1111222233334444');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Benjamin Linus', 'b.linus@lost.com', '222756448', 'Družstevní 77', '4', '4444222233331111');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Leoš Mareš', 'mares@ferrari.it', '608995383', 'Pařížská 89', '1', '2222444411113333');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('John Locke', 'maninblack@lostpedia.com', '413443727', 'Valečovská 20', '9', '2244331133114422');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Lucie Bílá', 'lucie@jampadampa.cz', '733556813', 'Na hájku 3', '8', '3333444422221111');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Sayid Jarrah', 'sayid@gmail.com', '602680793', 'Kodaňská 78', '10', '5490123456789128');
INSERT INTO `customer` (`name`, email, phone, address, city_region, cc_number) VALUES ('Hugo Reyes', 'hurley@mrcluck.com', '605449336', 'Žerotínova 64', '3', '4539992043491562');


quarta-feira, 4 de maio de 2011

Dica para visualizar os registros de uma tabela

Este exemplifica o acesso ao banco de dados dentro da própria página

<%@ page import="java.sql.*" %>

Usado para importar as classes necessárias



<%! ResultSet rs = null;%>
Declara um variável do tipo ResultSet para guardar os resultados de um pesquisa ao banco de dados



rs = s.executeQuery("select * from customer");
Guarda os resultdos da pesquisa em rs


while (rs.next()) {
O método next retorna true enquanto houver registros dentro de rs



<td width="20"><%= rs.getInt(1) %></td>
Acessa o primeiro campo do registro com inteiro



<td width="70"><%= rs.getString(2) %></td>

Acessa   o segundo campo comoString

*****

<!-- JSP Directives -->
<%@ page import="java.sql.*" %>
<html>
<head>
<title>Insurance Quoting System</title>
</head>
<body>
<basefont face="Arial">
<!-- JSP Declarations -->
<%! ResultSet rs = null;%>
<!-- JSP Scriptlet -->
<%
try {
Class.forName("org.gjt.mm.mysql.Driver");
Connection db = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/quoting");
Statement s = db.createStatement();
rs = s.executeQuery("select * from customer");
}
catch (Exception e) {
// For now, just report the error to the system log
System.out.println(e.toString());
}
%>
<!-- Template text -->
<table width="550" border="0" align="center">
<tr>
<td bgcolor="#006633">
<div align="center">
<font size="6" color="#FFFFFF"><b>Insurance Quoting System</b></font>
</div>
</td>
</tr>
<tr>
<td>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p align="center"><b>Customers</b></p>

<table width="290" border="0" align="center">

<%
try {
while (rs.next()) {
%>
<!-- JSP Expressions used within template text -->
<tr>
<td width="20"><%= rs.getInt(1) %></td>
<td width="70"><%= rs.getString(2) %></td>
<td width="70"><%= rs.getString(3) %></td>
<td width="40">
<a href="custMaint.jsp?id=<%= rs.getString(1) %>&action=edit">
edit
</a>
</td>
<td width="40">
<a href="custMaint.jsp?id=<%= rs.getString(1) %>&action=delete">
delete
</a>
</td>
<td width="40">
<a href="custMaint.jsp?id=<%= rs.getString(1) %>&action=newQuote">
new quote
</a>
</td>
</tr>

<%
}
}
catch (SQLException e) {
// For now, just report the error to the system log
System.out.println(e.toString());
}
%>
</table>
</td>
</tr>
<tr>
<td>
<p>&nbsp;</p>
<p align="center"><a href="custMaint.jsp?action=add">New Customer</a></p>
</td>
</tr>
</table>
</body>
</html>

quarta-feira, 27 de abril de 2011

ATIVIDADE 1

A atividade1:
  • Deverá ser desenvolvida em dupla e enviado por email os arquivos do programa.
leonardo.santos@etep.edu.br
  • Pontuação: 2 pontos na primeira nota do bimestre



Nesta atividade criar a base de dados no MySql  cadastrodeconvidados  a partir do
arquivo dado.

Em seguida criar uma aplicação Web que seja capaz de:
  • Ler  e exibir na tela os dados da tabela convidados
  • Insira novos convidados através de um formulário

Usar como base o exemplo web4us


Segue o arquivo sql do banco de dados a ser criado.
*****

CREATE DATABASE cadastrodeconvidados ;
CREATE TABLE cadastrodeconvidados.convidados (
  `id` int(12) NOT NULL auto_increment,
  `nome` varchar(20) NOT NULL,
  `sobrenome` varchar(20) NOT NULL,
  `email` varchar(40) NOT NULL,
  `idade` int(12) NOT NULL,
  PRIMARY KEY  (`id`)
) ;
INSERT INTO cadastrodeconvidados.convidados (`id`, `nome`, `sobrenome`, `email`, `idade`) VALUES
(1, 'Carlos', 'Lacerda', 'lacerda@gmail.com', 25),
(2, 'Rodolfo', 'Gamberini', 'gamberini@gmail.com', 58),
(3, 'Elis Damaris', 'Misael Teodoro', 'damaris@ig.com.br', 23),
(4, 'Cleide de Fátima', 'Cavarjal Vassalobre', 'cavarjal.vassalobre@hotmail.com.br', 43);
CREATE TABLE cadastrodeconvidados.visitantes (
  `nome` varchar(20) NOT NULL,
  `sobrenome` varchar(20) NOT NULL,
  `endereco` varchar(20) NOT NULL,
  `idade` varchar(12) NOT NULL,
  `telefone` varchar(20) NOT NULL
) ;
INSERT INTO cadastrodeconvidados.visitantes (`nome`, `sobrenome`, `endereco`, `idade`, `telefone`) VALUES
('Carlos Alberto', 'Faria', 'Rua Fortuna,34', '50', '3968-4578'),
('Erivelto', 'Santos', 'Rua Honduras,56', '48', '3227-4578'),
('Ulisses', 'Viana', 'Rua  Concórdia,567', '47', '3228-8978'),
('Claudemir', 'Ferreira', 'Rua Guiana Fancesa,4', '43', '3457-2588');

quarta-feira, 13 de abril de 2011

AS TELAS DA APLICAÇÃO

Na tela de abertura o usuário deve fazer o login.
Se autenticado, é encaminhado para a página de clientes.
Caso contrário, volta para a tela de login.




Na página cleintes, o usuário editar, deletar , navegar ou inserir um novo cliente.



Ná pagina cliente o usuário insere os dados de um novo cliente ou edita os dados de um cliente existente.


A tela de agradecimento é no momento em que o usuário insere um novo cliente ou edita um existen com sucesso.

O FLUXOGRAMA DA APLICAÇÃO


  O Fluxograma da Aplicação Web ilustra o funcionamento do site como um todo.

Clique na Figura e acompanhe a  explicação do Professor.






O ARQUIVO SQL

Use o arquivo abaixo para criar o banco de dados no MySQL.
Copie e cole.
******

CREATE DATABASE SEGURADORA2;
DROP TABLE IF EXISTS seguradora2.cliente;
CREATE TABLE IF NOT EXISTS seguradora2.cliente (
  id int(11) NOT NULL,
  nome varchar(20) default NULL,
  sobrenome varchar(30) NOT NULL,
  idade int(11) default NULL,
  sexo char(1) default NULL,
  casado char(1) default NULL,
  filhos int(11) default NULL,
  fumante char(1) default NULL,
  PRIMARY KEY  (id)
) AUTO_INCREMENT=10 ;
INSERT INTO seguradora2.cliente (id, nome, sobrenome, idade, sexo, casado, filhos, fumante) VALUES
(1, 'adad', 'dada', 34, 'M', 'S', 3, 'S'),
(2, 'Vilma', 'Tomazetti', 45, 'F', 'N', 4, 'N'),
(3, 'Carlos', 'Vereza', 65, 'M', 'S', 3, 'S'),
(4, 'fs', 'fsfs', 1, 'M', 'S', 2, 'S'),
(5, 'dgd', 'dg', 0, 'M', 'S', 0, 'S'),
(6, 'xvxv', 'xv', 0, 'M', 'S', 0, 'S'),
(8, 'calodaod', 'sfsf', 0, 'M', 'S', 0, 'S'),
(9, 'hgfh', 'hfhfh', 34, 'M', 'Y', 0, 'Y');
USE SEGURADORA2;
DROP TABLE IF EXISTS seguradora2.cota;
CREATE TABLE IF NOT EXISTS cota (
  id int(11) NOT NULL,
  clienteID int(11) NOT NULL,
  produtoID int(11) NOT NULL,
  premio decimal(9,2) default NULL
);
DROP TABLE IF EXISTS seguradora2.produto;
CREATE TABLE IF NOT EXISTS produto (
  id int(11) NOT NULL,
  descricao varchar(75) default NULL,
  base float default NULL,
  menosDe30 float default NULL,
  menosDe50 float default NULL,
  maisDe50 float default NULL,
  m float default NULL,
  f float default NULL,
  casado float default NULL,
  filhos float default NULL,
  fumante float default NULL
);

INSERT INTO seguradora2.produto (id, descricao, base, menosDe30, menosDe50, maisDe50, m, f, casado, filhos, fumante) VALUES
(1, 'Plano de Saúde Preferido', 75, 1, 1.1, 1.3, 1.1, 1.2, 1.8, 1.4, 1.2),
(2, 'Plano de Saúde Premio', 65, 1, 1.1, 1.3, 1.1, 1.2, 1.8, 1.4, 1.2),
(3, 'Plano de Saúde Valor', 50, 1, 1.1, 1.3, 1.1, 1.2, 1.8, 1.4, 1.2),
(3, 'Plano de Saúde Valor', 50, 1, 1.1, 1.3, 1.1, 1.2, 1.8, 1.4, 1.2);

DROP TABLE IF EXISTS seguradora2.usuarios;
CREATE TABLE IF NOT EXISTS usuarios (
  id int(11) NOT NULL,
  usuario varchar(10) NOT NULL,
  senha varchar(10) default NULL,
  PRIMARY KEY  (id)
);

INSERT INTO seguradora2.usuarios (id, usuario, senha) VALUES
(1, 'leo', 'santos');

quinta-feira, 24 de março de 2011

A CONTA DE LUZ

A conta de luz é dada por uma fórmula meio enrolada. mas basicamente o valor do valorCobrado   e o valorAneel mantem uma relação de forma que é regressivva dada por:

valorAnnel=(1-+imposto)*valorCobrado

Pode ser estranha, mas essa é a regra:

Para a conta exemplo , exibida abaixo siga os mesmos passos da iamgem com fundo verde e comprove


imposto=(cofins+pis+imcs)/100;
valorCobrado=valorAneel/(1-imposto)

contaDaLuz=energia*valorCobrado;

pisCobrado=pis*cantaDaLuz/100;

cofinsCobrado=cofins*contaDaLuz/100;
icmsCobrado=icms*contaDaLuz/100;

Para codifica r no Bean crie as propriedade necessárias e os métodos necessários para produzir na tela os valores tal exibido na figura 2 da conta de luz.
Nota: Os valores usados na Figura 1 são baseados em outra empresa de Energia de luz, enquanto que a conta da Figura 2 é baseada na companhia de Energia Bandeirante. onde os valores do valorAneel é diferente.



Figura 1-  Exemplo de Cálculo


Figura 2- Conta de Luz

quarta-feira, 23 de março de 2011

O CÓDIGO DA CONTA DA ÁGUA COMENTADO

Para  que o arquivo do JavaBean podemos adicionar a funcionalidade de cálculo do valor da conta de água, simplesmente adicionando a propriedade contaDaAgua.
Após adicionar essa propriedade inserimos o método getter, no caso getContaDaAgua.
Dentro do método getContaDaAgua  codificamos a lógica necessária para a cobrança da água  conforme a faixa de consumo.
Nesta lógica, basicamente usamos estruturas de decisão que verifica em qual faixa se encaixa o consumo do consumidor, e aplica-se a regra correspondente.
Note que a condição para verificar se o consumo de água está entre o) e 10 metros cúbicos é diferente da forma como encontramos na Matemática, em vez de if(0<=agua<=10), em linguagem de programação usamos if(agua>=0&&agua<=10) onde os dois &(e comercial) são usados para garantir se as duas condições são satisfeitas.
Quando as duas condições são satisfeita, então o código entre as chaves é executado, e não é executado mais nenhum teste, apenas a linha do return, que retorna o valor da conta da água.
Quando as duas condições não satisfeitas, então é executado um else if que verifica se o consumo esta dentro da segunda faixa de 10 até  20 metros cúbicos e procede de forma similar ao anterior.
Esse mesmo procedimento é usado para a faixa de 20 até 50 metros cúbicos.
Quando falha todos os testes então é executado apenas um else, que implicitamente  significa se todas regras falharam então se aplica essa última regra, no caso quando o consumo está acima de 50 metros cúbicos.



Figura 1- Código do método getContaDaAgua


Se analisarmos o cálculo  para cada faixa, notamos que a cada faixa acrescentada, a anterior é mantida com o valor máximo da faixa.

            contaDaAgua = 13.06;
          contaDaAgua = 13.06 + 2.04 *(agua - 10) ;
          contaDaAgua = 13.06 + 2.04*10                 + 5.09*(agua - 20) ;
          contaDaAgua = 13.06 + 2.04* 10                + 5.09* 10                  +5.61* (agua - 50);

terça-feira, 22 de março de 2011

EXERCÍCIO DAS CONTAS - CONTA DA ÁGUA

Como nós  temos 3 arquivos:
  1. Formulário que captura as informações do usuáriO
  2. Um JavaBean que responsável por receber os dados vindo do formulário
  3. Um  página jsp  responsável por calcular e exibir os resultados.


Basta agora inserirmos uma propriedade denominada contaDaAgua para representar o valor da conta de água a ser paga.
Como  a conta de água pode ter número quebrado, então devemos declará-la como do tipo Double.
Como a conta de água não pode ser setada, apenas calculada para essa propriedade devemos ter somente o mtodo getter.
Dentro do método getter devemos implementar a lógica necessária para o cálculo do valor da conta a ser paga baseado nas regras definidas pelas empresas ou similares.

Como exemplo, segue abaixo  uma conta mensal com 4 faixas de consumo:
  
Por exemplo, para um consumo de 22 m³, na categoria residencial normal, na Região Metropolitana de São Paulo, a cobrança será calculada da seguinte forma:

Faixas de consumo
Valor cobrado em m³
m³ cobrados/faixa
Valor água
Valor esgoto
  Total  
0 a 10
R$ 13,06
10 (tarifa mínima)
R$ 13,06
R$ 13,06
R$ 26,12
11 a 20
R$ 2,04
10
R$ 20,40
R$ 20,40
R$ 40,80
21 a 50
R$ 5,09
2
R$ 10,18
R$ 10,18
R$ 20,36
Acima de 50
R$ 5,61
0
0
0
0
Total geral da conta
R$ 87,28
Tarifas vigentes a partir de 11 de setembro de 2008

Observação: O serviço de esgotos é cobrado aplicando-se o percentual de 80 ou 100%, dependendo da região, proporcionalmente ao valor da água.

Baseado nestas informações implemente o código necessário para processar os dados lidos e gerar a saída tal como exibido no exemplo.


quinta-feira, 17 de março de 2011

EXERCÍCIO DAS CONTAS - CALCULA.JSP

Crie uma página jsp com o código abaixo e em seguida rode a aplicação;

Note neste código que passamos a  usar o bean através da tag <jsp:useBean  />
Essas tags permitem a criação de um bean,setar a  proprieade do bean e obter a propriedade de um bean.
E  tudo isto está disponível  na paleta de componentes do NetBean.

Agora preste a atenção quando arrastar  o elemento para setar a propriedade do bean, automaticamente o NetBeans coloca value como sendo String vazia e isto gera erro, porque o Bean tenta converter a String vazia para double. Por isto você deve editar manualmente este atributo da tag <jsp:setProperty manualmente. Basta apagar o atributo. Quando a página for chamada pelo formulário, automaticamente o valor da caixa de texto do formulário será atribuído ao Bean.
No entanto para garantir essa última característica, lembre-se de criar um bean com as propriedades com os mesmos nomes  dos formulários.

<%--
    Document   : calcula
    Created on : 17/03/2011, 11:07:41
    Author     : Leonardo
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
        <jsp:useBean id="meuBean" scope="page" class="beans.BeanConta" />
    
        <jsp:setProperty name="meuBean" property="agua"  />
        <jsp:setProperty name="meuBean" property="energia"  />
        <jsp:setProperty name="meuBean" property="tipo"  />
    </head>
    <body>
        <h1>Hello World!</h1>
        <jsp:getProperty name="meuBean" property="agua" />
        <jsp:getProperty name="meuBean" property="energia" />
        <jsp:getProperty name="meuBean" property="tipo" />
    </body>
</html>



EXERCÍCIO DAS CONTAS - JAVABEANS BÁSICO

Crie uma classe Javabean no pacote beans com o código abaixo::

No NetBeans  basta criar a classe  e declarar as três propriedades agua, energia e tipo . Após fazer pedir para inseir código do tipo getter e setter para cada propriedade e você terá os métodos de acesso e modificadores de cada propriedade.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package beans;

/**
 *
 * @author Leonardo
 */
public class BeanConta {
    public double agua;
    public double energia;
    public String tipo;

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    public double getAgua() {
        return agua;
    }

    public void setAgua(double agua) {
        this.agua = agua;
    }

    public double getEnergia() {
        return energia;
    }

    public void setEnergia(double energia) {
        this.energia = energia;
    }


}

EXERCÍCIO DAS CONTAS -FORMULÁRIO

Crie uma aplicação Web no NetBeans com um formulário como abaixo:


<%--
    Document   : novaconta
    Created on : 17/03/2011, 11:03:15
    Author     : Leonardo
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
         <h1>Prencha os dados</h1>
          <form name="form1" method="get" action="calcula.jsp">
            <p>
              <label><strong>Consumo de agua</strong>
              <input name="agua" type="text" id="agua" value="300.0" size="25">
              </label>
            </p>
            <p>
              <label><strong>Consumo de Energia Elétrica </strong>
              <input name="energia" type="text" id="energia" value="330.0" size="25">
              </label>
            </p>
            <p>Conta:<label>
              <input name="tipo" type="radio" id="conta_0" value="social" >
Social</label>
              <label>
              <input type="radio" name="tipo" value="padrao" id="conta_1" checked>
              Padr?o</label>
              <br>
            </p>
            <p>
              <label></label>
              <input type="submit" name="Calcular" id="Calcular" value="Submit">
            </p>
            <label></label>
          </form>
      
    </body>
</html>

Neste código vale observar o input do tipo radio, onde  cada elemento tem um id diferente, mas o atributo name tem o mesmo valor para ambos. Fazendo desta forma garante que os dois sejam tratados  como um grupo de botão de radio.
Note também que um dos valores tem o atributo checked. Isto garante que esta opção será exibida como selecionada quando a página for aberta.
Um grupo de botão de radio permite que o usuário selecione um opção entre várias.

quarta-feira, 16 de março de 2011

A LÓGICA DO JAVA

Enquanto que o C# usa uma classe Convert uqe dispõe de vários métodos de conversão tais como toInt,toString,toDouble; a linguagem Java usa outra lógica.
Na linguagem Java, quando se quer converter para double chama-se a classe Double que tem os métodos de conversão, no caso parseDouble.
Se for converter para inteiro usa-se a classe Integer e acessa o método parseInt.
Se for converter para String usa-se a classe String e acessa o método valueOf.

Portanto a Linguagem Java usa uma classe para tipo de dado, enquanto a Linguagem C# uma classe para várias conversões.

Outra coisa, as classes também tem métodos para outras coisas além de conversão.
Exemplo a classe Character tem o método isDigit que verifica se é um dígito.
A classe String te o método isEmpty que verifica se uma String é vazia.

VALIDAÇÃO DE CPF -MÉTODO AUXILIAR: validaDigitosVerificadores

Este método tem por objetivo receber o CPF como String  e devolver  true se o CPF for válido e false  caso contrário.
Para realizar essa tarefa é necessário realizar o algoritmo correspondente.
Basicamente o método  lê como char cada dígito  individualmente através do método charAt(i)   da classe String  e em seguida  converte cada caractere para String. Novamente cada caractere é convertido para inteiro usando o método parseInt(aux1) da classe Integer.
Convertido em número o dígito é multiplicado por (10 –i). Na primeira rodada da repetição vale 0, portanto o dígito é multiplicado por 10.  O resultado é então somado ao valor da soma1. Na primeira rodada, soma1 vale 0, portanto em soma1 é guardado o valor 10, já que o dígito vale 1,
Para soma2 é similar exceto que é multiplicado por 11 em vez de 10, portanto é armazenado o valor 11 em soma2.
Na segunda rodada se repete o procedimento, exceto que agora soma1 e soma2 já tem o valor anterior  diferente de zero.
Esse processo se repete até varrer todos os dígitos.
Após isto, o método getDigito é chamado para calcular o valor do dígito verificador 1.
De posse do dígito verificador 1, o valor da soma2 é alterado de forma a  incluir o valor  do produto de div1*2 conforme solicitado no algoritmo. Ou seja o valor da soma2 depende do valor do dígito verificador 1.
Com o valor da soma2 pronto, o método getDigito é chamado novamente para calcular o dígito verificador 2.
De posse dos valores dos dígitos verificadores 1 e 2 ,basta comparar os valores calculado com os valores lidos. Se forem iguais, o método devolve true. Caso contrário , devolve fase.
Para  acessar o valor do dígito verificador 1  e 2 lidos , veja que foi usado uma linha de código que faz várias operações simultaneamente:
int div1Lido= Integer.parseInt(String.valueOf(str.charAt(10)));
onde charAt(10) acessa o caractere na posição 10 da String, ou seja o div1.
String.valueOf converte o  tipo char para String.
Integer.parseInt converte o  tipo String  para inteiro.
O sinal de =  atribui  o resultado à variável div1Lido.
Int define o tipo de dado, no caso inteiro.


VALIDAÇÃO DE CPF-CALCULO DO DÍGITO VERIFICADOR

Este método recebe a soma e  devolve o valor do dígito verificador.
Se o resto da divisão da soma por 11 for igual a 0 ou 1 então
       O dígito verificador vale 0
Caso contrário
       O dígito verificador vale 11 menos o resto



Figura 1- Código do getDígito

VALIDAÇÃO DE CPF -ESCRITA NA TELA

VALIDAÇÃO DE CPF -MÉTODO AUXILIAR-hasOnlyNumber

O método  hasOnlyNumber  tem a s seguintes características:
Nome do Método
hasOnlyNumber

Argumento ou parâmetro
String  str
É o que está colocado entre os parêntesis
Processamento
Todo código colocado entre as chaves
Tipo de retorno
boolean
Colocado antes do nome do método
Nível de acesso
public
Permite acesso geral, dentro da classe e fora da classe
Assinatura do Método
A primeira linha de código do método
public String hasOnlyNUmer(String str)


Este método tem por objetivo retornar false caso o usuário tenha digitado letra no lugar de número ou não tenha colocado o traço ou o ponto antes dos dígitos verificadores.
Este método declara a  variável hasOnlyNumber do tipo Boolean e atribui  o valor false como valor inicial.
Em seguida, através da estrutura de repetição  baseada no for  verifica se cada caractere digitado   trata-se de um dígito número, exceto o traço.
Assim o for declara i do tipo inteiro  com valor inicial em 0.
Na primeira vez que o código dentro do  for executado, i vale 0, de forma o código dentro do IF é executado,  pois  0 é diferente de 9.
  
Dentro do IF , o método isDigit  da classe Character é responsável por verificar se o caractere trata-se de um dígito numérico. Se for dígito numérico, então a variável hasOnlyNumber recebe  true, caso contrário recebe false.
O segundo IF dentro do primeiro IF é responsável por parar a repetição do for caso hasOnlyNumber receba um false. Ou seja, se ao fazer a varredura e encontrar qualquer coisa diferente de um dígito numérico, a repetição é interrompida pelo break  e a linha de código  return hasOnlyNumber é executada.
Para cada valor de i esse processo se repete, até encontre um false ou até todos os caracteres tenham sido varridos.
Para o valor de i igual a 9 corresponde ao momento em que se está acessando  o traço ou o ponto que separa os dígitos verificadores. Neste momento, o código dentro do else  passa a ser executado.
Dentro do código do else é verificado se existe um traço ou um ponto antes dos dígitos verificadores.  Caso isso ocorra, a repetição é interrompida, e o método retorna false.











VALIDAÇÃO DE CPF - PROCESSAMENTO


O processamento verifica se a caixa de texto está vazia ou tem  números misturados com letras então:
            É solicitado ao usuário para digitar um CPF  no formato correto
caso contrário
          Se o CPF for válido então
                  Confirma que o CPF é válido
          Caso contrário
                  Informa que se trata um CPF inválido


VALIDAÇÃO DO CPF - LEITURA

A leitura dos dados dos formulário, simplesmente basta usar o método request.getParameter("cpf"). O único ponto que merece destaque corresponde ao arguento recebido pelo método. Esse argumento deve ter o mesmo nome da caixa de texto colocada no formulário, colocado entre aspas duplas.
Outro fato, se refere ao tipo de dado lido. No caso  String, portanto a variável que recebe o dado lido é declarada do tipo String .
A variável do tipo String msg será usada par armazenar a mensagem, se o o CPF é válidoou não.


VALIDAÇÃO DE CPF - PROCESSANDO A VALIDAÇÃO

A página cpf-recebe.jsp  será analisada por partes. Clique na Figura para ver a imagem ampliada.
Basicamente temos três partes:

  1. Leitura dos dados do formulário. No caso apenas o valor digitado do CPF
  2. Processamento. No caso   realizar o processo de validação do CPF. Esta parte está embutida a chamada dos métodos auxiliares
    1. getDigito
    2. validaDigitosVerificadores
    3. hasOnlyNumber
  3. Escrita na Tela . Após o obter os resultado, exibí-los na tela


VALIDAÇÃO DO CPF - -FORMULÁRIO

Abaixo segue o código do arquivo cpf-formulario.jsp que tem apenas umm formulário com uma caixa de texto e um botão submit.
Observe que a tag form define o atributo action como sendo cpf-recebe.jsp, portanto os dados serão enviados para esta página.
Como o atributo method não está explícito, vale a regra: todo atributo não explicitado usa o valor padrão. Nesse caso o valor padrão corresponde ao método GET. Ou seja, nesse caso os dados serão enviados anexados ao final da URL na barra de endereço.




<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Valida CPF</title>
    </head>
    <body>
        <center>
        <h1>Validação de CPF</h1>
        <form name="f1" action="cpf-recebe.jsp">
            CPF:<input type="text" name="cpf" value="123456789-09" />
            <input type="submit" value="Validar" />
        </form>
        </center>
    </body>
</html>

Validação de CPF

A validação de CPF verifica apenas se os dois dígitos finais  são válidos  quando verificados de acordo com a regra de definição dos seus valores. Em outras palavras, os dois dígitos finais dependem dos outros dígitos.

Para exemplificar usaremos o CPF 123456789-09.

Cálculo do Dígito Verificador  1(Div1):

1)Basta fazermos as seguintes operações:
soma=1*10+2*9+3*8+4*7+5*6+6*5+ 7*4+8*3+9*2=210

2)Calcular o resto da divisão por 11:   resto=mod(soma/11)=210%11=1

Lembre-se calcular o resto da divisão usa-se mod no Excel e % na lIngaugem Java

3) Aplica a regra:
Se o resto  for menor que 2 então{
           o dígito verificador 1 é 0
}
Caso contrário{
           o dígito verificador é igual a (11-resto)
}

Portanto Div1=0 pois o resto é menor que 2

          

Cálculo do Dígito Verificador  2 ( Div2):

1)Basta fazermos as seguintes operações:
soma=1*11+2*10+3*9+4*8+5*7+6*6+ 7*5+8*4+9*3 +div1*2=210

2)Calcular o resto da divisão por 11:   resto=mod(soma/11)=210%11=1

Lembre-se calcular o resto da divisão usa-se mod no Excel e % na lIngaugem Java

3)Aplique a regra:
 Se o resto  for menor que 2 então{
           o dígito verificador 1 é 0
}
Caso contrário{
           o dígito verificador é igual a (11-resto)
}
         

Portanto Div2=11-2=9 pois o resto não é menor que 2