Projeto de sistema para locadora

Olá Pessoal,

Recentemente começei a escrever um programa que gerenciaria uma locadora, somente para fins de apreendizado. Algumas partes estão funcionando corretamente mas eu queria aperfeiçoar e queria pedir ajuda de vocês.

Minha dúvida é a seguinte: Eu tenho uma classe chamada locacao, nela o funcionário teria que inserir o código do cliente, código do filme, data que ele teria que devolver o filme, tipo (lançamento ou não), e o status (pago ou não). Então o funcionario clicaria em um botão, validações seriam feitas e caso tudo ocorresse bem ele armazenaria os dados na tabela do banco. O problema é que um cliente só poderia alugar um filme por vez. Eu queria construir uma tela semelhante a essa, mas que quando ele clicasse em um botao (adicionar) o filme seria adicionado em uma JTable podendo assim adicionar vários filmes, mostrando o total (R$), e somente quando clicado em outro botão ele jogasse os dados no banco.

Trabalhar com o JTable talvez não seja um problema tão grande, acho que minha dúvida é como jogar essas informações depois no banco de dados (valor total, +1 de filme alugado pelo cliente etc).

Se alguem puder me dar uma luz agradeço.

Este tópico deveria ser movido para um fórum mais adequado aqui do GUJ.

Pelo que entendi do seu post, o problema não é o desenvolvimento e implementação de uma lógica de negócios com Java, mas sim com relação à modelagem de dados: um problema clássico de ORM (wikipedia.org) que é a discrepância entre os paradigmas Relacional e de OO (paradigm mismatch ou impedance mismatch para os gringos).

Uma das “leis” das bases de dados relacionais é que uma relação n para n (muitos para muitos) precisa ser representada em uma tabela à parte (link table). Uma tabela como esta não aparece no modelo de domínio orientado a objeto. No modelo OO, você pode representar esta associação bidirecional com Collections (Set, List etc.) nas classes que representam as entidades do domínio. E aí está a discrepância.

No seu caso, estaríamos falando de uma tabela – digamos, “Locações” – com apenas duas colunas, sendo estas chaves estrangeiras que referenciam as chaves primárias de “Clientes” e “Filmes”. A partir daí é só implementar sua lógica de negócios e adequar a camada de persistência da sua aplicação a esta discrepância.

[]s
–mcbrain

Dá uma olhada em TableModel:

http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

Basicamente você construirá uma classe que extende AbstractTableModel…No seu modelo, irá ter um List de Filmes, que você irá adicionar ou remover de acordo com a necessidade, e irá aparecendo na tua table. Quando quiser salvar, pegue o List de filmes no model e envie para tua camada de persistência.

Fernando

@mcbrain

Sim sim, essa tabela ‘locações’ no meu sistema eu chamei de movimento. Nela eu inseri cod do cliente, cod do filme alugado, data previa(data que ele deveria entregar), data de devolução(data que ele realmente devolveu), tipo (lançamento ou não), e status(pago ou não). Assim na tela de devolução ele mostra para o funcionario, se o filme já está pago ou não, quanto o cliente deve pagar e caso a data de devolução seja maior que a data que ele deveria devolver o sistema automaticamente calcula a multa(baseado se é ou não lançamento) e atualiza o valor a pagar ou caso a fita esteja paga, ele avisa que o cliente entregou atrasado e deve pagar um valor adicional.

@Fernando

Hum… Não entendi muito bem o que você quis dizer, mas olha eu já estou trabalhando com table model. Quando quero gerar um JTable eu chamo um metodo na minha classe de acesso ao banco que retorna um resultset para uma classe chamada TableModel que monta o table model e me retorna na classe que eu quero gerar um JTable, dai eu passo o table model retornado como argumento para a construção do JTable.

Mas minha dúvida continua o.o acho que estou ‘panguando’

Com essa minha tabela ‘movimento’ daria para implementar isso? Eu teria que armazenar cada filme alugado normalmente em uma linha, cada um com seu respectivo preço (lançamento ou não) ?

Desculpa se eu não fui muito claro, sou meu enrolado para explicar as coisas.

Então galera começei a fuçar e acho que encontrei a solução…
Dividi minha tabela movimento em 2: Movimento e Itens_Movimento
Movimento contem campos como codigo do movimento, codigo do cliente, datas, valor a pagar etc…
Itens_movimento contem codigo do filme, preco do filme, e codigo do movimento (fk),

Assim ele poderia alugar varias fitas de uma vez…

Estou no caminho certo?

Mas agora tenho outra duvida, como vou implementar isso? Eu estáva pensando em criar uma tela, onde seria inserido o codigo do filme e quando ele clicasse num botao adicionar isso seria exibido dentro de uma JTable com mais algumas informações e somento depois de adicionado todos os filmes, ele gravaria no banco primeiro na tabela movimento e depois na tabela itens cada filme locado.

Alguem pode me dar uma ideia de como fazer? estava pensando em fazer com arraylist, mas dai não sei como vou jogar os dados pro JTable =s

Vlw Galera