A UNIÃO EDUCACIONAL MINAS GERAIS S/C LTDA FACULDADE DE CIÊNCIAS APLICADAS DE MINAS Autorizada pela Portaria no 577/2000 – MEC, de 03/05/2000 BACHARELADO EM SISTEMAS DE INFORMAÇÃO AS DESENVOLVIMENTO DO SISTEMA DE IN GERENCIAMENTO DA SATIKA ÓPTICA IM ARIANE GRACIELE SANTOS SOUZA IRON MARTIM FERREIRA JÚNIOR UN LUCIANA CAMPOS CARMO Uberlândia 2008 ARIANE GRACIELE SANTOS SOUZA IRON MARTIM FERREIRA JÚNIOR LUCIANA CAMPOS CARMO DESENVOLVIMENTO DO SISTEMA DE AS GERENCIAMENTO DA SATIKA ÓPTICA IN Trabalho de Final de curso submetido à UNIMINAS como parte dos requisitos para a obtenção do grau de Bacharel em Sistemas de Informação. UN IM Orientador: Prof. Msc. Silvio Bacalá Júnior Uberlândia 2008 ARIANE GRACIELE SANTOS SOUZA IRON MARTIM FERREIRA JÚNIOR LUCIANA CAMPOS CARMO DESENVOLVIMENTO DO SISTEMA DE AS GERENCIAMENTO DA SATIKA ÓPTICA IN Trabalho de Final de curso submetido à UNIMINAS como parte dos requisitos para a obtenção do grau de Bacharel em IM Sistemas de Informação. Orientador: Prof. M. Sc. Silvio Bacalá Junior UN Banca Examinadora: Uberlândia, 17 de julho de 2008. Prof. Carlos Henrique Barros Prof. Dra. Kátia Lopes Silva Prof. M. Sc. Sílvio Bacalá Uberlândia 2008 AS IN IM UN A nossa família pelo costumeiro apoio e aos nossos amigos. AGRADECIMENTOS À professora Ana Maria Árabe pela paciência e ajuda na conclusão deste trabalho. Ao nosso querido orientador Silvio Bacalá pelos ensinamentos e brincadeiras para descontração e incentivo nos momentos de angústia. A nossa família, pela confiança e motivação. Ao nosso amigo querido amigo Luis Carlos pela ajuda com a infra-estrutura deste trabalho. À querida Poliana pela paciência UN IM IN AS e compreensão em nossas ausências. RESUMO A fidelização é uma necessidade atual das empresas para agilizar o contato com os clientes e o processo de venda de serviços e produtos. Deseja-se aumentar a satisfação dos clientes com os serviços prestados. É importante ter um único centralizador de informações, em que os cadastros dos clientes estejam armazenados e também suas últimas transações com a empresa, principalmente entre matriz e filiais. Assim sendo, este trabalho apresenta o protótipo de um sistema para uma empresa de Óptica com a AS finalidade de cadastrar clientes, produtos, receituários e médicos que recomendem a empresa, emitir relatórios e também registrar vendas e compras de produtos juntamente com seus fornecedores cadastrados. As etapas do desenvolvimento do sistema são descritas desde o momento do recebimento da IN proposta a ser desenvolvida até o momento da codificação do sistema, considerando-se as fases de análise, modelagem, interface, persistência de dados e implementação. O produto final é um sistema pronto para ser implantado na empresa, com suporte a Web e personalizado para suas IM necessidades de operação, utilizando apenas um sistema de banco de dados para armazenar todas as informações necessárias para a operação da empresa. O sistema possibilitará agilizar o atendimento aos clientes pelos funcionários como também fornecerá informações que serão usadas pelo administrador da UN empresa para identificar pontos de melhoria no seu negócio. Palavras Chave: Sistema Web, Desenvolvimento de software, Análise de software, banco de dados, Java. ABSTRACT Customer relationship is a current need of companies to expedite the contact between their customers and the process of sales of services and products as means to increase customer satisfaction with the services provided. It is important to have a single, centralized information platform, where customer entries and latest transactions are stored, particularly between the parent company and its subsidiaries. Thus, this work presents the prototype of a system for an Optical AS company with the purpose of registering customers, products, prescriptions and recommended doctors, as well as report record sales and product purchases along with their registered suppliers. The stages of development of the system are described from the time of receipt of the proposal being developed till the time of the IN codification of the system, considering the stages of analysis, modeling, interface, persistence and data implementation. The final product is a system ready to be deployed by the company, with support for Web and customized for its operational needs, using a single electronic storage system database. The system will streamline the service to customers by the employees, but also provide information that will be UN business. IM used by the company administrator to identify points of improvement in their LISTA DE FIGURAS UN IM IN AS Figura 1 - Loja matriz Rua Duque de Caxias ........................................................................... 20 Figura 2 - Loja filial Avenida Santos Dumont ......................................................................... 21 Figura 3 - Loja filial Avenida Raulino Cotta Pacheco ............................................................. 21 Figura 4 - Diagrama de Caso de Uso 1 ..................................................................................... 31 Figura 5 - Diagrama de Caso de Uso 2 ..................................................................................... 32 Figura 6 - Diagrama de seqüência efetuar login ....................................................................... 72 Figura 7 - Diagrama de seqüência cadastrar cliente ................................................................. 72 Figura 8 - Diagrama de seqüência cadastrar funcionário ......................................................... 73 Figura 9 - Diagrama de seqüência cadastrar fornecedor .......................................................... 74 Figura 10 - Diagrama de seqüência cadastrar médico .............................................................. 75 Figura 11 - Diagrama de seqüência cadastrar produto ............................................................. 76 Figura 12 - Diagrama de seqüência cadastrar receituário......................................................... 77 Figura 13 - Diagrama de seqüência registrar venda ................................................................. 78 Figura 14 - Diagrama de seqüência registrar compra ............................................................... 79 Figura 15 - Diagrama de seqüência alterar cliente ................................................................... 80 Figura 16 - Diagrama de seqüência alterar funcionário ........................................................... 81 Figura 17 - Diagrama de seqüência alterar fornecedor............................................................. 82 Figura 18 - Diagrama de seqüência alterar médico .................................................................. 83 Figura 19 - Diagrama de seqüência alterar produto ................................................................. 84 Figura 20 - Diagrama de seqüência alterar venda .................................................................... 85 Figura 21 - Diagrama de seqüência alterar compra .................................................................. 86 Figura 22 - Diagrama de seqüência alterar receituário ............................................................. 87 Figura 23 - Diagrama de seqüência excluir cliente .................................................................. 88 Figura 24 - Diagrama de seqüência excluir funcionário........................................................... 89 Figura 25 - Diagrama de seqüência excluir fornecedor ............................................................ 90 Figura 26 - Diagrama de seqüência excluir médico ................................................................. 91 Figura 27 - Diagrama de seqüência excluir produto................................................................. 92 Figura 28 - Diagrama de seqüência Excluir Venda .................................................................. 93 Figura 29 - Diagrama de seqüência Excluir Compra ............................................................... 94 Figura 30 - Diagrama de seqüência Excluir Receituário .......................................................... 95 Figura 31 - Diagrama de seqüência Pesquisar Cliente ............................................................. 96 Figura 32 - Diagrama de seqüência Pesquisar Funcionário ..................................................... 97 Figura 33 - Diagrama de seqüência Pesquisar Fornecedor....................................................... 98 Figura 34 - Diagrama de seqüência Pesquisar Médico............................................................. 99 Figura 35 - Diagrama de seqüência Pesquisar Produto .......................................................... 100 Figura 36 - Diagrama de seqüência Pesquisar Venda ............................................................ 101 Figura 37 - Diagrama de seqüência Pesquisar Compra .......................................................... 102 Figura 38 - Diagrama de seqüência Pesquisar Receituário .................................................... 103 Figura 39 - Diagrama de seqüência Relatório Melhores Clientes .......................................... 104 Figura 40 - Diagrama de seqüência Relatório Produtos Mais Vendidos ................................ 105 Figura 41 - Diagrama de pacotes ............................................................................................ 109 Figura 42 - Classe de análise pacote login ............................................................................. 110 Figura 43 - Diagrama de análise cliente ................................................................................. 111 Figura 44 - Classe de análise Funcionário .............................................................................. 113 Figura 45 - Classe de análise fornecedor ................................................................................ 114 Figura 46 - Classe de análise pacote médico .......................................................................... 116 Figura 47 - Classe de análise pacote produto ......................................................................... 117 Figura 48 - Classe de análise pacote receituário..................................................................... 119 UN IM IN AS Figura 49 - Classe de análise pacote venda ............................................................................ 120 Figura 50 - Classe de análise pacote compra .......................................................................... 122 Figura 51 - Classe de análise do pacote Relatório Produtos Mais Vendidos ......................... 123 Figura 52 - Classe de análise do pacote Relatório Melhores Clientes.................................... 124 Figura 53 - Diagrama de classes do projeto registrar venda................................................... 126 Figura 54 - Marca empresa Satika .......................................................................................... 131 Figura 55 - Estrutura do Satika System .................................................................................. 132 Figura 56 - Fragmento menu.js............................................................................................... 133 Figura 57 - Menu categoria Retrátil ....................................................................................... 134 Figura 58 - Modelos de disposição de informações em um site............................................. 135 Figura 59 - Modelo do menu do sistema ................................................................................ 136 Figura 60 - Arquitetura do site ............................................................................................... 137 Figura 61 - Controle de acesso ............................................................................................... 138 Figura 62 - Trecho da página de login .................................................................................... 138 Figura 63 - Diagrama de estados de navegação ..................................................................... 139 Figura 64 - Menu e área de resposta ....................................................................................... 140 Figura 65 - Fotografia usada pela empresa ............................................................................. 141 Figura 66 - Trecho página index.jsp ....................................................................................... 143 Figura 67 - Chamada do arquivo CSS .................................................................................... 144 Figura 68 - Trecho do arquivo css_index.css ......................................................................... 145 Figura 69 - Tela de login do sistema ...................................................................................... 146 Figura 70 - Página IndexAdm.jsp ........................................................................................... 146 Figura 71 - Código página indexAdm.jsp .............................................................................. 147 Figura 72 - Trecho menu.css .................................................................................................. 148 Figura 73 - Trecho página indexAdm.jsp ............................................................................... 149 Figura 74 - Trecho menu.js .................................................................................................... 150 Figura 75 - Trecho da página receituário.jsp .......................................................................... 151 Figura 76 - Página receituário ................................................................................................ 152 Figura 77 - Esquema de Níveis............................................................................................... 158 Figura 78 - DER Satika System .............................................................................................. 161 Figura 79 - Cardinalidade : um-para-um ................................................................................ 163 Figura 80 - Cardinalidade : um-para-muitos .......................................................................... 164 Figura 81 - Cardinalidade : muitos-para-um .......................................................................... 164 Figura 82 - Cardinalidade um para muitos ............................................................................. 165 Figura 83 - Visão Geral da Arquitetura do Hibernate ............................................................ 168 Figura 84 - Arquivo Hibernate.cfg ......................................................................................... 169 Figura 85 - Parte do diagrama de Classes Satika System ....................................................... 171 Figura 86 - Arquivo fornecedor.cfg.xml ................................................................................ 173 Figura 87 - Arquivo Endereco.cfg.xml................................................................................... 175 Figura 88 - Arquivo Compra.cfg.xml ..................................................................................... 176 Figura 89 - Arquivo ItemCompra.cfg.xml.............................................................................. 177 Figura 90 - Arquivo Produto.cfg.xml ..................................................................................... 178 Figura 91 - Pesquisa para encontrar todos os clientes ............................................................ 181 Figura 92 - Pesquisa para encontrar todos os clientes ............................................................ 184 Figura 93 - Classe HibernateUtility da aplicação Satika System ........................................... 186 Figura 94 - Classe EnderecoDAO .......................................................................................... 187 Figura 95 - Classe FornecedorDAO ....................................................................................... 188 Figura 96 - Classe PessoaDAO parte 1 .................................................................................. 189 Figura 97 - Classe PessoaDAO parte 2 .................................................................................. 190 Figura 98 - Classe Action.Login ............................................................................................ 195 UN IM IN AS Figura 99 - Código do FormLogin ......................................................................................... 197 Figura 100 - Classes DAO ...................................................................................................... 199 LISTA DE QUADROS UN IM IN AS Quadro 1 - Modelo de ata de reunião ....................................................................................... 24 Quadro 2 - Requisitos funcionais e não funcionais .................................................................. 25 Quadro 3 - Regras de negócios ................................................................................................. 35 Quadro 4 - Especificação do caso de uso: efetuar login ........................................................... 36 Quadro 5 - Especificação do caso de uso: cadastrar cliente ..................................................... 37 Quadro 6 - Especificação do caso de uso: cadastrar receituário ............................................... 38 Quadro 7 - Especificação do caso de uso: cadastrar funcionário ............................................. 39 Quadro 8 - Especificação do caso de uso: cadastrar fornecedor .............................................. 40 Quadro 9 - Especificação do caso de uso: cadastrar médico .................................................... 41 Quadro 10 - Especificação do caso de uso: cadastrar produto ................................................. 42 Quadro 11 - Especificação do caso de uso: registrar compra ................................................... 43 Quadro 12 - Especificação do caso de uso: registrar venda ..................................................... 44 Quadro 13 - Especificação do caso de uso: excluir cliente ...................................................... 45 Quadro 14 - Especificação do caso de uso: excluir fornecedor ................................................ 46 Quadro 15 - Especificação do caso de uso: excluir funcionário ............................................... 47 Quadro 16 - Especificação do caso de uso: excluir médico ..................................................... 48 Quadro 17 - Especificação do caso de uso: excluir produto..................................................... 49 Quadro 18 - Especificação do caso de uso: excluir registro de venda ..................................... 50 Quadro 19 - Especificação do caso de uso: excluir registro de compra ................................... 51 Quadro 20 - Especificação do caso de uso: excluir receituário ................................................ 52 Quadro 21 - Especificação do caso de uso: pesquisar cliente .................................................. 53 Quadro 22 - Especificação do caso de uso: pesquisar fornecedor ............................................ 54 Quadro 23 - Especificação do caso de uso: pesquisar funcionário........................................... 55 Quadro 24 - Especificação do caso de uso: pesquisar médico ................................................. 56 Quadro 25 - Especificação do caso de uso: pesquisar produto................................................. 57 Quadro 26 - Especificação do caso de uso: pesquisar registro de venda ................................. 58 Quadro 27 - Especificação do caso de uso: pesquisar registro de compra ............................... 59 Quadro 28 - Especificação do caso de uso: pesquisar receituário ............................................ 60 Quadro 29 - Especificação do caso de uso: alterar dados cliente ............................................. 61 Quadro 30 - Especificação do caso de uso: alterar dados fornecedor ...................................... 62 Quadro 31 - Especificação do caso de uso: alterar dados funcionário ..................................... 63 Quadro 32 - Especificação do caso de uso: alterar dados médico ............................................ 64 Quadro 33 - Especificação do caso de uso: alterar dados produto ........................................... 65 Quadro 34 - Especificação do caso de uso: alterar venda ........................................................ 66 Quadro 35 - Especificação do caso de uso: alterar compra ...................................................... 67 Quadro 36 - Detalhe do caso de uso alterar receituário ............................................................ 68 Quadro 37 - Detalhe do caso de uso relatório melhores clientes.............................................. 69 Quadro 38 - Detalhe do caso de uso relatórios produtos mais vendidos .................................. 70 LISTA DE ABREVIATURAS E SÍMBOLOS CNPJ – Cadastro Nacional de Pessoas Jurídicas CPF – Cadastro de pessoas físicas CSS – Cascate Style Sheet DADI – Definition, Architecture, Design, Implementation ou Definição, Arquitetura, Design e Implementação DER – Diagrama de Entidade e Relacionamento HTTP – Hypertext Transfer Protocol MS SQL – Microsoft SQL Server AS JSP – Java Server Pages OOHDM – Object-Oriented Hypermedia Design Method PK – Primary Key ou Chave Primária SQL - Structured Query Language ou Linguagem de Consulta Estruturada IN UC – Use Case ou Caso de Uso UML - Unified Modeling Language ou Linguagem de Modelagem Unificada UN IM W3C – World Wide Web Consortium SUMÁRIO 1 INTRODUÇÃO ........................................................................................................... 15 1.1 Cenário Atual .............................................................................................................. 15 1.2 Foco no problema de gestão a ser resolvido ........................................................ 16 1.3 Objetivos do Trabalho ............................................................................................... 17 1.3.1 Objetivo Geral ............................................................................................................. 17 1.3.2 Objetivo Específico .................................................................................................... 17 Justificativa .................................................................................................................. 18 1.5 Organização do Trabalho ......................................................................................... 19 2 DESCRIÇÃO DO PROBLEMA ................................................................................ 20 3 ANÁLISE DO SISTEMA ............................................................................................ 26 3.1 Análise de sistema utilizando a UML ...................................................................... 26 AS 1.4 3.1.1 Diagramas de Caso de Uso ..................................................................................... 30 Especificações dos Casos de Uso .......................................................................... 33 3.3 Diagramas de Seqüência ......................................................................................... 70 3.4 Classes de Análise .................................................................................................. 106 IN 3.2 3.4.1 Classe de Fronteira ................................................................................................. 106 3.4.2 Classe de Controle .................................................................................................. 107 3.4.3 Classe de Entidade .................................................................................................. 108 3.4.4 Classes do Projeto ................................................................................................... 108 Classes de Projeto ................................................................................................... 125 4 PROJETO DE INTERFACE ................................................................................... 128 4.1 Introdução ................................................................................................................. 128 4.2 Definição de interface .............................................................................................. 128 4.3 Padrões de construção de interface ..................................................................... 129 4.4 Definição da interface do sistema ......................................................................... 130 4.5 Arquitetura da interface do sistema ...................................................................... 132 4.6 Design ........................................................................................................................ 139 4.7 Implementação ......................................................................................................... 141 4.8 Caso de uso .............................................................................................................. 145 5 PERSISTÊNCIA ....................................................................................................... 153 5.1 Organização do banco de dados........................................................................... 154 5.2 Sistema de informação Gerencial do Banco de Dados ..................................... 155 UN IM 3.5 5.2.1 A escolha do MYSQL .............................................................................................. 156 5.3 Arquitetura do banco de dados .............................................................................. 157 5.4 Modelagem do banco de dados ............................................................................ 158 5.4.1 Explicando o Modelo ............................................................................................... 161 5.4.2 Restrições em relacionamentos ............................................................................ 162 5.4.3 Atributos chaves ....................................................................................................... 165 5.5 Hibernate ................................................................................................................... 166 5.5.1 Mecanismo de persistência do Hibernate ............................................................ 178 5.6 Padrão de persistência DAO(Data Access object) ............................................. 182 6 ARQUITETURA E CÓDIGO................................................................................... 192 6.1 JEE ............................................................................................................................. 192 6.2 Struts .......................................................................................................................... 193 7 CONCLUSÃO ........................................................................................................... 201 REFERÊNCIAS BIBLIOGRÁFICAS ................................................................................. 203 APÊNDICE A – Código menu.jsp: .................................................................................... 205 AS APÊNDICE B – Código index.jsp ...................................................................................... 212 APÊNDICE C – Código css_index.css............................................................................. 215 APÊNDICE D – Código css_int.css .................................................................................. 217 APÊNDICE E – Código menu.css..................................................................................... 220 UN IM IN APÊNDICE F – Código sdmenu.css................................................................................. 222 15 1 INTRODUÇÃO 1.1 Cenário Atual Segundo pesquisas o mercado de ópticas encontra grande deficiência em soluções que atendam à demanda deste crescente setor. A existência de softwares nesta área é escassa e os mesmos possuem preços elevados se comparados às funcionalidades que apresentam. Quando se fala em informatizar, há que se fazerem necessárias diferenciações: ter um computador na empresa com acesso a Internet é um bom começo, mas ainda significa estar na idade das pedras AS em relação ao que um software pode operacionalizar. O sistema pode permitir o armazenamento de infinitas informações, até mesmo da data de aniversário dos clientes fiéis, que geralmente é anotado, ainda hoje, numa caderneta. Apesar do computador ser uma ferramenta amplamente difundida no mundo atual, a IN receptividade do setor ainda é fraca, os ópticos ainda preferem anotações em cadernos e gerenciamento baseado na própria experiência de muitos anos. Ou seja, o setor ainda é muito conservador, muito resistente à informatização. IM Uma empresa com um sistema totalmente informatizado, funcionando eficiente e eficazmente, proporcionará grandes vantagens, seja em relação ao tempo otimizado, à organização, à facilidade de obtenção de informações, à previsão e muitos outros aspectos que contribuirão para o sucesso ou para o fracasso da pequena empresa. (COMO UN INFORMATIZAR, 2006). Não há estatísticas oficiais, mas os profissionais do setor acreditam que menos de 50% das ópticas em todo o Brasil estejam informatizadas e, destas, apenas 20%, dispõem de ferramentas tecnológicas arrojadas. A informatização da loja significa mais do que simplesmente comprar um microcomputador e impressora para emitir nota fiscal. Significa ter um sistema fácil e eficaz que faça parte do processo da loja, facilitando o trabalho e aumentando a qualidade no atendimento e a produtividade. Muitos empresários ainda pensam que não têm porte ou necessidade de utilizar um sistema de gestão específico para óptica, mas o mercado brasileiro mostra que o cliente tem mais confiança e interesse em ser cliente de uma 16 óptica que se preocupa em oferecer inovação e tecnologia em conjunto com um atendimento personalizado. Os empresários, proprietários de óptica, devem olhar para o seu negócio com mais empreendedorismo. Em algumas lojas, existem instalações muito precárias em relação à iluminação, vitrines, uniformes. É preciso pensar que a óptica representa uma extensão da visita ao oftalmologista, ela tem o papel importante de dar informações ou prestar serviços complementares à prescrição médica. O cliente tem que ter, e perceber, que a óptica, onde ele quer fazer os seus óculos, tem um nível de atendimento igual ou superior ao de onde ele começou a consulta, até mesmo nas instalações. Sabe-se que existem ópticas que superam quaisquer AS expectativas em atendimento, suas instalações são de excelente qualidade e os serviços, exemplares. Mas essa situação não retrata a maioria do mercado. Portanto, a orientação é que os empresários comecem a rever seus negócios, colocando mais tecnologia em serviços. IN Os softwares podem ajudar a armazenar e gerenciar os receituários de todos os clientes, números de faturamento a demanda de compras, pagamentos a fazer, controle de estoque e até mesmo a medida da satisfação dos clientes. O 1.2 IM óptico ganha completo controle sobre o negócio, podendo evitar até mesmo roubos. Foco no problema de gestão a ser resolvido Realizou-se um estudo sobre o desenvolvimento de um sistema para UN gerenciar, administrar e armazenar todas as operações realizadas pela empresa. Utilizando a linguagem de programação Java, este sistema possui três camadas na Web, isto é, camada de apresentação, camada de negócios e por fim a camada de integração, utilizando padrões de projeto. Desenvolveu-se um sistema por meio do qual foram armazenadas todas as informações e operações da empresa. A criação do sistema possibilita orientar a empresa no desenvolvimento do seu planejamento estratégico e operacional através do estabelecimento de metas, controle e melhorias dos processos. Através de levantamentos de requisitos, o sistema possibilita um controle de cadastro de clientes, fornecedores, funcionários e médicos. Possibilita também o envio de mala direta, controle de estoque, cadastro de produtos e controle de 17 vendas, caixa mensal, caixa diário e controle financeiro. Com a ajuda de gráficos o sistema auxilia a tomada de decisões, identificando as saídas de produtos por período, produtos mais vendidos e menos vendidos. A etapa posterior ao levantamento de requisitos é a análise de requisitos onde terá os requisitos funcionais e não funcionais de um sistema e assim começar a fazer os diagramas. Através da mala direta e dos gráficos com as saídas de produtos por período a empresa terá maior controle nas decisões a serem tomadas na sua política estratégica, efetivando assim um poder maior na concorrência. Portanto, através dessa crescente necessidade de se cada vez mais procurar formas de gerenciar, manipular e organizar informações desenvolveu-se Objetivos do Trabalho 1.3.1 Objetivo Geral IN 1.3 AS um sistema que atenderá as expectativas do cliente. Implementar um aplicativo comercial com suporte a Web para gestão de Óptica e Optometria. Desenvolver um software para gerenciar, administrar e IM armazenar todas as operações realizadas pela empresa. UN 1.3.2 Objetivo Específico Levantar dos requisitos do sistema; Documentar dos Casos de Uso; Analisar o desenvolvimento do projeto; Implementar o aplicativo em três camadas; Implementar o sistema utilizando a linguagem de programação Java; Implementar o diagrama de classes no nível de projeto; Implementar camada de apresentação através de Front Controller, Application Controller e Context Object. Implementar camada de negócio através de Business Delegate, Service Locator, Session Facade e Transfer Object; 18 Implementar camada de integração utilizando DAO - Data Access Object; Utilizar o Hibernate para mapeamento objeto-relacional; Utilizar Struts; Utilizar Tiles; Testar o sistema implementado. 1.4 Justificativa AS O mercado de softwares apresenta carência na área de soluções para o setor óptico. No Brasil não existe muitos software capazes de suprir totalmente as necessidades de uma óptica. O alto custo envolvido na aquisição de soluções importadas torna-se inviável sua aplicação em aproximadamente 90% das ópticas no Brasil, pois IN conforme estatísticas são de pequeno e médio porte. As pesquisas revelam que a grande maioria destas empresas adquirem softwares gerenciais simples. Com a falta de rotinas técnicas e específicas, utilizam aplicativos mais genéricos para suprirem interinamente o papel especializado inexistente no sistema implantado na óptica. IM Desta forma, a falta de automatização, deixou para trás o desenvolvimento da tecnologia de informação do setor. É possível ainda observar a lentidão deste processo que ainda é feito de forma manual, tendo como conseqüência a irritação e até a perda de alguns clientes. Com o sistema UN desenvolvido, estes problemas são minimizados, aumentando consideravelmente o controle de qualidade da óptica. Com a expansão da informatização, principalmente relacionada a questões de saúde, observa-se o grande avanço tecnológico dessa área, pois cada vez mais se buscam soluções eficazes e inovadoras que possam contribuir para uma melhor qualidade de vida. Devido a esse crescente aumento das informações comerciais no setor de óptica, juntamente com a necessidade de armazená-las, surgiu o interesse para o estudo mais profundo de um sistema para esse tipo de controle. Observando estas necessidades, desenvolveu-se um sistema que implementa uma solução eficaz e consistente de gerenciamento, manipulação e 19 armazenamento de dados e que possibilita a maior lucratividade, maior rapidez no atendimento ao cliente e armazenamento seguro de dados importantes. A relevância do estudo, em seus aspectos profissionais e científicos, sustenta-se no interesse pessoal pelo tema, na necessidade de um estudo mais profundo de como pode ser desenvolvido um projeto com utilização de linguagens atuais. Tem-se a oportunidade de desenvolver um projeto utilizando-se a linguagem de programação (JAVA) altamente utilizada no mercado atual, juntamente com todo o processo de software para verificação dos requisitos iniciais bem como o armazenamento dos dados da empresa em um banco de dados. Este sistema utiliza tecnologias como Struts, Java Server Pages, AS Servlets, dentre outras, no desenvolvimento de uma aplicação para Web Service. Isto poderá servir como objeto de estudo para futuras pesquisas acadêmicas e científicas. Organização do Trabalho IN 1.5 O capítulo 2 consiste na descrição do problema e as características básicas do sistema, bem como a apresentação da empresa Satika Óptica e Design, IM cuja as regras de negócio foram baseadas na mesma. O capítulo 3 consiste na apresentação da análise e projeto do sistema, exemplificado com os diagramas UML (Unified Modeling Language). Consistem em descrição de Caso de Uso e atores, classes de análise, comportamento dinâmico e UN comportamento estático, juntamente com uma breve explicação dos mesmos. O capítulo 4 refere-se à interface do sistema, serão apresentadas as telas bem como os respectivos códigos juntamente com uma breve explicação das tecnologias utilizadas. O capítulo 5 será mostrado toda a parte de persistência dos dados num banco de dados, bem como trechos de códigos responsáveis por tal atividade. O capítulo 6 é descrito toda a arquitetura utilizada para o desenvolvimento do sistema. O capítulo 7 serão mostradas as conclusões obtidas no trabalho e sugestões para a continuidade de trabalhos futuros. 20 2 DESCRIÇÃO DO PROBLEMA A Satika Óptica & Design é uma empresa do ramo da optometria que se trata de “uma ciência especializada no estudo da visão, especificamente nos cuidados primários e secundários da saúde visual” (COSTA, 2008) e óptica que comercializa óculos de grau, escuros e lentes. Com mais de 30 anos no mercado, a empresa se mantém sólida com um atendimento personalizado e de excelência, desenvolvendo e oferecendo o que AS há de melhor em produtos com intensa tecnologia e qualidade aos seus clientes. Busca sempre estar à frente de seus concorrentes e satisfazendo cada vez mais seus clientes. Está no mercado uberlandense em três locais composta de uma matriz IN situada à R. Duque de Caxias, 146 figura 1, e duas filiais na Av. Santos Dumont, UN IM 548, figura 2 e Av. Raulino Cotta Pacheco, 242 figura 3. Figura 1 - Loja matriz Rua Duque de Caxias AS 21 UN IM IN Figura 2 - Loja filial Avenida Santos Dumont Figura 3 - Loja filial Avenida Raulino Cotta Pacheco Atualmente a maioria dos processos executados pela Satika Óptica e Design já são automatizadas. O sistema que a empresa possui hoje é baseado em uma arquitetura cliente servidor para desktop. Segundo Basham, Sierra e Bates(2005) a arquitetura cliente-servidor é um modelo computacional que separa máquinas clientes e servidores. Sendo assim estes computadores são interligados entre si geralmente utilizando-se uma rede de computadores o objetivo foi construir uma aplicação que os computadores clientes 22 de qualquer ponto do planeta com permissão o sistema e acesso à web consigam acessar as informações contidas no Satika System. Cada filial possui uma cópia do sistema que está instalado nas estações de trabalho dos profissionais da Satika. O sistema tem uma base de dados central acessada por todos os desktops clientes da empresa no qual estão armazenados de forma persistente todos os dados e informações referentes ao negócio da empresa. Cada desktop da franquia Satika envia requisições de dados para o servidor conectado e espera pela resposta. Por sua vez, o servidor aceita tais requisições, processando-as e retornando o resultado para o desktop. Apesar do bom funcionamento, a diretoria da empresa tem o interesse AS de implementar novas funcionalidades no sistema, agilizando ainda mais os processos e garantindo melhor desempenho em todos os processos da empresa. O desejo baseia-se, principalmente, na visão da empresa que se fundamenta na seguinte idéia: “Expandir o número de franquias com excelência em atendimento, IN produtos e serviços”. Para que essa visão possa ser alcançada, verificou-se a necessidade do desenvolvimento de um sistema que permita ser acessado de qualquer desktop, sem a necessidade de uma instalação prévia e que fosse de fácil manutenção. Com IM isto, espera-se que o desenvolvimento de um sistema web que consiga unir todas as funcionalidades que a empresa já possui, faça com que suas franquias compartilhem informações de uma maneira mais dinâmica e, principalmente, em tempo real. UN O projeto Satika System baseia-se na implementação de um sistema baseado na arquitetura web. Este sistema será de gestão de negócios e utilizará novas tecnologias de desenvolvimento para aplicações Web, tais quais armazenamento persistente estruturado, layout que facilita e agiliza sua usabilidade, e tecnologia de desenvolvimento JAVA. Com isto, possibilitará a criação de uma aplicação em que o cliente poderá desempenhar as funções básicas de sua empresa que compreendam cadastros, alterações, exclusões e consultas, bem como a visualização de relatórios funcionais e gerenciais que ajudam a direção da empresa na obtenção de informações para a tomada de decisões estratégicas para o negócio. No sistema são manipuladas informações referentes a colaboradores que compreendem clientes, funcionários, médicos e fornecedores. Com relação aos 23 processos de negócio, deverão ser armazenadas informações referentes a produtos em estoque e compra e venda de produtos. Todas essas informações armazenadas servirão de insumos para a elaboração de relatórios gerencias que podem ser gerados quando necessário ou automaticamente. Para o levantamento desses e demais requisitos foram realizados três visitas à empresa. Na primeira visita foram descritos os principais requisitos e nas demais foram identificadas e sanadas as principais dúvidas para aprimoramento das idéias propostas pela empresa, visando sempre ter um sistema que atenda todas as necessidades funcionais da Satika e que venha agregar facilidades ao negócio. Em AS cada visita à empresa foram elaboradas as atas de reunião conforme modelo mostrado na figura 4. Nestas reuniões foram levantados vários requisitos para o sistema que será demonstrado neste documento. Estes requisitos referem-se às dia com este software. IN necessidades dos usuários do sistema, ou seja, aqueles que vão trabalhar no dia-aPara que sejam percebidos quais são tais requisitos realizaram-se vários contatos com o cliente, várias reuniões a fim de avaliar as suas reais necessidades. É de fundamental importância a compreensão total dos requisitos IM apontados pelo cliente durante as reuniões, para se obter sucesso no desenvolvimento do software. Esta análise de requisitos é para garantir o desenvolvimento de acordo com modelo de negócio e com as funcionalidades do sistema. É de suma importância também perceber que quando existem erros na UN definição requisitos geralmente serão percebidos na fase de testes, sendo que a detecção tardia poderá, até mesmo, inviabilizar o projeto. Estas reuniões mostraram para o cliente todas as funcionalidades desenvolvidas e foi mostrado um modelo de layout da página do sistema e antes de repassar os requisitos para o desenvolvimento do sistema foi validado com a Satika para possíveis sugestões de melhorias e facilidades, é apresentado no quadro 1 a ata de reunião que foi utilizada para documentar as reuniões. IN AS 24 Quadro 1 - Modelo de ata de reunião IM Sabe-se que para ter um software de qualidade é necessário um cronograma para mapear prazos, responsabilidades e desta forma cumprir a contento a entrega dos módulos solicitados. O desenvolvimento do software deverá cumprir com todas as UN solicitações feitas pelo cliente desde a primeira reunião estando estas registradas no levantamento de requisitos mostrado no quadro 2. 25 IN AS Requisitos funcionais Efetuar Login Efetuar Logout Cadastrar Cliente Cadastrar Funcionário Cadastrar Médico Cadastrar Fornecedor Cadastrar Receituário Cadastrar Produto Registrar Venda Registrar Compra Atualizar Dados Cadastrais do Cliente Atualizar Dados Cadastrais do Funcionário Atualizar Dados Cadastrais do Fornecedor Atualizar Dados Cadastrais do Receituário Atualizar Dados Cadastrais do Produto Atualizar Dados Cadastrais do Médico Remover Dados Cadastrais, Vendas e Compras Gerar Relatórios Melhores Clientes Gerar Relatórios Produtos mais Vendidos UN IM Requisitos Não-funcionais 1) A aplicação será construída utilizando as seguintes tecnologias: Servlets; Java Server Pages; Struts; EJB; Hibernate; Java script; XML; 25TML Forms e o banco de dados MySql. 2) Nem todas as funcionalidades do sistema estarão disponíveis através da Web, neste, as operações poderão ser feitas diretamente no banco de dados. 3) A codificação Java deverá ser feita de acordo com as convenções adotadas pela SUN. Maiores informações no endereço: http://java.sun.com/docs/codeconv/ 4) Deverá ser utilizado o padrão de Projeto J2EE para o desenvolvimento da aplicação WEB. Quadro 2 - Requisitos funcionais e não funcionais 26 3 ANÁLISE DO SISTEMA 3.1 Análise de sistema utilizando a UML Entende-se como análise de sistemas, AS [...] a atividade inicial de desenvolvimento de sistemas em que se determina e especifica o que um sistema deve fazer, bem como circunstâncias pelas quais deve operar, envolvendo geralmente um esforço colaborativo entre analistas de sistemas e utilizadores, no qual os primeiros procuram obter a partir dos segundos, num processo gradual e cumulativo, o maior conhecimento possível a cerca do domínio do discurso do sistema e respectivo ambiente (ROCHA, 2004, p. 13). O desenvolvimento de sistemas de software tem como base os métodos de análise e projeto que modelam tal sistema de modo a fornecer para toda a equipe envolvida (cliente, analista e programador) uma compreensão única do IN projeto. A análise enfatiza a investigação do problema. O objetivo é levar o analista a investigar e a descobrir. Para que essa etapa seja realizada em menos tempo e com maior precisão, deve-se ter um bom método de trabalho (WAZLAWICK, 2004, v. 4, p. 20). IM A Linguagem de Modelagem Unificada é uma linguagem “unificadora” de notações, diagramas e formas de representação existentes em diferentes técnicas. É uma linguagem gráfica para visualização, especificação, construção e documentação de artefatos de sistemas complexos de software. Ela proporciona UN uma forma-padrão para a preparação de planos de arquitetura de projetos de sistemas, incluindo aspectos conceituais como processos de negócio e funções do sistema, além de itens concretos como as classes escritas em determinadas linguagens de programação, esquemas de banco de dados e componentes de software reutilizáveis. A UML é uma linguagem muito expressiva, abrangendo todas as visões necessárias ao desenvolvimento e implantação de sistema. É independente tanto de linguagens de programação quanto de processos de desenvolvimento. Isso quer dizer que a UML pode ser utilizada para a modelagem de sistemas, não importa qual linguagem de programação será utilizada na implementação do sistema, ou qual a forma de desenvolvimento adotada. 27 A UML é uma linguagem de modelagem visual, ou seja, é um conjunto de notações e semântica correspondente para representar visualmente uma ou mais perspectivas de um sistema (BEZERRA, 2002, v.9, p.17). A modelagem é uma técnica de engenharia aprovada e bem aceita. Um modelo é uma simplificação da realidade. Os modelos oferecem uma cópia do projeto de um sistema, podendo abranger planos detalhados ou gerais. Todos os sistemas podem ser descritos sob diferentes aspectos, com a utilização de modelos distintos, e cada modelo será, portanto, uma abstração semântica específica do sistema. Os modelos podem ser estruturais, dando ênfase à organização do sistema, ou podem ser comportamentais, dando ênfase à dinâmica do sistema. AS É importante construir modelos para poder compreender melhor o sistema que estamos desenvolvendo. Existem limites para a capacidade humana de compreender complexidades. Com a ajuda da modelagem, delimitamos o problema que estamos estudando, restringindo nosso foco a um único aspecto por vez. IN Para desenvolver software de forma rápida, eficiente e efetiva, com o mínimo de desperdício e de retrabalho, será preciso dispor pessoas certas, com ferramentas adequadas e no enfoque correto. Para fazer tudo isso de maneira previsível e consistente, com uma avaliação dos custos reais do sistema, será IM necessário um processo seguro de desenvolvimento que possa ser adaptado às necessidades do cliente. Na tentativa de lidar com a complexidade do sistema e de minimizar os problemas envolvidos no projeto de software, foi utilizado o chamado processo de UN desenvolvimento de software (ou simplesmente processo de desenvolvimento), que compreende todas as atividades necessárias para definir, desenvolver, testar e manter um produto de software. Alguns dos objetivos do processo de desenvolvimento são: definir quais as atividades a serem executadas ao longo do projeto; quando, como e por quem tais atividades serão executadas; prover pontos de controle para verificar o andamento do projeto; padronizar a forma de desenvolver o software. Serão descritas abaixo algumas atividades típicas do processo de desenvolvimento utilizado no projeto do sistema Satika: levantamento de requisitos - a atividade de levantamento de requisitos correspondente a etapa de compreensão do problema aplicado ao desenvolvimento de software. Seu objetivo principal é o entendimento por parte de 28 usuários, desenvolvedores e clientes, nas funcionalidades que o sistema deverá possuir, para que os futuros usuários possam utilizar o software de acordo com as suas necessidades. É a etapa onde são feitas reuniões no intuito de levantar e definir quais os requisitos o sistema deve conter. análise de requisitos - é a etapa na qual os analistas realizam um estudo detalhado dos requisitos levantados na etapa anterior a partir desse estudo, são construídos os modelos para representar o sistema a ser desenvolvido. Assim como a etapa de levantamento de requisitos, a análise de requisitos não leva em conta o ambiente a ser utilizado; o objetivo é tentar construir uma solução sem se preocupar com a maneira de como será realizada. Nesta fase começaram a ser AS definidos os requisitos funcionais e não funcionais, e iniciou a elaboração de um planejamento detalhado para o ciclo de vida de desenvolvimento do sistema do projeto Satika. Durante as duas primeiras visitas os requisitos foram coletados, validados e aprovados de acordo com as políticas e metodologias adotadas pela IN empresa. Foram também identificados os controles internos e os requisitos de segurança, pois são de suma importância nessa fase afim de que não acarretem em sérios problemas futuros. É claro que durante as fases seguintes do projeto muitos requisitos foram modificados, pois com o tempo acaba se adquirindo um melhor fase. IM entendimento do problema. No entanto a idéia principal do sistema foi definida nessa O sistema deverá possibilitar ao usuário: cadastro de clientes, funcionários, fornecedores, médicos e UN receituário do cliente; alteração de dados cadastrais; exclusão de dados cadastrais; pesquisa de dados no sistema; emissão de relatório contendo os dados dos clientes que fizeram as maiores compras na empresa; emissão de relatório contendo os dados dos produtos que mais foram vendidos pela empresa. Ainda nessa fase foi preparado o Plano de Projeto Satika que definiu os objetivos e as atividades para as fases seguintes, incluindo-se um cronograma. O Plano de Projeto documenta a forma como este será executado para atingir o 29 objetivo para o qual foi criado. Não é fixo e por isso foi atualizado sempre que em certos eventos tal atualização se justificava, como por exemplo, a ocorrência de um risco ou uma mudança no escopo do projeto. A seguir descreve-se cada fase da elaboração do plano de projeto: projeto - diferentemente da etapa de análise de requisitos, o objetivo da fase de projeto é “como” o sistema funcionará para atender os requisitos de acordo com os recursos tecnológicos existentes. Na fase de projeto existem alguns aspectos que devem ser considerados como: arquitetura o sistema, padrão de interface gráfica a ser utilizada, a linguagem de programação, gerenciador de banco de dados, entre outros. As atividades executadas durante esta fase resultaram na AS especificação da solução para os diversos aspectos que iriam compor o sistema: funcionalidade (como os usuário verão o sistema), dados (modelos e estrutura dos dados) e técnica (modelo de rede e de operação do sistema). O Plano de Projeto maior precisão aos planos; IN nessa fase foi revisto novamente para espelhar as novas informações e fornecer implementação - é a etapa onde o sistema é codificado, ou seja, ocorre a transcrição em código da fase de projeto através do uso de uma linguagem de programação; IM testes - diversas atividades de testes são realizadas para verificação do sistema construído, levando-se em conta a especificação feita na fase de projeto. O resultado é o relatório de testes, contendo informações sobre erros detectados no sistema, logo após são feitas as correções e o que se tem é o resultado, isto é, UN finalmente o produto de software; Implantação - o sistema é instalado e configurado no ambiente do usuário. Os manuais do sistema são escritos e os usuários são treinados para utilizar o sistema de forma correta. É preciso ter em mente que para construir bons softwares, o problema não se restringirá a uma questão de escrever uma grande quantidade de software de fato o segredo está em criar o código correto e pensar em como será possível elaborar menos software - mas também ficar atento a possíveis vulnerabilidades, que podem acarretar grandes prejuízos para a empresa. Isso faz com que o desenvolvimento de software de qualidade se torne uma questão de arquitetura, processo e ferramentas. 30 3.1.1 Diagramas de Caso de Uso Existe um diagrama na UML para representar casos de uso e seus atores. A principal utilidade desse diagrama está no fato de se poder associar a ele, caso se use uma ferramenta CASE, um conjunto de outros artefatos que representam a interação entre os atores e o sistema (WAZLAWICK, 2004, v. 4, p. 47). Um caso de uso é uma modelagem usada para descrever o que um sistema deve fazer. São iterações entre atores e o sistema, isto é, ações do ator e ações do sistema, sendo que os atores são quem sempre iniciam essa ação. É elaborado através de um processo iterativo, no qual reuniões são realizadas com AS analistas juntamente com o cliente a fim de se ter uma especificação do sistema, em que ambos devem estar de acordo. Na UML, o modelo de caso de uso consiste em um diagrama que mostram os atores, os casos de uso e seus respectivos relacionamentos. Tem como finalidade decidir e descrever os requisitos funcionais IN do sistema. IM O modelo de casos de uso é uma representação das funcionalidades externamente observáveis do sistema e dos elementos externos ao sistema que interagem com ele. Este modelo é parte integrante da especificação de requisitos. Na verdade, o modelo de casos de uso molda os requisitos funcionais do sistema. O diagrama UML utilizado na modelagem de casos de uso é o diagrama de casos de uso (BEZERRA, 2002, v.9, p. 45). A UML descreve um ator como sendo qualquer elemento externo (que não faz parte do sistema) que interage (troca de informações) com o sistema. No projeto Satika existe apenas um ator, o funcionário. UN O funcionário é o principal ator do sistema Satika sendo a pessoa que atua diretamente no sistema e efetua todas as tarefas da empresa. É ele quem faz os cadastros de clientes, de receituário, de médico, de fornecedores e de produtos. É responsável também por efetuar as vendas com os clientes, fazer compras com os fornecedores, gerar relatórios de produtos mais vendidos e também de melhores clientes. Com base na análise dos requisitos, obtido através de reuniões com o cliente, foi possível desenvolver um diagrama de caso de uso que fornecesse uma visão geral dos requisitos funcionais bem como seus atores, para que fossem especificadas as reais necessidades do cliente, foram desenvolvidos dois diagramas 31 de Caso de Uso para o melhor entendimento conforme mostrado nas figura 4 e UN IM IN AS figura 5. Figura 4 - Diagrama de Caso de Uso 1 IN AS 32 IM Figura 5 - Diagrama de Caso de Uso 2 Com os diagramas das figura 4 figura 5, tem-se uma visão externa do que o sistema deverá fazer; representa-se graficamente os atores, casos de uso e UN os relacionamentos de comunicação entre esses elementos. Cada elipse representa um caso de uso que foi especificado na fase de análise de requisitos, o boneco representa o ator (usuário) e o retângulo, a fronteira do sistema. 33 3.2 Especificações dos Casos de Uso Nos dizeres de Bezerra (2002), um caso de uso define o uso de uma parte da funcionalidade, sem revelar o comportamento e a estrutura de um sistema. Especifica uma seqüência de iterações entre o sistema e os atores que o utilizam. É feito através de descrições narrativas das iterações externas com o sistema. AS Todos os casos de uso da análise são do tipo essencial. Essencial, nesse contexto, não significa importante ou fundamental, mas que ele é descrito em um nível de discurso no qual apenas a “essência” das operações é apresentada, em oposição à sua realização concreta. Em outras palavras, o analista deve descrever “o que” acontece entre o usuário e o sistema, sem, entretanto, informar “como” essa interação ocorre. O analista não deve, portanto, na fase de análise, tentar descrever a tecnologia de interface entre o sistema e o usuário (WAZLAWICK, 2004, v. 4, p. 63). O modelo usado para descrever os casos de uso, os atores e a documentação do caso de uso, utiliza os seguintes itens: IN nome - é o mesmo que aparece no diagrama de caso de uso; sumário - é uma pequena descrição do caso de uso; ator primário - nome do ator que inicia o caso de uso; ator(s) secundário(s): nomes dos demais atores participantes do IM caso de uso; pré-condição e pós-condição - define que hipóteses são assumidas como verdadeiras para que se tenha início um caso de uso. E a pós-condição é a UN finalização do caso de uso, encerramento deste; fluxo principal - descreve o que normalmente acontece quando o caso de uso é realizado, é uma descrição da seqüência de passos; fluxo alternativo - utilizado para descrever o que acontece quando o ator faz uma escolha alternativa, diferente da descrita no fluxo principal, para alcançar o seu objetivo; fluxo de exceção - descrição de situações que acontecem quando algo inesperado ocorre na iteração entre o caso de uso e o usuário; regras de negócio - a descrição de caso de uso pode fazer uma referencia a uma ou mais regras de negócio, são políticas, condições ou restrições. Abaixo serão apresentadas as regras de negócios identificadas referente aos casos de uso do Satika System no quadro 3. 34 RN-01 O funcionário precisa ser cadastrado no sistema e possuir usuário e senha. RN-02 É necessário que o cliente deseje efetuar alguma compra na empresa. RN-03 Para cadastrar receituário o cliente deve possuir cadastro no sistema. RN-04 Para cadastrar funcionário é necessário que outro funcionário o cadastre. RN-05 Fornecedor deve possuir número de CNPJ e Inscrição Estadual. RN-06 Para efetuar o cadastro é necessário o preenchimento de todos os dados. RN-07 Para efetuar o cadastro do produto é necessário que o fornecedor esteja cadastrado no sistema. Só poderá registrar uma compra se o fornecedor estiver cadastrado. RN-09 Só poderá registrar uma venda se o cliente estiver cadastrado. RN-10 Deverá fazer uma pesquisa do cliente antes de excluí-lo. RN-11 Deverá fazer uma pesquisa do fornecedor antes de excluí-lo. RN-12 Deverá fazer uma pesquisa do funcionário antes de excluí-lo. RN-13 Deverá fazer uma pesquisa do médico antes de excluí-lo. RN-14 Deverá fazer uma pesquisa do produto antes de excluí-lo. RN-15 Deverá fazer uma pesquisa da venda antes de excluí-la. RN-16 Deverá fazer uma pesquisa de compra antes de excluí-la. RN-17 Deverá fazer uma pesquisa do receituário antes de excluí-lo. RN-18 Para realizar uma pesquisa de cliente deverá ser informado nome ou CPF. RN-19 Para realizar uma pesquisa de fornecedor deverá ser informado Razão IM IN AS RN-08 Social e CNPJ. RN-20 Para realizar uma pesquisa de funcionário deverá ser informado nome ou UN CPF. RN-21 Para realizar uma pesquisa de médico deverá ser informado nome ou CPF. RN-22 Para realizar uma pesquisa de produto deverá ser informado o tipo ou a grife. RN-23 Para realizar uma pesquisa da venda deverá ser informada a data da venda. RN-24 Para realizar uma pesquisa da compra deverá ser informada a data da compra. RN-25 Para realizar uma pesquisa do receituário deverá ser informado nome ou CPF. RN-26 Para alterar dados do cliente deverá ser feito antes uma pesquisa do 35 mesmo. RN-27 Para alterar dados do fornecedor deverá ser feito antes uma pesquisa do mesmo. RN-28 Para alterar dados do funcionário deverá ser feito antes uma pesquisa do mesmo. RN-29 Para alterar dados do médico deverá ser feito antes uma pesquisa do mesmo. RN-30 Para alterar dados do produto deverá ser feito antes uma pesquisa do mesmo. RN-31 Para alterar dados da venda deverá ser feito antes uma pesquisa do RN-32 AS mesmo. Para alterar dados da compra deverá ser feito antes uma pesquisa do mesmo. Para alterar dados do receituário deverá ser feito antes uma pesquisa do mesmo. RN-34 IN RN-33 Para gerar relatório Melhores Clientes é necessário informar o período de venda a ser pesquisado. RN-35 Para gerar relatório Produtos mais Vendidos é necessário informar o IM período de venda a ser pesquisado. Quadro 3 - Regras de negócios UN Abaixo serão demonstrados os quadros com as especificações dos casos de uso identificados no sistema. 36 No quadro 4 mostra-se o processo para realizar o login no sistema Satika, descrevendo-se as etapas necessárias para a realização do mesmo. Nome Sumário Efetuar Login CSU-1 Descreve as etapas para realizar o login AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: A pessoa tem que ser funcionário da empresa e possuir usuário e senha cadastrada. Pós-condição: Funcionário terá acesso ao sistema. Fluxo Principal 1. O sistema fornece os campos para preenchimento do login; 2. O funcionário digita o usuário e a senha; 3. O sistema lê o nome de usuário e a senha e valida o login; 4. O sistema exibe a tela inicial e o Menu com as funcionalidades; 5. O funcionário tem acesso ao sistema. IN Fluxo Alternativo [ ]: Fluxo de Exceção [ 3 ]: Usuário e senha inválidos IM a. O sistema emite uma mensagem de erro, informando que o usuário ou a senha foram preenchidos incorretamente. b. O caso de uso retorna ao passo 1. Regras de Negócio Associadas UN RN-01 O funcionário precisa ser cadastrado no sistema e possuir usuário e senha Quadro 4 - Especificação do caso de uso: efetuar login 37 No quadro 5, é mostrado o processo para cadastrar um cliente no sistema Satika, mostrando as etapas necessárias para a realização do mesmo bem como os dados solicitados para sua realização. Nome Sumário Cadastrar Cliente CSU02 Descreve as etapas necessárias para cadastrar clientes. IN AS Ator primário: Funcionário Ator(es) secundário(s): Cliente Pré-condição: O cliente deve efetuar alguma compra na empresa e usuário logado Pós-condição: Cadastro do cliente concluído Fluxo Principal 1. O funcionário seleciona opção de cadastro de clientes; 2. O sistema solicita o código do cliente para validação; 3. O sistema fornece formulário para preenchimento dos dados do cliente; 4. O funcionário entra com os dados do cliente (Nome, CPF, data de nascimento, e-mail, telefone, endereço, cidade, estado, CEP); 5. O funcionário seleciona a opção de concluir o cadastro do cliente. 6. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente ou o número de CPF inválido. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. Fluxo Alternativo [ 1 ]: Desistência do cadastro de cliente IM a. Caso o funcionário não conclua ou desista de incluir o cadastro do cliente, o sistema volta ao passo 1. UN Fluxo de Exceção [ 6 ]: Dados do cliente incorretos ou inválido. a. O sistema emite uma mensagem de erro, caso tenha sido digitado número de CPF inválido. b. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. c. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 02 É necessário que o cliente deseje efetuar alguma compra na empresa Quadro 5 - Especificação do caso de uso: cadastrar cliente 38 No quadro 6, é mostrado o processo para cadastrar um receituário do cliente no sistema Satika. São também mostradas as etapas necessárias para a realização do mesmo, bem como os dados solicitados. Nome Cadastrar Receituário CSU03 Sumário Descreve as etapas necessárias para o cadastro do receituário Ator primário: Funcionário Ator(es) secundário(s): Cliente Pré-condição: O cliente precisa efetuar pelo menos uma compra de óculos tendo em mãos a prescrição do médico, e usuário esteja logado no sistema. Pós-condição: Cadastro do receituário concluído. IN AS Fluxo Principal 1. O funcionário seleciona opção de cadastrar receituário; 2. O funcionário seleciona opção de pesquisar pelo CPF ou nome do cliente para verificar se o cliente é cadastrado no sistema; 3. O funcionário seleciona opção de pesquisar pelo CPF ou nome do médico para verificar se o médico é cadastrado no sistema; 4. O sistema fornece formulário para preenchimento dos dados do receituário (data da consulta, grau esquerdo, grau direito, eixo, prisma, estrios, cilíndrica, naso pupilar e lente); 5. O funcionário seleciona a opção de concluir o cadastro do receituário 6. O sistema verifica se foram preenchidos todos os campos ou se teve algum campo preenchido incorretamente. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. IM Fluxo Alternativo [ 1 ]: Desistência do cadastro do receituário a. Caso o funcionário não conclua ou desista de incluir o cadastro do receituário, o sistema volta ao passo 1. UN Fluxo de Exceção [ 2, 6 ]:, Caso cliente ou médico não cadastrados no sistema, ou não preenchimento de dados a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar e o cliente não é cadastrado. Sistema envia mensagem “cliente não cadastrado”; b. Funcionário deverá primeiramente cadastrar o cliente. c. Caso funcionário entre com o nome ou CPF do médico para pesquisar e o médico não é cadastrado. Sistema envia mensagem “médico não cadastrado”; d. Funcionário deverá primeiramente cadastrar o médico. e. Sistema volta ao passo 3. f. Sistema envia mensagem “realmente deseja não incluir este dado do receituário?”; g. Sistema obtém confirmação; h. Sistema volta ao passo 7. Regras de Negócio Associadas RN - 03 Para cadastrar receituário o cliente deve possuir cadastro no sistema. Quadro 6 - Especificação do caso de uso: cadastrar receituário 39 No quadro 7, é mostrado o processo para cadastrar um funcionário no sistema Satika, representando as etapas necessárias para a realização do mesmo bem como os dados solicitados. Nome Sumário Cadastrar Funcionário CSU04 Descreve as etapas necessárias para o cadastro do funcionário IN AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Necessário que a pessoa faça parte da equipe de funcionários da empresa, e um usuário esteja logado no sistema para realizar o cadastro. Pós-condição: Cadastro de funcionário concluído. Fluxo Principal 1. O funcionário seleciona opção de cadastro de funcionário; 2. O sistema solicita o código do funcionário para validação; 3. O sistema fornece formulário para preenchimento dos dados do funcionário; 4. O funcionário entra com os dados do funcionário (Nome, CPF, Carteira de trabalho, data de nascimento, telefone, endereço, cidade, estado, CEP, usuário e senha); 5. O funcionário seleciona a opção de concluir o cadastro do funcionário. 6. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente ou o número de CPF do funcionário é inválido. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. IM Fluxo Alternativo [ 1 ]: Desistência cadastro funcionário a. Caso o funcionário não conclua ou desista de incluir o cadastro do funcionário, o sistema volta ao passo 1. UN Fluxo de Exceção [ 6 ]: Caso CPF do funcionário for inválido ou outro dado preenchido errado incorretos ou inválido. a. O sistema emite uma mensagem de erro, caso tenha sido digitado número de CPF inválido. b. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. c. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 4 Para cadastrar funcionário é necessário que outro funcionário o cadastre. Quadro 7 - Especificação do caso de uso: cadastrar funcionário 40 No quadro 8 é mostrado o processo para cadastrar um funcionário no sistema Satika, descrevendo-se as etapas necessárias para a realização do mesmo bem como os dados solicitados. Nome Sumário Cadastrar Fornecedor CSU05 Descreve as etapas necessárias para o cadastro do fornecedor Ator primário: Funcionário Ator(es) secundário(s): Fornecedor Pré-condição: Ter CNPJ e Inscrição Estadual Pós-condição: Cadastro do fornecedor concluído. Fluxo Principal IM IN AS 1. O funcionário seleciona opção de cadastro de fornecedor; 2. O sistema solicita o código do fornecedor para validação; 3. O sistema fornece formulário para preenchimento dos dados do fornecedor; 4. O funcionário entra com os dados do fornecedor (Razão Social, Inscrição Estadual, CNPJ, telefone, fax, endereço, cidade, CEP, contato da empresa, e-mail); 5. O funcionário seleciona a opção de concluir o cadastro do fornecedor. 6. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente ou o número de CNPJ da empresa é inválido. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. 9. Sistema exibe mensagem de cadastro realizado com sucesso. Fluxo Alternativo [ 1 ]: Desistência de cadastro de fornecedor a. Caso o funcionário não conclua ou desista de incluir cadastro do fornecedor, o sistema volta ao passo 1. UN Fluxo de Exceção [ 6 ]: Caso CNPJ do fornecedor for inválido ou outro dado preenchido errado. a. O sistema emite uma mensagem de erro, caso tenha sido digitado número de CPF inválido. b. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. c. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 05 Fornecedor deve possuir número de CNPJ e Inscrição Estadual. Quadro 8 - Especificação do caso de uso: cadastrar fornecedor No quadro 9 é mostrado o processo para cadastrar um médico no sistema Satika, descrevendo-se as etapas necessárias para a realização do mesmo, bem como os dados solicitados. 41 Nome Sumário Cadastrar Médico CSU06 Descreve as etapas necessárias para o cadastro do médico IN AS Ator primário: Funcionário Ator(es) secundário(s): Médico Pré-condição: Necessário o médico constar no receituário do cliente, e usuário esteja logado no sistema. Pós-condição: Cadastro do médico concluído. Fluxo Principal 1. O funcionário seleciona opção de cadastro de Médico; 2. O sistema solicita o código do médico para validação; 3. O sistema fornece formulário para preenchimento dos dados do médico; 4. O funcionário entra com os dados do médico (Nome, CPF, CRM, clínica, data de nascimento, e-mail, telefone, endereço, cidade, estado, CEP); 5. O funcionário seleciona a opção de concluir o cadastro do médico. 6. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente ou o número de CPF do médico é inválido. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. Fluxo Alternativo [ 1 ]: Desistência de cadastro médico IM a. Caso o funcionário não conclua ou desista de incluir o cadastro do médico, o sistema volta ao passo 1. Fluxo de Exceção [ 6 ]: Caso CPF do médico for inválido ou outro dado for preenchido errado. UN a. O sistema emite uma mensagem de erro, caso tenha sido digitado número de CPF inválido. b. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. c. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 06 Para efetuar o cadastro é necessário o preenchimento de todos os dados Quadro 9 - Especificação do caso de uso: cadastrar médico 42 No quadro 10 é mostrado o processo para cadastrar um produto no sistema Satika, representando-se as etapas necessárias para a realização do mesmo bem como, os dados solicitados. Nome Sumário Cadastrar Produto CSU07 Descreve as etapas necessárias para o cadastro de produtos IN AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Necessário os dados dos produtos a serem cadastrados e que este possua um fornecedor, e que o usuário esteja logado no sistema. Pós-condição: Cadastro dos produtos concluído. Fluxo Principal 1. O funcionário seleciona opção de cadastrar produto; 2. O sistema solicita o código do produto para validação; 3. O sistema fornece formulário para preenchimento dos dados do produto (descrição, tipo normal, tipo grife, nome da grife, cor e preço); 4. O funcionário entra com os dados do produto; 5. O funcionário seleciona a opção de concluir o cadastro do produto. 6. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente. 7. O sistema armazena os dados cadastrados. 8. Sistema exibe mensagem de cadastro realizado com sucesso. Fluxo Alternativo [ 1 ]: Desistência de cadastro de produto IM a. Caso o funcionário não conclua ou desista de incluir o cadastro de produto, o sistema volta ao passo 1. UN Fluxo de Exceção [ 6 ]: Caso algum dado preenchido errado b. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. c. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 07 Para efetuar o cadastro do produto é necessário que o fornecedor esteja cadastrado no sistema. Quadro 10 - Especificação do caso de uso: cadastrar produto 43 No quadro 11 é mostrado o processo para registrar uma compra no sistema Satika, descrevendo-se as etapas necessárias para a realização do mesmo bem como, os dados solicitados. O ator só poderá registrar a compra se o fornecedor já for cadastrado no sistema. Nome Sumário Registrar Compra CSU08 Descreve as etapas necessárias para registrar compra com fornecedor IM IN AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Necessário escolher o produto a ser comprado, e que o usuário esteja logado no sistema. Pós-condição: Registro de compra concluído Fluxo Principal 1. O funcionário seleciona opção de registrar compra; 2. Sistema solicita os dados do cliente (CNPJ ou Nome da empresa); 3. O funcionário informa o CNPJ ou o nome da empresa; 4. O sistema fornece formulário para preenchimento dos dados do registro (forma de pagamento, quantidade de parcelas, observações e os produtos); 5. O funcionário entra com os dados do registro de compra; 6. O funcionário seleciona a opção de concluir o registro de compra. 7. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente. 8. O sistema armazena os dados cadastrados. 9. Sistema exibe mensagem de cadastro realizado com sucesso. Fluxo Alternativo [ 1 ]: Desistência de registro de compra a. Caso o funcionário não conclua ou desista de incluir o registro de compra, o sistema volta ao passo 1. UN Fluxo de Exceção [ 2, 6 ]: Caso CNPJ ou o nome do fornecedor for inválido ou outro dado for preenchido errado. a. Caso funcionário entre com o nome ou CNPJ do fornecedor para pesquisar e o fornecedor não é cadastrado, o sistema envia mensagem “fornecedor não cadastrado”; b. Funcionário deverá primeiramente cadastrar o fornecedor. c. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. d. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 08 Só pode registrar compra com fornecedor já cadastrado. Quadro 11 - Especificação do caso de uso: registrar compra O quadro 12 exemplifica o processo para registrar uma venda no sistema Satika, mostrando as etapas necessárias para a realização do mesmo bem 44 como, os dados solicitados. O ator só poderá registrar a venda se o cliente já for cadastrado no sistema. Nome Sumário Registrar Venda CSU09 Descreve as etapas necessárias para registrar uma venda IN AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Necessário que o cliente tenha efetuado uma compra, e que o usuário esteja logado no sistema. Pós-condição: Registro de venda concluído. Fluxo Principal 1. O funcionário seleciona opção de registrar compra; 2. Sistema solicita os dados do cliente (CPF ou Nome do cliente); 3. O funcionário informa o CPF ou o nome do cliente; 4. O sistema fornece formulário para preenchimento dos dados do registro (forma de pagamento, quantidade de parcelas, observações e os produtos); 5. O funcionário entra com os dados do registro de venda; 6. O funcionário seleciona a opção de concluir o registro de venda. 7. O sistema verifica se foram preenchidos todos os campos, se teve algum campo preenchido incorretamente. 8. O sistema armazena os dados cadastrados. 9. Sistema exibe mensagem de cadastro realizado com sucesso. IM Fluxo Alternativo [ 1 ]: Desistência de registro de venda a. Caso o funcionário não conclua ou desista de incluir o registro de venda, o sistema volta ao passo 1. Fluxo de Exceção [ 2, 6 ]: Caso CPF ou o nome do cliente for inválido ou outro dado for preenchido errado. UN a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar e o cliente não é cadastrado, o sistema envia mensagem “cliente não cadastrado”; b. Funcionário deverá primeiramente cadastrar o cliente. c. O sistema emite uma mensagem de erro, caso tenha sido digitado algum dado incorretamente. d. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 9 Só pode registrar venda com fornecedor já cadastrado. Quadro 12 - Especificação do caso de uso: registrar venda 45 Mostra-se no quadro 13, é mostrado o processo para excluir um cliente no sistema Satika, descrevendo as etapas necessárias para a realização do mesmo bem como, os dados solicitados. O ator só poderá excluir um cliente após a pesquisa do mesmo e confirmar a exclusão. Nome Sumário Excluir Cliente CSU10 Descreve as etapas necessárias para excluir cliente IM IN AS Ator primário: Funcionário Ator(es) secundário(s): Cliente Pré-condição: Cliente já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão do cliente concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do cliente pesquisado e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do cliente; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. Fluxo Alternativo [ 3 ]: Desistência da exclusão UN a. Caso o funcionário veja que o cliente exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 3 ]: Caso CPF e nome inválido ou CPF e nome não encontrado a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar e o cliente não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN 10 - Deverá fazer uma pesquisa do cliente antes de excluí-lo. Quadro 13 - Especificação do caso de uso: excluir cliente O quadro 14 exemplifica o processo para excluir um fornecedor no sistema Satika, mostrando as etapas necessárias para a realização do mesmo bem 46 como, os dados solicitados. O ator só poderá excluir um fornecedor após a pesquisa do mesmo e confirmar a exclusão. Nome Sumário Excluir Fornecedor CSU11 Descreve as etapas necessárias para excluir receituário IN AS Ator primário: Funcionário Ator(es) secundário(s): Fornecedor Pré-condição: Fornecedor já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão do fornecedor concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pela Razão Social do fornecedor ou CNPJ; 2. O funcionário entra com a Razão Social ou CNPJ do fornecedor para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do fornecedor pesquisado e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do fornecedor; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. IM Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que o fornecedor exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2 ]: Caso CPF e nome inválido ou CPF e nome não encontrado UN a. Caso funcionário entre com a Razão Social ou CNPJ do fornecedor para pesquisar e o fornecedor não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum fornecedor foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 11 Deverá fazer uma pesquisa do fornecedor antes de excluí-lo. Quadro 14 - Especificação do caso de uso: excluir fornecedor 47 O quadro 15 demonstra o processo para excluir um funcionário no sistema Satika, mostrando as etapas necessárias, bem como os dados solicitados para sua realização. O ator só poderá excluir um funcionário após a pesquisa do mesmo e confirmar a exclusão. Nome Sumário Excluir Funcionário CSU12 Descreve as etapas necessárias para excluir funcionário IM IN AS Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Funcionário já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão do funcionário concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do funcionário ou CPF; 2. O funcionário entra com o nome ou CPF do funcionário para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do funcionário pesquisado e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do funcionário; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. Fluxo Alternativo [ 3 ]: Desistência da exclusão a. Caso o funcionário veja que o funcionário exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 2 ]: Caso CPF e nome inválido ou CPF e nome não encontrado a. Caso funcionário entre com o nome ou CPF do funcionário para pesquisar e o funcionário não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum funcionário foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 12 Deverá ser feito uma pesquisa do funcionário antes de excluí-lo. Quadro 15 - Especificação do caso de uso: excluir funcionário No quadro 16 é mostrado o processo para excluir um médico no sistema Satika, representando as etapas necessárias, bem como os dados 48 solicitados para sua realização. O ator só poderá excluir um médico após a pesquisa do mesmo e confirmar a exclusão. Nome Excluir Médico CSU13 IN AS Sumário Descreve as etapas necessárias para excluir médico Ator primário: Funcionário Ator(es) secundário(s): Médico Pré-condição: Médico já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão do médico concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do médico ou CPF; 2. O funcionário entra com o nome ou CPF do médico para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do médico pesquisado e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do médico; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. IM Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que o médico exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2 ]: Caso CPF e nome inválido ou CPF e nome não encontrado UN a. Caso funcionário entre com o nome ou CPF do médico para pesquisar e o médico não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum médico foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 13 Deverá ser feito uma pesquisa do médico antes de excluí-lo. Quadro 16 - Especificação do caso de uso: excluir médico 49 No quadro 17 demonstra-se o processo para excluir um produto no sistema Satika, mostrando as etapas necessárias, bem como os dados solicitados para sua realização. O ator só poderá excluir um produto após a pesquisa do mesmo e confirmar a exclusão. Nome Sumário Excluir Produto CSU14 Descreve as etapas necessárias para excluir produto IM IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Produto já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão do produto concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo tipo do produto nacional ou de grife; 2. O funcionário seleciona opção do produto para pesquisa e clica em pesquisar; 3. Sistema carrega os dados do produto pesquisado e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do produto; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que o produto exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 2 ]: Caso produto não encontrado a. Caso funcionário selecione o tipo do produto para pesquisar e o produto não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum produto foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 14 Deverá ser feito uma pesquisa do produto antes de excluí-lo. Quadro 17 - Especificação do caso de uso: excluir produto O quadro 18 exemplifica o processo para excluir um registro de venda no sistema Satika, mostrando as etapas necessárias, bem como os dados 50 solicitados para sua realização. O ator só poderá excluir uma venda após a pesquisa do mesmo através de um cliente e confirmar a exclusão. Nome Sumário Excluir Registro de Venda CSU15 Descreve as etapas necessárias para excluir venda realizada IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já realizada, e que o usuário esteja logado no sistema. Pós-condição: Exclusão de venda concluída. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados da venda realizada e exibe para o funcionário; 4. O funcionário seleciona a venda que deseja excluir; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. IM Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que a venda exibida após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2 ]: Caso não houve venda na data escolhida. UN a. Caso funcionário entre com uma data para pesquisar e a data é inválida ou não encontrada, o sistema envia mensagem “Nenhuma venda foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - Deverá ser feita uma pesquisa de venda antes de excluí-la. Quadro 18 - Especificação do caso de uso: excluir registro de venda 51 No quadro 19 é mostrado o processo para excluir uma compra no sistema Satika, representando-se as etapas necessárias, bem como os dados solicitados para sua realização. O ator só poderá excluir uma compra após a pesquisa do mesmo através de um fornecedor e confirmar a exclusão. Nome Sumário Excluir Registro de Compra CSU16 Descreve as etapas necessárias para excluir compra realizada IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Compra já realizada, e que o usuário esteja logado no sistema. Pós-condição: Exclusão de compra concluída. Fluxo Principal 1. O sistema fornece formulário de pesquisa pela data da compra; 2. O funcionário entra com o CNPJ ou razão social para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados da compra realizada na data escolhida e exibe para o funcionário; 4. O funcionário seleciona a compra que deseja excluir; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. IM Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que a compra exibida após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 2 ]: Caso não houve compra na data escolhida. a. Caso funcionário entre com uma data para pesquisar e a data é inválida ou não encontrada, o sistema envia mensagem “Nenhuma compra foi encontrada”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 16 Deverá ser feita uma pesquisa de compra antes de excluí-la. Quadro 19 - Especificação do caso de uso: excluir registro de compra No quadro 20 demonstra-se o processo para excluir um receituário do cliente no sistema Satika, mostrando as etapas necessárias, bem como os dados 52 solicitados para sua realização. O ator só poderá excluir um receituário após a pesquisa do mesmo através de um cliente e confirmar a exclusão. Nome Sumário Excluir Receituário CSU17 Descreve as etapas necessárias para excluir receituário IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Receituário cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Exclusão de receituário concluído. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome ou CPF do cliente; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa do receituário e clica em pesquisar; 3. Sistema carrega os dados do receituário do cliente e exibe para o funcionário; 4. O funcionário seleciona opção de excluir cadastro do receituário; 5. O sistema emite mensagem de confirmação de exclusão; 6. O funcionário confirma a exclusão; 7. O sistema é carregado; 8. O sistema exclui o cadastro do cliente. 9. Sistema exibe mensagem de exclusão realizado com sucesso. IM Fluxo Alternativo [ 3 ]: Desistência de exclusão a. Caso o funcionário veja que o receituário exibido após a pesquisa não é o que ele deseja excluir, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2 ]: Caso CPF ou nome inválido ou não encontrado. UN a. Caso funcionário entre com um CPF ou nome para pesquisar e os dados são inválidos ou não encontrados, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. Regras de Negócio Associadas RN - 17 Deverá ser feita uma pesquisa do receituário antes de excluí-lo. Quadro 20 - Especificação do caso de uso: excluir receituário No quadro 21 exemplifica-se o processo para pesquisar um cliente no sistema Satika, mostrando as etapas necessárias, bem como os dados solicitados para a realização da pesquisa. 53 Nome Sumário Pesquisar Cliente CSU18 Descreve as etapas necessárias para pesquisar cliente Ator primário: Funcionário Ator(es) secundário(s): Cliente Pré-condição: Cliente já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa do cliente concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa; 3. Sistema carrega os dados do cliente pesquisado (nome, CPF, data nascimento, e-mail, telefone, endereço, cidade, estado, CEP)e exibe para o funcionário; AS Fluxo Alternativo [ ]: Fluxo de Exceção [ 1 ]: Caso CPF ou nome não encontrado IN a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar e o cliente não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. IM Regras de Negócio Associadas UN RN - 18 Para realizar uma pesquisa de cliente deverá ser informado nome ou CPF. Quadro 21 - Especificação do caso de uso: pesquisar cliente 54 No quadro 22 mostra-se o processo para pesquisar um fornecedor no sistema Satika, representando-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa do fornecedor. Nome Sumário Pesquisar Fornecedor CSU19 Descreve as etapas necessárias para pesquisar fornecedor Ator primário: Funcionário Ator(es) secundário(s): Fornecedor Pré-condição: Fornecedor já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa do fornecedor concluído Fluxo Principal IM Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pela Razão Social ou CNPJ do fornecedor; 2. O funcionário entra com a Razão Social ou CNPJ do fornecedor para fazer a pesquisa; 3. Sistema carrega os dados do fornecedor pesquisado (Razão Social, CNPJ, inscrição estadual, nome representante, CPF do representante, telefone do representante, e-mail do representante, telefone da empresa, fax, endereço, cidade, estado, CEP) e exibe para o funcionário; Fluxo de Exceção [ 1 ]: Caso CNPJ ou Razão Social não encontrado UN a. Caso funcionário entre com a Razão Social ou CNPJ do fornecedor para pesquisar e o fornecedor não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum fornecedor foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 19 Para realizar uma pesquisa de fornecedor deverá ser informado Razão Social e CNPJ. Quadro 22 - Especificação do caso de uso: pesquisar fornecedor 55 No quadro 23 é mostrado o processo para pesquisar um funcionário no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa. Nome Sumário Pesquisar Funcionário CSU20 Descreve as etapas necessárias para pesquisar funcionário Ator primário: Funcionário Ator(es) secundário(s): Funcionário Pré-condição: Funcionário já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa do funcionário concluído Fluxo Principal Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do funcionário para fazer a pesquisa; 3. Sistema carrega os dados do funcionário pesquisado (Nome, CPF, Carteira de trabalho, data de nascimento, telefone, endereço, cidade, estado, CEP) e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso CPF ou nome não encontrado UN a. Caso funcionário entre com o nome ou CPF do funcionário para pesquisar e o funcionário não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum funcionário foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN 20 - Para realizar uma pesquisa de funcionário deverá ser informado nome ou CPF. Quadro 23 - Especificação do caso de uso: pesquisar funcionário 56 No quadro 24 exemplifica-se o processo para pesquisar um médico no sistema Satika, mostrando-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa. Nome Sumário Pesquisar Médico CSU21 Descreve as etapas necessárias para pesquisar médico Ator primário: Funcionário Ator(es) secundário(s): Médico Pré-condição: Médico já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa do médico concluído Fluxo Principal Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pelo nome do médico ou CPF; 2. O funcionário entra com o nome ou CPF do médico para fazer a pesquisa; 3. Sistema carrega os dados do médico pesquisado (Nome, CRM, CPF, clínica, data nascimento, e-mail, telefone, endereço, cidade, estado, CEP) e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso CPF ou nome não encontrado. UN a. Caso funcionário entre com o nome ou CPF do médico para pesquisar e o médico não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum médico foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 21 Para realizar uma pesquisa de médico deverá ser informado nome ou CPF. Quadro 24 - Especificação do caso de uso: pesquisar médico 57 No quadro 25 demonstra-se o processo para pesquisar um produto no sistema Satika, mostrando-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa. Nome Sumário Pesquisar Produto CSU22 Descreve as etapas necessárias para pesquisar produto Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Produto já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa do produto concluído Fluxo Principal Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pelo tipo do produto nacional ou de grife; 2. O funcionário seleciona opção do produto para pesquisa; 3. Sistema carrega os dados do produto pesquisado (Descrição, tipo, grife, cor e preço) e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso tipo do produto não encontrado. UN a. Caso funcionário entre com o tipo do produto (nacional ou grife) para pesquisar e o produto não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum produto foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 22 Para realizar uma pesquisa de produto deverá ser informado o tipo ou a grife. Quadro 25 - Especificação do caso de uso: pesquisar produto 58 No quadro 26 é mostrado o processo para pesquisar uma venda no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa do registro de venda. Nome Sumário Pesquisar Registro de Venda CSU23 Descreve as etapas necessárias para pesquisar venda realizada Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já realizada, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa da venda concluída. Fluxo Principal Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pela data da venda; 2. O funcionário entra com a data da venda para fazer a pesquisa; 3. Sistema carrega os dados da venda realizada (Cliente, forma de pagamento, quantidade de parcelas, observações, produto vendido, e a data da venda) e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso data da venda não encontrada. UN a. Caso funcionário entre com data da venda para pesquisar e a data não é válida ou não encontrada, o sistema envia mensagem “Nenhuma venda foi encontrada”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 23 Para realizar uma pesquisa da venda deverá ser informada a data da venda. Quadro 26 - Especificação do caso de uso: pesquisar registro de venda 59 No quadro 27 exemplifica-se o processo para pesquisar uma compra no sistema Satika, mostrando-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa do registro de compra. Nome Sumário Pesquisar Registro de Compra CSU24 Descreve as etapas necessárias para pesquisar compra realizada Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Compra já realizada, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa da compra concluída. Fluxo Principal Fluxo Alternativo [ ]: IN AS 1. O sistema fornece formulário de pesquisa pela data da compra; 2. O funcionário entra com a data da compra para fazer a pesquisa; 3. Sistema carrega os dados da compra realizada (Fornecedor, forma de pagamento, quantidade de parcelas, observações, produto e data da venda) e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso data da compra não encontrada. UN a. Caso funcionário entre com data da compra para pesquisar e a data não é válida ou não encontrada, o sistema envia mensagem “Nenhuma compra foi encontrada”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 24 Para realizar uma pesquisa da compra deverá ser informada a data da compra. Quadro 27 - Especificação do caso de uso: pesquisar registro de compra 60 No quadro 28 é mostrado o processo para pesquisar um receituário do cliente no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para a realização da pesquisa do receituário. Nome Sumário Pesquisar Receituário CSU25 Descreve as etapas necessárias para pesquisar receituário Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já realizada, e que o usuário esteja logado no sistema. Pós-condição: Pesquisa da venda concluída. Fluxo Principal IN Fluxo Alternativo [ ]: AS 1. O sistema fornece formulário de pesquisa pelo nome ou CPF do cliente; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa do receituário; 3. Sistema carrega os dados do receituário do cliente e exibe para o funcionário; IM Fluxo de Exceção [ 1 ]: Caso CPF ou nome inválido ou não encontrado a. Caso funcionário entre com um CPF ou nome para pesquisar e os dados são inválidos ou não encontrados, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas UN RN - 25 Para realizar uma pesquisa do receituário deverá ser informado nome ou CPF do cliente. Quadro 28 - Especificação do caso de uso: pesquisar receituário 61 No quadro 29 é mostrado o processo para alterar dados de um cliente no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar um cliente após a pesquisa do mesmo e confirmar a alteração. Nome Alterar Dados Clientes CSU26 IM IN AS Sumário Descreve as etapas necessárias para alterar dados de um cliente Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Cliente já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Alteração do cliente concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do cliente (Nome, CPF, CRM, clínica, data de nascimento, e-mail, telefone, endereço, cidade, estado, CEP) pesquisado e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. Fluxo Alternativo [ ]: Desistência de alteração a. Caso o funcionário veja que o cliente exibido após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 2, 6 ]: Caso CPF e nome inválido ou CPF e nome não encontrado, ou a alteração seja feita com dados incorretos a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar e o cliente não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 26 Para alterar dados do cliente deverá ser feito antes uma pesquisa do mesmo. Quadro 29 - Especificação do caso de uso: alterar dados cliente 62 No quadro 30 exemplifica-se o processo para alterar dados de um fornecedor no sistema Satika, mostrando-se as etapas necessárias para a realização, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar um fornecedor após a pesquisa do mesmo e confirmar a alteração. Nome Alterar Dados Fornecedor CSU27 IM IN AS Sumário Descreve as etapas necessárias para alterar dados do fornecedor Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Fornecedor já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Alteração do fornecedor concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo Razão Social do fornecedor ou CNPJ; 2. O funcionário entra com a Razão Social ou CNPJ do cliente para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do fornecedor (Razão Social, Inscrição Estadual, CNPJ, telefone, fax, endereço, cidade, CEP, contato da empresa, e-mail) pesquisado e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. Fluxo Alternativo [ ]: Desistência de alteração a. Caso o funcionário veja que o fornecedor exibido após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2, 6 ]: Caso CPF e nome inválido ou CPF e nome não encontrado, ou a alteração seja feita com dados incorretos UN a. Caso funcionário entre com a Razão Social ou CNPJ do fornecedor para pesquisar e o fornecedor não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum fornecedor foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 27 Para alterar dados do fornecedor deverá ser feito antes uma pesquisa do mesmo. Quadro 30 - Especificação do caso de uso: alterar dados fornecedor No quadro 31 é mostrado o processo para alterar dados de um funcionário no sistema Satika, descrevendo-se as etapas necessárias, bem como os 63 dados solicitados para realizar a alteração. O ator só poderá alterar um funcionário após a pesquisa do mesmo e confirmar a alteração. Nome Alterar Dados Funcionário CSU28 IN AS Sumário Descreve as etapas necessárias para alterar dados do funcionário Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Funcionário já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Alteração do funcionário concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do funcionário ou CPF; 2. O funcionário entra com o nome ou CPF do funcionário para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do funcionário (Nome, CPF, Carteira de trabalho, data de nascimento, telefone, endereço, cidade, estado, CEP, usuário e senha) pesquisado e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. IM Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que o funcionário exibido após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 2, 6 ]: Caso CPF e nome inválido ou CPF e nome não encontrado, ou a alteração seja feita com dados incorretos UN a. Caso funcionário entre com o nome ou CPF do funcionário para pesquisar e o funcionário não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum funcionário foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 28 Para alterar dados do funcionário deverá ser feito antes uma pesquisa do mesmo. Quadro 31 - Especificação do caso de uso: alterar dados funcionário 64 No quadro 32 demonstra-se o processo para alterar dados de um médico no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar um médico após a pesquisa do mesmo e confirmar a alteração. Nome Sumário Alterar Dados Médico CSU29 Descreve as etapas necessárias para alterar dados do médico IM IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Médico já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Alteração do médico concluído Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do médico ou CPF; 2. O funcionário entra com o nome ou CPF do médico para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do médico (Nome, CPF, CRM, clínica, data de nascimento, e-mail, telefone, endereço, cidade, estado, CEP) pesquisado e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que o médico exibido após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 2, 6 ]: Caso CPF e nome inválido ou CPF e nome não encontrado, ou a alteração seja feita com dados incorretos a. Caso funcionário entre com o nome ou CPF do médico para pesquisar e o médico não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum médico foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 2. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 3. Regras de Negócio Associadas RN - 29 Para alterar dados do médico deverá ser feito antes uma pesquisa do mesmo. Quadro 32 - Especificação do caso de uso: alterar dados médico 65 No quadro 33 é mostrado o processo para alterar dados de um produto no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar um produto após a pesquisa do mesmo e confirmar a alteração. Nome Sumário Alterar Dados Produto CSU30 Descreve as etapas necessárias para alterar dados do produto IM IN AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Produto já cadastrado, e que o usuário esteja logado no sistema. Pós-condição: Alteração do produto concluído. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo tipo (nacional ou grife) do produto; 2. O funcionário entra com o tipo do produto para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados do produto (Descrição, tipo, grife, cor, preço) pesquisado e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que o produto exibido após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. UN Fluxo de Exceção [ 1, 6 ]: Caso tipo do produto inválido ou não encontrado, ou a alteração seja feita com dados incorretos a. Caso funcionário entre com o tipo do produto para pesquisar e o produto não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum produto foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 4. Regras de Negócio Associadas RN - 30 Para alterar dados do produto deverá ser feito antes uma pesquisa do mesmo. Quadro 33 - Especificação do caso de uso: alterar dados produto No quadro 34 exemplifica-se o processo para alterar dados de uma venda no sistema Satika, descrevendo-se as etapas necessárias, bem como os 66 dados solicitados para realizar a alteração. O ator só poderá alterar uma venda após a pesquisa através do cliente e confirmar a alteração. Nome Alterar Venda CSU31 IN AS Sumário Descreve as etapas necessárias para alterar dados da venda Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já cadastrada, e que o usuário esteja logado no sistema. Pós-condição: Alteração da venda concluído. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome do cliente ou CPF; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados da venda (Cliente, forma de pagamento, quantidade de parcelas, observações, produto vendido, e a data da venda) pesquisados e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. IM Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que a venda exibida após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 1, 6 ]: Caso CPF ou nome inválidos, ou a alteração seja feita com dados incorretos UN a. Caso funcionário entre com o nome ou CPF do cliente para pesquisar a venda não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum produto foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 4. Regras de Negócio Associadas RN - 31 Para alterar dados da venda deverá ser feito antes uma pesquisa do mesmo. Quadro 34 - Especificação do caso de uso: alterar venda No quadro 35 é mostrado o processo para alterar dados de uma compra no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar uma compra após a pesquisa através do fornecedor e confirmar a alteração. 67 Nome Alterar Compra CSU32 IN AS Sumário Descreve as etapas necessárias para alterar dados da compra Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Compra já cadastrada, e que o usuário esteja logado no sistema. Pós-condição: Alteração da compra concluída. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo CNPJ ou razão social do fornecedor; 2. O funcionário entra com o CNPJ ou razão social do fornecedor para fazer a pesquisa e clica em pesquisar; 3. Sistema carrega os dados da venda (Fornecedor, forma de pagamento, quantidade de parcelas, observações, produto e data da venda) pesquisados e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que a venda exibida após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. IM Fluxo de Exceção [ 1, 6 ]: Caso CNPJ ou razão social, ou a alteração seja feita com dados incorretos UN a. Caso funcionário entre com o CNPJ ou razão social do fornecedor para pesquisar a compra não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum produto foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 4. Regras de Negócio Associadas RN - 32 Para alterar dados da compra deverá ser feito antes uma pesquisa do mesmo. Quadro 35 - Especificação do caso de uso: alterar compra No quadro 36 é demonstrado o processo para alterar dados de um receituário no sistema Satika, descrevendo-se as etapas necessárias, bem como os dados solicitados para realizar a alteração. O ator só poderá alterar um receituário após a pesquisa através do cliente e confirmar a alteração. 68 Nome Alterar Receituário CSU33 AS Sumário Descreve as etapas necessárias para alterar receituário Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Compra já cadastrada, e que o usuário esteja logado no sistema. Pós-condição: Alteração da compra concluída. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo nome ou CPF do cliente; 2. O funcionário entra com o nome ou CPF do cliente para fazer a pesquisa do receituário e clica em pesquisar; 3. Sistema carrega os dados do receituário (cliente, médico, data da consulta, grau esquerdo, grau direito, eixo, prisma, estrios, cilíndrica, naso pupilar e lente) pesquisados e exibe para o funcionário. 5. O funcionário escolhe o dado que deseja fazer a alteração; 6. O sistema emite mensagem de confirmação de alteração; 7. O funcionário confirma alteração; 8. O sistema é carregado; 9. O sistema completa a alteração do dado. 10. O sistema exibe mensagem de alteração concluída com sucesso. IN Fluxo Alternativo [ ]: Desistência da alteração a. Caso o funcionário veja que o receituário exibida após a pesquisa não é o que ele deseja alterar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 1, 6 ]: Caso CPF ou nome do cliente inválidos, ou a alteração seja feita com dados incorretos UN IM a. Caso funcionário entre com o CPF ou nome do cliente para pesquisar o receituário, não é cadastrado ou não encontrado, o sistema envia mensagem “Nenhum cliente foi encontrado”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. d. Caso o funcionário digite algum dado incorreto para fazer a alteração, o sistema envia uma mensagem de erro, “Dado digitado incorretamente”. e. O caso de uso retorna ao passo 4. Regras de Negócio Associadas RN - 33 Para alterar dados do receituário deverá ser feito antes uma pesquisa do mesmo. Quadro 36 - Detalhe do caso de uso alterar receituário No quadro 37 é demonstrado o processo para gerar o relatório melhores clientes no sistema Satika, isto é, clientes que efetuaram as maiores compras na empresa. O quadro exemplifica as etapas necessárias, bem como os dados solicitados para sua realização. O ator só poderá gerar um relatório após informar o período desejado para consulta. O sistema fornece os dados dos clientes 69 que mais consumiram na empresa. O funcionário pode imprimir o relatório ou apenas visualizar. Nome Sumário Relatório Melhores Clientes CSU34 Descreve as etapas necessárias para gerar relatório de clientes que mais efetuaram compras na empresa. AS Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já cadastrada, e que o usuário esteja logado no sistema. Pós-condição: Relatório melhores clientes exibido. Fluxo Principal 1. O sistema fornece formulário de pesquisa pelo período de venda para consulta; 2. O funcionário entra com o período de venda para fazer a pesquisa; 3. Sistema carrega os dados das vendas com os clientes que mais efetuaram compras, em ordem crescente e exibe para o funcionário. 4. O funcionário imprimi relatório. 5. O sistema exibe mensagem de impressão concluída com sucesso. IN Fluxo Alternativo [ ]: Desistência na geração do relatório a. Caso o funcionário veja que o período exibido após a pesquisa não é o que ele deseja visualizar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 1, 6 ]: Caso data do período inválidos. IM a. Caso funcionário entre com a data do período para pesquisar as vendas, não é válido ou não encontrado, o sistema envia mensagem “Nenhuma venda foi encontrada”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas UN RN - 34 Para gerar relatório Melhores Clientes é necessário informar o período de venda a ser pesquisado. Quadro 37 - Detalhe do caso de uso relatório melhores clientes No quadro 38 é exemplificado o processo para gerar o relatório de produtos mais vendidos no sistema Satika, mostrando as etapas necessárias, bem como os dados solicitados para sua realização. O ator só poderá gerar um relatório após informar o período de venda desejado para consulta. O sistema fornece os dados dos produtos que mais foram vendidos na empresa. O funcionário pode imprimir relatório ou apenas visualizar. 70 Nome Sumário Relatório Produtos Mais Vendidos CSU35 Descreve as etapas necessárias para gerar relatório de produtos mais vendidos na empresa Ator primário: Funcionário Ator(es) secundário(s): -Pré-condição: Venda já cadastrada, e que o usuário esteja logado no sistema. Pós-condição: Relatório de produtos mais vendidos. Fluxo Principal AS 1. O sistema fornece formulário de pesquisa pelo período de venda para consulta; 2. O funcionário entra com o período de venda para fazer a pesquisa; 3. Sistema carrega os dados das vendas com os produtos mais vendidos de forma crescente e exibe para o funcionário. 4. O funcionário imprimi relatório. 10. O sistema exibe mensagem de impressão concluída com sucesso. IN Fluxo Alternativo [ ]: Desistência na geração do relatório. a. Caso o funcionário veja que o período exibido após a pesquisa não é o que ele deseja visualizar, o sistema fornece opção de voltar para fazer uma nova pesquisa. Fluxo de Exceção [ 1, 6 ]: Caso data do período inválidos. IM a. Caso funcionário entre com a data do período para pesquisar as vendas, não é válido ou não encontrado, o sistema envia mensagem “Nenhuma venda foi encontrada”; b. Funcionário deverá fazer uma nova pesquisa. c. O caso de uso retorna ao passo 1. Regras de Negócio Associadas RN - 35 Para gerar relatório Produtos mais Vendidos é necessário informar o período de venda a ser pesquisado. UN Quadro 38 - Detalhe do caso de uso relatórios produtos mais vendidos 3.3 Diagramas de Seqüência O diagrama de seqüência é uma das ferramentas da UML usadas para representar de forma visual interações entre objetos de um cenário, realizadas através de operações e métodos. Mostra a seqüência explícita de mensagens para ilustrar as realizações de casos de uso, isto é, mostra como os objetos interagem para executar o comportamento total ou parcial de um caso de uso. Possui um conjunto de elementos gráficos que descrevem o comportamento de um ponto de 71 vista interno do sistema. Os diagramas de seqüência ajudam a documentar e a entender os aspectos dinâmicos do sistema de software. Eles descrevem a seqüência de mensagens enviadas e recebidas pelos objetos que participam em um caso de uso. É utilizado para modelar o cenário de um caso de uso, modelando a troca de mensagens entre os objetos. No sistema Satika, foram desenvolvidos vários diagramas de seqüência para exibir de forma cronológica, o que o sistema internamente deverá realizar de acordo com o diagrama de caso de uso já realizado. AS O diagrama de seqüência pode ser construído para o fluxo principal do caso de uso e eventualmente também para alguns cenários com fluxos alternativos. O importante nessa fase não é ter o diagrama em si, mas identificar corretamente que operações e consultas de sistema são necessárias. A existência dos diagramas completos com o fluxo de informações entre os atores e do sistema para os atores será interessante na fase do projeto da interface, mas, por enquanto, na análise, é suficiente saber quais são as informações repassadas dos atores para o sistema e vice-versa (WAZLAWICK, 2004, v. 4, p. 95). IN O diagrama de seqüência é uma ferramenta importante no projeto de sistemas. Embora a elaboração dos diagramas possa consumir muito tempo, eles oferecem as bases para a definição de uma boa parte do projeto como: os relacionamentos necessários entre as classes, métodos e atributos das classes e IM comportamento dinâmico dos objetos. A seguir serão mostrados os diagramas de seqüência, para exemplificar os processos internos do sistema através dos casos de uso do sistema Satika. UN A figura 6 mostra o procedimento interno para efetuar o login no sistema Satika. O sistema valida o usuário e a senha do usuário. 72 AS Figura 6 - Diagrama de seqüência efetuar login A figura 7 mostra o procedimento interno para realizar o cadastro de um cliente no sistema Satika, descrevendo atores, telas, classes, objetos e a troca UN IM IN de mensagens entre eles. Figura 7 - Diagrama de seqüência cadastrar cliente 73 O cadastro de um funcionário deverá ser realizado por outro funcionário que já seja cadastrado no sistema Satika. Além da entrada de dados como nome, CPF, número da carteira de trabalho, endereço, telefone, deverá também ser cadastrado o usuário e a senha deste novo funcionário, para que tenha acesso ao sistema. O sistema valida além do código do cliente, o CPF do funcionário, bem como as informações, se estão todas preenchidas corretamente ou se está faltando algum dado. A figura 8, detalha o processo de cadastro do UN IM IN AS funcionário. Figura 8 - Diagrama de seqüência cadastrar funcionário 74 Para realizar o cadastro de um fornecedor de produtos para a empresa é necessário que sejam preenchidos os dados do mesmo. O cadastro é realizado pelo funcionário. O sistema valida o código do fornecedor e também o número do CNPJ. A figura 9 demonstra o processo para a realização do cadastro do fornecedor UN IM IN AS no sistema Satika. Figura 9 - Diagrama de seqüência cadastrar fornecedor 75 A figura 10 exemplifica os processos que o sistema realiza para cadastrar um médico. O sistema Satika primeiramente valida o código do médico passado pelo funcionário e só então solicita que os outros dados do médico sejam UN IM IN AS preenchidos. Figura 10 - Diagrama de seqüência cadastrar médico 76 A figura 11 abaixo descreve o processo para cadastrar um produto. O sistema valida o código do produto e solicita o preenchimento dos dados do produto UN IM IN AS para a realização do cadastro. Figura 11 - Diagrama de seqüência cadastrar produto 77 Abaixo, pode-se ver na figura 12, o processo para o cadastro de um receituário. Para isso é necessário que o usuário do sistema faça primeiramente uma busca no registro pelo nome ou CPF do cliente para a verificação do cadastro. Assim o sistema carregará os dados do cliente. Posteriormente, é realizada a consulta do médico no registro para a verificação do cadastro, e assim o sistema carrega os dados do médico para o cadastro do receituário. Caso o cliente ou o médico ainda não estejam cadastrados, o sistema emite uma mensagem informando UN IM IN AS que não consta nenhum registro com os parâmetros informados. Figura 12 - Diagrama de seqüência cadastrar receituário 78 A figura 13 abaixo exemplifica o processo de registrar no sistema uma venda que a empresa realizou. Para isso, é necessário que o usuário realize uma busca com o nome ou CPF do cliente que está adquirindo um produto, para verificar se o cliente já está cadastrado no sistema. O segundo passo é preencher os dados UN IM IN AS solicitados para a conclusão do registro da venda. Figura 13 - Diagrama de seqüência registrar venda 79 Para registrar uma compra de produtos junto ao fornecedor, é necessário que o usuário realize primeiramente uma busca para verificar se o fornecedor já é cadastrado no sistema. Após a busca, o usuário poderá concluir o UN IM IN AS registro informando os dados solicitados, conforme a figura 14 abaixo. Figura 14 - Diagrama de seqüência registrar compra 80 Para efetuar alguma alteração nos dados do cliente, o usuário deverá realizar a busca deste cliente no sistema. Se o cliente for encontrado, o sistema carrega os dados do cliente, e assim poderá ser feita a alteração do dado pelo usuário. A figura 15 exemplifica o processo para fazer uma alteração em algum dado UN IM IN AS do cliente. Figura 15 - Diagrama de seqüência alterar cliente 81 A figura 16 abaixo demonstra o processo para alterar dados de um funcionário. Para que isso seja feito, o funcionário deverá fazer uma busca para ver se o funcionário já é cadastrado no sistema. Se for, o sistema carrega os dados do UN IM IN AS funcionário, e assim poderá ser feita pelo usuário a alteração do dado que desejar. Figura 16 - Diagrama de seqüência alterar funcionário 82 UN IM IN AS A figura 17 abaixo demonstra o processo para alterar dados de um fornecedor. Para que isso seja feito, o fornecedor deverá fazer uma busca para verificar se o fornecedor já é cadastrado no sistema. Caso seja, o sistema carrega os dados, e assim poderá ser feita pelo usuário a alteração do dado que desejar. Figura 17 - Diagrama de seqüência alterar fornecedor 83 Para realizar alteração de dados no cadastro de um médico, primeiramente o usuário deverá realizar uma busca pelo nome ou CPF do médico para verificar se o mesmo se encontra cadastrado no sistema. O sistema carrega os dados do médico e assim o usuário poderá fazer alguma alteração no cadastro. A UN IM IN AS figura 18 mostra o processo de alteração de dados no cadastro do médico. Figura 18 - Diagrama de seqüência alterar médico 84 Para realizar o processo de alteração de algum produto, o funcionário deverá fazer uma busca pelo produto que deseja alterar. Para isso é necessário que o mesmo informe o tipo de produto a ser buscado. Se houver esse produto cadastrado, o sistema carrega os dados e assim fornece a opção de alterar o dado que o funcionário desejar. A figura 19 abaixo demonstra os passos internos do UN IM IN AS sistema para realizar a alteração do produto. Figura 19 - Diagrama de seqüência alterar produto 85 Para realizar o processo de alteração de uma venda, o funcionário deverá fazer uma busca pelo nome ou CPF do cliente que foi feita a venda. Se a venda já estiver registrada, o sistema carrega os dados da venda e assim fornece a opção de alterar o dado que o funcionário desejar. A figura 20 abaixo demonstra os UN IM IN AS passos internos do sistema para realizar a alteração de uma venda já realizada. Figura 20 - Diagrama de seqüência alterar venda 86 A figura 21 abaixo demonstra os passos internos do sistema para realizar a alteração de uma compra já realizada. Para realizar o processo de alteração de uma compra, o funcionário deverá fazer uma busca pelo CNPJ ou razão social do fornecedor que foi feita a compra. Se a compra já estiver registrada, o sistema carrega os dados da compra e assim fornece a opção de alterar o dado UN IM IN AS que o funcionário desejar. Figura 21 - Diagrama de seqüência alterar compra 87 A figura 22 abaixo demonstra os passos internos do sistema para realizar a alteração de um receituário já cadastrado. Para realizar o processo de alteração de um receituário, o funcionário deverá fazer uma busca pelo nome ou CPF do cliente que foi feito o cadastro. Se receituário já estiver cadastrado, o sistema carrega os dados do receituário e assim fornece a opção de alterar o dado UN IM IN AS que o funcionário desejar. Figura 22 - Diagrama de seqüência alterar receituário 88 Para realizar a exclusão de um cliente no cadastro do sistema, o funcionário deverá primeiramente informar qual cliente quer excluir fazendo uma pesquisa, informando o nome ou CPF do cliente a ser excluído. Logo após, o sistema carrega os dados do cliente, o funcionário seleciona e confirma a opção de excluir cadastro do cliente. A figura 23 mostra o processo interno do sistema para UN IM IN AS efetuar a exclusão do cadastro. Figura 23 - Diagrama de seqüência excluir cliente 89 A figura 24 mostra o processo interno do sistema para efetuar a exclusão do cadastro de um funcionário. Para realizar esta exclusão, o usuário deverá primeiramente informar qual funcionário quer excluir fazendo uma pesquisa, informando o nome ou CPF do funcionário a ser excluído. Logo após, o sistema carrega os dados do funcionário pesquisado, o usuário seleciona e confirma a opção UN IM IN AS de excluir cadastro. Figura 24 - Diagrama de seqüência excluir funcionário 90 A figura 25 mostra o processo interno do sistema para efetuar a exclusão do cadastro de um fornecedor. Para isto, o usuário deverá primeiramente informar qual fornecedor deseja excluir fazendo uma pesquisa, informando o CNPJ ou razão social do fornecedor a ser excluído. Logo após, o sistema carrega os dados do fornecedor pesquisado, o usuário seleciona e confirma a opção de excluir UN IM IN AS cadastro. Figura 25 - Diagrama de seqüência excluir fornecedor 91 A figura 26 abaixo demonstra o processo de iteração do sistema para realizar exclusão do cadastro do médico no sistema. Para realizar esta exclusão, o usuário deverá primeiramente informar qual médico deseja excluir fazendo uma pesquisa, informando o nome ou CPF do médico a ser excluído. Logo após, o sistema carrega os dados do médico pesquisado, o usuário seleciona e confirma a UN IM IN AS opção de excluir cadastro. Figura 26 - Diagrama de seqüência excluir médico 92 A figura 27 abaixo demonstra o processo de iteração do sistema para realizar exclusão do cadastro do produto no sistema. Para realizar a exclusão, o usuário deverá primeiramente informar qual produto deseja excluir fazendo uma pesquisa, informando o tipo do produto a ser excluído. Logo após, o sistema carrega os dados do produto pesquisado, o usuário seleciona e confirma a opção de excluir UN IM IN AS cadastro. Figura 27 - Diagrama de seqüência excluir produto 93 Para excluir um registro de venda, é necessário que o usuário informe qual venda deseje excluir, os parâmetros para fazer essa busca são o nome ou o CPF do cliente que compraram na empresa. O sistema então carrega os dados da venda e assim o usuário poderá excluir o cadastro. Abaixo a figura 28 mostra o UN IM IN AS processo de exclusão de venda. Figura 28 - Diagrama de seqüência Excluir Venda 94 Para excluir um registro de compra, é necessário que o usuário informe qual compra deseje excluir; os parâmetros para fazer essa busca são o CNPJ ou a razão social do fornecedor. O sistema então carrega os dados da compra e assim o usuário poderá excluir o cadastro. Abaixo a figura 29 mostra o processo de exclusão UN IM IN AS de compra. Figura 29 - Diagrama de seqüência Excluir Compra 95 A figura 30 é o diagrama de seqüência que mostra a iteração do UN IM IN AS sistema para excluir um receituário do cadastro no sistema. Figura 30 - Diagrama de seqüência Excluir Receituário 96 A figura 31 abaixo é um diagrama de seqüência que mostra o processo para fazer uma pesquisa de um cadastro do cliente no sistema Satika, bem como os UN IM IN AS dados solicitados para a realização do mesmo e exibi-los na tela. Figura 31 - Diagrama de seqüência Pesquisar Cliente 97 A figura 32 mostra o processo para realizar uma pesquisa do cadastro do funcionário no sistema Satika, informando os parâmetros de pesquisa e exibi-lo UN IM IN AS na tela. Figura 32 - Diagrama de seqüência Pesquisar Funcionário 98 A figura 33 representa o diagrama de seqüência que mostra o processo para realizar uma pesquisa do cadastro do fornecedor no sistema Satika, UN IM IN AS bem como os dados solicitados para a realização do mesmo e exibi-lo na tela. Figura 33 - Diagrama de seqüência Pesquisar Fornecedor 99 Segue abaixo a figura 34 que demonstra o diagrama de seqüência que exibe passo a passo o processo para a pesquisa do cadastro de um médico no sistema Satika, bem como os dados solicitados para a realização do mesmo e exibi- UN IM IN AS lo na tela. Figura 34 - Diagrama de seqüência Pesquisar Médico 100 A figura 35 exibe o diagrama de seqüência que mostra o processo passo a passo para realizar uma pesquisa do cadastro do produto no sistema IM IN AS Satika, informando os parâmetros de pesquisa e exibi-lo na tela. UN Figura 35 - Diagrama de seqüência Pesquisar Produto 101 A figura 36 demonstra o diagrama de seqüência que mostra passo a passo o processo para a pesquisa do registro de uma venda no sistema Satika, bem IM IN AS como os dados solicitados para a realização do mesmo e exibi-lo na tela. UN Figura 36 - Diagrama de seqüência Pesquisar Venda 102 Segue abaixo a figura 37 é o diagrama de seqüência que demonstra passo a passo o processo para a pesquisa do registro de uma compra no sistema IM IN AS Satika, informando os parâmetros de pesquisa e exibi-lo na tela. UN Figura 37 - Diagrama de seqüência Pesquisar Compra 103 A figura 38 apresenta o diagrama de seqüência que mostra o processo passo a passo para realizar uma pesquisa do cadastro do receituário no sistema Satika, bem como os dados solicitados para a realização do mesmo e exibi-lo na UN IM IN AS tela. Figura 38 - Diagrama de seqüência Pesquisar Receituário 104 A figura 39 é um diagrama de seqüência que demonstra o processo para gerar um relatório de melhores clientes. É um relatório que informa ao usuário uma lista dos clientes que efetuaram as maiores compras na empresa, podendo imprimir ou apenas visualizar na tela do monitor. Este relatório serve para que o usuário possa de alguma forma, utilizar a informação para possíveis malas diretas IM IN AS ou alguns benefícios ao cliente. UN Figura 39 - Diagrama de seqüência Relatório Melhores Clientes 105 A figura 40 é um diagrama de seqüência que demonstra o processo para gerar um relatório de produtos mais vendidos. É um relatório que informa ao usuário uma lista dos produtos que mais foram vendidos na empresa, podendo imprimir ou apenas visualizar na tela do monitor. Este relatório serve para que o IM IN AS usuário possa de alguma forma, utilizar a informação para supervisores da empresa. UN Figura 40 - Diagrama de seqüência Relatório Produtos Mais Vendidos 106 3.4 Classes de Análise As classes de análise são usadas para obter as principais classes que compõem o projeto, é onde se tem a primeira representação estática dos casos de uso. Representam um primeiro modelo conceitual para os elementos que possuam responsabilidades e comportamento. Quando se fala em identificação das classes que irão pertencer a um diagrama de classes, o objetivo na verdade é identificar quais objetos farão parte do sistema. A identificação de classes é dividida em duas etapas. Primeiramente AS são identificadas as classes candidatas, são entidades que podem a vir tornarem-se classes. A segunda etapa é a mais complicada, é realizada a identificação das possíveis classes do sistema, o problema é eliminar desse conjunto o que não é necessário. Na maioria dos casos, ele omite o detalhamento de um modelo de IN design, a fim de fornecer uma visão geral da funcionalidade do sistema. No fim, o modelo de análise se converte no modelo de design e as classes de análise evoluem diretamente para elementos do modelo de design. “Uma boa modelagem de classes deve separar a informação contida no IM domínio de negócio (objetos de entidade), as várias maneiras de visualizar uma informação (objetos de fronteira) e a lógica da aplicação (objeto de controle) (BEZERRA, 2002, v.9, p. 115). Algumas classes foram identificadas no início do projeto, a seguir será UN detalhada a responsabilidade de cada classe assim como seus atributos detectados. As classes dos quais o sistema é composto foi dividido de acordo com suas responsabilidades em: classes de entidade, classes de controle e classes de fronteira. 3.4.1 Classe de Fronteira A classe de fronteira é responsável por apresentar ao ator, os resultados de uma interação dos objetos internos, em algo que possa ser entendido 107 pelo ator. As Classes de Fronteira são as classes responsáveis em fazer a interface com o usuário, ou seja, são as classes que tem “contato” com o usuário do sistema. As classes de fronteira têm tipicamente as seguintes responsabilidades de fazer: Informar aos objetos de controle os eventos gerados externamente ao sistema; Informar aos atores o resultado de interações entre os objetos internos. As classes de fronteira isolam o núcleo da aplicação do mundo exterior, evitando que mudanças na interface com o mundo exterior afetem outras AS classes da aplicação. Portanto, devem ser consideradas somente como informações externas que são recebidas pelo sistema e as informações que são enviadas para o exterior, sendo os detalhes de interface ignorados. No caso do sistema Satika, as classes de fronteira foram IN desenvolvidas utilizando a tecnologia JSP (Java Server Pages), são as responsáveis em fazer a interação “usuário x sistema”. IM 3.4.2 Classe de Controle As classes de controle são responsáveis pela comunicação entre as classes de fronteira e as classes de entidade, servem para controlar a lógica de UN execução correspondente ao caso de uso. Essas classes decidem o que, e quando ocorre um evento externo relevante. Tipicamente, uma classe de controle possui um comportamento relacionado a transações, ou seja, um serviço que separa os objetos de entidade a partir dos objetos de fronteira. Basicamente, uma classe de controle, é uma classe que modela o comportamento de controle especifico para uma ou mais Casos de Uso. Segundo Bezerra (2002), as responsabilidades da classe de controle são: Fazer monitoramento, com o objetivo de responder a eventos externos oriundos da classe de fronteira. 108 Garantir que as regras de negócios estão sendo cumpridas corretamente. Garantir a realização de um caso de uso através do envio de mensagens às classes de fronteira e a classes de entidade. 3.4.3 Classe de Entidade A classe de entidade representa os conceitos do domínio do negócio, os conceitos principais da aplicação, e as fontes de informação que a aplicação AS manipula. É uma classe que modela objetos cuja informação e o comportamento associado são, de maneira geral, persistentes, isto é, serão armazenados num arquivo ou banco de dados. Os atores do sistema não possuem acesso direto a classe de entidade, portanto se comunicam com o exterior por intermédio de outras IN classes. Segundo Bezerra (2002), algumas responsabilidades da classe de entidade são: Informar os valores dos atributos a classe de entidade; IM Realizar funções simples, alguns métodos, com a ajuda de outras classes de entidade associadas através de agregações; UN 3.4.4 Classes do Projeto Para o desenvolvimento das classes do projeto, foi necessária a separação das mesmas em pacotes. Cada pacote contém um conjunto de outras classes que pertencem a esse pacote. É onde se encontra as classes de fronteira, de controle e de entidade. A figura 41 descreve os pacotes de classes pertencentes ao system Satika. IN AS 109 IM Figura 41 - Diagrama de pacotes A figura 41 exemplifica as classes de análise que possui o pacote login e seus relacionamentos. A classe de fronteira neste caso é a Tela Login. Nela estão contidos os UN atributos e métodos necessários para realizar o login no sistema Satika. Somente após o login é possível ter acesso ao restante do sistema. A classe Efetuar Login é a classe de controle. Nessa classe estão contidas as funções responsáveis por fazer a comunicação entre a classe de fronteira e a classe de entidade, possuindo métodos específicos para tratar essa comunicação. Na figura 42 esta descrita os métodos que compõem essas classes. A classe de entidade esta representada pela classe Usuário, que é responsável por armazenar as informações vindas da classe de fronteira, bem como os métodos para realização da mesma. A classe Funcionário representada na figura usa a classe Login, pois somente o funcionário terá acesso autorizado para usar o sistema Satika, conforme demonstrado na figura 42. UN IM IN AS 110 Figura 42 - Classe de análise pacote login A figura 43 mostra os atributos, os métodos e os relacionamentos entre as classes de fronteira, de controle e entidade do pacote Cliente. As classes de fronteira estão representadas na figura com os nomes de Tela Cliente e de Tela Pesquisar Cliente, onde é possível visualizar o resultado da iteração do usuário e o sistema, contém os atributos e os métodos para buscar esses atributos. As classes de controle do sistema Satika são: Cadastrar Cliente, Alterar Cliente, Excluir Cliente 111 e Pesquisar Cliente. Essas classes são responsáveis pela comunicação entre as classes de fronteira e a classe de entidade. Essas classes possuem métodos específicos para tratar as requisições, conforme descrito na figura. A classe de entidade esta representada pela Classe Cliente, onde serão registradas as alterações realizadas pelo usuário. Fazem parte também as classes que usam esse pacote, como a classe Receituário, classe Vendam, classe Médico, conforme UN IM IN AS demonstrado na figura 43. Figura 43 - Diagrama de análise cliente 112 A figura 44 exemplifica as classes de análise que possui o pacote funcionário e seus relacionamentos. As classes de fronteira neste caso são: Tela Funcionário e Tela Pesquisar Funcionário. Nelas estão contidas os atributos necessários para essa classe e seus métodos para obter os dados do funcionário. Também são responsáveis por exibir na tela os dados do funcionário pesquisado. As classes de controle são: Cadastrar Funcionário, Alterar Funcionário, Excluir Funcionário e Pesquisar Funcionário. Nessas classes estão contidas as funções responsáveis por fazer a comunicação entre a classe de fronteira e a classe de entidade, possuindo métodos específicos para tratar essa comunicação. Na AS figura 44 esta descrita os métodos que compõem essas classes. A classe de entidade esta representada pela classe Funcionário, que é responsável por armazenar as informações vindas da classe de fronteira, bem como os métodos para realização da mesma. Fazem parte também deste pacote as UN IM IN classes que utilizam a classe Funcionário, conforme citado na figura. UN IM IN AS 113 Figura 44 - Classe de análise Funcionário A figura 45 descreve as classes do pacote fornecedor bem como seus relacionamentos, atributos e métodos que a compõem. As classes de fronteira são: classe Tela Fornecedor, classe Tela Pesquisar Fornecedor. São responsáveis por fazer a iteração com o usuário do sistema Satika, nelas possuem os atributos e os métodos necessários para fazer a iteração. São exibidos também nessas classes, os dados do fornecedor após uma pesquisa. 114 As classes de controle são as classes Cadastrar, Alterar, Excluir e Pesquisar Fornecedor. Nessas classes estão contidos os métodos específicos para tratar os requisitos do sistema, fazendo a comunicação entre as classes de fronteira e a classe de controle. A classe de entidade no sistema Satika é chamada de Fornecedor, onde é responsável por armazenar as informações e ações vindas das classes de fronteira. Na figura 45 é possível ver os métodos que realizam essa tarefa. Fazem parte também deste pacote as classes que utilizam para realizar suas funções a UN IM IN AS classe Fornecedor, conforme demonstrado na figura 45. Figura 45 - Classe de análise fornecedor 115 A figura 46 descreve as classes do pacote médico bem como seus relacionamentos, atributos e métodos que a compõem. As classes de fronteira do pacote são: classe Tela Médico, classe Tela Pesquisar Médico. São responsáveis por fazer a iteração com o usuário do sistema Satika, nelas possuem os atributos e os métodos necessários para fazer a iteração. São exibidos também nessas classes, os dados do médico após uma pesquisa. As classes de controle do pacote são as classes Cadastrar, Alterar, Excluir e Pesquisar Médico. Nessas classes estão contidos os métodos específicos fronteira e a classe de controle. AS para tratar os requisitos do sistema, fazendo a comunicação entre as classes de A classe de entidade do pacote no sistema Satika é chamada de Médico, onde é responsável por armazenar as informações e ações vindas das classes de fronteira. Na figura 46 é possível ver os métodos que realizam essa IN tarefa. Fazem parte também do pacote médico, as classes que utilizam a UN IM classe Medico para realizar suas funções, conforme citado na figura 46. UN IM IN AS 116 Figura 46 - Classe de análise pacote médico A figura 47 mostra os atributos, os métodos e os relacionamentos entre as classes de fronteira, de controle e entidade do pacote Produto. As classes de fronteira estão representadas na figura com os nomes de Tela Produto e de Tela Pesquisar Produto, onde é possível visualizar o resultado da iteração do usuário e o sistema, contendo os atributos e os métodos específicos para essa classe. As classes de controle do sistema Satika são: Cadastrar Produto, Alterar Produto, 117 Excluir Produto e Pesquisar Produto. Essas classes são responsáveis pela comunicação entre as classes de fronteira e a classe de entidade. Possuem métodos específicos para tratar as requisições, conforme descrito na figura. A classe de entidade esta representada pela Classe Produto, onde serão registradas as alterações realizadas pelo usuário. Fazem parte do pacote produto, as classes que utilizam a classe UN IM IN AS Produto para suas realizar funções, conforme demonstrado na figura 47. Figura 47 - Classe de análise pacote produto A figura 48 mostra os atributos, os métodos e os relacionamentos entre as classes de fronteira, de controle e entidade do pacote receituário. As classes de 118 fronteira estão representadas na figura com os nomes de Tela Receituário e de Tela Pesquisar Receituário, onde é possível visualizar o resultado da iteração do usuário e o sistema, contendo os atributos e os métodos para essa classe. As classes de controle do sistema Satika são: Cadastrar Receituário, Alterar Receituário, Excluir Receituário e Pesquisar Receituário. Essas classes são responsáveis pela comunicação entre as classes de fronteira e a classe de entidade. Possuem métodos específicos para tratar as requisições, conforme descrito na figura. A classe de entidade esta representada pela Classe Receituário, onde serão registradas as alterações realizadas pelo usuário na classe de fronteira. Faz parte deste pacote a UN IM IN AS classe Cliente, conforme citado na figura 48. UN IM IN AS 119 Figura 48 - Classe de análise pacote receituário A figura 49 descreve as classes do pacote venda bem como seus relacionamentos, atributos e métodos que a compõem. As classes de fronteira do pacote são: classe Tela Venda, classe Tela Pesquisar Vendas. São responsáveis por fazer a iteração com o usuário do sistema Satika, nelas possuem os atributos e os métodos necessários para fazer a iteração. São exibidos também nessas classes, os dados da venda após uma pesquisa. As classes de controle do pacote são as classes Cadastrar, Alterar, Excluir e Pesquisar Venda. Nessas classes estão contidos os métodos específicos 120 para tratar os requisitos do sistema, fazendo a comunicação entre as classes de fronteira e a classe de controle. A classe de entidade do pacote no sistema Satika é chamada de Venda, onde é responsável por armazenar as informações e ações vindas das classes de fronteira. Na figura 49 é possível ver os métodos que realizam essa tarefa. Fazem parte deste pacote as classes Cliente, Funcionário e Produto, UN IM IN AS conforme demonstrado na figura 49. Figura 49 - Classe de análise pacote venda 121 A figura 50 mostra os atributos, os métodos e os relacionamentos entre as classes de fronteira, de controle e de entidade do pacote compra. As classes de fronteira estão representadas na figura com os nomes de Tela Compra e de Tela Pesquisar Compra, onde é possível visualizar o resultado da iteração do usuário e o sistema, contendo os atributos e os métodos para essa classe. As classes de controle do pacote no sistema Satika são: Cadastrar, Alterar, Excluir e Pesquisar Compra. Essas classes são responsáveis pela comunicação entre as classes de fronteira e a classe de entidade. Possuem métodos específicos para tratar as requisições, conforme descrito na figura 50. A classe de entidade esta representada na classe de fronteira. AS pela Classe Compra, onde serão registradas as alterações realizadas pelo usuário Fazem parte deste pacote as classes Fornecedor e Funcionário, UN IM IN conforme demonstrado na figura 50. UN IM IN AS 122 Figura 50 - Classe de análise pacote compra A figura 51 exemplifica os atributos, métodos e os relacionamentos entre as classes do pacote Relatório PV. Essas classes são responsáveis por gerar relatório de produtos mais vendidos. A classe de fronteira do pacote é classe Tela Relatório PV. Essa classe é responsável por fazer a iteração com o usuário do sistema Satika, possui os atributos e os métodos necessários para fazer a iteração. 123 A classe de controle do pacote é a classe Emitir Relatório PV. Nela estão contidos os métodos específicos para tratar os requisitos do sistema, fazendo a comunicação entre a classe de fronteira e a classe de controle. As classes de entidade do pacote no sistema Satika são chamadas de Venda e Produto, onde são responsáveis por emitir as informações necessárias, requisitadas pela classe de fronteira. Na figura 51 é possível ver os métodos que realizam essa tarefa. A classe Produto também faz parte deste pacote, conforme UN IM IN AS mostrado na figura 51. Figura 51 - Classe de análise do pacote Relatório Produtos Mais Vendidos A figura 52 exemplifica os atributos, métodos e os relacionamentos entre as classes do pacote Relatório MC. Essas classes são responsáveis por gerar relatório de clientes que efetuaram as maiores compras na empresa. A classe de fronteira do pacote é classe Tela Relatório MC. Essa classe é responsável por fazer a iteração com o usuário do sistema Satika, possui os atributos e os métodos necessários para fazer a iteração. 124 A classe de controle do pacote é a classe Emitir Relatório MC. Nela estão contidos os métodos específicos para tratar os requisitos do sistema, fazendo a comunicação entre a classe de fronteira e a classe de controle. As classes de entidade do pacote no sistema Satika são chamadas de Venda e Cliente, onde são responsáveis por emitir as informações necessárias, requisitadas pela classe de fronteira. Na figura 52 é possível ver os métodos que realizam essa tarefa. A classe cliente também faz parte deste pacote, conforme UN IM IN AS mostrado na figura 52 abaixo. Figura 52 - Classe de análise do pacote Relatório Melhores Clientes 125 3.5 Classes de Projeto O diagrama de classes do projeto é geralmente construído para ser utilizado como uma espécie de “validador” dos requisitos obtidos nos levantamentos realizados. O diagrama de classes levanta questões como "o que pode acontecer" e também verifica o que o sistema deve fazer quando questionado a fazer. Este diagrama fornece ricas visões ao corpo técnico de um projeto, especialmente aos programadores. Nos diagramas de classes as visões lógicas e físicas juntamente com AS os relacionamentos entre objetos de uma solução, são diagramados. Isto significa que as classes identificadas nos diagramas de caso de uso estão modeladas no diagrama de classes. Os diagramas de classe são chamados diagramas de diagramas IN estáticos, porque mostram as classes, com seus métodos e atributos bem como os relacionamentos estáticos entre elas. Exemplificam quais classes “conhecem” quais classes ou quais classes “são partes” de outras classes, mas não mostram a troca de mensagens entre elas. Os diagramas de classe de um projeto mostram as diferentes classes que fazem um sistema e como elas se relacionam entre si. IM Uma classe define os atributos e os métodos de um conjunto de objetos. Em UML, essas classes são representadas por retângulos, com o nome da classe, e contém também os atributos e operações da classe em dois outros “compartimentos” dentro do retângulo. UN Os atributos na UML são mostrados com pelo menos seu nome, e podem também mostrar seu tipo, valor inicial e outras propriedades. Atributos podem também ser exibidos com sua visibilidade: públicos, protegidos ou privados. Os métodos na UML também são exibidos com pelo menos seu nome, e podem também mostrar seus parâmetros e valores de retorno. Os métodos podem igualmente aos atributos, mostrar sua visibilidade como: públicos, protegidos ou privados. Para exemplificar o diagrama de classes de projeto do sistema Satika, foi detalhado o caso de uso Registrar Venda, devido a grande quantidade de classes pertencentes ao projeto como um todo, seria inviável demonstrar o diagrama com todas as suas classes, portanto, este caso de uso foi detalhado. Esta representada 126 na figura 53, o diagrama de classes Registrar Venda, bem como seus relacionamentos e métodos. Este diagrama mostra todas as classes responsáveis por realizar uma venda no sistema Satika. Para o desenvolvimento do sistema foram utilizados alguns padrões de UN IM IN AS projeto que serão descritos juntamente com as classes do sistema. Figura 53 - Diagrama de classes do projeto registrar venda 127 Na arquitetura MVC (Model View Controler), as classes de negócio e o código de acesso ao banco de dados geram resultados que devem ser apresentados pela página JSP. Para transferir dados entre camadas utilizamos beans. Esses beans representam apenas o grupo de informações geradas após o processamento. A classe ActionVenda representa a chamada para a camada de negócios, gravando os resultados a serem apresentados em beans, tomando a medida necessária caso algum erro ocorra e informar para o Struts qual deve será a página apresentada. O método execute deve fazer um cast no parâmetro ActionVenda para utilizar a classe FormVenda. AS A classe FormVenda representa passagem de dados entre a camada view e a camada controler. Para cada ação dos formulários deverá ser chamado a classe ActionVenda. Esta classe possui atributos e métodos capazes de buscar os dados do cliente para ser realizada a venda. IN A classe Delegate permite que o código só enxergue invocações locais, e toda a complexidade das chamadas remotas ficam ocultas dentro dele. Serve para reduzir o acoplamento entre os clientes da camada de apresentação e os seviços de negócios. O Delegate oculta os detalhes de implementação por trás do IM serviço de negócios, além de facilitar o desenvolvimento da aplicação cliente, o uso desta classe desata as amarras entre as camadas de apresentação e a tecnologia da camada de negócio. Atuando como uma abstração para a implementação dos serviços dos negócios no lado cliente. UN A classe VendaDAO herda a classe DAO, que é responsável por todas as comunicações com o mecanismo de persistência são mediadas por um objeto o DAO. Esse objeto mapeia informações transportadas em objetos para instruções da API de persistência e mapeia resultados obtidos dela de volta para os mesmos objetos de transporte. Toda a lógica de mapeamento e execução das instruções é deixada dentro do objeto DAO desta forma isolando a aplicação da API de persistência por completo. As classes Venda, ItemVendaId e ItemVenda possuem atributos e métodos responsáveis por registrar uma venda, todas usam a classe Delegate, que contém um método que insere a venda nessas classes, conforme demostrado na figura 53. 128 4 PROJETO DE INTERFACE 4.1 Introdução O projeto de interface considera o protocolo Hypertext Transfer Protocol (http) para acesso ao sistema, velocidade de acesso às informações e usabilidade. Todos estes itens devem atender às necessidades da empresa para a organização de seu negócio. Segundo Husted e outros (2004), o protocolo http define a forma através da qual os computadores trocam informações entre si, AS trata do processo de codificação e decodificação de uma mensagem, obedecendo a padrões que viabilizam a comunicação. Neste capítulo são abordados os itens relativos a interface e usabilidade do sistema quais as melhores técnicas para a construção da interface e é apresentado alguns 4.2 IN padrões que podem facilitar esta construção. Definição de interface Segundo de Wazlawick (2004), o projeto de interface de um sistema web divide-se em duas camadas: apresentação e aplicação. A camada IM de apresentação terá classes com objetos gráficos fazendo a interação direta com o usuário, ou seja, o usuário entra com suas ações no sistema, enquanto que, a camada de aplicação é responsável pela parte lógica da interface, tratando de controlar a abertura e fechamento de janelas, habilitando e UN desabilitando botões, entre outras ações. Estas duas camadas são responsáveis pelo resultado da interação do usuário com o sistema. Tais princípios são levados em consideração na construção do Satika System, pois conforme Nielsen (2000, p. 100), “os estudos de usabilidade indicam um violento foco no conteúdo por parte dos usuários”, Sendo assim, os dispositivos de interação do sistema foram deixados em destaque, possibilitando aos usuários que as respostas estejam dispostas no centro da tela de maneira a direcionar o usuário ao conteúdo do sistema. O sistema web além de apresentar conteúdo de consistência e credibilidade, deve ter uma boa apresentação e navegabilidade, tornando o site acessível ao seu público alvo e atendendo às expectativas do negócio. Sendo 129 assim dispensará treinamentos e reduzirá custos para a empresa. O tempo para acesso ao sistema deve ser o menor possível, portanto ele precisa ser leve e exigir o mínimo de recursos da estação que o executa. O Satika System tem boa aparência, é fácil de usar como também apresenta conteúdo que atende às necessidades da Satika, com informações dispostas em local adequado para visualização das funcionalidades fornecidas pelo sistema. Neste trabalho é apresentado o resultado de usar um padrão para o desenvolvimento da interface. 4.3 Padrões de construção de interface AS Para se obter sucesso na construção da interface de um sistema web pode-se adotar algumas das metodologias já existentes para facilitar o desenvolvimento, reduzir erros e também facilitar a manutenção do sistema por equipes diferentes. IN Existem, também, alguns padrões ou frameworks que, de acordo com (JOHNSON, 1988 apud HUSTED;DUMOULIN,2004), são “uma aplicação reutilizável e semicompleta que pode ser especializada para produzir aplicações personalizadas”. No dizer de Husted (2004), os sistemas têm tendência de IM serem mais semelhantes que diferentes. Assim, existem padrões tanto para a construção de um sistema como também para a construção de uma interface gráfica de acesso ao sistema, sendo que este framework fornece aos desenvolvedores conjuntos estruturais conhecidos por outros desenvolvedores e UN que têm garantia de funcionamento. Estes frameworks já estão pré-formatados e podem ser usados em outros sistemas fazendo as devidas alterações de acordo com a necessidade deste novo sistema. Para criar uma cultura de uso dos padrões de desenvolvimento usando todos os recursos fornecidos pelo framework corretamente, foi criado um consórcio chamado World Wide Web Consortium (W3C, 2004), [...] que desenvolve tecnologias interoperáveis (especificações, manuais, software e ferramentas) para levar a utilização da rede 130 mundial da Internet ao seu potencial pleno. W3C é um fórum para troca de informações, de comércio, comunicação e conhecimento coletivo. (W3C DEVELOPS, 2004) Este consórcio promove o uso de todo o potencial da internet tornando seu uso mais confiável e agradável para os usuários. O padrão para construção de interfaces conhecido como ObjectOriented Hypermedia Design Method (OOHDM) utiliza padrões específicos de AS atividades para descrever dados relacionados ao modelo conceitual da navegação e a interface. Trabalha com fases como: atividades, produtos, mecanismos e interesses do projeto para a construção da interface. O nível de detalhamento desta metodologia é elevado e é utilizado para a construção de de grande porte. Esta metodologia também não abrange IN sistemas profundamente o esquema de projeto e de manutenção do sistema. Visto que o Satika System não é de grande porte como também não necessita de detalhamento em profundidade este modelo foi descartado. IM Existe também é o Methodology: definition, architecture, design, implementation (DADI) (Definição, Arquitetura, Design, Implementação). Usa etapas, tornando o projeto com fases evolutivas desde a idéia inicial até a implementação. UN Neste trabalho foi desenvolvido um sistema web baseando-se no modelo DADI e estas etapas estão descritas a seguir. 4.4 Definição da interface do sistema Nesta fase ocorreu o primeiro contato com o protótipo do projeto que foi desenvolvido. Foi realizada uma reunião de todos os participantes do projeto com o cliente, buscando informações sobre o negócio da empresa e sobre como vincular a imagem da empresa com o layout do site. Layout referese ao desenho do site, um esquema do que será apresentado, o resultado que será mostrado pelo sistema. Esta fase teve as seguintes definições: 131 1. recebimento formal da proposta do projeto apresentado pela faculdade UNIMINAS por meio do professor Carlos Barros; 2. reunião do grupo para planejar a execução do cronograma e definição das estratégias iniciais; 3. reunião com o cliente Satika apresentando o projeto e colhendo as informações referentes ao negócio; nesta etapa obteve-se a marca da empresa Satika, o padrão de cores adotado pela empresa como também algumas características de marketing que a empresa usa atualmente. AS A Satika utiliza duas cores para sua marca: o branco e o vermelho. Estas cores devem estar presentes no sistema. A figura 54 apresenta o logotipo IM IN da empresa Satika. Figura 54 - Marca empresa Satika UN A empresa transmite na sua marca e apresentação das lojas: credibilidade, segurança e qualidade. Estas características devem ser repassadas ao sistema que será usado pelos funcionários da empresa. Em um sistema tais qualidades se refletem em disponibilidade de uso, e numa visualização agradável. Desenvolvendo o layout buscou-se a valorização dos produtos e serviços prestados pela Satika. Na etapa de definição decidiu-se que para a otimização do site seriam usadas as tecnologias Cascate Style Sheet (CSS), Javascript, JavaServer Pages (JSP) como padrões de desenvolvimento da interface que são demonstrados no item 4.7 Implementação . 132 4.5 Arquitetura da interface do sistema Todas as informações captadas foram organizadas e documentadas para consulta e histórico do andamento do projeto de interface. Foram relatados os problemas com relação à navegação, ao fluxo de informação à interatividade e à praticidade de uso. Identificou-se que o tempo gasto com a interface não deveria ser superior ao tempo de desenvolvimento do sistema, pois o que agregará valor AS para a empresa é o sistema funcionando corretamente e atendendo aos requisitos propostos. A estrutura do site foi definida com um menu fixo à esquerda da página e a marca da empresa no topo da tela, o menu fixo é inserido a IN esquerda, pois o padrão de leitura ocidental inicia a leitura do texto da esquerda para direita, portanto será o ponto de partida dos usuários, como mostra a figura UN IM 55. Figura 55 - Estrutura do Satika System 133 Este menu usa a tecnologia JavaScript para a abertura de submenus para trabalho no sistema. Quando o usuário selecionar alguma opção do menu, o sub-menu surgirá com as opções relacionadas a ele. O JavaScript trata-se de um método padronizado para realizar a codificação que será usada pelos computadores, ou seja, uma linguagem de programação que foi desenvolvida em 1955 pela empresa Netscape. Pretende atender à necessidade de validação de formulários feita pelo navegador utilizado. O JavaScript também realiza a interação com a página que foi desenvolvida, e tem sintaxe semelhante a do Java, porém é diferente em seu AS conceito como também em seu uso para desenvolvimento. O código usado para confecção do menu chamado menu.js, cujo fragmento é mostrado na figura 56, é apresentado no Apêndice A, demonstra o menu que está implementado usando JavaScript. IN //Contents for menu 1 var menuCliente=new Array() menuCliente[0]='<a href="./cadastroCli.jsp">Cadastro</a>' menuCliente[1]='<a href="./atualizaBusCli.jsp">Atualizacao</a>' menuCliente[2]='<a href="./excluiBusCli.jsp">Exclusao</a>' menuCliente[3]='<a href="./pesquisaCli.jsp">Pesquisa</a>' menuCliente[4]='<a href="./receituario.jsp">Receituario</a>' IM //Contents for menu 2, and so on var menuMedico=new Array() menuMedico[0]='<a href="./cadastroMed.jsp">Cadastro</a>' menuMedico[1]='<a href="./atualizaBusMed.jsp">Atualizacao</a>' menuMedico[2]='<a href="./excluiBusMed.jsp">Exclusao</a>' menuMedico[3]='<a href="./pesquisaMed.jsp">Pesquisa</a>' UN //Contents for menu 3, and so on var menuFornecedor=new Array() menuFornecedor[0]='<a href="./cadastroFor.jsp">Cadastro</a>' menuFornecedor[1]='<a href="./atualizaBusFor.jsp">Atualizacao</a>' menuFornecedor[2]='<a href="./excluiBusFor.jsp">Exclusao</a>' menuFornecedor[3]='<a href="./pesquisaFor.jsp">Pesquisa</a>' Figura 56 - Fragmento menu.js Ao clicar nas opções do menu, são exibidos os sub-menus com as funcionalidades do sistema de acordo com os devidos links. O JavaScript possibilitou a abertura dos menus de forma deslizante para baixo. O menu principal, tem-se as opções: Parceiros, Movimentação, Relatórios, Painel. De forma rápida, este recurso possibilita ao usuário do sistema deixar em exibição apenas os links que são necessários para seu trabalho, retraindo os demais. Para a Satika, este recurso é importante, pois o funcionário da 134 empresa ao usar o sistema juntamente com o cliente, no momento de exibir uma tela para mostrar algum produto, deixará retraído o menu que contém informações confidenciais, como por exemplo, relatórios. Com isto pode-se usar a mesma interface para a realização de atividades diferentes, sem a necessidade de mudar de ambiente dentro do sistema. Esta funcionalidade pode ser vista na figura 57, que exibe o item Parceiros retraída, e este recurso é IM IN AS o mesmo para os itens Movimentação, Relatórios e Painel. Figura 57 - Menu categoria Retrátil UN Todas as ações realizadas exibem seus resultados ao centro da página, destacando as informações e ocupando a maior parte da tela do monitor do usuário. Existem alguns padrões para a disposição das informações em um site, como mostram os modelos avaliados apresentados na figura 58. AS 135 IN Figura 58 - Modelos de disposição de informações em um site. Basicamente estes modelos apresentam a forma de seqüência da informação em um site, ou seja, os relacionamentos dos menus. O modelo adotado foi o hierárquico, uma vez que apresenta facilidade de organização para IM o modelo de sistema direcionado à venda e compra de produtos e, também, caso exista a necessidade de disponibilizar o sistema para internet, facilita a criação de módulos para clientes e funcionários. Neste modelo, as informações são dispostas de maneira dependente, UN onde o menu abrirá sub-menus relacionados a ele. Portanto, facilita a atualização de informações do site pelo administrador do sistema, de maneira rápida e eficiente, reduzindo erros e replicação de informação no site. A figura 59 apresenta o modelo do menu com as opções sendo demonstradas. IN AS 136 IM Figura 59 - Modelo do menu do sistema A figura 60 a arquitetura da disposição das informações para o sistema Satika que segue o modelo hierárquico, contendo os menus e telas do sistema. Por meio deste diagrama foi possível mostrar ao cliente como o site UN seria construído e verificar a existência de alguma necessidade adicional percebida após as reuniões de definição do projeto. IM IN AS 137 Figura 60 - Arquitetura do site Na fase de arquitetura do sistema estudou-se o controle de UN segurança de acesso, os perfis dos usuários e as telas e botões que deveriam ser liberados de acordo com o perfil do usuário. O sistema deve possuir dois perfis que devem ter acessos a menus e botões diferentes. O perfil de funcionário terá acesso às informações usuais do sistema sendo possível realizar uma venda e cadastrar um cliente entre outros acessos, enquanto que, o usuário administrador poderá realizar qualquer tipo de alteração no sistema, inclusive alterar informações sobre outros usuários. Com isto ele consegue cadastrar novos funcionários, administrar as senhas destes usuários, cadastrar produtos e remover um funcionário, entre outras ações. A figura 61 apresenta a primeira tela do sistema que é a de login, que retrata o caso de uso Efetuar Login CSU - 1. Porém nesta etapa foi desenvolvido apenas o perfil de administrador. AS 138 IN Figura 61 - Controle de acesso A página de login que é apresentada na Figura 61 foi desenvolvida usando o código apresentado no Apêndice B. Na figura 62 tem-se um fragmento UN <center> IM deste código. <form name="login" action="login.do" method="post"> <table width=225 border=1 bgcolor="gray" cellpadding=3 > <tr> <td colspan=2 height="13"> <center> <p> <font face="Arial Black" style="font-size: 14pt;"> Ã; rea restrita: </font> </p> </center> Figura 62 - Trecho da página de login Segue a estrutura do site mostrada na figura 63, tendo o Diagrama de Estados de Navegação, este indica quais são as janelas que compõem o sistema e quais eventos permitem aos usuários navegar de uma janela para outra. 139 Figura 63 - Diagrama de estados de navegação Na figura 63, vemos que o site tem apenas duas telas, facilitando ao usuário encontrar suas funcionalidades no sistema. O usuário do Satika System não precisará mudar de tela para realizar suas operações, agilizando o Design IN 4.6 AS trabalho e dispensando treinamentos. Nesta fase de criação da interface do sistema, foi planejada a harmonia entre cores, traçados, imagens, ilustrações, fotografias e animações, que aliadas às providências tomadas nas etapas anteriores, dão formas IM agradáveis para as telas nas quais o usuário navegue. A marca Satika estará presente em todas as telas do sistema sendo assim por possuir a cor vermelha em sua marca, não foi usada esta cor em outras páginas, deixando em evidencia a marca. O sistema é o instrumento UN de trabalho dos funcionários da Satika, portanto toda a área de resposta para o usuário possui o fundo branco para não causar desconforto quando o funcionário utilizar o sistema por um longo período de tempo. O menu de funcionalidades do sistema foi feito em dois tons de cinza, a tonalidade mais escura trata-se de uma categoria que pode ser escolhida pelo usuário ao clicar sobre ela. O tom mais claro é para funcionalidades do sistema. Para interação com o menu não é necessário clicar sobre todas as opções. O usuário do sistema deve clicar na categoria, após ela estar selecionada basta passar o mouse sobre as opções desta categoria para ter acesso as funcionalidades vinculadas a ela. Com o sub-menu aberto é necessário clicar na ação desejada. 140 O resultado das ações do usuário é apresentado no centro da tela em cor preta e fina com o fundo da tela branco, com isto a tela é de leitura fácil e eficiente. O contorno do menu é arredondado fazendo sistema ter uma IN AS imagem de refinamento, pode-se identificar estas características na figura 64. IM Figura 64 - Menu e área de resposta São considerados pontos importantes: Tipografia – tipo de fonte utilizado para construção do Satika UN System - uma fonte aliada à marca Satika; as fontes usadas no sistema são VERDANA no menu e nos conteúdos dispostos no site, e ARIAL nos sub- menus; Redação e textos – voltados ao usuário que não dispõe de tempo e paciência para ler textos demasiadamente extensos, sendo exibido apenas o que é relevante para a compra e venda dos produtos da empresa; limitou-se a características técnicas dos produtos e a seu preço; Imagens – as imagens utilizadas foram repassadas pela equipe de marketing da empresa; no Satika System não serão apresentadas as fotos dos produtos à venda pela empresa, visto que o cliente estará fisicamente na loja e a empresa apresenta os produtos ao cliente no momento da compra. 141 Atualmente a empresa Satika usa a figura 65 em divulgações através de outdoors pela cidade como também em seu web site: a saber, www.satika.com.br; sendo assim esta imagem foi incluída no sistema afim de atender às necessidades da marca Satika, tornando o sistema ainda mais personalizado. 4.7 AS Figura 65 - Fotografia usada pela empresa Implementação IN A fase de implementação começa com a aprovação do modelo de layout pelo cliente. Inicia-se o desenvolvimento e os testes de scripts do menu e da compatibilidade com os browsers usados pela empresa. A empresa usa o browser Microsoft Internet Explorer 6, e o sistema foi desenvolvido para ser IM compatível com versões superiores. No sistema Satika foram usadas páginas desenvolvidas em JavaServer Pages (JSP), sendo o menu formatado em JavaScript e o layout usando estilos definidos em Cascate Style Sheet (CSS). O Satika System é um sistema web que segundo Basham, Sierra e UN Bates(2005) é uma relação entre cliente e servidor, cujo cliente é o browser que o usuário estiver utilizando para realizar pedidos ao servidor, e o servidor é o computador que processa as requisições dos clientes e retorna aos clientes a resposta do pedido feito. Para que os browsers realizem estas consultas no servidor de aplicação eles acessam o sistema que está escrito em forma de páginas JSP, sendo que traz à funcionalidade de inserir o código JAVA a página desenvolvida para o sistema. Segundo Husted e outros (2004), um sistema para aplicações complexas que exigem regras de negócios elaboradas são inviáveis de serem construídos apenas através do padrão de desenvolvimento HyperText Markup Language (HTML) que geralmente são as respostas ou instruções que os 142 servidores retornam para o browser. Basicamente o HTML diz ao browser como ele deve se comportar e como apresentar o conteúdo ao usuário que fez a requisição ao servidor. “Para construir JavaServer Pages, os desenvolvedores começam criando as páginas HTML da antiga maneira, usando a mesma antiga sintaxe HTML. Para trazer o conteúdo dinâmico para a pagina, o desenvolvedor pode também colocar os elementos do script JSP na página. Os elementos do script são tags que encapsulam a lógica que AS é reconhecida pelo JSP.” (Husted et. al., 2004) Conforme os autores mencionados na citação acima, se o desenvolvedor criou uma página e inseriu uma tag, esta marca de codificação IN por sua vez pode representar muitas instruções Java e este código de programação ficará oculto na página no cliente sendo possível acesso através da tag que está em um arquivo da classe Java no servidor. As páginas do Satika System estão definidas em JSP como visto IM na figura 66 que apresenta um trecho da página index.jsp que é a página de UN login do Satika System. O código completo pode ser encontrado no Apêndice B. 143 <%@ page contentType="text/html; charset=utf-8" language="java" errorPage=""%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sátika Ótica e Design</title> <link href="css/css_index.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" language="JavaScript" src="js/login.js"></script> </head> IM IN AS <body class="oneColFixCtrHdr"> <div id="container"> <div id="header"> <img src="imagens/cabecalho_index.jpg"/> </div> <div id="mainContent"> <br/> <br/> <br/> <br/> <br/> <br/> <center> <form name="login" action="login.do" method="post"> Figura 66 - Trecho página index.jsp Com a divisão da página em JSP e HTML o trabalho da equipe de desenvolvimento pôde ser divido em camadas, sendo aplicação e apresentação. Na aplicação as regras de negócio foram desenvolvidas em JAVA e usando UN Java Server Pages e a apresentação da página HTML. Sendo assim as camadas são claramente divididas e podendo ser realizadas por equipes diferentes. O uso de JSP também agrega rapidez ao desenvolvimento do sistema, pois como o JSP trabalha marcas de codificação (tags) estas podem ser utilizadas em outras páginas durante o desenvolvimento tendo reutilização de código. A manutenção do site também é favorecida com o uso das tags, uma vez que no momento de atualização do código que faz referencia a esta tag pelo desenvolvedor, todas as páginas que tiverem a tag referenciada serão 144 atualizadas automaticamente, uma vez que a tag é uma chamada para um conjunto de instruções que está em um único arquivo. O sistema será mais consistente e seguro com o uso das tags. Portanto toda a regra de negócio do sistema fica fora do desenvolvimento da interface, possibilitando ao responsável se dedicar apenas à usabilidade e à disposição das informações no site, e até mesmo não exigindo conhecimentos profundos em programação e regras de negócio da empresa para a construção da interface. No sistema Satika System a interface foi incrementada com AS Cascading Style Sheets CSS, fazendo que todas as informações sobre formatações de fontes, layout e imagens da página fiquem em um único local e evitando ser inserido no código da página principal. A linguagem do CSS traz folhas de estilos que são utilizadas para IN definir a forma de apresentação de documentos feitos para web. Durante o desenvolvimento arquivos .css, que estão apresentados nos Apêndices C,D,E e F são criados e, no Satika System, tem-se como exemplo, o css_index.css que apresenta as definições da página índex.jsp. Neste documento não são IM inseridas classes que definem a página e este arquivo de CSS é inserido nas páginas JSP. A figura 67 mostra um fragmento da página índex.jsp. <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sátika Ótica e Design</title> UN <link href="css/css_index.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" language="JavaScript" src="js/login.js"></script> </head> Figura 67 - Chamada do arquivo CSS No trecho apresentado na figura 67 possui o caminho do arquivo que contém todas as características de exibição da página, o css_index.css. Apresentado na figura 68 um trecho do código do arquivo css_index.css que está completo no Apêndice C no qual estão descritas as configurações das características dos elementos que são carregadas pelas páginas que fizerem referência a este arquivo de folha de estilo. 145 body { font: 100% Verdana, Arial, Helvetica, sans-serif; background: #666666; margin: 0; padding: 0; text-align: center; color: #000000; } .oneColFixCtrHdr #container { width: 800px; background: #FFF000; margin: 0 auto; border: 1px solid #000000; text-align: left border-width: 1px; border-color: black; } Figura 68 - Trecho do arquivo css_index.css Sendo assim, para o desenvolvimento de uma nova interface ou AS uma mudança na interface do site, basta ao desenvolvedor da interface alterar o arquivo CSS. Existem outras folhas de estilos para o sistema Satika System que estarão exibidos nos Apêndices C,D,E,F . As folhas de estilos trazem facilidades de gerenciamento da IN interface, rápida identificação de problemas e solução caso seja necessária alguma intervenção no sistema. A implementação da interface se deu através do uso destas várias tecnologias tornando o Satika System um sistema capaz de acompanhar IM possíveis mudanças de usabilidade e permitindo a qualquer desenvolvedor que conheça as soluções aqui usadas prestar manutenção. Caso de uso UN 4.8 No estudo de caso é apresentado todas as tecnologias já explicadas nos tópicos anteriores sendo utilizadas no site tendo a página principal do usuário, indexAdm.jsp como foco. A figura 69 mostra tela de login do sistema índex.jsp que é a primeira tela do sistema. 146 AS Figura 69 - Tela de login do sistema Após o usuário ter validado suas credenciais no sistema, ele é direcionado para a página indexAdm.jsp possuindo a tela de trabalho do usuário, esta tela contém todas as funcionalidades do sistema, como mostrada na figura UN IM IN 70. Figura 70 - Página IndexAdm.jsp Na página indexAdm.jsp são exibidas configurações de imagens, fundo e fontes de acordo com as informações contidas nos arquivos css_int.css, sdmenu.css e menu.css. No arquivo indexAdm.jsp foi feita a divisão do site em menu, cabeçalho, e corpo da página, cada parte possui seu arquivo de CSS 147 correspondente, existe uma imagem que é carregada apenas quando o usuário ainda não selecionou nenhuma funcionalidade do sistema, chamada “logo” que é apresentada nas últimas linhas da figura 71. Esta figura mostra o código da página indexAdm.jsp e em negrito estão as chamadas para os arquivos CSS. <%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Sática Óptica e Design</title> <link href="css/css_int.css" rel="stylesheet" type="text/css" /> <link rel="stylesheet" type="text/css" href="css/sdmenu.css" /> <script type="text/javascript" src="js/sdmenu.js"></script> UN IM IN AS <link rel="stylesheet" type="text/css" href="css/menu.css" /> <script type="text/javascript" src="js/menu.js"></script> <script type="text/javascript"> // <![CDATA[ var myMenu; window.onload = function() { myMenu = new SDMenu("my_menu"); myMenu.init(); mladdevents(); };// ]]></script></head> <body class="twoColFixLtHdr"> <div id="container"> <div id="header"><img src="imagens/cabecalho_admin.jpg"></img></div> <div id="sidebar1"> <div style="float: left" id="my_menu" class="sdmenu"> <div> <span>Parceiros</span> <a href="#" onmouseover="dropdownmenu(this, event, menuCliente, '165px')" onmouseout="delayhidemenu()">Cliente</a> <a href="#" onmouseover="dropdownmenu(this, event, menuMedico, '165px')" onmouseout="delayhidemenu()">Médico</a> <a href="#" onmouseover="dropdownmenu(this, event, menuFornecedor, '165px')" onmouseout="delayhidemenu()">Fornecedor</a> <a href="#" onmouseover="dropdownmenu(this, event, menuFuncionario, '165px')" onmouseout="delayhidemenu()">Funcionário</a> </div> <div> <span>Movimentação</span> <a href="./produto.jsp">Produto</a> <a href="./venda.jsp">Venda</a> <a href="#">Compra</a> <a href="#">Fluxo de Caixa</a> </div> <div > <span>Relatórios</span> <a href="#">Melhores Clientes</a> <a href="#">Vendas</a> <a href="#">Produtos vendidos</a> <a href="#">Médico mais indicados</a> </div> <div> <span>Painel</span> <a href="./logout.do">Logout</a> </div> </div> </div> <div id="mainContent" > <br /> <br /> <br /> <br /> <br /> <br /> <br /> <center> <img src="imagens/logo.jpg"/> </center> <br /> <br /> <br /> </div></div></body> </html> Figura 71 - Código página indexAdm.jsp 148 A formação do menu no arquivo indexAdm.jsp, utiliza a tecnologia JavaScript para seu funcionamento. Na figura 72 segue o trecho correspondente a chamada do recurso JavaScript e suas configurações de fonte e cor de fundo oriundas do arquivo menu.css. <script type="text/javascript" src="js/sdmenu.js"></script> AS <link rel="stylesheet" type="text/css" href="css/menu.css" /> <script type="text/javascript" src="js/menu.js"></script> <script type="text/javascript"> // <![CDATA[ var myMenu; window.onload = function() { myMenu = new SDMenu("my_menu"); myMenu.init(); mladdevents(); };// ]]></script></head> Figura 72 - Trecho menu.css IN Após a chamada do menu.js dando continuidade ao código da página indexAdm.jsp verifica-se as opções disponíveis do menu que são UN IM Movimentação, Parceiros, Relatórios e Painel como apresentado na figura 73. 149 IN AS <body class="twoColFixLtHdr"> <div id="container"> <div id="header"><img src="imagens/cabecalho_admin.jpg"></img></div> <div id="sidebar1"> <div style="float: left" id="my_menu" class="sdmenu"> <div> <span>Parceiros</span> <a href="#" onmouseover="dropdownmenu(this, event, menuCliente, '165px')" onmouseout="delayhidemenu()">Cliente</a> <a href="#" onmouseover="dropdownmenu(this, event, menuMedico, '165px')" onmouseout="delayhidemenu()">Médico</a> <a href="#" onmouseover="dropdownmenu(this, event, menuFornecedor, '165px')" onmouseout="delayhidemenu()">Fornecedor</a> <a href="#" onmouseover="dropdownmenu(this, event, menuFuncionario, '165px')" onmouseout="delayhidemenu()">Funcionário</a> </div> <div> <span>Movimentação</span> <a href="./produto.jsp">Produto</a> <a href="./venda.jsp">Venda</a> <a href="#">Compra</a> <a href="#">Fluxo de Caixa</a> </div> <div > <span>Relatórios</span> <a href="#">Melhores Clientes</a> <a href="#">Vendas</a> <a href="#">Produtos vendidos</a> <a href="#">Médico mais indicados</a> </div> <div> <span>Painel</span> <a href="./logout.do">Logout</a> </div> </div> </div> <div id="mainContent" > IM Figura 73 - Trecho página indexAdm.jsp Neste trecho acima verificamos que são usadas as configurações do arquivo css_int.css, esta identificação foi invocada na classe twoColFixLtHdr. A característica “onmouseover” faz que seja exibido o menu assim que o usuário colocar o ponteiro do mouse sobre o texto. Também identificamos a variável que utilizada UN será pelo menu.js, que são menuCliente, menuFornecedor, menuMedico, menuFuncionário. Através destas variáveis o JavaScript se encarrega de direcionar o usuário através do sistema, pois o estará fixo à esquerda e todas as respostas das interações dos usuários com o menu é apresentada no centro da página. Com o uso do menu.js verificamos para quais páginas os usuários serão direcionados pelo sistema. Segue outro trecho do menu.js na figura 74. 150 //Contents for menu 1 var menuCliente=new Array() menuCliente[0]='<a href="./cadastroCli.jsp">Cadastro</a>' menuCliente[1]='<a href="./atualizaBusCli.jsp">Atualizacao</a>' menuCliente[2]='<a href="./excluiBusCli.jsp">Exclusao</a>' menuCliente[3]='<a href="./pesquisaCli.jsp">Pesquisa</a>' menuCliente[4]='<a href="./receituario.jsp">Receituario</a>' //Contents for menu 2, and so on var menuMedico=new Array() menuMedico[0]='<a href="./cadastroMed.jsp">Cadastro</a>' menuMedico[1]='<a href="./atualizaBusMed.jsp">Atualizacao</a>' menuMedico[2]='<a href="./excluiBusMed.jsp">Exclusao</a>' menuMedico[3]='<a href="./pesquisaMed.jsp">Pesquisa</a>' Figura 74 - Trecho menu.js Para tanto com estas definições podemos concluir que o menu AS possui configurações concentradas em um único arquivo JavaScript, chamado menu.js sendo destinado ao programador administrá-lo. Para alteração na forma de exibição do menu como alterar letras, cores deve-se alterar o arquivo CSS correspondente a esta funcionalidade que são os arquivos menu.css e IN sdmenu.css permitindo ao responsável pela interface realizar todas suas modificações sem necessidade de trabalhar com a codificação do sistema. O arquivo indexAdm.jsp está enxuto e com chamadas para outros arquivos do sistema, facilitando a divisão de trabalho e a administração do sistema. IM Quando o usuário selecionar alguma opção do menu a respectiva página o resultado da solicitação é exibido no centro da página. Será apresentado o usuário selecionando a opção do menu Cadastrar Receituário e UN segue um trecho da página receituário.jsp na figura 75. 151 IM IN AS <form action="./cadastroRec.do" method="post" name="receituario"> <input type="hidden" name="cpf" /> <input type="hidden" name="medico" /> <table width="457" border="0" cellpadding="5"> <tr> <td width="400"> <div align="left"> Cliente(cpf): </div> </td> <td width="800"> <div align="left"> <input type="text" name="cpf1" style="WIDTH: 200px; height: 20" disabled="disabled" maxlength="11" /> <input type="button" name="pesqCli" value="Pesquisar" onclick="PopUp('pesCli.jsp',500,400);"/> </div> </td> </tr> <tr> <td width="400"> <div align="left"> Médico(cpf): </div> </td> <td width="800"> <div align="left"> <input type="text" name="medico1" style="WIDTH: 200px; height: 20" disabled="disabled"maxlength="11" / <input type="button" name="pesqMed" value="Pesquisar" onclick="PopUp('pesMed.jsp',500,400);"/> </div> </td> </tr> <tr> <td> <div align="left">Data Consulta: UN Figura 75 - Trecho da página receituário.jsp O resultado deste código é apresentado na figura 76, o resultado estará no centro da página, sendo assim de qualquer ponto do site pode voltar ao menu e navegar através de suas funcionalidades. IN AS 152 Figura 76 - Página receituário Os botões exibidos pela página têm cantos arredondados que IM seguem o padrão de apresentação do menu e apresentam o efeito de sombra para proporcionar sensação de relevo para o usuário, sugerindo que o pressione. No Capítulo 6 deste trabalho serão apresentadas as solução de UN implementação de codificação e regras de negócios do Satika System. Será evidenciado ainda mais a separação entre a camada de interface e a camada de aplicação. 153 5 PERSISTÊNCIA Os bancos de dados surgiram graças à necessidade das empresas de armazenar grandes quantidades de informação, de forma rápida, simples e confiável, e que pudessem ser acessadas em qualquer momento, sem a necessidade de se deslocar às salas dedicadas a arquivar documentação, como até a pouco tempo se fazia. De acordo com Sanches (2005), os bancos de dados nasceram no final dos anos sessenta. No entanto, com relação aos programas que os utilizavam, não era preciso se preocupar com manutenção nem armazenagem, AS pois qualquer mudança no banco de dados, à princípio, não os afetaria. Normalmente um dado está associado a um conceito completo e é dividido em campos, ou atributos, que dão valores a propriedades IN desses conceitos. Possivelmente alguns dados podem apontar diretamente ou referenciar indiretamente outros dados, o que faz parte da caracterização do modelo adotado pelo banco de dados. (BANCO de Dados, 2008). IM No projeto a ser desenvolvido, o banco de dados servirá para armazenar todas as informações que serão inseridas e manipuladas no sistema Satika System. O banco será utilizado pela aplicação bem como pelos usuários UN operadores de aplicação ou outros usuários sofisticados. Os operadores de aplicação são usuários de transações parametrizadas cujas interfaces são padronizadas, pré-programadas e previamente testadas. [...]. Não requerem nenhum conhecimento do sistema além da própria aplicação. Usuários sofisticados lidam com problemas complexos que requerem familiaridade com as facilidades do SGBD para atender aos seus requisitos. Utilizam pacotes de programas em estação de trabalho próprias, alimentadas com dados extraídas do banco de dados. (MELO; SILVA; TANAKA, 1997, p. 18). O banco de dados permitirá inserir, modificar e excluir dados, sendo que serão salvas informações de dois tipos: dados de usuários (usados pela aplicação) e os dados do sistema (aqueles que o banco de dados utiliza 154 para sua administração, como por exemplo, dados dos usuários que têm acesso ao banco de dados). Em se tratando de persistência de dados, Melo, Silva e Tanaka (1997) afirmam que persistência significa a capacidade dos objetos do banco de dados persistirem a diferentes execuções de rotinas de aplicação. Os objetos persistentes são armazenados fora dos programas que os utilizam e sobrevivem a falhas, por exemplo, de transação e de hardware. Eles sofrem mudanças de estado e podem recuperar seu estado inicial através de um mecanismo de controle de versão do Sistema de Gerenciamento de Banco de Dados, por 5.1 AS exemplo. Organização do banco de dados IN O banco de dados da aplicação Satika System está organizado de forma a cumprir os seguintes objetivos: atender com rapidez adequada à aplicação de acordo com as solicitações dos usuários da empresa; ter índice de redundância baixo; IM ter alta capacidade de acesso para ganhar o maior tempo possível na realização de consultas; ter alto índice de integridade, o que significa que ao ter muitos usuários atacando o banco de dados não terá falhas na inserção e/ou atualização de UN dados. Não ocorrerão erros por redundância ou lenta atualização; ter um nível satisfatório de segurança e privacidade já que os dados que serão armazenados no banco de dados serão confidenciais e importantes. Neste ponto, também entram os meios físicos de proteção contra fogo, roubo, etc; deverá ser possível sua constante atualização para não deixar o banco de dados antigo e sem utilidade. O banco possuirá uma independência física e lógica dos dados, possibilitando que, ao mudar algum aspecto físico em sua organização ou fazer mudanças na estrutura lógica, como por exemplo, agregar novos campos a uma tabela, a aplicação não será afetada. 155 5.2 Sistema de informação Gerencial do Banco de Dados “O Gerenciamento de banco de dados está evoluindo, deixando de ser uma aplicação especializada para tornar-se o componente central de um ambiente moderno de computação.” (SILBERSCHATZ; KORTH; SUDARSHAN, 1999, p.XV) O banco de dados da aplicação Satika System será criado e mantido pelo sistema gerencial de banco de dados MYSQL que está composto de: Gerenciamento do banco de dados: conjunto de programas não visíveis ao AS usuário final que se encarregarão da privacidade, da integridade, da segurança dos dados e a interação com o sistema operacional. Proporcionará uma interface entre os dados, a aplicação e o usuário final. Dicionário de dados: onde se salvam todas as propriedades do banco de dicionário conterá: IN dados tais como, descrição da estrutura, relações entre os dados, etc. O a descrição externa, conceitual e interna do banco de dados; as restrições sobre os dados; o acesso aos dados; IM as descrições das contas de usuário; as permissões dos usuários; os esquemas externos de cada programa. Administrador do banco de dados: pessoa responsável pelo controle do UN sistema de gerenciamento do banco de dados. As principais tarefas do administrador são: a definição do esquema lógico e físico do banco de dados; a atribuição e edição de permissões para os usuários; manutenção da segurança no banco de dados; manutenção geral do sistema de gerenciamento do banco de dados. Linguagens: o sistema de gerenciamento de banco de dados proporcionará uma série de linguagens para a definição e manipulação do banco de dados. Estas linguagens são as seguintes: linguagem de definição de dados (DDL) - para definir os esquemas do banco de dados; 156 linguagens de manipulação de dados (DML) - para manipular os dados do banco de dados; linguagem de controle de dados(DCL) - para a administração de usuários e segurança no banco de dados. O tipo de linguagem de manipulação de dados usada no projeto é a procedimental que requer do usuário especificação de quais dados são desejados e como chegar até eles. Para isso é feita uma query (pergunta) que é um pedido de consulta de informação. AS 5.2.1 A escolha do MYSQL A escolha do gerenciador de banco de dados deve ser bem feita e aspectos como desempenho, recursos, documentação e suporte devem ser considerados. Para escolher o SGBD, foi preciso entender bem quais recursos a IN aplicação precisa, tentar estimar o volume de dados, avaliar o hardware disponível, certificar-se das funcionalidades necessárias e, posteriormente, procurar por informações mais detalhadas. A aplicação a ser desenvolvida é ligada à internet, mas no entanto IM é bem simples, necessitando-se apenas de um banco de dados para armazenar o conteúdo do site. Foi escolhido o MySQL que é uma opção satisfatória e é facilmente encontrado em serviços de hospedagem. O MySQL é focado na agilidade. Assim, como a aplicação UN necessita de retornos rápidos e não envolve operações complexas, foi a opção mais adequada, pois é otimizado para proporcionar processamento rápido dos dados e tempo curto de resposta sem exigir muito do hardware. A união da base de dados com o sistema gerenciador de base de dados é denominada Sistema de base de dados. O Sistema de base de dados terá os seguintes objetivos: evitar a redundância de dados e a incoerência - o sistema de base de dados garantirá que eventuais mudanças em alguns dados sejam feitas mantendo a coerência de toda a base de dados; facilidade no acesso aos dados - o sistema provê mecanismos para recuperar dados específicos de qualquer natureza, a partir de subconjuntos 157 inter-relacionados da base de dados; compartilhamento de dados - os dados serão armazenados em uma base de dados de acordo com um pequeno conjunto de formatos definidos pelo sistema gerenciador de base de dados; controle de acesso para múltiplos usuários - será permitido que vários usuários atualizem os dados simultaneamente, sendo supervisionadas atualizações concorrentes para evitar dados inconsistentes; segurança - serão gerenciados quais dados serão visíveis (acessíveis) por quais usuários, impedindo que usuários não autorizados tenham 5.3 Arquitetura do banco de dados AS acesso a dados sigilosos. Um propósito geral do sistema de base de dados é esconder certos IN detalhes de como os dados são armazenados ou mantidos, mas permitindo que os mesmos sejam recuperados eficientemente. Em outras palavras, proporcionar aos usuários uma visão abstrata dos dados. Assim foram definidos três níveis de abstração pelos quais a base de dados pode ser vista: IM Nível Interno ou Físico: é o nível mais perto do armazenamento físico dos dados (nível mais baixo). Permite escrevê-los tal qual estão armazenados no computador. Neste nível são definidos os arquivos que contêm a informação, a localização dos mesmos e sua organização, ou seja, criam-se os UN arquivos de configuração. Nível conceitual: Neste nível representam-se os dados que vão ser utilizados sem levar em conta aspectos como o que representamos no nível interno. Descrevem-se quais dados são armazenados e quais os relacionamentos entre eles (a base de dados é descrita como um número de estruturas relativamente simples). Nível externo ou de Visão: é o mais próximo ao usuário (nível mais alto). Este nível expõe apenas parte da base de dados. Este nível simplifica a interação, com o sistema, de usuários que necessitam apenas de uma parte da base de dados. Na figura 77 é possível visualizar o esquema que representa a classificação de níveis utilizada pelo Satika System: IN AS 158 Figura 77 - Esquema de Níveis Modelagem do banco de dados IM 5.4 “[...] o projetista escolhe o modelo de dados e, por meio da aplicação de seus conceitos, transcreve as necessidades específicas em um esquema conceitual de banco de dados.” (SILBERSCHATZ; KORTH; UN SUDARSHAN, 1999, p.47) A Modelagem conceitual é uma fase importante no projeto de uma aplicação de base de dados bem sucedida. O Modelo de dados é uma coleção de ferramentas conceituais para descrição, relacionamentos, semântica e restrições dos dados. Hay (1999) trata o modelo de dados como uma representação das coisas significativas para a empresa e o relacionamento entre elas. Também afirma que o modelo de dados é a estrutura fundamental dos dados da empresa, que depois será refletida na estrutura do banco de dados criado para lhe dar sustentação. O modelo de dados usado no projeto foi o Modelo Entidade– Relacionamento que é um tipo de modelo lógico baseado em objetos. Este 159 modelo se obtém em tempo de projeto do banco de dados. Foi proposto por Peter Chen em 1976 e desde então vem sendo utilizado de uma forma muito global. Ele facilita a descrição de dados nos níveis conceituais e de visão, proporcionando ampla e flexível capacidade de estruturação por permitir a especificação de restrições de dados de forma explícita. O modelo Entidade–Relacionamento baseia-se numa percepção do mundo real que consiste em uma coleção de entidades e de relacionamentos entre essas entidades, permitindo representar graficamente a estrutura lógica do banco de dados da aplicação Satika System. Durante a construção do modelo de dados é essencial a abstração AS do mundo real, ou seja, do negócio que se deseja modelar. Segundo Gödel (apud Hay, 1999, p. 255), o teorema de Gödel na matemática afirma que todo sistema lógico tem uma inconsistência fundamental, alguma coisa que pode ser expressa no sistema, mas não pode ser comprovado. Ele sugere que, a medida IN que se aproxima dos limites da modelagem de dados, se percebe que este teorema é válido, mas, no entanto, é possível descrever o mundo a nossa volta se estivermos dispostos a libertar a mente do concreto e enfrentarmos cada vez mais os conceitos abstratos. IM Os principais elementos do modelo Entidade-Relacionamento são as entidades com seus atributos e as relações entre entidades. Entidade: trata-se de um objeto do qual se recolherá uma informação de UN interesse para o banco de dados e é representada graficamente por um retângulo. A modelagem desenvolvida apresenta entidades que podem ser tanto um objeto de existência física (entidade concreta), como um produto ou um fornecedor, quanto pode ser conceitual (entidade abstrata) como, por exemplo, uma venda, uma compra, etc. As entidades serão normais ou fracas. As normais são as que não dependem de outras entidades para existir, como exemplo a entidade Fornecedor, enquanto que as entidades fracas sempre dependem de outra entidade, não têm sentido por elas mesmas. Exemplificando, é possível visualizar que a entidade Item_Compra depende da entidade Compra , pois não haverá item de compra se não houver compra. Um conjunto de entidades é um grupo de entidades do mesmo tipo. Por exemplo, é possível definir o conjunto de entidades de todos os clientes 160 de uma mesma filial da Satika Óptica (Clientes). Uma entidade Pessoa pode ser uma entidade Funcionário, uma entidade Cliente, uma entidade Médico, ambas ou nenhuma delas. Cada entidade tem atributos – propriedades particulares que a descrevem. Por exemplo, uma entidade Cliente é descrita pelos atributos “PES_CPF”, “PES_NOME” e “REC_COD”, etc, já uma entidade Funcionário é descrita pelos atributos “PES_FUN_USUARIO” , “PES_FUN_SENHA” etc. Assim, a base de dados compreende uma coleção de conjuntos de entidades contendo, cada uma, certo número de entidades do mesmo tipo. Uma AS entidade em particular possui um valor para cada um de seus atributos. Relação: A relação é definida como uma associação entre duas ou mais entidades. Por exemplo, foi definida uma relação que associa um fornecedor a uma compra e uma pessoa a uma venda; isto especifica que uma compra é feita IN de um fornecedor e uma venda é feita pra um cliente, respectivamente. Outra característica é o grau de relação, sendo as de grau 1 relações que só relacionam uma entidade consigo mesma. As de grau 2 são relações que associam duas entidades diferentes, e as de grau n que se tratam IM de relações que unem mais de duas entidades. No projeto Satika System foram relacionadas entidades apenas com grau 2. Atributo: Define-se como cada uma das propriedades de uma entidade ou UN relação. Cada atributo tem um nome e todos os possíveis valores que pode ter. Dentro de uma entidade tem que haver um atributo principal que identifica à entidade e seu valor tem que ser único. Um exemplo de atributo é o “PES_COD”, dentro da entidade Pessoa. Na figura 78 é possível visualizar o DER (Diagrama Entidade- Relacionamento) que foi o resultado do processo de modelagem do projeto: IN AS 161 IM Figura 78 - DER Satika System 5.4.1 Explicando o Modelo No modelo proposto apresentado na figura 78 é possível observar as seguintes entidades: Receituário, Pessoa, Endereço, Fornecedor, Compra, UN Item_Compra, Produto, Item_Venda e Venda. Uma entidade Pessoa pode ser um funcionário (expresso pelos atributos de prefixo PES_FUN_), um médico (expresso pelos atributos de prefixo PES_MED_) ou um cliente da empresa (expresso pelos demais atributos). Os atributos PES_DATA_CRIACAO, PES_STATUS e END_COD (migrado da entidade Endereço) são atributos comuns a todas as pessoas. A chave da entidade Pessoa é expressa por seu código. Uma pessoa tem um endereço e pode ou não ter um receituário. O endereço é composto pelos atributos básicos de qualquer endereço: rua, número, cep, cidade, bairro e estado. A entidade Endereço é identificada pelo atributo chave END_COD. 162 O receituário é descrito como o documento do cliente onde constam seus dados optométricos, a data da consulta seu código e o código de seu médico. O atributo que identifica a entidade é o REC_COD. O receituário não é obrigatório, uma vez que o cliente pode apenas querer comprar um óculos de sol, por exemplo. A entidade Fornecedor possui atributos referentes a ele bem como à pessoa física que o representa; também possui a data de sua criação (cadastramento), seu status(ativo e inativo) e o atributo END_COD, chave primária da entidade Endereço. Dados de uma compra serão gravados na entidade Compra que AS possui como atributos seu código, data, valor total, forma de pagamento e descrição. O fornecedor e o cliente são derivados das entidades Fornecedor e Pessoa respectivamente. A entidade Item_Compra representa os itens de uma compra. Suas IN chaves primárias são COM_COD e ITE_COD representando que uma compra pode conter apenas vários itens. Os itens são de um produto, possuem um preço unitário e uma quantidade. O produto é identificado por seu código, possui um tipo, uma IM descrição, uma grife e uma cor. Dados de uma venda serão gravados na entidade Venda que possui como atributos seu código, data, valor total, forma de pagamento, descrição e comissão. O Cliente que efetuou a compra e o funcionário de quem UN ele comprou (aquele que receberá a comissão) são derivados das entidades Pessoa, com os atributos PES_COD_CLIENTE e PES_COD_FUN. Uma venda possui itens que são derivados da entidade Item_Venda. A entidade Item_Venda possui os atributos ITE_COD e VEN_COD que a identificam bem como PRO_COD, ITE_PRECO_UNITARIO e ITE_QUANTIDADE. 5.4.2 Restrições em relacionamentos Durante o processo de modelagem para os relacionamentos foram definidas certas restrições que limitam as possíveis combinações de entidades que podem participar do conjunto de relacionamentos. Tais restrições foram 163 determinadas a partir da situação real que o modelo entidade-relacionamento representa. Segundo estudos de Bertei (2008) uma restrição importante é a cardinalidade, que expressa o número de entidades ao qual outra entidade pode estar associada via um relacionamento. No processo de modelagem do banco para a aplicação Satika System foram usados os seguintes tipos de cardinalidade: um-para-um: uma entidade em A está associada com no máximo uma entidade em B; e vice-versa. Pode-se ver na figura 79 o diagrama UN IM IN fornecedor tem um endereço. AS expressando a cardinalidade, bem como, um exemplo da aplicação onde um Figura 79 - Cardinalidade : um-para-um um-para-muitos: uma entidade em A está associada a qualquer número de entidades em B, enquanto que uma entidade em B está associada com no máximo uma entidade em A. Isto pode ser visto na figura 80. 164 AS Figura 80 - Cardinalidade : um-para-muitos Se as posições de A e B forem trocadas, pode-se denominar sua IM IN cardinalidade como muitos-para-um. A figura 81,figura 80 mostra isto. Figura 81 - Cardinalidade : muitos-para-um UN É possível encontrar também algumas versões da cardinalidade um-para-muitos havendo também do tipo um-para-um-ou-muitos e um-parazero-ou-muitos. Assim na figura 82 é possível observar um exemplo onde uma venda tem um ou muitos itens de venda e por sua vez zero ou muitos itens de venda são relativos a um produto. AS 165 5.4.3 Atributos chaves IN Figura 82 - Cardinalidade um para muitos Uma tarefa importante na modelagem do banco de dados foi especificar a distinção entre entidades e relacionamentos. Para ser feita tal IM distinção, foi assinalada para cada conjunto de entidades uma chave – conjunto de um ou mais atributos que nos permitirá identificar inequivocamente uma entidade em um conjunto de entidades. No processo de definição das chaves percebeu-se que havia diversos conjuntos distintos de atributos que poderiam UN servir como chaves candidatas; no entanto procurou-se escolher e nomear as menores chaves possíveis (cujos subconjuntos não sejam chaves), que passaram a ser conhecidas como chaves primárias. Organização de Arquivos O objetivo do sistema de base de dados é simplificar e facilitar o acesso aos dados. Entretanto, um fator principal de satisfação (ou de insatisfação) do cliente é o desempenho da base de dados, uma vez que se o tempo de resposta ao realizar uma consulta for muito grande o sistema será desvalorizado. O desempenho do sistema de base de dados dependerá da 166 eficiência das estruturas computacionais usadas para representar os dados na base e de como o sistema é capaz de operar nessas estruturas de dados. 5.5 Hibernate Mudanças significativas foram provocadas na forma como os softwares são produzidos e mantidos. Isso se deu com a introdução da Orientação a Objetos no contexto de desenvolvimento de software. Essas mudanças foram motivadas pela nova perspectiva adotada pelo paradigma Orientado a Objetos, em oposição ao paradigma Estruturado. É inegável que o mercado há algum tempo já percebeu que a AS adoção da orientação a objetos melhora a qualidade do produto final, pois utiliza conceitos já consagrados em outras áreas, que facilitam a manutenção e a evolução dos sistemas. Sendo assim, muitas áreas do desenvolvimento de software foram reestruturadas, pois práticas, teorias e técnicas que eram IN adequadas ao modelo convencional não puderam ser aplicadas de forma irrestrita na criação de software Orientado a Objetos. Uma dessas áreas é a que trata da persistência dos dados. Os SGBDs conquistaram um lugar de destaque em comparação a IM outras tecnologias de armazenamento de dados. Embora estes produtos realizem seu papel de modo satisfatório no mundo relacional, quando utilizados no contexto orientado a objetos adquirem alta complexidade, pois a aplicação passa a necessitar de um processo intermediário de conversão dos dados. UN Para que não fosse necessária nenhuma conversão, a opção ideal seria a adoção de um banco de dados orientado a objetos, pois a camada de persistência encontrar-se-ia no mesmo nível de abstração da aplicação. Outra opção seria o uso de bancos de dados relacionais estendidos, que também fornecem transparência, pois o processo de conversão OO-Relacional é realizado automaticamente. No entanto existe um obstáculo para adoção dessas duas soluções: a grande quantidade de dados armazenados em bancos relacionais, além do elevado grau de aceitação que os SGBDs conquistaram no mercado. Uma solução para usar software orientado a objetos mantendo a base relacional instalada é a criação de classes de mapeamento objetorelacional. No entanto, a criação dessas classes aumenta o trabalho de 167 codificação. Por outro lado, tem-se a opção de utilizar ferramentas que automatizam essa tarefa, reduzindo o esforço de integração entre os dois mundos. Existem diversos utilitários que se propõem a realizar o mapeamento objeto/relacional. No sistema Satika System utiliza-se o Hibernate, um projeto Open Source e Free, desenvolvido em linguagem Java. Como ferramenta para automação do mapeamento das tabelas foi utilizado o MyEclipse Persistence Tools, que é capaz de criar uma unidade de persistência e associar o projeto a base de dados. Através da engenharia reversa os processos são totalmente personalizados. É possível escolher os artefatos para AS gerar tabelas do banco de dados fornecendo total suporte para o Hibernate. Hibernate é um framework de persistência que permite a utilização de banco de dados relacional, porém, trabalhando com objetos. Ele constitui-se de uma biblioteca de classes Java (Hibernate.jar), que deve ser adicionada ao IN classpath, e é uma camada adicional entre a aplicação e o banco de dados. Seu objetivo, e uma das principais vantagens, é eliminar a existência de instruções SQL nas classes de negócio, atuando como uma fronteira entre as duas tecnologias. Assim uma instrução do tipo: IM INSERT INTO produto (pro_tipo, pro_descricao, pro_grife, pro_cor) VALUES("oculos escuros", "modelo aviado, sem grau", "rayban", "preto"); UN É substituída por uma única linha: session.save(objeto); O Hibernate permite ainda ir mais além, com apenas essa linha citada acima ele salva todos os relacionamentos bastando apenas configurar a propriedade Cascade. Essa propriedade tem alguns tipos como: All: persiste o objeto pai para todos os filhos; None: é o default, as operações relacionadas ao objeto pai apenas sofrerão alguma mudança nele mesmo e em mais ninguém; Save Update: o objeto pai pode salvar ou atualizar os filhos; Persist: Apenas para operações de salvar; All Delete Orphan: a partir do objeto pai ele deleta os filhos; 168 Mas o framework não é uma boa opção para aplicações que fazem uso de stored procedures e triggers. Na aplicação Satika System foi utilizado o Hibernate, pois ele não faz uso extensivo de stored procedures nem de triggers. A implementação da lógica de negócios da aplicação fica na própria aplicação Java, dependendo pouco de funções específicas do banco de Dados. Assim o Hibernate se tornou uma ferramenta muito útil. IM IN AS A figura 83 apresenta uma visão geral da arquitetura do Hibernate. Figura 83 - Visão Geral da Arquitetura do Hibernate Toda a configuração do Hibernate é feita através de arquivos XML, UN os quais contém mapeamentos de tabelas/Java, detalhes de pooling de conexões. Combinados, estes arquivos fornecem flexibilidade de total configuração da aplicação. Na l dois componentes se sobressaem: Hibernate.properties e XML Mapping. O Hibernate.properties, também chamado de Hibernate.cfg (nomenclatura utilizada na aplicação), é o arquivo que contém as informações sobre a conexão com o banco de dados. Nele é definido o tipo do banco, o dialect,o driver, a URL, o usuário e a senha. O Hibernate suporta os bancos de dados Oracle, DB2, MySQL, PostgreSQL, Sybase, SAP DB, HypersonicSQL, Microsoft SQL Server, Progress, Mckoi SQL, Pointbase e Interbase. Como visto anteriormente a aplicação Satika System utilizará o banco de dados MySQL. 169 Para facilitar o processo de configuração do arquivo Hibernate.properties foram fornecidos modelos que foram customizados pelo desenvolvedor. Abaixo é possível visualizar na figura 84 o arquivo Hibernate.cfg utilizado pela aplicação Satika System. Nele é possível verificar a tag <session-factory> que delimita as configurações para a sessão. Dentro dela existem as tags <property> cujos atributos definem as configurações com o banco de dados e <mapping resource> que definem os arquivos mapeados. Todas essas informações ficam UN IM IN AS dentro da tag <Hibernate-configuration>. Figura 84 - Arquivo Hibernate.cfg No XML Mapping são registradas as informações a respeito do mapeamento das classes feitas pelo MyEclipse Persistence Tools e suas respectivas tabelas relacionais. Cada classe é mapeada para uma tabela. Além 170 disso, são registradas informações sobre os relacionamentos, cardinalidade e identificadores, entre outras. Para melhor organização dos arquivos da aplicação, foi criada uma pasta denominada mapping e dentro dela existem todos os arquivos de mapeamento .xml: Compra.hbm.xml, Endereço.hbm.xml, Fornecedor.hbm.xml, ItemCompra.hbm.xml, ItemVenda.hbm.xml, Pessoa.hbm.xml, Produto.hbm.xml, Receituario.hbm.xml e Venda.hbm.xml. O arquivo de mapeamento é definido como um arquivo XML que descreve as propriedades e os relacionamentos de uma classe para o Hibernate. É uma boa prática usar um arquivo de mapeamento para cada classe, e usar AS como extensão do arquivo “.hbm.xml” para diferenciar de outros arquivos XML utilizados na aplicação. Para exemplificar como foram mapeados os arquivos descritos anteriormente, são utilizadas as classes Produto, ItemCompra, Compra, UN IM IN Fornecedor e Endereço. Na figura 85 é possível visualizar essas classes. UN IM IN AS 171 . Figura 85 - Parte do diagrama de Classes Satika System 172 A classe Produto associa-se a um ou mais itens de compra (ItemCompra), uma vez que para se ter um Produto é preciso comprá-lo. Uma Compra é caracterizada por ter um ou mais itens de compra (ItemCompra). As compras (zero ou mais) são feitas de um ou mais fornecedores. Um Fornecedor tem um Endereço. O primeiro mapeamento abordado é o da classe Fornecedor e do seu relacionamento com a classe Endereço. Na modelagem descrita, um Fornecedor tem apenas um Endereço e um mesmo Endereço é de apenas um Fornecedor. Vejamos o mapeamento para a classe Fornecedor (Fornecedor.hbm.xml) mostrado na figura 86. AS Todo e qualquer arquivo de mapeamento deve declarar no cabeçalho do XML o Hibernate-mapping-3.0.dtd, pois ele garante a integridade do mapeamento. Logo depois vem o nó raiz <Hibernate-mapping>, e em seguida o nó <class>. IN No nó <class> é definida a classe que está sendo mapeada e para qual tabela ela vai ser mapeada. O único atributo obrigatório deste nó é “name”, que deve conter o nome completo da classe. Dando continuidade tem-se o nó <id> que é o identificador dessa IM classe no banco de dados. No Hibernate toda classe persistente deve ter o atributo id, que será utilizado para garantir a integridade dos objetos. Neste nó é definida a propriedade que guarda o identificador do objeto no atributo “name”, que no caso do sistema desenvolvido é “for_cod”. Também é definido o atributo UN <generator> que guarda a informação de como os identificadores(as chaves do banco de dados) são gerados; existem diversas classes de geradores, que são definidas no atributo “class” do nó, no presente caso o gerador usado é o “native”, que escolhe dentre os tipos de geradores identity, sequence e hilo, dependendo das capacidades do SGBD. Os próximos nós do arquivo são os <property> que indicam propriedades simples da classe. Neste nó os atributos mais importantes são “name”, que define o nome da propriedade, “column” para definir o nome da coluna na tabela e “type” para definir o tipo do objeto que a propriedade guarda. Normalmente, o próprio Hibernate é capaz de descobrir qual é o tipo de objeto que a propriedade guarda; ele também usa o mesmo nome da propriedade para acessar a coluna, se o atributo não tiver sido preenchido. UN IM IN AS 173 Figura 86 - Arquivo fornecedor.cfg.xml 174 O último nó do arquivo, <one-to-one>, define o relacionamento de 1-para-1 que a classe Fornecedor tem com a classe Endereço. Este nó tem os atributos “name”, que define o nome da propriedade no objeto (neste caso, “Endereco”), “type” que define a classe da propriedade e “cascade” que define como o Hibernate deve “cascatear” as ações feitas nesta classe para a classe relacionada, como atualizações, inserções e exclusões de registro. Nesse caso o “cascade” foi escolhido como “save-update” para que quando uma classe pessoa for inserida ou atualizada no banco, a propriedade “endereco” também UN IM IN AS seja inserida ou atualizada. UN IM IN AS 175 Figura 87 - Arquivo Endereco.cfg.xml Com isso, é finalizado o mapeamento da classe Fornecedor, mas este mapeamento faz referência a uma outra classe que o Hibernate ainda não conhece, a classe Endereço. Na figura 87 tem-se o mapeamento dessa classe (o arquivo “Endereco.hbm.xml”). A classe Endereco está relacionada com a classe Pessoa sendo que uma ou mais pessoas podem ter um mesmo endereço. Por isso para caracterizar esse relacionamento é definido o nó <one-to-many>. Nas figuras: figura 88, figura 89 e figura 90 descreve-se o mapeamento das classes Compra, ItemCompra e Produto, sendo mostrados os 176 arquivos Compra.cfg.xml, ItemCompra.cfg.xml e UN IM IN AS respectivamente: Figura 88 - Arquivo Compra.cfg.xml produto.cfg.xml, IM IN AS 177 Figura 89 - Arquivo ItemCompra.cfg.xml Há uma diferença no mapeamento da tabela ItemCompra em relação ao mapeamento das outras tabelas. O que ocorre é que a tabela UN Compra identifica a tabela ItemCompra com o atributo “com_cod”. Isso significa que uma Compra não pode ter dois ItemCompra iguais. Essa especificação foi mapeada no identificador da classe definindo-se um novo nó <key-property> onde foi mapeado a atributo “com_cod”. UN IM IN AS 178 Figura 90 - Arquivo Produto.cfg.xml 5.5.1 Mecanismo de persistência do Hibernate Uma vez que o Hibernate possui im mecanismo de persistência transparente - e as classes são alheias à sua própria capacidade de persistência – é possível escrever lógica de aplicativo que seja alheia dos objetos sobre os quais ela opera ao representar o estado persistente ou o estado temporário que só existe e, memória. (BAUER; KING, 2005, p.150) 179 Para o Hibernate, existem três tipos de objetos: objetos “transient” (transientes), “detached” (desligados) e “persistent” (persistentes). Objetos “transient” são aqueles que ainda não têm uma representação no banco de dados (ou que foram excluídos). Eles ainda não estão sobre o controle do framework e podem não ser mais referenciáveis a qualquer momento, como qualquer objeto normal em Java. Objetos “detached” têm uma representação no banco de dados, mas não fazem mais parte de uma sessão do Hibernate, o que significa que o seu estado pode não estar mais sincronizado com o banco de dados. Objetos “persistent” são os objetos que têm uma representação no banco de dados e que ainda fazem parte de uma transação do Hibernate, garantindo AS assim que o seu estado esteja sincronizado com o banco de dados (nem sempre claro). A aplicação não precisa se preocupar se um objeto é persistente ao invocar os seus métodos, mas deve interagir com a camada de persistência IN sempre que precisar propagar o estado do objeto contido na memória para o banco de dados e vice-versa. No Hibernate, existem os conceitos de sessão e transação. Uma sessão é uma conexão aberta com o banco de dados, onde se pode executar IM consultas, inserir, atualizar e deletar objetos. Já a transação é a demarcação das ações; uma transação faz o controle do que acontece e pode fazer um rollback se forem encontrados problemas. Para utilizar esses mecanismos é feita uma autenticação de acordo UN com o arquivo de configuração Hibernate.cfg (nome de usuário, senha, URL de conexão, etc). Assim é criada a classe HibernateUtility.java para configurar e abrir as sessões do Hibernate. A classe possui um bloco estático que instancia um objeto de configuração do Hibernate. Esse chama o método configure() que lê o arquivo Hibernate.cfg.xml e depois que ele está configurado, cria uma SessionFactory, que é a classe que vai ficar responsável por abrir as sessões de trabalho do Hibernate. Se ele não lançou nenhuma exceção, então o ambiente está configurado corretamente. Depois que a SessionFactory é inicializada, o método getSession() retorna uma nova sessão para o código dentro do main(). Após a sessão ter sido retornada, é iniciada uma transação, na qual o objeto em questão é instanciado e, depois de realizadas as devidas instruções, é chamado 180 o método save() na sessão. Após o método save(), a transação é finalizada e a sessão fechada. O código de toda a aplicações mostrará esse mesmo comportamento, ou seja, abrir a sessão, iniciar a transação, chamar os métodos save(), update(), get(), delete(), etc, fechar a transação e a sessão. Uma parte muito importante do funcionamento do framework são as pesquisas. Existem três meios de se fazer buscas usando o Hibernate: Hibernate Query Language (HQL), Criteria Query API (para montar buscas programaticamente) e usando SQL puro. Na aplicação Satika System foi utilizado apenas o SQL puro. AS Na figura 91 abaixo é mostrado parte da classe PessoaDAO onde é possível visualizar um exemplo de como foram feitas as pesquisas na aplicação. Ela descreve a pesquisa de todos os clientes da Satika Óptica, ou UN IM IN seja de todas as pessoas do tipo cliente que estejam ativas na aplicação. IN AS 181 Figura 91 - Pesquisa para encontrar todos os clientes IM Para desenvolver a camada de persistência foi preciso entender bem suas interfaces de programação. O Hibernate possui algumas interfaces importantes que executam CRUD´s básicos dos aplicativos e incluem sessão, transação e consulta: UN Interface de sessão (Session): principal interface do Hibernate; de peso leve e mais fácil de criar e destruir. O objeto Session ajudará na aplicação porque há uma grande necessidade de se criar e destruir objetos Session a todo instante. A Session é chamada de gerenciador de persistência porque é também a interface para operações relacionadas com persistência como armazenar e obter dados. Interface SessionFactory: a interface SessionFactory não é considerada peso leve, sendo compartilhada entre muitas threads do aplicativo. Para a SessionFactory há um único aplicativo, criado na inicialização. Esta interface controla dados armazenados e que foram lidos em uma unidade de trabalho, podendo ser reutilizados em uma unidade futura. Geralmente a 182 SessionFactory armazena instruções SQL (Structured Query Language) e outros metadados que são executados em tempo de execução. Interface de Transação: é uma API (Application Programming Interface) opcional do Hibernate; permite controlar os limites das transações usando uma API consistente e, com isso, tornam-se portáveis os aplicativos do Hibernate em diferentes ambientes de execução. Interfaces de Consulta e critérios: usada para executar consultas no banco de dados. As consultas são “escritas” em SQL, para ligar parâmetros de consultas e limitar o número de resultados devolvidos pela consulta. Existem também as interfaces Configuration chamadas pelo código AS de infra-estrutura da aplicação para configurar o Hibernate: Interface de Configuração: é a primeira a ser encontrada quando Hibernate é usado. Essa interface é muito importante porque depois de 5.6 IN configurada, o Hibernate vai criar o SessionFactory. Padrão de persistência DAO(Data Access object) Um dos designs patterns mais populares é o Data Access Object IM (DAO). Ele é utilizadado para persistência de objetos, ou seja, utilizado para gravar, recuperar, alterar e excluir objetos separando o código de apresentação do código para acesso aos dados da aplicação e das rotinas de negócio de tal modo que os objetos de negócio não saibam como estão sendo gravados. UN O padrão DAO possui como objetivo abstrair as complexidades de acesso a banco de dados e facilitar a migração de bases de dados e como vantagens destacam-se: Transparência: os objetos podem utilizar a base de dados sem saber detalhes específicos de sua implementação, isto porque todo o detalhe de implementação está encapsulado ns objetos DAO. Facilidade de Migração: a camada DAO permite que a aplicação possa variar de fabricante de banco de dados de forma facilitada, isto porque toda mudança a ser feita está centralizada da camada DAO Centralização de Acesso a Dados: Como toda operação de acesso a dados está delegada aos DAOs, essa camada separa, isola, o restante 183 da aplicação das implementações de acesso a dados. Essa centralização torna a aplicação mais fácil de ser mantida e gerenciada. Para todas as classes da aplicação Satika System foi criada uma classe DAO abstrata onde ficam todas as operações de persistência genéricas. E para cada classe da aplicação que possui operações específicas foi criado um DAO correspondente à classe que herda dados da classe DAO genérica. UN IM IN AS Na figura 92 é possível visualizar a classe DAO da aplicação. UN IM IN AS 184 Figura 92 - Pesquisa para encontrar todos os clientes 185 A classe DAO possui os métodos responsáveis pelas operações de persistência: saveOrUpdate, delete, find e findAll. Para cada método a sessão (session) é recuperada com ajuda da classe HibernateUtility mostrada na figura UN IM IN AS 93. UN IM IN AS 186 Figura 93 - Classe HibernateUtility da aplicação Satika System 187 Depois, a sessão é usada para iniciar uma transação, persistir o objeto no banco de dados e, por último, commitar a transação. A sessão é iniciada sempre que o método getCurrentSession é invocado e terminado atráves de um commit ou rollback. Para as situações específicas onde são necessárias operações de persistência específicas para cada classe foram criados DAOs específicos da classe que são listados abaixo: Classe EndereçoDAO: Esta classe possui o método Endereco findAllId que é responsável por listar todos os endereços através do recebimento UN IM IN AS de um id. Na figura 94 é possível verificar o código desta classe. Figura 94 - Classe EnderecoDAO 188 Classe FornecedorDAO: Esta classe possui o método List findAllCnpj que é responsável por listar todos os fornecedores através do recebimento de um cnpj. O método List findAllRazao responsável por listar todos os fornecedores através do recebimento de uma razão social e o método List findAllId responsável por listar todos os fornecedores através do recebimento de UN IM IN AS um id. Na figura 95 é possível verificar o código desta classe. Figura 95 - Classe FornecedorDAO 189 Classe PessoaDAO: Esta classe possui os métodos que encontram pessoas através do CPF, Nome, Id, de médicos por id, CPF e nome e os funcionários por CPF, nome e Id. Nas figura 96 figura 97 é possível verificar o UN IM IN AS código desta classe. Figura 96 - Classe PessoaDAO parte 1 UN IM IN AS 190 Figura 97 - Classe PessoaDAO parte 2 191 As classes Produto, Receituário, Venda, ItemVenda, Compra e ItemCompra não possuem implementação específica. As classes Endereço, Fornecedor e Pessoa UN IM IN AS características da classe abstrata DAO. herdam as 192 6 ARQUITETURA E CÓDIGO O desenvolvimento de software pode ser descrito como a elaboração e de um sistema computacional, atendendo a necessidade de um cliente ou empresa http://pt.wikipedia.org/wiki/Desenvolvimento_de_software cite_note-0#cite_note-0. Pode também se entendido como a aplicação dos processos da engenharia de software combinados com a pesquisa das necessidades do produto e do cliente para desenvolver software. O desenvolvimento de software orientado a objetos não é uma tarefa trivial, pois requer experiências que são adquiridas através de práticas e AS de estudos. O software produzido foi o Satika System, uma aplicação Web específica para a empresa Satika Óptica e Design, tendo como principal objetivo atender as necessidades exatas do cliente adotando a metodologia já utilizada IN na empresa, ou seja, o software irá se adaptar à empresa e não o contrário. O Satika System foi implementado na linguagem JAVA, utilizando a plataforma Java Enterprise Edition (JEE) e os frameworks Struts e Hibernate. JEE IM 6.1 A plataforma JEE foi criada para simplificar problemas complexos de aplicações multi-camadas baseadas em web, tornando possível projetar, UN desenvolver, empacotar e implantar a aplicação baseada em componentes. No caso do Satika System é a tecnologia de componentes Enterprise Java Beans (EJB). A plataforma oferece um modelo multi-camada distribuído com a possibilidade de reutilização de componentes, transferência de dados feita em XML, um modelo de segurança unificado e um flexível controle transacional. JEE não é um produto, trata-se de uma especificação padrão e aberta baseada na linguagem JAVA. O fato de ser uma especificação aberta, possibilita o desenvolvimento sem vínculo com fornecedores. Para explicitar melhor, pode-se criar um único arquivo para toda uma aplicação e em qualquer plataforma como por exemplo, Windows, Linux, etc. Assim os desenvolvedores podem escrever o código Java que é 193 compilado em bytecode, um código intermediário entre o código fonte e a linguagem de máquina. Quando o código está pronto para rodar, uma máquina virtual Java (JRE - Java Runtime Environment) interpreta esse bytecode e executa a aplicação. Seus componentes JEE são transformados em bytecode e executados pela JRE. Os containers descritos anteriormente são tipicamente escritos em Java. A aplicação JEE é hospedada em um container, o qual provê serviços necessários, como transações, segurança, e serviços de persistência. A 6.2 AS camada de negócio age como um processador dos dados de negócio. Struts Dentre os frameworks disponíveis para desenvolvimento de aplicações web utilizando a linguagem Java o que se destaca é o Struts, devido IN principalmente aos recursos oferecidos, a sua simplicidade e a grande facilidade de aprendizado, uma vez que existem muitos materiais disponíveis na internet e em livros. Outras vantagens relevantes é que o Struts possui código aberto e gratuito. Struts oferece IM O um componente controlador chamado ActionServlet para controlar o fluxo e navegação da aplicação. Esse controlador é auxiliado por outros componentes tais como Action, ActionForm e ActionForward entre outros para acessar dados, vindos das requisições HTTP UN ou do banco de dados. Oferece também os componentes necessários para implementação dessa camada de controle e o integra com outras tecnologias como os JavaBeans que é utilizado na camada de modelo para gerenciar os dados da aplicação e as Java Server Pages ou JSP usadas na camada de visão para manipulação e inserção de dados. Outra característica é que disponibiliza bibliotecas de tags para apresentação, captação e manipulação de dados nas páginas JSP, bem como frameworks que facilitam as tarefas de implementação, como validação de dados e criação de layout das páginas. Além dos componentes citados acima, o Struts utiliza vários arquivos de configurações como struts-config.xml que armazena as 194 configurações padrões para os objetos do controlador que inclui as ações do usuário, as alterações de estado, as consultas de estado etc. No desenvolvimento da aplicação além dos conhecimentos básicos em em Struts foi necessário aprender conceitos envolvendo componentes, arquivos de configuração, bibliotecas de tags etc. O Struts é composto por pacotes tais como org.apache.struts.action, org.apache.struts.config, org.apache.struts.titles etc, e esses pacotes são compostos por componentes e frameworks com funções específicas em cada camada da aplicação. A aplicação Satika System é dividida nas seguintes camadas: negócio e camada de apresentação. AS camada de integração, também conhecida por camada de dados, camada de O framework Struts pertence a camada de apresentação de dados, e no entanto, como já visto anteriormente fornece componentes para IN implementação do controle da aplicação. O framework Struts não contepla tecnologias para acesso a dados e implementação do negócio. A seguir serão abordados os componentes responsáveis pelo controle da aplicação Satika System: IM Action Servlet: O componente do pacote org.apache.struts.action é a Implementação do padrão de projeto FrontController. É o controlador do Struts e com o auxilio de outros componentes implementa a camada de controle. Ele centraliza todas as requisições e as respostas em um único ponto. Para UN atender a requisições o ActionServlet é auxiliado por vários componentes como Action, ActionForm, ActionForward e ActionMapping, tendo como base o Struts.config.] No anexo X é possível visualizar o StrutsConfig da aplicação Satika System. Action: Tem como finalidade fazer a ligação entre as requisições e a lógica do negócio. Uma classe de ação é uma classe que estende a classe Action e faz a ligação com a camada de modelo, responsável por buscar, inserir, alterar e excluir dados. O Action também é mapeado no Struts.Config. Na figura 98 é possível verificar uma classe de ação, a classe Action.Login é responsável pelo controle de acesso ao sistema Satika System. 195 package satika.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; AS import satika.delegate.Delegate; import satika.form.FormLogin; public class ActionLogin extends Action { public ActionLogin() { IN } @Override public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { FormLogin frm = (FormLogin)form; IM Delegate delegate = new Delegate(); int retorno = delegate.login(frm); if(retorno == -2){ request.setAttribute("user","Usuário Inválido"); return mapping.findForward("index"); UN } else{ if(retorno == -1){ request.setAttribute("senha","Senha Inválida"); return mapping.findForward("index"); } else{ request.getSession().setAttribute("func",frm.getUsuario()); request.getSession().setAttribute("funcId", retorno); return mapping.findForward("adm"); } } }} Figura 98 - Classe Action.Login 196 A classe Action.Login apresenta o código que executa uma ação e retorna um ActionForward, que guarda o caminho de uma página JSP, para que o ActionServlet apresente-a como resposta a uma requisição. Dependendo do retorno recebido pelo delegate é que será decidido qual página será chamada: Se o retorno for -2, é apresentada uma mensagem de “Usuário Inválido” e é mostarda a página inicial (Index). Se o retorno for -1, é apresentada uma mensagem de “Senha Inválida” e também é mostarda a página inicial (Index). Caso contrário está tudo correto e a página do administrador é chamada. O componente ActionForm é responsável por recolher e validar os AS dados contidos em um formulário, nesse caso o FormLogin. Após receber os dados o FormLogin consulta o Delegate que consulta as informações na camada de modelo com a finalidade de verificar se estão corretos. UN IM IN Na figura 99 é mostrado o código do FormLogin em questão: 197 package satika.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionMapping; public class FormLogin extends ActionForm { private static final long serialVersionUID = 1L; private String usuario; private String senha; public String getSenha() {return senha;} AS public FormLogin() {} public void setSenha(String senha) IN {this.senha = senha;} public String getUsuario() {return usuario;} public void setUsuario(String usuario) IM {this.usuario = usuario;} @Override public void reset(ActionMapping arg0, HttpServletRequest arg1) { UN this.usuario = ""; this.senha = ""; } @Override public ActionErrors validate(ActionMapping HttpServletRequest arg1) { return super.validate(arg0, arg1); } } Figura 99 - Código do FormLogin arg0, 198 Quando o formulário LoginForm for submetido para fazer a captação dos dados é necessária a criação da classe Java que estende a classe ActionForm, no caso a FormLogin. Na classe FormLogin são criados os atributos get e set correspondentes aos campos do formulário. Todos os componentes citados trabalharão juntos dando suporte a implementação da camada de controle. Assim cada requisição HTTP é direcionada para o ActionServlet que aciona outros componentes para auxilia-lo na apresentação da resposta a essa requisição. Quando o ActionServlet recebe uma requisição, ele aciona o componente Action para acessar a classe na camada modelo através do Delegate. Assim o Action aciona o componente AS ActionForm para fazer o recolhimento dos dados que serão inseridos no modelo. O Action tem como retorno um ActionForward. O componente ActionForward é o componente responsável por guardar o caminho de uma página JSP, que será repassado ao ActionServlet para que ele apresente-a como resposta. Todos IN esses processos são definidos no arquivo de configuração struts-config.xml, dentro da tag action-Mappings. Quando o ActionServlet recebe uma requisição, ele consulta o ActionMapping para saber quais os passos a serem seguidos para atender a IM essa requisição. Os componentes do modelo têm como finalidade manter o estado da aplicação. Para acessar e mudar os objetos da camada modelo, o Struts faz o uso das tecnologias para promover o acesso aos dados. Como descrito no UN capítulo de Persistência a aplicação Satika System utiliza o framework Hibernate para essa finalidade. Para desenvolver a camada de apresentação o Struts usa o JSP e oferece as bibliotecas de tags contidas no pacote org.apache.struts.taglib. Essas tecnologias e componentes dão suporte a criação de interfaces gráficas da aplicação web Satika System aplicação, bem como a captação e apresentação dos dados inseridos pelo usuário. A configuração dos componentes do Struts é feita em arquivos XML. Os arquivos de configuração são: web.xml, struts-config.xml, além destes também existem outros opcionais, para caso seja necessário utilizar alguns componentes ou framework adicionais como: framework Tiles, que é usado para a construção de layout em páginas JSP facilitando a implementação e 199 diminuindo a complexidade e Hibernate usado para acesso a dados. Como visto anteriormente o Struts faz parte da camada de apresentação e não disponibiliza tecnologias para implementação de negócio e de acasso a dados. Para suprir essa necessidade além da utilização do Hiberante como framework para acesso a dados foram utilizados padrões de Projetos, tais como Business Object (BO) para negócio e Data Acces Object (DAO) para acesso a banco de dados. Além desses, o Struts representa outros através de seus componentes com o Action Servlet que é a implementação do padrão FrontController. O BO (Business Object) é a camada responsável por montar a AS regra de negócio e fazer o acesso e atualização do banco, cuida para que os dados estejam todos preenchidos corretamente. O DAO (Data Acces Object) é um padrão para persistência de dados que permite separar regras de negócio das regras de acesso a banco de IN dados. O DAO deve buscar os dados do banco e converter em objetos para ser usado pela aplicação provendo pontos unificados de acesso a dados, isto é, conhece como pegar os objetos, converter em instruções SQL e mandar para o banco de dados. Temos um DAO para cada objeto do domínio do sistema, UN IM conforme demonstrado na figura 100 abaixo. Figura 100 - Classes DAO 200 Ao por exemplo fazer uma solicitação através de um form. A solicitação é enviada para o Action que consulta um delegate. Depois passa pelo BO em seguida pelo DAO chegando à base onde a consulta é feita e é retornado pelo mesmo caminho sendo finalmente apresentada em outro form. Os mapping do Hibernate têm a função de gerenciar e separar a parte de negócio da parte de UN IM IN AS acesso a banco. 201 7 CONCLUSÃO Para a construção do sistema foram cumpridas várias etapas para se chegar a um produto final com qualidade. A primeira etapa foi a etapa de análise, desde o início do projeto sofreu melhoramentos contínuos. Com o passar das fases foram identificadas melhorias nos processos e na forma que os estes poderiam melhorar o sistema, os diagramas de caso de uso, de seqüência, de classes de projeto foram alterados para melhor atender a especificação do cliente. A evolução da fase de análise é importante e também é um processo AS natural para que se obtenha um produto final de qualidade. A escolha de uma ferramenta de análise buscou a melhor opção que atendesse de forma objetiva a construção de diagramas UML. Foi utilizada para isso a ferramenta de Enterprise Architect para documentação, visualização IN e especificação das funcionalidades do sistema. A forma de interação do sistema com o usuário foi estudada para possibilitar que o sistema ajude o usuário em suas ações diárias para agregar uma ferramenta prática para o usuário, foram implementados JSP, CSS e para IM aperfeiçoamentos futuros pode-se migrar para a tecnologia AJAX ou Microsoft SilverLigh que apresenta uma nova experiência para o usuário do sistema em sua interação com o sistema. A integração dos aspectos logísticos e administrativo-financeiros UN num único software foi uma solução viável para que a empresa Satika Óptica e Design pudesse melhorar e otimizar seu negócio. Em virtude disso foi desenvolvido o projeto que resultou em uma aplicação Web específica para atender todas as necessidades de negócio da Empresa Satika Óptica e Design o Satika System. Através dele foram automatizados cadastros, compras e vendas e a visualização de alguns relatórios gerencias. Uma informatização pode ser considerada eficiente quando implementa melhoria da qualidade de funcionamento da empresa à situação que existia antes do uso da informática. A eficiência fundamenta-se em dados confiáveis e gera como efeito agilidade na recuperação de dados e diminuição dos custos. A otimização dos processos da empresa ajudaram muito no que diz 202 respeito a consistência e uniformidade das informações nas três unidades da empresa. A aplicação Satika System produz informação que tem de ser preservada para uso futuro. Como tal, existem mecanismos que possibilitam o armazenamento dessas informações garantindo assim persistência, e é preciso estudar tanto as opções quanto os casos em que elas serão implementadas, enumerando as diferenças entre os diversos tipos de abordagens e analisando a sua melhor aplicação. Foi importante compreender alguns desses mecanismos e principalmente adquirir o conhecimento necessário para escolher entre eles o Estes mecanismos evitam AS que mais se adaptava e traria mais benefícios a aplicação Satika System. a complexidade intrínseca à implementação do mecanismo de persistência por parte dos programadores. A linguagem Java suporta intrinsecamente a persistência através de entre outras IN ferramentas do Hibernate que foi o framework escolhido para implementação. Utilizando o Hibernate juntamente com o padrão do projeto DAO foi possível implementar satisfatoriamente toda a camada de persistência da aplicação Satika System. IM Com dedicação, foi possível aprender e dominar essas ferramentas realizando um salto na qualidade, facilidade e manutenção da aplicação. Todo o processo de desenvolvimento do sistema levou em consideração vários aspectos de segurança (protegendo o ambiente UN computacional contra as perdas repentinas ou por deterioração gradativa do sistema), agilidade, tempo, custo e viabilidade. Além de aspectos da dinâmica operacional e o perfil dos recursos humanos que manipulariam a aplicação, uma vez que quanto mais integrado um software ao seu meio, maior será a sua aceitação. Programas que não abordam adequadamente estes aspectos têm mais probabilidade de ser abandonados pelas dificuldades em utilizá-los como instrumento de aperfeiçoamento dos trabalhos diários. A implementação desse Software favorece a automação, contribuindo assim para o aumento da eficiência dos processos produtivos, resultando em maior lucratividade e qualidade da empresa Satika System. 203 REFERÊNCIAS BIBLIOGRÁFICAS ARAÚJO, A. AllFusion ERwin Data Modeler. 2007. Disponível em: <http://www.devmedia.com.br/articles/viewcomp.asp?comp=1802>. Acesso em: 01 maio 2008. BANCO de Dados: Definições., 2008. Disponível em: <http://pt.wikipedia.org/wiki/Banco_de_dados >. Acesso em: 20 maio 2008. AS BASHAM, B.; SIERRA, K.; BATES, B.; Use a cabela! Servlets & JSP. Rio de Janeiro: Alta books LTDA., 2005. 534 p. BAUER C; KING G. Hibernate em Ação. Rio de Janeiro: Editora Ciência Moderna Ltda., 2005 IN BEZERRA, E. Princípios de análise e projeto de sistemas com uml. 9. ed. São Paulo: Campus, 2002. 17p. 45p. IM COMO informatizar. 2006. Apresenta a importância de informatizar uma empresa. Disponível em:< http://www.softgran.com.br/art01.pdf>. Acesso em: 25 jun. 2008. UN COSTA, A. Quem tem medo do optometrista?. São Paulo, 07 feb. 2008. Disponível em <HTTP://WWW.CROOSP.ORG.BR/WORK/CRONICA/INDEX1.HTML> Acesso em 22 de abr. de 2008. HAY D.C. Princípio de Modelagem de dados. Tradução de M. C. Ribeiro. Prefácio de R. Barker. São Paulo: Makron Books, 1999. HUSTED, T.; DUMOULIN, C.; FRANCISCUS, G.; WINTERFELDT, D.; Struts em ação. Rio de Janeiro:Ciência Moderna LTDA.,2004. 604 p. MELO, R.N; SILVA, S.D. da; TANAKA, A.K. Banco de dados em aplicações cliente – servidor: distribuição de processamento, fundamentos de banco de dados, banco de dados distribuídos e banco de dados heterogêneos. Rio de Janeiro: Infobook, 1997. 204 NIELSEN, J.; Projetando websites. Tradução de Ana Gibson. Rio de Janeiro: Elsevier,2000. 416 p. PORQUE MYSQL, 2008. Disponível em: <http://www.mysqlbrasil.com.br/?q=node/2>. Acesso em: 30 abr. 2008. SANCHES, A.R. Disciplina:Fundamentos de Armazenamento e Manipulação de Dados bancos. 2005. Disponível em: < http://www.ime.usp.br/~andrers/aulas/bd2005-1/aula3.html >. Acesso em: 10 maio 2008. AS SILBERSCHATZ A.; KORTH, H.F.; SUDARSHAN, S. Sistema de Banco de Dados. 3. ed. São Paulo: Pearson Makron Books, 1999. IN W3C DEVELOPS Web Standards and Guidelines. 2008. Disponível em < http://www.w3.org/Consortium/>. Acesso em 13 de Jun. de 2008. UN IM WAZLAWICK, R. S. Análise e projeto de sistemas de informação orientados a objetos. Rio de Janeiro: Campus, 2004. 253p 205 APÊNDICE A – Código menu.jsp: Segue o código completo para Menu.jsp. /*********************************************** * AnyLink Vertical Menu- © Dynamic Drive (www.dynamicdrive.com) * This notice MUST stay intact for legal use * Visit http://www.dynamicdrive.com/ for full source code AS ***********************************************/ //Contents for menu 1 var menuCliente=new Array() IN menuCliente[0]='<a href="./cadastroCli.jsp">Cadastro</a>' menuCliente[1]='<a href="./atualizaBusCli.jsp">Atualizacao</a>' menuCliente[2]='<a href="./excluiBusCli.jsp">Exclusao</a>' menuCliente[3]='<a href="./pesquisaCli.jsp">Pesquisa</a>' IM menuCliente[4]='<a href="./receituario.jsp">Receituario</a>' //Contents for menu 2, and so on UN var menuMedico=new Array() menuMedico[0]='<a href="./cadastroMed.jsp">Cadastro</a>' menuMedico[1]='<a href="./atualizaBusMed.jsp">Atualizacao</a>' menuMedico[2]='<a href="./excluiBusMed.jsp">Exclusao</a>' menuMedico[3]='<a href="./pesquisaMed.jsp">Pesquisa</a>' //Contents for menu 3, and so on var menuFornecedor=new Array() menuFornecedor[0]='<a href="./cadastroFor.jsp">Cadastro</a>' menuFornecedor[1]='<a href="./atualizaBusFor.jsp">Atualizacao</a>' 206 menuFornecedor[2]='<a href="./excluiBusFor.jsp">Exclusao</a>' menuFornecedor[3]='<a href="./pesquisaFor.jsp">Pesquisa</a>' //Contents for menu 4, and so on var menuFuncionario=new Array() menuFuncionario[0]='<a href="./cadastroFun.jsp">Cadastro</a>' menuFuncionario[1]='<a href="./atualizaBusFun.jsp">Atualizacao</a>' menuFuncionario[2]='<a href="./excluiBusFun.jsp">Exclusao</a>' AS menuFuncionario[3]='<a href="./pesquisaFun.jsp">Pesquisa</a>' var disappeardelay=250 //menu disappear speed onMouseout (in miliseconds) /////No further editting needed var ie4=document.all IN var horizontaloffset=2 //horizontal offset of menu from default location. (0-5 is a good value) if (ie4||ns6) IM var ns6=document.getElementById&&!document.all document.write('<div id="dropmenudiv" style="visibility:hidden;width: 160px" UN onMouseover="clearhidemenu()" onMouseout="dynamichide(event)"></div>') function getposOffset(what, offsettype){ var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop; var parentEl=what.offsetParent; while (parentEl!=null){ totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop; parentEl=parentEl.offsetParent; } return totaloffset; 207 } function showhide(obj, e, visible, hidden, menuwidth){ if (ie4||ns6) dropmenuobj.style.left=dropmenuobj.style.top=-500 dropmenuobj.widthobj=dropmenuobj.style dropmenuobj.widthobj.width=menuwidth if (e.type=="click" && obj.visibility==hidden || e.type=="mouseover") AS obj.visibility=visible else if (e.type=="click") obj.visibility=hidden function iecompattest(){ IN } return (document.compatMode && document.compatMode!="BackCompat")? } IM document.documentElement : document.body function clearbrowseredge(obj, whichedge){ UN var edgeoffset=0 if (whichedge=="rightedge"){ var windowedge=ie4 && !window.opera? iecompattest().scrollLeft+iecompattest().clientWidth-15 : window.pageXOffset+window.innerWidth-15 dropmenuobj.contentmeasure=dropmenuobj.offsetWidth if (windowedge-dropmenuobj.x-obj.offsetWidth < dropmenuobj.contentmeasure) edgeoffset=dropmenuobj.contentmeasure+obj.offsetWidth } else{ var topedge=ie4 && !window.opera? iecompattest().scrollTop : window.pageYOffset 208 var windowedge=ie4 && !window.opera? iecompattest().scrollTop+iecompattest().clientHeight-15 : window.pageYOffset+window.innerHeight-18 dropmenuobj.contentmeasure=dropmenuobj.offsetHeight if (windowedge-dropmenuobj.y < dropmenuobj.contentmeasure){ //move menu up? edgeoffset=dropmenuobj.contentmeasure-obj.offsetHeight if ((dropmenuobj.y-topedge)<dropmenuobj.contentmeasure) //up no good either? (position at top of viewable window then) edgeoffset=dropmenuobj.y } AS } return edgeoffset function populatemenu(what){ if (ie4||ns6) IN } dropmenuobj.innerHTML=what.join("") IM } function dropdownmenu(obj, e, menucontents, menuwidth){ UN if (window.event) event.cancelBubble=true else if (e.stopPropagation) e.stopPropagation() clearhidemenu() dropmenuobj=document.getElementById? document.getElementById("dropmenudiv") : dropmenudiv populatemenu(menucontents) if (ie4||ns6){ showhide(dropmenuobj.style, e, "visible", "hidden", menuwidth) dropmenuobj.x=getposOffset(obj, "left") dropmenuobj.y=getposOffset(obj, "top") 209 dropmenuobj.style.left=dropmenuobj.x-clearbrowseredge(obj, "rightedge")+obj.offsetWidth+horizontaloffset+"px" dropmenuobj.style.top=dropmenuobj.y-clearbrowseredge(obj, "bottomedge")+"px" } return clickreturnvalue() } function clickreturnvalue(){ AS if (ie4||ns6) return false else return true function contains_ns6(a, b) { while (b.parentNode) if ((b = b.parentNode) == a) return false; } IM return true; IN } UN function dynamichide(e){ if (ie4&&!dropmenuobj.contains(e.toElement)) delayhidemenu() else if (ns6&&e.currentTarget!= e.relatedTarget&& !contains_ns6(e.currentTarget, e.relatedTarget)) delayhidemenu() } function hidemenu(e){ if (typeof dropmenuobj!="undefined"){ if (ie4||ns6) 210 dropmenuobj.style.visibility="hidden" } } function delayhidemenu(){ if (ie4||ns6) delayhide=setTimeout("hidemenu()",disappeardelay) } AS function clearhidemenu(){ if (typeof delayhide!="undefined") clearTimeout(delayhide) function radioCheck(){ var a; IN } IM for (a=0;a<document.atualiza.radio.length;a++){ if (document.atualiza.radio[a].checked){ document.atualiza.id.value = document.atualiza.radio[a].value }; UN }; }; function PopUp(u, w, h){ // t = (screen.width - w) / 2; t = 100; l = (screen.height - h) / 2; window.open(u, 'wpopup', 'top=' + t + ', left=' + l + ', width=' + w + ', height=' + h + ', scrollbars=yes, resizable=no, menubar=no, location=no, status=no, toolbar=no'); } 211 function carrega(){ window.opener.document.receituario.cpf1.value = document.viu.cpf.value; window.opener.document.receituario.cpf.value = document.viu.id.value; window.close(); } function carregaM(){ window.opener.document.receituario.medico1.value = document.vil.cpf.value; AS window.opener.document.receituario.medico.value = document.vil.id.value; window.close(); function carregaV(){ IN } window.opener.document.venda.cpf1.value = document.viu.cpf.value; window.opener.document.venda.cliente.value = document.viu.id.value; UN } IM window.close(); 212 APÊNDICE B – Código index.jsp Segue o código completo para Index.jsp. <%@ page contentType="text/html; charset=utf-8" language="java" errorPage=""%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" <html xmlns="http://www.w3.org/1999/xhtml"> <head> AS "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> IN <title>Sátika Ótica e Design</title> <link href="css/css_index.css" rel="stylesheet" type="text/css" /> <script type="text/javascript" language="JavaScript" src="js/login.js"></script> IM </head> <body class="oneColFixCtrHdr"> <div id="container"> UN <div id="header"> <img src="imagens/cabecalho_index.jpg"/> </div> <div id="mainContent"> <br/> <br/> <br/> <br/> <br/> <br/> <center> <form name="login" action="login.do" method="post"> <table width=225 border=1 bgcolor="gray" cellpadding=3 > <tr> <td colspan=2 height="13"> 213 <center> <p> <font face="Arial Black" style="font-size: 14pt;"> Õ rea restrita: </font> </p> </center> </td> <tr> AS </tr> <td height="30"> <p align="right"/> <font face="Verdana" style="font-size: 10pt; bafont-weight:700"> </font> <p align="right"/> IM <br/> IN <img border="0" src="imagens/user.gif" width="80" height="80" align="left"/> <font face="Verdana" style="font-size: 10pt; font-weight:700"> <br/> Usuário: UN </font> </td> <td height="30" align="center"> <input type="text" name="usuario" size="20" maxlength="20"/><font style="font-size: 12px; color: red;"><br />${user }</font> </td> </tr> <tr> <td height="30"> <p align="right"/> 214 <font style="font-size: 10pt" face="Verdana"> <b> <img border="0" src="imagens/senha.gif" align="left" width="80" height="80"/> <br/> <br/> Senha </b>: </font> AS </td> <td height="30"> <input type="password" name="senha" size="20" maxlength="10"/><font style="font-size: 12px; color: red;"><br />${senha }</font> IN </td> </tr> <tr> IM <td colspan=2 align=center height="26"> UN <input type="submit" value="Efetuar Login"/> </td> </tr> </table> </form> </center> <p/> <p align="center" style="margin-top: 0; margin-bottom: 0"> </p> <br/> <br/> <br/> <br/> <br/> </div> </body> </html> <br/> </div> 215 APÊNDICE C – Código css_index.css Segue o código completo para css_index.css. @charset "utf-8"; body { font: 100% Verdana, Arial, Helvetica, sans-serif; background: #666666; for differing browser defaults */ padding: 0; AS margin: 0; /* it's good practice to zero the margin and padding of the body element to account text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left color: #000000; } .oneColFixCtrHdr #container { IN aligned default in the #container selector */ IM width: 800px; /* using 20px less than a full 800px width allows for browser chrome and avoids a horizontal scroll bar */ background: #FFF000; margin: 0 auto; /* the auto margins (in conjunction with a width) center the page */ UN border: 1px solid #000000; text-align: left; /* this overrides the text-align: center on the body element. */ border-width: 1px; border-color: black; } .oneColFixCtrHdr #header { background: black; padding: 0 10px 0 0px; /* this padding matches the left alignment of the elements in the divs that appear beneath it. If an image is used in the #header instead of text, you may want to remove the padding. */ 216 height: 101px; } .oneColFixCtrHdr #header h1 { margin: 0; /* zeroing the margin of the last element in the #header div will avoid margin collapse - an unexplainable space between divs. If the div has a border around it, this is not necessary as that also avoids the margin collapse */ padding: 10px 0; /* using padding instead of margin will allow you to keep the element away from the edges of the div */ } AS .oneColFixCtrHdr #mainContent { padding: 0 20px; /* remember that padding is the space inside the div box and margin is the space outside the div box */ background: gray; UN IM IN } 217 APÊNDICE D – Código css_int.css Segue o código completo para css_int.css. @charset "utf-8"; body { font: 100% Verdana, Arial, Helvetica, sans-serif; AS background: #666666; margin: 0; /* it's good practice to zero the margin and padding of the body element to account for differing browser defaults */ padding: 0; IN text-align: center; /* this centers the container in IE 5* browsers. The text is then set to the left aligned default in the #container selector */ color: #000000; } IM .twoColFixLtHdr #container { width: 800px; /* using 20px less than a full 800px width allows for browser chrome and avoids a horizontal scroll bar */ height: 800px; UN background: #FFFFFF; margin: 0 auto; /* the auto margins (in conjunction with a width) center the page */ border: 1px solid #000000; text-align: left; /* this overrides the text-align: center on the body element. */ border-width: 1px; border-color: black; } .twoColFixLtHdr #header { background: #000000; 218 padding: 0 0px 0 0px; /* this padding matches the left alignment of the elements in the divs that appear beneath it. If an image is used in the #header instead of text, you may want to remove the padding. */ position: relative; height: 101px; } .twoColFixLtHdr #header h1 { margin: 0; /* zeroing the margin of the last element in the #header div will avoid margin as that also avoids the margin collapse */ AS collapse - an unexplainable space between divs. If the div has a border around it, this is not necessary padding: 0px 0; /* using padding instead of margin will allow you to keep the element away from the edges of the div */ .twoColFixLtHdr #sidebar1 { IN } float: left; /* since this element is floated, a width must be given */ width: 177px; /* the actual width of this div, in standards-compliant browsers, or standards IM mode in Internet Explorer will include the padding and border in addition to the width */ background: #FFFFFF; /* the background color will be displayed for the length of the content in the column, but no further */ padding: 15px 10px 15px 20px; UN position: relative; } .twoColFixLtHdr #mainContent { margin: 0 0 0 150px; /* the left margin on this div element creates the column down the left side of the page - no matter how much content the sidebar1 div contains, the column space will remain. You can remove this margin if you want the #mainContent div's text to fill the #sidebar1 space when the content in #sidebar1 ends. */ padding: 0 20px; /* remember that padding is the space inside the div box and margin is the space outside the div box */ } 219 .fltrt { /* this class can be used to float an element right in your page. The floated element must precede the element it should be next to on the page. */ float: right; margin-left: 8px; } .fltlft { /* this class can be used to float an element left in your page */ float: left; margin-right: 8px; } AS .clearfloat { /* this class should be placed on a div or break element and should be the final element before the close of a container that should fully contain a float */ clear:both; font-size: 1px; line-height: 0px; UN IM } IN height:0; 220 APÊNDICE E – Código menu.css Segue o código completo para menu.css. #dropmenudiv{ position:absolute; background-color: white; AS border:1px solid black; border-bottom-width: 0; font:normal 12px Verdana; line-height:18px; } width: 100%; display: block; IM #dropmenudiv a{ IN z-index:100; text-indent: 1px; border-bottom: 1px solid black; UN padding: 1px 0; text-decoration: underline; font-weight: bolder; color: black; } #dropmenudiv a:hover{ /*hover background color*/ background-color: gray; } 221 /* Sample CSS definition for the example list. Remove if desired */ .navlist li { list-style-type: square; width: 135px; background-color: #FFFFB9; } #dropmenudiv a:VISITED { color: black; UN IM IN AS } 222 APÊNDICE F – Código sdmenu.css Segue o código completo para sdmenu.css. div.sdmenu { width: 150px; font-family: Arial, sans-serif; AS font-size: 12px; padding-bottom: 10px; background: url("../imagens/bottom.gif") no-repeat right bottom; color: #fff; div.sdmenu div { IN } background: url("../imagens/title.gif") repeat-x; } IM overflow: hidden; div.sdmenu div:first-child { background: url("../imagens/toptitle.gif") no-repeat; } UN div.sdmenu div.collapsed { height: 25px; } div.sdmenu div span { display: block; padding: 5px 25px; font-weight: bold; color: white; background: url("../imagens/expanded.gif") no-repeat 10px center; cursor: default; 223 border-bottom: 1px solid #ddd; } div.sdmenu div.collapsed span { background-image: url("../imagens/collapsed.gif"); } div.sdmenu div a { padding: 5px 10px; background: #eee; border-bottom: 1px solid #ddd; color: #066; } background : #fff; } div.sdmenu div a:hover { IN div.sdmenu div a.current { AS display: block; IM background : black url("../imagens/linkarrow.gif") no-repeat right center; color: #fff; text-decoration: none; UN }