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.