Académique Documents
Professionnel Documents
Culture Documents
ANDRÉ BORSATTI
BRUNO ALVARES DEFENSOR
GABRIEL ARAÚJO GARCIA
MARCOS GUIMARÃES DE MEDEIROS
PAULO HENRIQUE TAVARES
VICTOR HUGO DE OLIVEIRA E SILVA
Uberlândia
2010/1
ANDRÉ BORSATTI
BRUNO ALVARES DEFENSOR
GABRIEL ARAÚJO GARCIA
MARCOS GUIMARÃES DE MEDEIROS
PAULO HENRIQUE TAVARES
VICTOR HUGO DE OLIVEIRA E SILVA
Banca Examinadora:
DEDICATÓRIA
Lista de Figuras
Página
Página
CSS (Cascading Style Sheets): é uma linguagem de estilo utilizada para definir a
apresentação de documentos escritos em uma linguagem de marcação, como
HTML ou XML. Seu principal benefício é prover a separação entre o formato e o
conteúdo de um documento. Ao invés de colocar a formatação dentro do
documento, o desenvolvedor cria um link para uma página que contém os estilos,
procedendo de forma idêntica para todas as páginas de um portal. Quando quiser
alterar a aparência do portal basta portanto modificar apenas um arquivo.
SUMÁRIO
1INTRODUÇÃO .................................................................................................................................13
1.1FINALIDADE......................................................................................................................................13
1.2ESCOPO.........................................................................................................................................13
2 ESPECIFICAÇÃO DO PROBLEMA.................................................................................................13
2.1DESCRIÇÃO DO NEGÓCIO E DA EMPRESA.................................................................................................13
2.2ESPECIFICAÇÃO DE REQUISITOS.............................................................................................................14
2.2.1Requisitos não funcionais....................................................................................................17
2.3REGRAS DE NEGÓCIO.........................................................................................................................18
3ANÁLISE DO SISTEMA.....................................................................................................................19
3.1INTRODUÇÃO....................................................................................................................................19
3.2FERRAMENTA DE MODELAGEM...............................................................................................................20
3.3DIAGRAMA DE CASOS DE USO.............................................................................................................20
3.4DESCRIÇÃO DOS CASOS DE USO E ATORES............................................................................................21
3.4.1Descrição dos Casos de Uso...............................................................................................21
CADASTRAR FUNCIONÁRIO.............................................................................................................22
CADASTRAR FORNECEDOR............................................................................................................23
CADASTRAR MERCADORIA.............................................................................................................24
CADASTRAR VALOR DA COMISSÃO...............................................................................................25
EFETUAR VENDA...............................................................................................................................26
EFETUAR VENDA CONDICIONAL.....................................................................................................28
REALIZAR DEVOLUÇÃO DE MERCADORIA....................................................................................29
FLUXO ALTERNATIVO [3]: CANCELAMENTO...................................................................................................29
REALIZAR LOGIN...............................................................................................................................30
FLUXO ALTERNATIVO [3]: CANCELAMENTO..................................................................................................30
EMITIR RELATÓRIOS.........................................................................................................................31
FLUXO ALTERNATIVO [3]: CANCELAMENTO...................................................................................................32
ATUALIZAR ESTOQUE.......................................................................................................................32
FLUXO ALTERNATIVO [3]: CANCELAMENTO...................................................................................................33
3.4.2Descrição dos Atores...........................................................................................................33
3.5CLASSES DE ANÁLISE.........................................................................................................................34
3.6DIAGRAMA DE CLASSES DE NEGÓCIO.....................................................................................................34
3.6.1Classes de Fronteira (o bruno já fez)...................................................................................35
3.6.2Classe Controladora............................................................................................................36
3.6.3Classe de Entidade..............................................................................................................37
3.7DIAGRAMA DE SEQUÊNCIA...................................................................................................................38
4PERSISTÊNCIA DE DADOS.............................................................................................................43
4.1.1Introdução............................................................................................................................44
4.2PADRÃO DE PROJETO DAO................................................................................................................44
4.3DIAGRAMA DE ENTIDADE E RELACIONAMENTO..........................................................................................44
4.4MAPEAMENTO OBJETO RELACIONAL......................................................................................................45
4.4.1Acesso a banco de dados com JDBC..................................................................................46
4.4.2Mapeamento Objeto Relacional usando o Hibernate..........................................................46
5PROJETO DE INTERFACE...............................................................................................................49
5.1INTRODUÇÃO....................................................................................................................................49
5.2TECNOLOGIAS UTILIZADAS....................................................................................................................49
5.3DIAGRAMA DE ESTADOS DE NAVEGAÇÃO .................................................................................................51
6ARQUITETURA E CÓDIGO...............................................................................................................52
6.1INTRODUÇÃO....................................................................................................................................52
6.2APLICAÇÃO EM CAMADAS....................................................................................................................52
6.3MODELO MVC................................................................................................................................53
6.3.1Arquitetura MVC..................................................................................................................53
6.3.2Arquitetura Struts.................................................................................................................56
6.4PADRÕES DE PROJETO DA CAMADA DE APRESENTAÇÃO.............................................................................57
6.5PADRÕES DE PROJETO DA CAMADA DE NEGÓCIO.....................................................................................58
6.6PADRÕES DE PROJETO DA CAMADA DE INTERFACE....................................................................................58
6.7-DIAGRAMA DE CLASSES DE PROJETO...................................................................................................61
6.7.1-Diagrama de Classes de Projeto por Caso de Uso Implementado....................................62
.....................................................................................................................................................62
6.7.2-Diagrama de Pacotes.........................................................................................................62
REFERÊNCIAS BIBLIOGRÁFICAS....................................................................................................63
APÊNDICE ..........................................................................................................................................64
13
14
3 ANÁLISE DO SISTEMA
3.1 Introdução
uc P G I
C o i sa s d e C ri a n ç a
R e a liz a r L o g in C a d a s tr a r
F u n c i o n a r io
E fe tu a r V e n d a
C a d a s tr a r
Fo rne c e do r
R e g i s tr a r V e n d a« i n c l u d e »
C o n d ic io n a l
C a d a s tr a r
F u n c io n a rio M e r c a d o ria
« in clu d e »
A tu a l i z a r E s to q u e A d m i n i s tr a d o r
« in clu d e »
R e a liz a r D e v o lu ç ã o
d e M e rc a d o ria
C a d a s tr a r V a l o r d a
C o m is s ã o
A d m i n i s tr a d o r C a d a s tr a r C l i e n te s
E m i tir R e l a to r i o s
Fluxo Principal
Fluxo Principal
Fluxo Principal
27
Fluxo Principal
Fluxo Principal
Fluxo de Exceção [ ]:
Não há fluxo de Exceção
Cliente
Dependente
- endereco: String
Devolucao - estado: String - cpfTitular: String
realiza - nome: String - nome: String
- codProduto: String cadastra
- obs: String - numeracao: int
1..* 1
0..* - numero: int
+ criaDependente() : void
1..* 1 + realizaCompra() : void Fornecedor
+ realizarDevolucao() : void
- cnpj: String
1
- nome: String
possui
1..*
1 cadastra
1..*
Pagamento Funcionario
pode ter Venda 1..
- forma: String - id: String
é pago por - cpf: String Administrador
- valor: int realiza - nome: String
- item: ArrayList<Item>
1 1- itemCod: int 0..* 1
+ alterar() : void + cadastrarFonecedor(String) : void
+ cadastrarCliente(Cliente) : void
- pedNumero: int + emitirRelatorios() : Relatorio
+ gravar() : void
+ atualizaCodigoItens() : void 1
+ quantidadeDoProduto(String) : int
1..* Item possui + realizaVenda() : void emite
+ removeArray(int) : void
- codProduto: String 1..* 1
- descricaoProduto: String 1..* 0..*
- itemCod: int
- quantidadeProduto: int Relatorios
Estoque
é atualizado - relatorio1: String
* 1 - quantidadeItens: int
é um - relatorio2: String
atualiza
empresa.
Interface Cadastrar Cliente: Formulário para cadastro de cliente e seus
dependentes, para assim manter uma base de cliente para gerar relatórios e
disseminar promoções futuramente.
Interface Cadastrar Produtos: Formulário para cadastro de produtos da
empresa. É ai que ocorre a entrada em estoque de todos os produtos da empresa e
é onde são cadastradas as características de cada produto com seus respectivos
códigos.
Interface Atualiza Estoque: Formulário para se fazer a atualização do
estoque dos produtos da loja, colocando o código do produto se pode colocar a
atualização da quantidades dos produtos para se dar entrada em estoque.
de dados dos objetos criados nas outras entidades, nas entidades DAO são feitas as
conexões com o banco de dados e são feitas as persistências em banco de dados.
Entidade ConectionFactory - Classe responsável por criar a conexão
com o banco de dados, nesta classe estão inclusos informações como usuário e
senha do banco de dados.
sd Realizar Login
Preenche dados
login.action
intercept(ActionInvocation
invocation)
return Ok
Página Principal
Página Principal
sd Cadastrar Clientes
clienteForm.jsp
insereClienteUpdate.action
insereClienteUpdate()
alt
grava(cliente)
[Editar cliente]
atualizaCliente(cliente)
atualiza(cliente)
return "ok"
clienteForm.jsp
alt
O diagrama da figura 4 mostra a sequencia de ações para a realização do cadastro de um cliente, note que no
diagrama existe a possibilidade tanto de cadastrar um novo cliente como a opção de editar um cliente já
existente, pois o fluxo de ações é o mesmo para ambos.
40
sd cadastrarFuncionario
funcionarioForm.jsp
fornece dados
insertFuncionarioUpdate.action
insertFuncionarioUpdate()
alt
[Novo funcionário]
gravaFuncionario(funcionario)
grava(fun)
[Atualiza funcionário]
editar(funcionario)
editar(funcionario)
buscaTodosFuncionario()
buscaTodosFuncionarios()
buscaTodosFuncionarios()
return listaFuncionarios
return listaFuncionarios;
return "ok"
listarFuncionarios.jsp
alt
[Resposta novo funcionário]
inserido com sucesso
O diagrama da Figura 5 mostra a sequência de ações para efetuar o cadastramento de um funcionário, note que
no diagrama existe a possibilidade tanto de cadastrar um novo funcionário como também editar um funcionário
já existente no sistema.
41
sd fornecedor
cadastroFornecdedorForm.jsp
fornece dados
insereFornecedorUpdate.action
insereFornecedorUpdate()
alt
[Novo Fornecedor]
insereFornecedor(fornecedor)
cadastrar(fornecedor)
[Atualizar Fornecedor]
atualizaFornecedor(fornecedor)
atualiza(fornecedor)
buscaTodosFornecedores()
listarTodos()
listar()
return listaFornecedor
return lista
return "ok"
listaFornecedor.jsp
alt
O diagrama da Figura 6 descreve os passos para realizar-se o cadastramento de um novo fornecedor, é possível
tanto o cadastramento de um novo fornecedor como também a edição de dados de um já cadastrado
anteriormente.
42
sd cadastrarMercadoria
produtoForm.jsp
fornece dados
sd cadastrarComissao
insereProduto.action
buscaTodosFuncionarios() grava(produto)
buscaTodosFuncionarios()
[Atualizar produto]
return listaFuncionarios
editaProduto(produto)
return listaFuncionarios
atualiza(produto)
return "ok"
listarFuncionarios.jsp
buscaTodosProduto()
listarFuncionarios.jsp
produtoService.buscaT odos()
seleciona editar comissão
todos()
editaComissao.action
buscaFuncionario() listaProdutos
buscaFuncionario(id)
todos
buscaFuncionario(id)
listarProdutos.jsp
return (Funcionario) q.uniqueResult()
return "ok"
alt
[Resposta novo produto] editarComissao.jsp
preenche formulário
[Resposta atualizar produto]
alteraComissaoFuncionario()
editar(funcionario)
editar(funcionario)
return buscaTodosFuncionario()
buscaTodosFuncionario()
buscaTodosFuncionarios()
buscaTodosFuncionarios()
return listaFuncionarios
4 PERSISTÊNCIA DE DADOS
44
4.1.1 Introdução
Cliente
Dependente CLI_CODIGO: INTEGER
CLI_CODIGO: INTEGER (FK) CLI_CPF: CHAR(15)
Fornecedor
DEP_CODIGO: INTEGER CLI_NOME: CHAR(40)
CLI_DATANASC: DATE FOR_CODIGO: INTEGER
DEP_NOME: CHAR(40)
CLI_TELEFONE: CHAR(50) FOR_CNPJ: CHAR(50)
DEP_DATANASC: DATE
CLI_CELULAR: CHAR(50) FOR_IE: CHAR(30)
DEP_SEXO: CHAR(15)
CLI_ENDERECO: CHAR(40) FOR_NOMEFANTASIA: CHAR(60)
DEP_NUMERACAO: INTEGER
CLI_ENDNUMERO: INTEGER FOR_ENDERECO: CHAR(40)
CLI_CEP: CHAR(10) FOR_ENDNUMERO: INTEGER
CLI_COMPLEMENTO: CHAR(15) FOR_CEP: CHAR(15)
CLI_BAIRRO: CHAR(40) FOR_COMPLEMENTO: CHAR(50)
CLI_CIDADE: CHAR(40) FOR_BAIRRO: CHAR(30)
CLI_UF: CHAR(40) FOR_CIDADE: CHAR(40)
FOR_CONTATO: CHAR(60)
Funcionario FOR_UF: CHAR(40)
FUN_CODIGO: INTEGER FOR_MARCAS: TEXT
FOR_NOME: CHAR(50)
FUN_CPF: CHAR(15)
FUN_CTPS: CHAR(50)
FUN_NOME: CHAR(40)
FUN_TELEFONE: INTEGER Pedido
FUN_CELULAR: INTEGER PED_CODIGO: INTEGER
FUN_ENDERECO: CHAR(40) Item
FUN_CEP: CHAR(10) FUN_CODIGO: INTEGER (FK)
FUN_ENDNUMERO: INTEGER CLI_CODIGO: INTEGER (FK) ITE_CODIGO: INTEGER
FUN_COMPLEMENTO: CHAR(15) PED_VALORTOTAL: FLOAT PRO_CODIGO: BIGINT(15) (FK)
FUN_BAIRRO: CHAR(40) PED_DATA: DATETIME PED_CODIGO: CHAR(11) (FK)
FUN_CIDADE: CHAR(40) PED_FORMPAGAMENTO: CHAR(15) ITE_QUANTIDADE: INTEGER
FUN_UF: CHAR(40) PED_TIPO: CHAR(15) ITE_PRECOUNITARIO: FLOAT
FUN_ADMISSAODATA: DATE PED_STATUS: CHAR(15) ITE_NUMERO: INTEGER
FUN_COMISSAO: INTEGER PED_OBSERVACAO: TEXT
Produto
PRO_CODIGO: BIGINT(15)
Login
FOR_CODIGO: INTEGER (FK)
FUN_CODIGO: INTEGER (FK)
PRO_QUANTIDADE: INTEGER
LOG_USUARIO: CHAR(30) PRO_TAMANHO: CHAR(2)
LOG_SENHA: CHAR(15) PRO_SEXO: CHAR(1)
LOG_GRUPO: CHAR(1) PRO_PRECO: FLOAT
PRO_DESCRICAO: CHAR(40)
PRO_CODIGOBARRAS: CHAR(100)
<property name="hibernate.connection.autocommit">true</property>
</session-factory>
</hibernate-configuration>
48
...
@Entity
@Table(name = "produto", catalog = "pgi")
public class Produto implements java.io.Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "pro_codigo", unique = true, nullable = false)
private Integer id;
@Column(name = "for_codigo")
private Integer fornecedorCodigo;
@Column(name = "pro_quantidade")
private int quantidade;
@Column(name = "pro_tamanho")
private String tamanho;
@Column(name = "pro_sexo")
private String sexo;
@Column(name = "pro_preco")
private float preco;
Figura xx Classe de entidade produto
@Column(name = "pro_descricao")
private String descricao;
…
49
5 PROJETO DE INTERFACE
5.1 Introdução
ui B u s in e s s P ro c e s s M o d e l
L o g in p rin c ip a l
Id e n ti fi c a çã o O K
Fin al
In i ci o
E fe tu a r V e n d a
E fe tu a r V e n d a
C a d a stra r Cl i e n te
C a d a stra r
P ro d u to E fe tu a r
A tu a li z a r E sto q u e
Ven da
C a d a stra r
C l ie n te Ca d a stra r P ro d u to
C a d a stra r C l i e n te
A tu a l i za r E sto q u e
6 ARQUITETURA E CÓDIGO
6.1 Introdução
Ciclo de vida:
• Padrão de mercado
• Aumento de produtividade
• Foco nas regras do negócio
• Criação de componentes/aplicações reutilizáveis
• Integração com as principais ferramentas
• Separa a lógica do negócio da camada de apresentação
• Facilita a população de beans;
• Simplifica o uso de servlets, necessitando apenas a criação de classes Action;
• Com suas tags dispensa o uso de scriptlets em 98% dos casos.
REFERÊNCIAS BIBLIOGRÁFICAS
http://www.msdnbrasil.com.br/Tecnologias/arquitetura/nova/blocos_disp/imp_interface
http://www.slideshare.net/brenovit/modelo-de-camadas
http://www.argonavis.com.br/cursos/java/j931/J931_01.pdf
http://pt.wikipedia.org/wiki/P%C3%A1gina_principal
http://pt.wikipedia.org/wiki/Regras_de_neg%C3%B3cio
http://pt.wikipedia.org/wiki/Hibernate
http://pt.wikipedia.org/wiki/Struts
http://www.ucb.br/prg/professores/fgoulart/STRUTS_fgoulart.pdf
64
APÊNDICE
<struts>
<result-types>
<result-type name="tiles"
class="org.apache.struts2.views.tiles.TilesResult" />
</result-types>
<interceptors>
<interceptor name="login"
class="coisasdecrianca.com.interceptor.LoginInterceptor" />
<interceptor-stack name="loginStack">
<interceptor-ref name="servlet-config" />
<interceptor-ref name="params" />
<interceptor-ref name="login" />
<interceptor-ref name="prepare" />
<interceptor-ref name="chain" />
<interceptor-ref name="model-driven" />
<interceptor-ref name="fileUpload" />
<interceptor-ref name="static-params" />
<interceptor-ref name="params" />
<interceptor-ref name="conversionError" />
<interceptor-ref name="validation" />
65
</interceptors>
<global-results>
<result type="tiles" name="login">tiles.login</result>
</global-results>
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrar</result>
</action>
<action name="insereClienteUpdate" method="insereClienteUpdate"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="input">tiles.cadastrar</result>
<result type="tiles" name="ok">tiles.cadastrar</result>
<result type="tiles" name="erro">tiles.cadastrar</result>
</action>
<action name="cadastrarDependente" method="cadastrarDependente"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrarDependente</result>
</action>
<action name="insereDependente" method="insereDependente"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrar</result>
<result type="tiles" name="erro">tiles.cadastrar</result>
</action>
<action name="editarDependente" method="editarDependente"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrarDependente</result>
<result type="tiles" name="erro">tiles.cadastrarDependente</result>
</action>
<action name="deleteDependente" method="deleteDependente"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrar</result>
<result type="tiles" name="erro">tiles.cadastrar</result>
</action>
<action name="buscaTodosClientes" method="buscaTodosClientes"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.listarClientes</result>
</action>
<action name="editarCliente" method="editarCliente"
class="coisasdecrianca.com.action.ClienteAction">
<result type="tiles" name="ok">tiles.cadastrar</result>
<result type="tiles" name="erro">tiles.cadastrar</result>
</action>
</action>
<action name="atualizarEstoque" method="atualizarEstoque"
class="coisasdecrianca.com.action.ProdutoAction">
<result type="tiles" name="ok">tiles.atualizarEstoque</result>
<result type="tiles" name="erro">tiles.listarProduto</result>
</action>
<action name="atualizaQuantEstoque" method="atualizaQuantEstoque"
class="coisasdecrianca.com.action.ProdutoAction">
<result type="tiles" name="ok">tiles.atualizarEstoque</result>
<result type="tiles" name="erro">tiles.atualizarEstoque</result>
</action>
<action name="insereFornecedorProduto" method="insereFornecedorProduto"
class="coisasdecrianca.com.action.ProdutoAction">
<result type="tiles" name="ok">tiles.insereFornecedorProduto
</result>
<result type="tiles" name="erro">tiles.cadastrarProduto</result>
</action>
<action name="insereFornecedorProdutoFinal"
method="insereFornecedorProdutoFinal"
class="coisasdecrianca.com.action.ProdutoAction">
<result type="tiles" name="ok">tiles.cadastrarProduto</result>
<result type="tiles" name="erro">tiles.insereFornecedorProduto
</result>
</action>
</package>
</struts>