VB.NET 2005 - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 7
Continuando o desenvolvimento do nosso projeto Locadora de Filmes no Visual Basic 2005 Express Edition este artigo a mostrar a implementação da classe que possui a lógica para efetuar a devolução de um filme e a implementação da interface do usuário via formulário devolucao.vb. Se você esta chegando agora recomendo leia os artigos :
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes I
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes II
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes III
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes IV
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes V
VB.NET 2005 - Criando uma aplicação completa : Locadora de Filmes VI
Implementando a classe para registrar a devolução de um filme
A lógica para efetuar a devolução de um filme alugado vai estar na classe DevolucaoFilmes presente no arquivo DevolucaoFilmes.vb. As tarefas que deverão ser efetuadas na devolução de um filme são:
Tudo começa quando o cliente apresenta o filme para devolução. O funcionário acessa o sistema e exibe o formulário de devolução de filmes: devolução.vb mostrado abaixo:
- O funcionário informe o
código do cliente ou efetua a busca acionando o botão procurar. - Após selecionar o cliente, o DataGridView é preenchido com a relação dos filmes que o cliente possui alugados. - O funcionário seleciona um ou todos os filmes e efetua o registro da devolução.
|
O evento Click do botão procurar possui o seguinte código:
Private
Sub
btnProcuraCliente_Click(ByVal
sender As System.Object, ByVal e
As System.EventArgs) Handles
btnProcuraCliente.Click My.Forms.SelecionaCliente.ShowDialog() txtCodigoCliente.Text = My.Forms.SelecionaCliente.codigoCliente Me.MovimentoTableAdapter.FillByCodigoClienteEdevolucaoNull(MovimentoDS.Movimento, CType(txtCodigoCliente.Text, Integer)) End Sub |
O formulário SelecionaCliente é exibido e nele o funcionário informa o nome do cliente para efetuar a seleção.
A seguir o código do cliente é exibido na caixa de texto - txtCodigoCliente- e o seu nome no controle Label - lblNomeCliente.
O DataGridView é então preenchido pela consulta previamente incluída no TableAdapter MovimentoDS chamada FillByCodigoClienteDevoluçãoNull que possui a seguinte estrutura:
SELECT CodigoLocacao,
CodigoCliente, CodigoFilme, Locacao, Devolucao, Valor FROM Movimento WHERE (CodigoCliente = @codigoCliente) AND (Devolucao IS NULL) |
A consulta irá exibir os dados da tabela Movimento cujo campo CodigoCliente é igual ao código do cliente foi selecionado e cujo campo Devolucao é Null.
A seguir o funcionário seleciona o filme que é objeto da devolução e clica no botão - Registra Devolução - cujo código do evento Click é exibido a seguir:
Private Sub btnDevolucao_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDevolucao.Click
Dim selecao As MovimentoDS.MovimentoRow Dim registraDevolucao As New DevolucaoFilmes
selecao = MovimentoDS.Movimento(fila.Index) registraDevolucao.calcula(selecao.CodigoFilme, selecao.Locacao, Now) registraDevolucao.devolveFilme(selecao.CodigoFilme, selecao.Locacao, Now, registraDevolucao.valorLocacao)
Next Me.MovimentoBindingSource.EndEdit()
Me.MovimentoTableAdapter.Update(MovimentoDS.Movimento)
|
Após declarar uma variável do tipo DataGridView e outra do tipo MovimentoRow estamos instanciando um objeto da classe DevolucaoFilmes:
Dim fila As DataGridViewRow
Dim selecao As MovimentoDS.MovimentoRow
Dim registraDevolucao As New DevolucaoFilmes
A seguir para cada linha do DataGridView selecionada estamos invocando os seguintes métodos da classe DevolucaoFilmes:
registraDevolucao.devolveFilme(selecao.CodigoFilme, selecao.Locacao, Now, registraDevolucao.valorLocacao) : O método devolveFilme usa os parâmetros : CodigoFilme, data de locação (selecao.Locacao) , a data atual (Now) e o valor da locação calculada (registraDevolucao.valorLocacao)
Estes métodos estão implementados na classe DevolucaoFilmes que você deve incluir no projeto clicando com o botão direito do mouse sobre o nome do projeto e seleciona a opção Add->New Item , e a seguir selecionar o template Class informando o nome da classe.
A seguir temos o código da classe DevolucaoFilmes contendo os dois métodos : calcula e devolveFilme e a propriedade valorLocacao pela qual podemos obter o valor calculado da locação.
Public Class DevolucaoFilmes'variável de classe valor_ Private Shared valor_ As Double Public Sub devolveFilme(ByVal codfilme As Integer, ByVal datalocacao As Date, ByVal dataDevolucao As Date, ByVal valor As Double)
''cria um adatper e um dataset Dim adapterMovimento As New MovimentoDSTableAdapters.MovimentoTableAdapter Dim movimento As New MovimentoDS ''filtra os filmes pelo codigo informado adapterMovimento.FillByCodigoFilme(movimento.Movimento, codfilme) codLocacao = movimento.Movimento(0).CodigoLocacao 'registrar a devolucao do filme 'cria um adapter e um dataset Dim adapterDevolucao As New MovimentoDSTableAdapters.MovimentoTableAdapterDim movimentoDevolucao As New MovimentoDS.MovimentoDataTable
'atualiza a tabela movimento incluindo a data de devolução e o valor a ser pago adapterDevolucao.UpdateQueryDevolucao(dataDevolucao, valor, codLocacao) adapterDevolucao.Update(movimentoDevolucao)
End Sub ---------------------------------------------------------------Método calcula---------------------------------------------- Public Sub calcula(ByVal codfilme As Integer, ByVal datalocacao As Date, ByVal datadevolucao As Date)
Dim classificacao As String Dim valor As Double'verificando o estoque da locadora 'cria um adatper e um dataset Dim adapterFilmes As New FilmesDSTableAdapters.FilmesTableAdapterDim filme As New FilmesDS
'filtra os filmes pelo codigo informado adapterFilmes.FillByCodigo(filme.Filmes, codfilme) 'se não encontrou o filme com o codigo informado avisa If filme.Filmes.Count = 0 Then Throw New ArgumentException("Não existe o filme informado no acervo.")End If 'se não tem filme no estoque avisa If filme.Filmes(0).Estoque = 0 Then Throw New ArgumentException("Não existem unidades cadastradas no acervo.") End If 'se houver filme no estoque tenho que aumentar uma unidade que esta sendo devolvida filme.Filmes(0).Estoque += 1 filme.Filmes(0).Status = "Disponível" ' atualiza o status para codigo 1 - Disponivel
classificacao = filme.Filmes(0).Classificacao ' ----verifica o preco do filme para calcular o valor Dim adapterPrecos As New PrecosDSTableAdapters.PrecosTableAdapterDim preco As New PrecosDS
adapterPrecos.FillByClassificacao(preco.Precos, classificacao) valor = preco.Precos(0).Valor
Dim dias As Integer = DateDiff("d", datalocacao, datadevolucao) Dim precoPagar As Double = dias * valor
valor_ = precoPagar End Sub ------------------------------------------Propriedade valorLocacao---------------------------------------------------------- Public Property valorLocacao() As Double Get Return valor_End Get Set(ByVal valor As Double) valor_ = valor End Set End PropertyEnd Class
|
Perceba que no método calcula estamos incrementando uma unidade, referente ao filme devolvido, ao estoque e alterando o status do filme para "Disponível":
'se houver filme no estoque tenho que aumentar uma unidade que esta sendo devolvidafilme.Filmes(0).Estoque += 1
filme.Filmes(0).Status =
"Disponível" ' atualiza o status para codigo 1 - Disponível
Abaixo temos a janela exibida pela execução do formulário devolucao.vb:
Após efetuar o registro da devolução podemos verificar os valores atualizados na tabela movimento na opção Movimento-> Filmes Alugados do menu principal:
E com isto fechamos o ciclo desta pequena aplicação de exemplo, onde o objetivo foi mostrar alguns dos novos recursos do ADO.NET 2.0 e como você pode criar uma aplicação Windows Forms de forma rápida usando os novos assistentes para auxiliá-lo em tarefas que antes exigiriam muito código.
Não pode ser considerada uma aplicação de produção pois não me preocupei com os requisitos fundamentais que uma locadora real deveria possuir para estar funcionando. Aliás, quero chamar a atenção para o fato de que o levantamento dos requisitos é uma das fases cruciais e que geralmente determinam o sucesso ou o fracasso de um projeto de software. Nossa aplicação não resistiria a uma crítica a começar pela modelagem de dados. No entanto ela serviu aos meus propósitos que foi poder mostrar o desenvolvimento de uma aplicação Windows com alguns recursos no Visual Basic 2005 Express.
Podemos dizer que o nosso sistema de locadora de filmes talvez possa ser implementado como esta em um algum lugar da nossa Via Láctea. Brincadeiras à parte, espero que você tenha aprendido com os novos recursos e a partir deles possa evoluir criando aplicações mais robustas.
Na verdade falta ainda criarmos o pacote de instalação, e este serão o nosso último artigo para a locadora de filmes.
Aguarde a continuação no artigo : VB.NET 2005 - Criando uma aplicação Windows Completa: Locadora de Filmes - Parte 8
Nota: Se você esta tendo problemas com o não salvamento dos dados da aplicação leia o artigo : VB.NET 2005 - TableAdapater não atualiza os dados
VB.NET 2005 , é fácil, é simples, é legal. Divirta-se...
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
|
Gostou ? Compartilhe no Facebook Compartilhe no Twitter
Referências: