View Full Version : Gestor de Clientes [src disponivel]
CrazyBomber 13-07-2006, 20:46 Boas.
Há uns tempos andei aqui todo contente a postar sobre a minha primeira aplicação em java com interface gráfico.
Hoje venho mostrar a segunda, um gestor de clientes (algo básico) a pedido do meu pai :D
Screenshots:
http://www.mariaisabelmadeira.com/gesc1.JPG
http://www.mariaisabelmadeira.com/gesc2.JPG
Source Code (http://www.mariaisabelmadeira.com/gesc_src.zip)
Programa (http://www.mariaisabelmadeira.com/gesc.zip)
Tem um wrapperzito bonito e tudo :)
Usei, para além do habitual: HSQLDB (www.hsqldb.org) e o ZCalendar (não tenho link :sad:).
Estejam à vontade para experimentar e abusar do programita, e digam-me se encontrarem alguns bugs :D
Hipnoted 13-07-2006, 22:35 Bom trabalho! Parabens, parece ser fixe!
aqui tens :)
java.sql.SQLException: Table not found in statement [SELECT * FROM Entidade]
at org.hsqldb.jdbc.Util.sqlException(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.fetchResult(Unknown Source)
at org.hsqldb.jdbc.jdbcStatement.executeQuery(Unknown Source)
at DatabaseManager.isSetUp(DatabaseManager.java:52)
at gesD.initCustomComponents(gesD.java:57)
at gesD.<init>(gesD.java:20)
at gesD$25.run(gesD.java:1263)
at java.awt.event.InvocationEvent.dispatch(Invocation Event.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java: 461)
at java.awt.EventDispatchThread.pumpOneEventForHierar chy(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(EventDispatchThread.java:163)
at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:157) at java.awt.EventDispatchThread.pumpEvents(EventDispa tchThread.java:149) at java.awt.EventDispatchThread.run(EventDispatchThre ad.java:110)
O que acontece é que o hsqldb devia ter ja a base de dados criada, em vez de a criares em runtime. por qlguma razão ele não criou a tabela.
a melhor é arrancares a aplicação com os ficheiros do hsqldb o .properties e o .script , mas neste caso nao vais usar cached tables mas sim tabelas em disco...alem disso os ficheiros do hsqldb sao criados com o nome dados\xxx.xxx ou seja ele nao os poe na directoria dados, mas inclui "dados" no nome..
tirando isto a protecção das datas tb n ta a funcar aceita cenas tipo 44-44-4444. Quanto a jTable tas a fazer uma coisa mal, devias usar um adaptador feito por ti, em vez de um defaultablemodel.. basta estenderes da classe AbstractTableModel e depois implementares os métodos. até tens a tarefa facilitada pk os dados do hsqldb vêm numa matriz!
de resto ta muito engraçado, e é curioso ver alguem usar java pra uma aplicação deste tipo.. parabéns :)
str8edge 13-07-2006, 23:36 Parece estar a ficar bom, já agora essas pics tão bem engraçadas, bem como esses teus clientes fictícios?!
Offtopic:
Se AJJ vê isso ainda te põe em tribunal por injurias e ofensas à sua integridade e imagem publica... só mesmo na madeira (se duvidam acreditem que acontece e por menos...)
CrazyBomber 14-07-2006, 00:10 Thx pelos comments :)
Primeiro, thx acrobat por reparares no tal erro. Já corrigi, fiz de maneira a não se queixar disso :)
(Foi um exemplo de má programação, da minha parte :sad:)
Vou tentar mais tarde usar um tablemodel feito por mim, prometo :D
Quanto à protecção das datas, vou ter tb de ver isso. Em princípio vou meter o tal calendário, assim não tem que enganar :)
De resto, ainda tenho a próxima versão pronta esta noite, a não ser que o sono me vença :D
Prometo que não vou por mais screenshots com o "Alberto João Jardim" lol :P
Foi mesmo só prá piada :sad:
Thx a todos :D
ok, vou ficar a espera dessa versão... n és o unico que vai ficar a programar java :)
CrazyBomber 14-07-2006, 00:35 Hihi :P
Então ja agora vê se me consegues dar uma ajudinha...
Na tabela Event tenho o atributo 'paga' que pode ser Sim ('S'), Não ('N'), ou Sem Custo ('C').
Eu quero, para cada cliente, ter a contagem total de Events, a contagem de Events sem custo, a soma do custo dos Events pagos, e a soma do custo dos Events não pagos... ou seja:
Tabela:
-------------------------------------------------------------
Cliente|Total|TotalSemCusto|MontantePago|MontanteP orPagar
-------------------------------------------------------------
c1 |5 |2 |20 |30
Qq coisa assim do género :)
Estou a ter uma dor de cabeça do pior para arranjar a query para me conseguir isto tudo :sad:
A cena é que quero também especificar as datas limite dos Events a ter em conta, para fazer algo como um relatório mensal, por exemplo.
:sad:
dava jeito ter a estrutura da bd e os campos de cada tabela.., sem isso é dificil
CrazyBomber 14-07-2006, 00:45 Sorry, sorry.
Está Aqui:
TABLE Entidade(
nomeEnt VARCHAR(60) PRIMARY KEY,
infoEnt VARCHAR(255),
morada VARCHAR(100)
tlf VARCHAR(60)
)
TABLE Event(
nomeEnt VARCHAR(60),
nomeEvent VARCHAR(60),
custo DOUBLE,
data DATE,
infoDespesa VARCHAR(255),
paga VARCHAR(1) NOT NULL,
PRIMARY KEY( nomeEnt, nomeEvent, data ),
CONSTRAINT nomeEnt FOREIGN KEY (nomeEnt) REFERENCES Entidade(nomeEnt) ON DELETE CASCADE ON UPDATE CASCADE
)
primeiro acho ke tas a cometer um erro crasso que é a utilização de chaves primarias varchar..
depois o facto de usares uma chave composta com a data tb n é uma ideia muito famosa...
devias ter id nas duas tabelas em hsql db seria : id_ent INTEGER IDENTITY
quanto á peskisa é um bocado complicada, o problema sao as somas que tem um select la dentro
será kualker coisa do tipo :
select nomeent,sum(select custo where pago like 's') as pago , sum (select custo where pago like 'n') as naopago, sum(select custo where pago like 'c' )
n tenho certeza disto mas deve ser kualker coisa do estilo nao?
CrazyBomber 14-07-2006, 01:14 "Nunca usar uma id quando não é preciso", foi o que me ensinaram :)
De qq modo, a Primary Key da Entidade ainda vai ser o BI ou o Nº de Contribuinte (só ainda não me apeteceu andar a alterar essas coisas :sad:).
Já na tabela Event, devo ter mm que por um id. Também não achei mt bom por a data na Primary Key, estava à procura de uma solução melhor (mas sem id), mas não tou mesmo a ver como.
Thx pela ajuda, entretanto tb consegui juntar as coisas, mais ou menos :D
pode-se meter tabelas como argumentos das funções de agregação? Pensava que se tinha de especificar isso no FROM. Bem, assim poupava-me algum trabalho.
Daqui a bocado já mostro o resultado :D
qt as funcções de agregação acho ke ta bem assim.. ou se calhar não :D olha qt aos id's tb achoke so se deve usar qd é preciso... mas neste caso é preciso! mas melhor solução é o bi ou contribuinte..
CrazyBomber 14-07-2006, 01:22 Concordo :P
Fica resolvido na próxima versão lol :D
Para já consegui fazer o tal relatório de clientes, vou ver se consigo fazer com que aquilo exporte para html, ou qq coisa :)
(O mais provável é ter que fazer tudo à mão lol :sad:)
kual html ? :) exporta pra pdf :) procura por iText ou jasperreports que deves encontrar o ke precisase se tiveres mesmo muito tempo livre usa o jfreechart pra por aí uns gráficos
CrazyBomber 14-07-2006, 01:44 Thx pela sugestão :D
Entretanto já fiz metade do código pra escrever em html :sad:
Estou a tentar ser eu a fazer tanto código quanto possível :D
CrazyBomber 14-07-2006, 02:28 Já está :D
Gestão de Clientes versão 2 (http://www.mariaisabelmadeira.com/gescv2.zip)
Source (http://www.mariaisabelmadeira.com/gescv2_src.zip)
Novidades:
Barra de pesquisa na lista de clientes - ele filtra automaticamente de acordo com o nome escrito
Relatório de clientes - mostra o relatório dos actos de todos os clientes. leva em consideração as datas escolhidas (ou não), pode-se meter só data de inicio, só data de fim, ou as duas :D
Exportar relatório para html - grava um ficheiro reportX.html na pasta "reports" com os dados do relatório :)
Screenie:
http://www.mariaisabelmadeira.com/gescv2_1.JPG
Estou exausto... foram 2 dias sempre a programar :sad:
Amanhã não passo 5 minutos em casa :D
pah continuas com erros na data :P isto "1111-444-444" passa... e n consigo por o report a funcar... nunca aparecem dados :)
pelo ke me pareceu estás a usar o netbeans... como é ke akilo gera o .exe?
CrazyBomber 14-07-2006, 03:08 ops, esqueci-me de ver a cena da data :sad:
o .exe é gerado com o JSmooth, um wrapper opensource.
Funciona bastante bem :)
Quanto às datas, vê se seleccionas periodos em que efectivamente algum dos clientes tem algum acto registado :P
Se aparece na lista de actos, então aparece no relatório.
Tenta de novo e diz me se não estiver a dar :sad:
ah pronto.. :) é preciso seleccionar as datas :sad: agora ja da.. n tinha percebido ke era preciso seleccionar..eheh
pah isto ta bem fixe... keep going
por acaso n conheces nada tipo installanywhere ? pra fazer instalação de aplicações? tava a precisar duma cena do estilo...
CrazyBomber 14-07-2006, 03:26 Acho que tenho o que procuras :D
Nullsoft Scriptable Install System
Funciona, como o nome indica, com scripts, a partir dos quais é gerado o instalador. É simples e poderoso, mas é preciso um bocado de paciência para aprender. :)
Ah, e mencionei que é grátis e opensource? :D
ja tinha visto esse tem um problema ... só da pra windows e eu preciso que dê pra linux tb... thanks na mma e se conheceres mais algum... manda aí
CrazyBomber 14-07-2006, 03:31 aaah :sad:
Sorry, pra linux não conheço nada =/
Se bem que o make deve dar pra isso tudo... só que é um pesadelo do pior :'(
aki n é preciso make... mas posso fazer um script...de kualker forma a ideia é usar um GUI... nem toda a gente gosta da linha de comandos...
CrazyBomber 14-07-2006, 03:36 Quem usa linux já tem de estar mentalizado que mais cedo ou mais tarde vai ter de "dar ao dedo" lol :D
Eu sempre me habituei a isso, desde o velhinho DOS, mas confesso que o linux nunca me atraiu mt... :sad:
Atenção que por lei não podes ter tabelas indexadas por BI nem por NIF!!!!
"Nunca usar uma id quando não é preciso", foi o que me ensinaram :)
De qq modo, a Primary Key da Entidade ainda vai ser o BI ou o Nº de Contribuinte (só ainda não me apeteceu andar a alterar essas coisas :sad:).
Já na tabela Event, devo ter mm que por um id. Também não achei mt bom por a data na Primary Key, estava à procura de uma solução melhor (mas sem id), mas não tou mesmo a ver como.
Thx pela ajuda, entretanto tb consegui juntar as coisas, mais ou menos :D
pode-se meter tabelas como argumentos das funções de agregação? Pensava que se tinha de especificar isso no FROM. Bem, assim poupava-me algum trabalho.
Daqui a bocado já mostro o resultado :D
essa sintaxe não está correcta e não dará os resultados previstos...
talvez mais assim:
select nomeent,(select sum(custo) where pago like 's') as totpago ,(select sum(custo) where pago like 'n') as totnaopago, (select sum(custo) where pago like 'c' ) ...
GROUP BY nomeent
se a base de dados suportar DECODES ou CASES podes fazer assim que é bastante mais eficiente
select nomeent, sum(decode(pago,'s',custo,0)) as totPago, sum(decode(pago,'n',custo,0)) as totnaoPago ...
GROUP BY nomeent
select nomeent,sum(select custo where pago like 's') as pago , sum (select custo where pago like 'n') as naopago, sum(select custo where pago like 'c' )
primeiro acho ke tas a cometer um erro crasso que é a utilização de chaves primarias varchar..
depois o facto de usares uma chave composta com a data tb n é uma ideia muito famosa...
devias ter id nas duas tabelas em hsql db seria : id_ent INTEGER IDENTITY
quanto á peskisa é um bocado complicada, o problema sao as somas que tem um select la dentro
será kualker coisa do tipo :
n tenho certeza disto mas deve ser kualker coisa do estilo nao?
CrazyBomber 14-07-2006, 21:04 Thanks, esse problema já está resolvido :)
Pq é que "por lei" não posso ter tabelas indexadas por BI ou NIF? :sad:
Enfim, é um tanto um quanto estranho, mas nada que um id não resolva :P
sim por lei n podes! é absolutamente verdade... e mais: por lei n podes ter um numero único que identifique um cidadao tal como nos diz o artigo 35º nº5 da lei 1/2005 de 12 de agosto de 2005 da constituição da republica portuguesa. Mas no entanto o BI faz isso oops!!
Nullsoft Install System 2.18
Pequeno e eficiente programa para criar instalações como a do Winamp. Entre as opções para criação de instalações são: habilidade de criar executáveis win32, desinstalador, compressão, display de licença de uso, opção de quatro tipos de instalação, e muito mais.
Roda em X11 :-)
http://superdownloads.uol.com.br/linux/download/i1439.html
ya roda em linux mas apenas o compilador e não aquilo que o mesmo gera.... é pena
Portable Compiler
The NSIS compiler can be compiled for POSIX platforms like Linux and *BSD. Generated installer will still run on Windows only, but this way they can be generated without Windows or WINE.
sim por lei n podes! é absolutamente verdade... e mais: por lei n podes ter um numero único que identifique um cidadao tal como nos diz o artigo 35º nº5 da lei 1/2005 de 12 de agosto de 2005 da constituição da republica portuguesa. Mas no entanto o BI faz isso oops!!
Essa lei não se aplica somente a um numero unico que identifique um cidadão em todos os organismos? ou seja... teres um só numero.. e esse numero ser o mm para Segurança Social, DGV, Numero de eleitor, NIB, sócio do benfica, cartão de utente do SNS, passe social,NIF etc etc.
Pelo menos é nesse sentido que é proibida a numeração unica à luz da legislação Portuguesa
|
|