Trabalho 5: Gerenciador de ACGs em Java
Objetivo
O objetivo deste trabalho é desenvolver um programa orientado a objetos, em Java, para gerenciar as Atividades Complementares de Graduação de um aluno. Esse programa deve ter interface gráfica e deve acessar um banco de dados via JDBC.
Banco de dados
- O gerenciador de banco de dados indicado para este trabalho é o HSQLDB. Outros gerenciadores também podem ser usados, desde que possuam driver JDBC (obs.: alguns comandos SQL fornecidos podem não funcionar em outros gerenciadores de bancos de dados).
- O banco de dados deve possuir as seguintes tabelas:
- Aluno: mantém matrícula e nome do aluno
- Classificação: tipos gerais de ACGs, conforme Orientações para ACGs
- Subclassificação: sub-tipos de ACGs, conforme Orientações para ACGs
- ACG: dados de cada ACG, de acordo com o Formulário para solicitação de ACGs
- Comprovante: dados sobre cada documento comprobatório de cada ACG (supõe-se que os documentos estejam escaneados e armazenados em arquivos)
- Outros esclarecimentos sobre o banco de dados:
- As classificações e subclassificações de ACGs são fixas e devem ser inseridas no banco logo após sua criação.
- Cada ACG relaciona-se a um aluno (será sempre o mesmo aluno) e a uma subclassificação que devem estar cadastrados previamente no banco.
- Cada ACG pode possuir zero ou mais comprovantes. Cada comprovante relaciona-se a uma única ACG.
- Para facilitar o trabalho, são fornecidos os seguintes scripts:
- create-tables.sql: comandos para criação da estrutura do banco de dados
- populate-tables.sql: comandos para inserção de dados de teste no banco
- drop-tables.sql: comandos para remoção das tabelas do banco de dados
- Os comandos para alteração ou remoção de registros do banco podem ser facilmente deduzidos a partir dos exemplos vistos em aula.
- Os scripts acima podem ser testados diretamente no HSQLDB via interface gráfica, usando o comando abaixo:
java -cp hsqldb-2.2.3/hsqldb/lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing -url jdbc:hsqldb:file:acgdb -driver org.hsqldb.jdbcDriver
- A estrutura do banco pode sofrer alterações nos nomes/tipos dos campos, mas não é permitido retirar campos.
Requisitos
- O programa deve criar as tabelas do banco na primeira vez que o programa for executado. Além disso, deve preencher as tabelas de classificação e subclassificação de ACGs, que têm conteúdo fixo.
- Os atributos dos objetos do programa devem ser definidos de acordo com a estrutura das tabelas no banco de dados.
- O programa deve prever e tratar exceções, sempre que possível mostrando mensagens amigáveis ao usuário :-)
- A interface gráfica do programa deverá ter várias telas (frames). Recomenda-se usar menus para acesso às funcionalidades.
- As funcionalidades acessíveis ao usuário se dividem em 3 grupos: configurações, gerenciamento de ACGs e ferramentas. Cada grupo é descrito a seguir.
Configurações
- Setar nome/matrícula do aluno
- Resetar o banco, apagando as tabelas e criando-as novamente
ACGs
- Operações CRUD (create, read, update, delete) com ACGs (isso pode ser feito em telas separadas ou numa mesma tela com todas as opções). Obs.: o identificador de cada ACG deve ser gerado automaticamente, em sequência. Isso pode ser feito com auxílio do banco de dados ou com controle interno (contador) na aplicação. Para auxílio do banco, pode-se usar um comando SQL que retorna o maior valor de um campo no banco:
select max(acg_id) from acg
- Operações CRUD com comprovantes de uma dada ACG (isso pode ser feito na mesma tela das operações CRUD de ACGs). Atenção: se uma ACG for removida, devem ser removidos todos seus comprovantes. Para selecionar comprovantes de uma ACG de id=3 (por exemplo), usar o comando SQL:
select descricao,arquivo from comprovante where acg_id=3
- Visualização resumida da lista de ACGs do aluno (somente nome, ch e classificação geral). Para obtenção desses dados, pode-se usar o seguinte comando SQL:
select acg.descricao, acg.ch, classificacao.descricao from acg, subclassificacao, classificacao where acg.subclassif_id = subclassificacao.subclassif_id and subclassificacao.classif_id = classificacao.classif_id
Ferramentas
- Visualização de resumo de carga horária de ACGs para cada item de classificação (classif_id, descricao, ch_max e somatório de ch das ACGs do aluno). Para obtenção desses dados, pode-se usar o seguinte comando SQL:
select c.classif_id, c.descricao, c.ch_max, isnull(sum(ch),0) from (select subclassificacao.subclassif_id, subclassificacao.classif_id as sc, acg.subclassif_id, acg.ch from subclassificacao left outer join acg on acg.subclassif_id = subclassificacao.subclassif_id), classificacao as c where c.classif_id = sc group by c.classif_id
- Visualização de ACGs sem comprovantes. Para obtenção desses dados, pode-se usar o seguinte comando SQL:
select acg_id, descricao from acg left outer join comprovante on acg.acg_id = comprovante.acg_id where comprov_id is null
- Verificação de pendências de carga horária. Essa verificação deve ser feita pelo programa a partir do resumo de carga horária por item de classificação (item 1 das ferramentas), considerando as normas para ACGs, que determinam:
- mínimo de 290 horas em ACGs, respeitando-se os valores máximos em cada classe de ACG
- mínimo de 90 horas somando-se as classes 2, 5 e 8 (ver normas)
Extras
Para recuperar alguma nota da disciplina, ou apenas por diversão :-), há alguns extras que podem ser implementados:
- Nas ferramentas, incluir a geração automática dos formulários de solicitação de ACG para entrega na coordenação. Para isso, pode-se converter o formulário em formato .doc para o formato .odt (OpenOffice), gerando um template que pode ser preenchido automaticamente a partir do banco de dados. Esse preenchimento automático pode ser feito usando a ferramenta JODReports. Veja aqui um exemplo de uso desta ferramenta como uma biblioteca ou via linha de comando.
- Estender o aplicativo para gerenciar ACGs de vários alunos, ao invés de um aluno apenas.
Entrega e avaliação
- Este trabalho pode ser feito individualmente ou em duplas e deverá ser entregue até dia 14/07/11, conforme as instruções gerais para entrega de trabalhos.
- Nos trabalhos em dupla, a identificação dos alunos deve constar no código-fonte e cada aluno deve colocar uma cópia do trabalho em sua página.
- Armazenar o trabalho em um único arquivo contendo todo o código-fonte e demais arquivos utilizados (p. ex.: formulários e outros arquivos do Netbeans).
- A avaliação levará em conta as funcionalidades implementadas e a organização do código orientado a objetos.
- Os trabalhos deverão ser apresentados à professora no laboratório, nos dias 14/07 e 15/07.
Material de apoio
- Perguntas & Respostas sobre Java
FAQ preparada para a disciplina, respondida pelos monitores. - Java e Bancos de Dados
Slides sobre JDBC. - DAO (Data Access Object)
Slides sobre organização de código para acesso a dados no banco de dados. - SQL Tutorial - W3Schools
Tutorial sobre SQL. - Interfaces gráficas em Java
Slides sobre GUI em Java. - JDBC Database Access (The Java Tutorials)
Tutorial da Oracle/Sun sobre JDBC. - Creating a GUI With JFC/Swing
Tutorial da Oracle/Sun sobre interfaces gráficas em Java. - SwingSet Demo
Demonstração on-line de componentes Swing. - Códigos de exemplo em Java: