Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

danielswater

Prova Java

Recommended Posts

E ai galera beleza?

Seguinte, estou fazendo minha prova de Java, praticamente fiz toda ela mas tem um negocio que nem pelo capeta eu consigo resolver

O exercício em questao e o seguinte:

 

Analise os requisitos do sistema descrito abaixo, utilizando os conceitos do paradigma orientado a objetos, em especial a associação.

 

Uma loja de departamentos necessita de um sistema para automatizar o cadastro de produtos a serem vendidos. Para qualquer tipo de produto é necessário armazenar código, nome, preço e departamento que o produto será vendido. Todos os produtos vendidos só são encontrados em um único departamento, e cada departamento é capaz de vender vários produtos. Deve-se associar os produtos a um determinado departamento. As informações necessárias de cada departamento são: nome do departamento e gerente responsável pelo departamento

 

o meu código e esse da classe principal:

 

import javax.swing.JOptionPane;
public class CadastroProdutos {

	public static void main(String[] args) {

		Departamento dep[]=new Departamento[999];
		Produto pro[]=new Produto[999];
		int op=0;
		int d=0;
		int p=0;

		while(true){

			op=Integer.parseInt(JOptionPane.showInputDialog("1-CADASTRA DEPTO \n 2-CADASTRA PRODUTO" +
					"\n 3-BUSCA POR DEPARTAMENTO \n 4-PESQUISA POR PREÇO \n 5-SAIR"));

			switch(op){
			//Começa a cadastrar Departamentos
			case 1:
				dep[d]=new Departamento();
				dep[d].setNomedepto(JOptionPane.showInputDialog("NOME DO DEPARTAMENTO:"));
				dep[d].setNomegerente(JOptionPane.showInputDialog("NOME DO GERENTE:"));

				d=d+1;

				break;

			//Faz o cadastro dos produtos
			case 2:
				pro[p]=new Produto();
				pro[p].setNome(JOptionPane.showInputDialog("NOME DO PRODUTO:"));
				pro[p].setCodigo(Integer.parseInt(JOptionPane.showInputDialog("CÓDIGO DO PRODUTO:")));
				pro[p].setPreco(Double.parseDouble(JOptionPane.showInputDialog("PREÇO:")));
				pro[p].setDepartamento(dep[d]);

				p=p+1;

				break;

			//Faz a busca por Departamento e mostra os produtos relacionados
			case 3:
				String busca=JOptionPane.showInputDialog("DIGITE O DEPARTAMENTO DESEJADO");
				for(int i=0; i < d; i++){
					if(busca.equalsIgnoreCase(dep[i].getNomedepto()))
						for(i=0; i < p; i++){
							JOptionPane.showMessageDialog(null,"PRODUTOS: " + pro[i].getNome());
					}
				}
				break;

			case 4:
				double precoinicio=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MINIMO"));
				double precofim=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MAXIMO"));
				boolean valor=false;
				for(int m=0; m < p; m++){
					if(precoinicio <= pro[m].getPreco() && precofim >= pro[m].getPreco()){
						valor=true;
						JOptionPane.showMessageDialog(null,"PRODUTOS" + " " + pro[m].getNome());
					}
				}
				if(! valor){
					JOptionPane.showMessageDialog(null,"NENHUM VALOR CADASTRADO");
				}
				break;

			case 5:
				System.exit(0);
			}
		}
	}
}

O meu problema está no case 3, que ao invés de mostrar os produtos SO DO DEPARTAMENTO ACHADO, ele me mostra os produtos de TODOS os departamentos. Já tentei de tudo e não consigo resolver isso. Por favor galera alguem me de uma luz, é so isso que falta p concluir meu exercício :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que em nenhum momento você utilizou programação orientada a objetos. Por isso virou esse balaio de gato. É um erro muito comum de quem está começando em Java programar de forma procedural. O enunciado te deu as dicas de como fazer a abstração. Você teria duas classes: departamento e produto. Na classe departamento você teria uma coleção de objetos do tipo produto. E na classe produto você teria um objeto que fizesse referência à classe departamento. Se você não sabe usar coleção, dá pra fazer com matriz. Porém dá mais trabalho.

public class Departamento {
   //... atributos, mais coleção de objetos do tipo produto
   public Departamento() {

   }

   // public Produto[] getProdutos()
   public List<Produto> getProdutos() {
      return this.produtos;
   }
   // getters e setters.
}

public class Produto {
   // atributos, mais referência de departamento
   public Produto() {

   }

   // getters e setters
}

Dessa forma, toda vez que quiseres listar os produtos de um departamento, basta utilizar o método getProdutos.

Departamento dep = new Departamento();
dep.getProdutos();
// Percorre os produtos num loop e manda exibir os valores

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao Vergil, eu usei OO sim e associação, segue as classes:

 

PRODUTO


public class Produto {
	
	private int codigo;
	private String nome;
	private double preco;
	Departamento departamento;
	
	public Produto(){
		codigo=0;
		nome="";
		preco=0.0;	
		departamento=null;
	}
	public Produto(int icodigo, String snome, double dpreco, Departamento depto){
		codigo=icodigo;
		nome=snome;
		preco=dpreco;	
		departamento=depto;
	}
	public void setCodigo(int icodigo){
		codigo=icodigo;
	}
	public void setNome(String snome){
		nome=snome;
	}
	public void setPreco(double dpreco){
		preco=dpreco;
	}
	public void setDepartamento(Departamento depto){
		departamento=depto;
	}

	public int getCodigo(){
		return codigo;
	}
	public String getNome(){
		return nome;		
	}
	public double getPreco(){
		return preco;
	}
	public Departamento getDepartamento(){
		return departamento;
	}
	public String getNomeDepartamento(){
		return departamento.getNomedepto();
	}
}

DEPARTAMENTO


public class Departamento {
	
	private String nomeDepto;
	private String nomeGerente;
	
	
	public Departamento(){
		nomeDepto="";
		nomeGerente="";
	
	}
	public Departamento(String snomeDepto, String snomeGerente, Produto prod){
		nomeDepto=snomeDepto;
		nomeGerente=snomeGerente;
		
	}
	public void setNomedepto(String snomeDepto){
		nomeDepto=snomeDepto;
	}
	public void setNomegerente(String snomeGerente){
		nomeGerente=snomeGerente;
	}

	public String getNomedepto(){
		return nomeDepto;
	}
	public String getNomegerente(){
		return nomeGerente;

	}
}

CADASTRO

import javax.swing.JOptionPane;
public class CadastroProdutoDepto {

	public static void main(String[] args) {
		
		Departamento dep[]=new Departamento[999];
		Produto pro[]=new Produto[999];
		int op=0;
		int d=0;
		int p=0;
		
		while(true){
			
			op=Integer.parseInt(JOptionPane.showInputDialog("1-CADASTRA DEPTO \n 2-CADASTRA PRODUTO" +
					"\n 3-BUSCA POR DEPARTAMENTO \n 4-PESQUISA POR PREÇO \n 5-SAIR"));
			
			switch(op){
			//Começa a cadastrar Deptos
			case 1:
				dep[d]=new Departamento();
				dep[d].setNomedepto(JOptionPane.showInputDialog("NOME DO DEPTO:"));
				dep[d].setNomegerente(JOptionPane.showInputDialog("NOME DO GERENTE:"));
												
				d=d+1;							
				
				break;
				
			//Faz o cadastro dos Produtos		
			case 2:
				pro[p]=new Produto();
				pro[p].setNome(JOptionPane.showInputDialog("NOME DO PRODUTO"));
				pro[p].setPreco(Double.parseDouble(JOptionPane.showInputDialog("PREÇO")));
				pro[p].setCodigo(Integer.parseInt(JOptionPane.showInputDialog("CÓDIGO DO PRODUTO")));
				pro[p].setDepartamento(dep[d]);
				
				p=p+1;
				
				break;
				
			//Faz a busca por Departamento e mostra os produtos relacionados
			case 3:
				String busca=JOptionPane.showInputDialog("DIGITE O DEPARTAMENTO DESEJADO");				
				for(int i=0; i < d; i++){
					if(busca.equalsIgnoreCase(dep[i].getNomedepto()))
						for(i=0; i < p; i++){
							JOptionPane.showMessageDialog(null,"PRODUTOS" + pro[i].getNome());
					}
				}
				break;
			//Faz a busca por valores				
			case 4:
				double precoinicio=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MINIMO"));
				double precofim=Double.parseDouble(JOptionPane.showInputDialog("DIGITE O VALOR MAXIMO"));
				boolean valor=false;
				for(int m=0; m < p; m++){
					if(precoinicio <= pro[m].getPreco() && precofim >= pro[m].getPreco()){
						valor=true;
						JOptionPane.showMessageDialog(null,"PRODUTOS" + " " + pro[m].getNome());
					}
				}
				if(! valor){
					JOptionPane.showMessageDialog(null,"NENHUM VALOR CADASTRADO");
				}
				break;
				
			case 5:
				System.exit(0);
			}
		}
	}
}

Eu nao posso usar listas ainda porque não aprendemos ainda, estamos no basico do basico de Java

Compartilhar este post


Link para o post
Compartilhar em outros sites

Do jeito que você está cadastrando não dá pra ter garantia de qual departamento está recebendo o produto.

 

A minha sugestão é que você exiba todos os departamentos para o usuário antes do cadastro de um produto. Cada departamento teria uma matriz de produtos. Veja o modelo.

public class Produto {
        private String nome;
        private double preco;

        // getters e setters
}

public class Departamento {
        private String nomeDepto;
        private String nomeGerente;
        private Produto[] produtos;

        public void adicionaProduto(Produto p) {
              produtos[ultimoIndice] = p;
        }

        public Produto[] listaProdutos() {
              return this.produtos;
        }
}

No momento de fazer o cadastro de um produto, você deve listar ao usuário todos os departamentos cadastrados.

for(int i = 0; i < departamentos.length; i++) {
   System.out.println("Código: " + i);
   System.out.println("Departamento: " + departamento[i].nomeDepto());
No cadastro de produto.

departamentos[codigoSelecionadoPeloUsuario].adicionaProduto(new Produto());
Pra listar os produtos.

Produto[] produtos = departamentos[indice].listaProdutos();
for(Produto p : produtos) {
   System.out.println(p);
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está no case 3 mesmo.

Veja que você procura pelo departamento mas ao listar os produtos, não faz nenhuma referencia ao departamento. Dessa forma ele lista todos os produtos mesmo.

 

                      String busca=JOptionPane.showInputDialog("DIGITE O DEPARTAMENTO DESEJADO");
                                for(int i=0; i < d; i++){
                                        if(busca.equalsIgnoreCase(dep[i].getNomedepto()))
                                                for(i=0; i < p; i++){
                                                        JOptionPane.showMessageDialog(null,"PRODUTOS: " + pro[i].getNome());
                                        }
                                }
                                break;

Altere o seguinte:

String nomeDepto;
String busca=JOptionPane.showInputDialog("DIGITE O DEPARTAMENTO DESEJADO");
for(int i=0; i < d; i++){
   if(busca.equalsIgnoreCase(dep[i].getNomedepto()))
      nomeDepto = dep[i].getNomedepto();
}

for(i=0; i < p; i++){
   if(pro[i].getDepartamento().getNomedepto().equals(nomeDepto))
      JOptionPane.showMessageDialog(null,"PRODUTOS: " + pro[i].getNome());
}

Recomendo que SEMPRE use um código para suas classes, facilita e agiliza muito nas buscas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.