Skip to content

Instantly share code, notes, and snippets.

@victorknust
Forked from marioplumbarius/Caixa.java
Created March 26, 2014 18:57
Show Gist options
  • Save victorknust/9790699 to your computer and use it in GitHub Desktop.
Save victorknust/9790699 to your computer and use it in GitHub Desktop.
package emporium;
// Esta classe modela o caixa do "emporium". Ela deve receber o nome do
// cliente e a lista de produtos (conteúdo do "carrinho").
public class Caixa
{
// atributos: variáveis que armazenam os dados de um objeto, após este
// ser instanciado.
private Cliente cliente;
private Carrinho carrinho;
// método construtor: usado para inicializar os atributos,
// quando um objeto cliente é criado (instanciado). Notar que o construtor
// faz chamada interna de dois métodos modificadores.
public Caixa(String nomeCliente, String cpfCliente, Carrinho novoCarrinho)
{
cliente = new Cliente(nomeCliente, cpfCliente);
carrinho = novoCarrinho;
}
// outros métodos
/*
* O método abaixo imprime os dados do cliente e a lista de
* compras (conteúdo do "carrinho"). O nome do cliente (retornado pelo
* método getNome() ) e a lista de produtos comprados pelo cliente
* (retornados pelo método listaDeProdutos() ) são concatenados em uma
* String. Em seguida, o conteúdo da String é impresso.
*/
public String dadosDaCompra()
{
String saida = "";
saida += "Cliente: " + cliente.getNome() + "\n\n" +
"******** Lista de compras ********** \n\n" +
carrinho.listaDeProdutos();
return saida;
}
}
package emporium;
import java.util.ArrayList;
import java.util.Iterator;
//import javax.swing.JOptionPane;
import java.text.DecimalFormat;
public class Carrinho {
private ArrayList produtosEscolhidos;
private double peso = 0.0;
private double totalPagar = 0.0;
private double desconto = 0.0;
public Carrinho() {
produtosEscolhidos = new ArrayList();
}
public void colocarProdutoNoCarrinho(String nomeProduto, double precoProduto, double quantidadeProduto) {
Produto novoProduto = new Produto(nomeProduto, precoProduto, quantidadeProduto);
produtosEscolhidos.add( novoProduto );
this.peso += quantidadeProduto;
this.totalPagar += novoProduto.getPrecoTotal();
if ( isPesoGreather50() ) {
double desconto = this.getPercentage( this.totalPagar, 12 );
this.totalPagar = this.totalPagar - desconto;
this.desconto = desconto;
}
}
public String listaDeProdutos() {
Iterator achaProdutoNaLista = produtosEscolhidos.iterator();
String saida = "";
Produto prod;
while( achaProdutoNaLista.hasNext() ) {
prod = (Produto) achaProdutoNaLista.next(); // Aqui casting!
saida += prod.getGastoComProduto();
}
saida += "\n\nPeso total: " + this.peso + " kg";
saida += "\n\nDesconto total: R$ " + this.desconto;
saida += "\n\nPreço total: R$ " + this.totalPagar;
return saida;
}
public double getPeso(){
return this.peso;
}
public Boolean isPesoGreather50(){
/*
** Verifica se o peso total do carrinho é maior que 50 kg
*/
if ( this.peso > 50 ) {
return true;
} else {
return false;
}
}
public double getPercentage( double total, int percentage ){
/*
** Calcula o valor a partir de um total e uma porcentagem
*/
double processedValue = ( total * percentage ) / 100;
return processedValue;
}
public String printProduto( int indexProduto ){
String output;
if ( indexProduto > (produtosEscolhidos.size()-1) ) {
output = getOutOfIndexMessage();
} else {
Produto item = (Produto) this.produtosEscolhidos.get( indexProduto );
output = item.getGastoComProduto();
}
return output;
}
public String getOutOfIndexMessage(){
return "Não existe produto nesta posição";
}
public Boolean removerProduto( String nomeProduto ){
for ( int i = 0 ; i < produtosEscolhidos.size() ; i++ ) {
Produto produto = (Produto) produtosEscolhidos.get( i );
if ( produto.getNome().equals( nomeProduto ) ) {
produtosEscolhidos.remove( i );
return true;
}
}
return false;
}
}
// Esta classe modela o cliente que irá fazer compras no "emporium".
package emporium;
public class Cliente
{
// atributos: armazenam os dados de um objeto, após este ser instanciado.
private String nome;
private String cpf;
// método construtor: usado para inicializar os atributos,
// quando um objeto cliente é criado (instanciado). Notar que o construtor
// faz chamada interna de dois métodos modificadores.
public Cliente(String nome, String cpf)
{
this.nome = nome;
this.cpf = cpf;
}
// métodos de acesso: usados para retornar o valor de um atributo.
public String getNome()
{
return nome;
}
public String getCpf(){
return this.cpf;
}
// métodos modificadores: usados para alterar o valor de um atributo,
// depois que o objeto foi criado (instanciado).
public void setNome(String novoNome)
{
nome = novoNome;
}
public void setCpf( String newCpf ){
this.cpf = newCpf;
}
}
package emporium;
import javax.swing.*;
public class Main {
public static void main( String args[] ) {
Carrinho carrinho = new Carrinho();
Caixa caixa;
String nomeCliente;
String cpfCliente;
// preenche o carrinho
for( int i = 0; i < 2; i++ ) {
// INPUT
String nomeProduto = JOptionPane.showInputDialog(
"Escreva o nome do produto."
);
double precoProduto = Double.parseDouble(
JOptionPane.showInputDialog(
"Escreva o preço unitário do produto."
)
);
double quantidadeProduto = Double.parseDouble(
JOptionPane.showInputDialog(
"Escreva a quantidade (kg) de produto."
)
);
// adiciona 1 produto
carrinho.colocarProdutoNoCarrinho( nomeProduto, precoProduto, quantidadeProduto );
}
nomeCliente = JOptionPane.showInputDialog(
"Escreva o nome do cliente."
);
cpfCliente = JOptionPane.showInputDialog(
"Escreva o cpf do cliente."
);
caixa = new Caixa( nomeCliente, cpfCliente, carrinho );
// exibe o resultado da compra e o valor a pagar.
JOptionPane.showMessageDialog( null, caixa.dadosDaCompra(),
"Resultado da Compra", 1
);
System.out.print( carrinho.removerProduto( "leite" ) + "\n\n" + carrinho.printProduto( 0 ) );
System.exit(0);
}
}
package emporium;
// Esta classe modela um produto a ser comprado no "emporium".
import java.text.DecimalFormat;
public class Produto
{
// atributos: variáveis que armazenam os dados de um objeto, após este
// ser instanciado.
private String nome;
private double precoUnitario; // em reais
private double quantidade; // em quilogramas
private double precoTotal;
// método construtor: usado para inicializar os atributos,
// quando um objeto cliente é criado (instanciado). Notar que o construtor
// faz chamada interna de dois métodos modificadores.
public Produto(String nome, double precoUnitario, double quantidade)
{
this.nome = nome;
this.precoUnitario = precoUnitario;
this.quantidade = quantidade;
this.precoTotal = precoUnitario * quantidade;
}
// métodos de acesso: usados para retornar o valor de um atributo.
public String getNome()
{
return nome;
}
public double getPrecoUnitario()
{
return precoUnitario;
}
public double getPrecoTotal(){
return this.precoTotal;
}
public double getQuantidade()
{
return quantidade;
}
// métodos modificadores: usados para alterar o valor de um atributo,
// depois que o objeto foi criado (instanciado).
public void setNome(String novoNome)
{
nome = novoNome;
}
public void setPrecoUnitario(double novoPreco)
{
if(novoPreco <= 0)
{
precoUnitario = 1.0;
}
else
{
precoUnitario = novoPreco;
}
}
public void setQuantidade(double novaQuantidade)
{
if(quantidade < 0)
{
quantidade = 1.0;
}
else
{
quantidade = novaQuantidade;
}
}
// outros métodos
// O método abaixo retorna uma String, que contém os valores dos
// atributos do objeto, mais a quantidade vezes o preço unitário.
public String getGastoComProduto()
{
DecimalFormat duas = new DecimalFormat("0.00");
return "Produto: " + nome + " " +
"Preço Unitário: R$ " + duas.format(precoUnitario) + " / kg " +
"Quantidade: " + duas.format(quantidade) + " kg " +
"Total: R$ " + duas.format(quantidade*precoUnitario) + "\n";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment