INF008 – Especificação do 2o trabalho prático – 2010.1

Objetivo: alterar o primeiro trabalho para utilização de collections ao invés de arrays, realizar serialização e desserialização dos dados em arquivo, bem como a implementação das consultas descritas abaixo.

Descrição detalhada: o sistema agora contará com um cadastro de usuários, onde serão fornecidos o CPF, nome e sexo do usuário. Na primeira vez que um item for inserido no carrinho será solicitado o CPF do usuário que está comprando. Os itens serão inseridos normalmente e haverá uma nova opção no menu denominada Fechar Compra. Após o fechamento de uma compra o carrinho é zerado (outra instância é criada) e se um novo item for inserido no carrinho o sistema deverá solicitar novamente o CPF do usuário que está realizando a compra. Um mesmo usuário pode realizar várias compras no sistema.

Classes a serem implementadas: além de todas as classes presentes no primeiro trabalho, o sistema deverá desenvolver a classe Usuário, com os dados acima citados. A livraria além de obter a lista de todos os produtos deverá também manter um histórico sobre todas as compras de todos os clientes.

Collections a serem utilizadas: o sistema deverá utilizar um objeto do tipo LinkedList para armazenar todos os produtos cadastrados. Um LinkedList deverá também ser utilizado para armazenar todos os usuários cadastrados. O carrinho de compras também utilizará um LinkedList para armazenar todos os itens presentes no carrinho. Todas as compras da loja serão armazenadas em um objeto do tipo HashMap onde a chave será o CPF do usuário e o valor será um LinkedList contendo todos os carrinhos (todas as compras realizadas pelo usuário). Lembre-se que todas as classes de produtos deverão ser alteradas para implementar a interface Serializable. Isso é suficiente para a serialização e desserialização funcionarem corretamente.

Use-cases:

  • Inicialmente o sistema deverá apresentar um menu com as opções: 1 – Cadastrar Usuário, 2 – Cadastrar Produto, 3 – Comprar Produto, 4 – Visualizar Carrinho, 5 – Fechar Compra, 6 – Consultar, 7 – Salvar, 8 – Carregar e 9 – Sair.
  • 1 – Cadastrar Usuário: o usuário deverá informar o CPF, nome e sexo do novo usuário do sistema. Um alerta deverá ser exibido caso um outro usuário com o mesmo CPF já exista no sistema.
  • 2 – Cadastrar Produto: o usuário deverá inicialmente informar o tipo de produto sendo cadastrado (Livro, Dvd, Computador ou Tv) e então informar os dados correspondentes a cada um deles. O novo produto cadastrado deverá ser incluido na collection do tipo LinkedList de produtos da loja. Um alerta deverá ser exibido caso um outro produto com o mesmo código já exista no sistema.
  • 3 – Comprar Produto. Se não existir nenhuma compra em andamento o sistema deverá solicitar o CPF do usuário (deverá ser exibido um alerto caso o usuário não exista), criar uma nova instância do objeto Carrinho e incluí-lo no LinkedList referente ao CPF do usuário (utilizando o HashMap de compras). O sistema deverá solicitar o tipo de produto a ser comprado (Livro, Dvd, Computador ou Tv) e listar todos os produtos daquele tipo, apresentando o código e a descrição de cada um. O usuário digitará o código do produto que deseja comprar (ou o selecionará na tabela de exibição) e a quantidade. Este item será então incluido no LinkedList do carrinho de compras.
  • 4 – Visualizar Carrinho. Se existir uma compra em andamento o sistema deverá exibir o carrinho representando esta compra. Caso contrário o sistema deverá solicitar o CPF do usuário e exibir todas as informações dos produtos no carrinho e o valor total referente à última compra realizada pelo usuário descrito pelo CPF informado.
  • 5 – Fechar Compra. Esta operação encerra a compra corrente. Caso um novo item seja incluido futuramente o sistema deverá solicitar o CPF do usuário e criar um novo carrinho.
  • 6 – Consultar. O sistema deverá apresentar os CPFs, nomes de todos os clientes e quantidade de compras (carrinhos) em ordem decrescente pelo número de compras, ou seja, do cliente que mais comprou (referente à quantidade de carrinhos e não o valor) para o cliente que menos comprou.
  • 7 – Salvar. Esta operação deverá solicitar o nome de um arquivo e salvar (serializar) todos os dados do sistema neste arquivo.
  • 8 – Carregar. O sistema deverá solicitar o nome de um arquivo e carregar (desserializar do arquivo para as collections) todos os dados do sistema a partir deste arquivo.
  • 9 – Sair. Encerra a aplicação.

Observações e Critérios de avaliação:

  • O trabalho deverá ser realizado em dupla.
  • Data de entrega: 28/06/2010.
  • Valor: 10 pontos. A média com o 2o trabalho valerá 30% da nota.
  • Trabalhos copiados serão automaticamente zerados.
  • Na data de entrega o trabalho deverá ser apresentado para o professor e os alunos serão questionados. Os alunos poderão ter notas diferentes de acordo com as respostas fornecidas.
  • Soluções mais elegantes (classes melhores projetadas, melhor organização de código, padronização de atributos e métodos, indentação correta e não-repetição de código) serão melhores pontuadas.

INF008 – Especificação do 1o trabalho prático – 2010.1

Objetivo: implementar em Java um sistema para a realização de compras em um site de comércio eletrônico. O usuário deverá ser capaz de cadastrar um novo produto, incluir produto no carrinho (informando a quantidade de cada produto) e verificar o valor total da compra.

Classes a serem implementadas:

  • Classe Produto contendo o código do produto, descrição e valor unitário. Além disso a classe deverá manter um atributo estático quantidade que informará o número de produtos cadastrados na livraria.
  • Classe Livro, derivada de Produto, e adicionando os campos autor, ISBN e editora.
  • Classe Dvd, derivada de Produto, e adicionando os campos gênero e ano.
  • Classe Eletronico, derivada de Produto, incluindo o nome do fabricante.
  • Classe Computador, derivada de Eletronico, incluindo a quantidade de memória RAM e o tamanho do HD.
  • Classe Tv, derivada de Eletronico, e incluindo o tamanho (em polegadas).
  • Classe Livraria, contendo um array de todos os produtos cadastrados na loja. A classe deverá ter um método chamado cadastrarProduto(), que realizará a inclusão de qualquer um dos produtos da livraria e um método listarProduto() que exibirá todos os produtos de um determinado tipo.
  • Classe ItemCarrinho, contendo uma referência para uma instância da classe Produto (ou derivadas) e a quantidade comprada deste produto.
  • Classe CarrinhoDeCompras, contendo um array dos ItemCarrinho‘s que foram incluidos no carrinho. A classe deverá ter um método chamado incluirItem(), que inclui um novo ItemCarrinho no array, listarCarrinho() que apresentará todos os itens adicionados e um método chamado valorTotal() que apresentará o total da compra até o momento.
  • Classe Main, contendo o método main que deverá apresentar o menu inicial do sistema e controlar o fluxo principal. A classe Main deverá conter ainda uma instância da classe Livraria e uma instância da classe CarrinhodeCompras.

Use-cases:

  • Inicialmente o sistema deverá apresentar um menu com as opções: 1-Cadastrar Produto, 2-Comprar Produto, 3-Visualizar Carrinho e 4-Sair.
  • 1-Cadastrar Produto: o usuário deverá inicialmente informar o tipo de produto sendo cadastrado (Livro, Dvd, Computador ou Tv) e então informar os dados correspondentes a cada um deles. O novo produto cadastrado deverá ser incluido no array de produtos da loja. Assuma que a loja terá um máximo de 100 produtos cadastrados.
  • 2-Comprar Produto. O sistema deverá solicitar inicialmente o tipo de produto a ser comprado (Livro, Dvd, Computador ou Tv) e listar todos os produtos daquele tipo, apresentando o código e a descrição de cada um. O usuário digitará o código do produto que deseja comprar e este será incluido no array do carrinho de compras. Assuma que o carrinho de compras poderá ter um máximo de 20 produtos.
  • 3-Visualizar Carrinho. O sistema deverá exibir todas as informações dos produtos no carrinho e o valor total da compra.
  • 4-Sair. Encerra a aplicação.

Dicas:

  • Para ler uma string do teclado em Java utilize:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

String temp = br.readLine();

  • Referências para uma classe base podem apontar para uma instância de qualquer classe filha. Ou seja, manter um array de Produtos é suficiente para armazenar instâncias de qualquer sub-classe de Produto:

Produto produtos[] = new Produto[100];

produtos[0] = new Livro(…);

produtos[1] = new Tv(…);

  • Para verificar o sub-tipo real para o qual uma referência de Produto aponta utilize o operador instanceof e o operador de casting:

if (produtos[0] instanceof Livro)

Livro livro = (Livro) produtos[0];

Observações e Critérios de avaliação:

  • O trabalho deverá ser realizado em dupla.
  • Data de entrega: 10/05/2010.
  • Valor: 10 pontos. A média com o 2o trabalho valerá 30% da nota.
  • Trabalhos copiados serão automaticamente zerados.
  • Na data de entrega o trabalho deverá ser apresentado para o professor e os alunos serão questionados. Os alunos poderão ter notas diferentes de acordo com as respostas fornecidas.
  • Soluções mais elegantes (classes melhores projetadas, melhor organização de código, padronização de atributos e métodos, indentação correta e não-repetição de código) serão melhores pontuadas.