Especificação do Trabalho I. Introdução O objetivo deste trabalho é abordar a prática da programação orientada a objetos usando a linguagem Java envolvendo os conceitos de classe, objeto, associação, ligação, herança e polimorfismo, além do uso de interfaces gráficas e tratamento de exceções. Deve-se, portanto, construir uma aplicação que atenda ao que está especificado nas seções deste documento. II. Descrição do Domínio do Problema Cada vez mais, pequenos negócios têm adotado sistemas de informação para melhorar o atendimento ao cliente. Nesse contexto, este trabalho visa a construir uma aplicação em Java que permita o controle de vendas de produtos em lojas em geral. Tal aplicação é projetada para ser utilizada no balcão da loja. Os conceitos envolvidos neste domínio são: Item de Venda, Venda e Cliente. A Figura 1 apresenta o diagrama de classes do domínio. Figura 1 - Diagrama de Classes do Domínio do Problema Segundo o diagram do domínio do problema, cada venda está associada ao respectivo cliente. Toda venda tem uma lista de itens de venda. Um item de venda tem como atributos, além da quantidade vendida e do valor de venda do item, o (nome) produto vendido. Os dados dos objetos das classes de domínio deverão ser persistidos no banco de dados. Para tanto, será utilizado o framework Hibernate para fazer o mapeamento Objeto-Relacional. Toda classe, com exceção da classe Principal, tem um atributo ID. Esse atributo identificará cada objeto de maneira única. Assim, não haverá dois objetos com o mesmo valor do atributo ID (mesmo que esses objetos sejam de classes diferentes). O Hibernate ficará responsável por gerar o valor desse atributo. Uma vez atribuído um ID a um objeto, o valor desse atributo não pode ser alterado. Além das classes de domínio, há a classe de aplicação Principal, a qual contém os seguintes métodos: inserircliente: os dados do cliente são passados como parâmetro, o método cria o cliente e
o salva no banco de dados. removercliente: dado um cliente, esse método o remove do banco de dados. Um cliente só pode ser removido caso não haja compras associadas a ele. inserirvenda: a data da venda e o cliente da venda são informados. Esse método cria o objeto venda e o insere no banco de dados. removervenda: dada uma venda, esse método a remove do banco de dados. Se uma venda for removida, todos os itens da venda devem ser removidos do banco. inseriritemvenda: o valor de venda, a quantidade, o produto vendido e a venda associada ao item de venda são informados. Esse método cria o item de venda e o salva no banco de dados. removeritemvenda: dado um item de venda, esse método o remove do banco de dados. calcularvalortotal: calcula o valor total da venda com base em todos os itens de uma venda (soma total de quantidade do item de venda x preço de venda do item ). III. Funcionamento do Sistema O sistema será iniciado a partir do método main da classe Principal. Esse método irá criar um objeto da classe JanPrincipal e a partir dessa classe, o usuário terá acesso a todas as janelas e funcionalidades do sistema. IV. Descrição da Interface com Usuário A janela Principal da aplicação é apresentada pela Figura 2. Essa janela contém um menu que dá acesso a duas outras janelas: janela de Cadastro de Clientes e janela de Controle de Vendas. Tais janelas são apresentadas, respectivamente, pela Figura 3 e pela Figura 5. Figura 2 - Janela Principal
Figura 3 - Janela de Cadastro de Clientes A janela Cadastro de Clientes apresenta uma tabela com informações dos clientes (nome e CPF). A partir dessa janela o usuário pode: Inserir Cliente: ao clicar nesse botão, a janela Inserir Cliente (Figura 4) e exibida. Remover Cliente: o usuário remove o cliente do banco de dados. Clientes relacionados a alguma Venda não podem ser excluídos. Fechar: a janela é fechada. Figura 4 - Janela de Cadastro de Clientes A janela Controle de Vendas (Figura 5) permite acesso às funcionalidades de controle de vendas. Tal janela apresenta as vendas já registradas no sistema e oferece quatro opções: Incluir Venda: o usuário passa a ter acesso à janela Inserir Venda (Figura 6). Controlar Itens: o usuário passa a ter acesso à janela Controlar Itens de Venda (Figura 7). Para acessar essa funcionalidade, é necessário que uma venda listada na janela Controle de Vendas esteja selecionada na tabela, pois os itens a serem controlados, serão itens dessa venda. Remover Venda: o usuário pode excluir uma venda cadastrada. Fechar: a janela é fechada.
Figura 5 Janela de Controle de Vendas Na janela Inserir Venda o usuário informa a data da venda e o cliente da venda. Nesse momento um objeto da classe Venda é criado e essa venda é inserida na lista de vendas da loja. Figura 6 Janela Inserir Venda A janela Controlar Itens de Venda apresenta todos os itens já adicionados a uma determinada venda. A partir dessa janela tem-se acesso a três opções: Incluir Item: o usuário passa a ter acesso à janela Inserir Item à Venda (Figura 8). Remover Item: o item selecionado na tabela de itens é, então, removido da venda. Devese solicitar confirmação. Fechar: a janela é fechada.
Figura 7 Janela Controlar Itens de Venda Na janela Inserir Item à Venda, o usuário informa o produto, o valor de venda do produto e a quantidade comprada. Ao solicitar a inclusão do item, um item de venda é criado e incluído na lista de itens da venda. Figura 8 Janela Inserir Item à Venda V. Disposições Gerais Os trabalhos devem ser feitos individualmente. Trabalhos iguais serão considerados cópias e as sansões serão aplicadas a todos os grupos envolvidos. A avaliação do trabalho será feita por meio de entrevistas durantes as aulas práticas. As entrevistas não serão previamente agendadas. O aluno deve estar preparado para elas. Os critérios são: adequação aos princípios da orientação a objetos;
entendimento do aluno no que diz respeito às decisões de projeto e implementação; execução correta do programa; atendimento à especificação do trabalho. Qualquer errata ou modificação da especificação do trabalho será publicada na página do professor (www.julionardi.scalfoni.com.br). Cabe ao aluno manter-se informado. Bom trabalho.