Dúvida em programa de supermercado

bom pessoal, o exercício é esse.
considere um supermercado automatizado que controle carrinhos de compras e utilize as classes
Produto, CarrinhoCompra, Item, ItemDesconto, Cliente e Automóvel e a interface TransporteCarga
.
Implemente os seguintes itens:a) A classe Produto que tem os atributos identificador, descrio, quantidade em estoque e o preço unitário.

b)O construtor padrão e o que recebe quatro valores como parâmetro da classe Produto

c)A classe Item com os atributos produto e a quantidade deste produto no carrinho, seuconstrutor com 2 parâmetros e o método calculaPreco que devolve a multiplicação do preçounitário e da quantidade de itens.

d)A classe ItemDesconto que herda da classe Item, possui um atributonque corresponde apromoções do tipo LEVE n e PAGUE n-1 e redefine o método calculaPreco para considerar este tipo de desconto.

e)A interface TransporteCarga que possui dois métodos carregar e descarregar. O métodocarregar recebe como parâmetro um item e o armazena e o método descarregar imprime na tela os produtos que foram descarregados e os remove do armazenamento.

f)A classe CarrinhoCompra que possui os atributos quantidade de itens no carrinho de compras e
os itens propriamente ditos, assim como o construtor padrão. Considere que os itens estão
armazenados em um array com capacidade para 200 itens no máximo.

g)Os métodos adicionar e remover da classe CarrinhoCompras. Estes métodos recebem comoparâmetro
o produto e a quantidade de itens a serem inseridos/removidos. Estes métodos devem
atualizar a quantidade de produtos do estoque, pois a medida que o cliente coloca os produtos no
carrinho, eles jánão estão mais disponíveis para compra por outro cliente. Se o cliente mandar
remover mais unidades do que tem no carrinho, realize a remoção da quantidade disponível no
carrinho de compras e aumente esta mesma quantidade no estoque. Um produto não pode ocupar mais de uma posição, assim como um produto com quantidade zerada não pode ocupar uma posição no no array privado da classe CarrinhoCompras

h)O método transfere da classe CarrinhoCompras que retira todos os itens deste carrinho decompras e carrega um TransporteCarga recebebido como parâmetro.

i)A classe Cliente implementa a interface TransporteCarga e possui os atributos: nome, cpf,endereço, automóvel, carrinho de compras, os atributos necessários para implementação doTransporteCarga e o construtor que recebe como parâmetro o nome e o cpf , o endereço do clientee o seu carro (se o cliente não tiver carro, este último parâmetro será nulo).Implemente classe automóvel que também é do tipo TransporteCarga.

j)O método abandonar carrinho em que o cliente irá se desfazer do carrinho, este método executao abandonar da classe CarrinhoCompras. Implemente também o abandonar da classeCarrinhoCompras, para que todos os produtos voltem automaticamente para o estoque

k)O método pegar um carrinho que recebe como parâmetro um carrinho que ele usarápararealizar as suas compras. Caso ele
já tenha um carrinho, o mesmo será abandonado.

l)O método calcular preço da classe CarrinhoCompras que imprime na tela o cupom fiscal e devolve o valor total da compra

m)O método comprar que não recebe parâmetro, mostra uma mensagem “Entregando R$ xx,xxpara o caixa”, e transfere todos os itens do carrinho de compras para o seu transporte de carga (o seu automóvel ou ele próprio, caso não tenha automóvel). Este método deve chamar o métodotransfere de CarrinhoCompra

eu simplesmente não entendi como fazer os itens i, j e k desse problema, alguém poderia me da alguma sugestão?

1 curtida

classe produto

public class Produto {

private String id;
private String descricao;
private int qtdeEstoque;
private double precoUnitario;


public Produto(String id, String descricao, int qtdeEstoque, double precoUnitario) {
	super();
	this.id = id;
	this.descricao = descricao;
	this.qtdeEstoque = qtdeEstoque;
	this.precoUnitario = precoUnitario;
}
public String getId() {
	return id;
}
public void setId(String id) {
	this.id = id;
}
public String getDescricao() {
	return descricao;
}
public void setDescricao(String descricao) {
	this.descricao = descricao;
}
public int getQtdeEstoque() {
	return qtdeEstoque;
}
public void setQtdeEstoque(int qtdeEstoque) {
	this.qtdeEstoque = qtdeEstoque;
}

public double getPrecoUnitario() {
	return precoUnitario;
}
public void setPrecoUnitario(double precoUnitario) {
	this.precoUnitario = precoUnitario;
}

}

classe Item

public class Item {
private Produto produto;
private int quantidadeProdutoNoCarrinho;

public Item(Produto produto, int quantidadeProdutoNoCarrinho) {
	super();
	this.produto = produto;
	this.quantidadeProdutoNoCarrinho = quantidadeProdutoNoCarrinho;
}

public Item() {
	
}



public Produto getProduto() {
	return produto;
}

public void setProduto(Produto produto) {
	this.produto = produto;
}

public int getQuantidadeProdutoNoCarrinho() {
	return quantidadeProdutoNoCarrinho;
}

public void setQuantidadeProdutoNoCarrinho(int quantidadeProdutoNoCarrinho) {
	this.quantidadeProdutoNoCarrinho = quantidadeProdutoNoCarrinho;
}

	

public void calcularPreco(Item item) {
	System.out.println("valor: "+item.produto.getPrecoUnitario()*item.getQuantidadeProdutoNoCarrinho());
	
}	

}

classe ItemDesconto

import java.util.Scanner;

public class ItemDesconto extends Item {

public ItemDesconto(Produto produto, int quantidadeProdutoNoCarrinho) {
	super();
	
}

@Override
public void calcularPreco(Item item) {
	Scanner in = new Scanner(System.in);
	System.out.println("digite a quantidade de itens: ");
	int n = in.nextInt();
	
	if(n>=10) {
		System.out.println(item.getProduto().getPrecoUnitario()*n - item.getProduto().getPrecoUnitario());
		
	}
	else {
	System.out.println(item.getProduto().getPrecoUnitario()*n);
	}
}}

Carrinho de compra

public class CarrinhoCompra {
private int quantidadeDeItensNoCarrinho;
Item item;
Item[] itens;
CarrinhoCompra carrinho;


public CarrinhoCompra(int quantidadeDeItensNoCarrinho, Item item, Item[] itens, CarrinhoCompra carrinho) {
	super();
	this.quantidadeDeItensNoCarrinho = quantidadeDeItensNoCarrinho;
	this.item = item;
	this.itens = new Item[200];
	this.carrinho = carrinho;
}

public int getQuantidadeDeItensNoCarrinho() {
	return quantidadeDeItensNoCarrinho;
}

public void adicionar(Item item, int quantidade) {
	for(int i = 0; i<=quantidade; i++) {
		if(i<quantidade)
		for(int j = 0; j<itens.length; j++) {
			if(itens[j] == null)
				itens[j] = item;
		}
	}
		
		return;
	}
public int remover(Item item, int quantidade) {
		for(int i = 0; i<=quantidade;) {
			if(i<quantidade)
			for(int j = 0; j<itens.length; j++) {
				if(itens[j] == item)
					itens[j] = null;
			}
			return item.getProduto().getQtdeEstoque()+quantidade;
			
		}
		
		return 0;	
}

public int abandonarCarrinho(CarrinhoCompra carrinho) {
	if(carrinho!=null) 
	return item.getProduto().getQtdeEstoque()+carrinho.item.getQuantidadeProdutoNoCarrinho();
	
	return 0;
}

public void calcularPreco(CarrinhoCompra carrinho) {
	double valorTotal = 0;
	valorTotal = carrinho.item.getProduto().getPrecoUnitario()*carrinho.getQuantidadeDeItensNoCarrinho();
	
	System.out.println("valor total: " +valorTotal);
}}

Cliente

public class Cliente implements TransporteCarga {

private String nome;
private String cpf;
private String endereco;
Item item;



public String getNome() {
	return nome;
}

public void setNome(String nome) {
	this.nome = nome;
}

public String getCpf() {
	return cpf;
}

public void setCpf(String cpf) {
	this.cpf = cpf;
}

public String getEndereco() {
	return endereco;
}

public void setEndereco(String endereco) {
	this.endereco = endereco;
}

public Item getItem() {
	return item;
}

public void setItem(Item item) {
	this.item = item;
}

@Override
public void carregar(Item item) {
	
	
}

@Override
public void descarregar() {

}}

Automovel

public class Automovel implements TransporteCarga {

@Override
public void carregar(Item item) {

	
}

@Override
public void descarregar() {

}}

isso foi o que fiz até agora, gostaria de ter alguma ideia de como fazer esses passos e talvez algumas dicas do que melhorar no código

A classe Produto está de acordo com a letraa:
a) A classe Produto que tem os atributos identificador, descrio, quantidade em estoque e o preço unitário.

Mas não possui o construtor padrão como solicitado na letra b:
b)O construtor padrão e o que recebe quatro valores como parâmetro da classe Produto

De acordo com a letra c, seu método calcularPreco está errado, pois ele não deveria receber nenhum parâmetro:
c)A classe Item com os atributos produto e a quantidade deste produto no carrinho, seuconstrutor com 2 parâmetros e o método calculaPreco que devolve a multiplicação do preçounitário e da quantidade de itens.

Veja o enunciado da letra d:
d)A classe ItemDesconto que herda da classe Item, possui um atributonque corresponde apromoções do tipo LEVE n e PAGUE n-1 e redefine o método calculaPreco para considerar este tipo de desconto.

Faltou declarar o atributo para a promoção do tipo “Leve n pague n-1”.
A classe Item possui dois construtores, mas na classe ItemDesconto você só declarou um construtor com 2 parâmetros e está chamando o super sem parâmetros, isso está errado.
O construtor com parâmetros tem que chamar o super com parâmetros.
O construtor sem parâmetros tem que chamar o super sem parâmetros.

O método calcularPreco continua errado, pois ele não deveria receber nenhum item como parâmetro.

Também não faz sentido ter println e Scanner na classe ItemDesconto, essa classe não interage com o usuário, ela recebe os valores no construtor.

Você não postou o código da interface TransporteCarga solicitada na letra e:
e)A interface TransporteCarga que possui dois métodos carregar e descarregar. O métodocarregar recebe como parâmetro um item e o armazena e o método descarregar imprime na tela os produtos que foram descarregados e os remove do armazenamento.

Se carrinho de compras não está de acordo com o enunciado da letra f:
f)A classe CarrinhoCompra que possui os atributos quantidade de itens no carrinho de compras e
os itens propriamente ditos, assim como o construtor padrão. Considere que os itens estão
armazenados em um array com capacidade para 200 itens no máximo.

Ela deveria ter somente dois atributos: o array de itens e a quantidade de itens.
Você fez um construtor parametrizado, mas ela deve ter somente um construtor sem parâmetros.

De uma revisada na sua lógica dos métodos adicionar e remover, pois os laços estão errados, há if desnecessários.
Tente implementar conforme o enunciado:
g)Os métodos adicionar e remover da classe CarrinhoCompras. Estes métodos recebem comoparâmetro
o produto e a quantidade de itens a serem inseridos/removidos. Estes métodos devem
atualizar a quantidade de produtos do estoque, pois a medida que o cliente coloca os produtos no
carrinho, eles jánão estão mais disponíveis para compra por outro cliente. Se o cliente mandar
remover mais unidades do que tem no carrinho, realize a remoção da quantidade disponível no
carrinho de compras e aumente esta mesma quantidade no estoque. Um produto não pode ocupar mais de uma posição, assim como um produto com quantidade zerada não pode ocupar uma posição no no array privado da classe CarrinhoCompras

Os métodos abandonarCarrinho e calcularPreco também estão errados, eles não recebem parâmetro.

2 curtidas

essa parte eu já consegui consertar tanto no adicionar, como no remover. o resto eu vou tentar modificar aqui também e depois eu volto a postar.

mas ele não sobrescreve o calculaPreco de Item?

EDIT entendi, o calculaPreco de Item tbém não deve possuir parâmetros…

interface

public interface TransporteCarga {
void carregar(Item item);
void descarregar();
}

não sei como implementar esses métodos`

você poderia me mostrar a lógica do metodo abandonarCarrinho? tentei, tentei e não consegui implementar, teria que percorrer o Array de itens?