MAB 240 – Computação II

MAB 240 - Computação II

Fabio Mascarenhas

Laboratório 7 - 07/05/2012

AVISO IMPORTANTE: baixe a última versão da biblioteca de acesso a banco de dados aqui, salve no diretório lib do projeto RegistroNotas. A última atualização foi em 14/05 9:25.

O objetivo desse e do próximo laboratório será construir uma aplicação Java completa, inclusive sua interface gráfica. Não se assuste com o escopo da aplicação, ela é mais simples do que pode parecer, e vocês terão 3 semanas para concluir esse trabalho.

Para começar você precisará instalar o plugin WindowBuilder do Eclipse. Vá à página WindowBuilder Pro e copie a URL relativa à sua versão do Eclipse. Para 3.7 ela é http://dl.google.com/eclipse/inst/d2wbpro/latest/3.7. Agora abra o Eclipse e vá ao menu Help->Install New Software.... Cole a URL na caixa "Work with:" e clique em "Add:". Marque a checkbox ao lado de "Swing Designer" e "WindowBuilder Engine" na caixa de lista, depois clique em "Next", "Next" de novo, "I accept..." e "Finish".

Recomendo que vocês façam primeiro toda a aplicação sem o uso do banco de dados, com dados de teste, e depois implementem a ligação com o banco de dados. O projeto tem instruções específicas para não haver conflito entre as aplicações de cada grupo, mas se quiser um acesso melhor ao banco de dados crie uma conta em parse.com e uma aplicação lá, e copie a "Application Key" e "REST API Key" para as variáveis correspondentes no projeto (APP_KEY e API_KEY).

O arquivo LEIAME.txt faz referência ao diário de aulas, ele acabou não sendo incluído no .zip do projeto, baixe ele aqui.

Você deve baixar o projeto Eclipse da aplicação aqui e usá-lo como ponto de partida. Esse projeto contém as bibliotecas que você irá precisar, as classes da interface gráfica da aplicação já desenhadas.

Também será de grande ajuda baixar a última versão da aplicação Fotograma que está sendo desenvolvida em sala, pegue ela na página da disciplina. A aplicação é bem diferente, mas a estrutura de vários pedaços de código pode ser reaproveitada.

Leia com atenção as instruções detalhadas abaixo!

Conceito básico

A aplicação abre na janela para seleção de turmas, onde o professor também pode cadastrar novas turmas para a disciplina. Uma vez escolhida uma turma a aplicação prossegue para a janela dos alunos daquela turma, com uma tabela com todos os alunos, suas notas e a média final.

Na janela dos alunos o professor pode cadastrar um novo aluno, ou editar os dados de um aluno já existente.

Todos os dados são armazenados no banco de dados parse.com, o mesmo que estamos usando na aplicação Fotograma. Assim os dados gravados lá poderão ser usados nas próximas aplicações que faremos, uma aplicação de celular para um aluno consultar suas notas, e uma aplicação web que servirá tanto para edição das turmas e notas pelo professor quanto para um aluno ver as suas notas.

Estrutura do banco de dados

O nome das tabelas no banco de dados deve ser prefixado com G_n1_n2_, onde n1 e n2 são os números dos membros da dupla no Diário de Aulas (veja o arquivo diario.pdf). Por exemplo, um grupo composto pelo ALLAN MONTEIRO DAVID e o JULIO CESAR DA SILVA PEREIRA deve prefixar suas tabelas com G_4_27_, assim: G_4_27_Alunos, G_4_27_Turmas, G_4_27_Notas. Para facilitar edite as variáveis ALUNOS, TURMAS e NOTAS em RegistroNotas.java com os nomes das tabelas para seu grupo, e use essas variáveis no seu programa.

Alunos

Turmas

Notas

Estrutura da Aplicação

Para facilitar eu já criei e desenhei as classes correspondentes às janelas da aplicação, você deve usá-las, conectando a interface às classes que darão a funcionalidade do programa. Você é livre para organizar o resto do programa do jeito que quiser.

Uma dica é uma classe Aluno representando o registro de notas um aluno em uma determinada turma, com dados como DRE, nome do aluno, nome da turma, P1, P2, e P3 e métodos para atualizar notas e calcular a média final, e uma classe Turma que tem o nome da turma e uma lista dos alunos daquela turma, com um método para adicionar um aluno e obter o registro de um aluno específico.

Lista de alunos de uma turma

public static List<Aluno> alunos(String turma) throws ParseException {
	List<Aluno> res = new ArrayList<Aluno>();
	ParseQuery qNotas = new ParseQuery(RegistroNotas.NOTAS);
	qNotas.whereEqualTo("turma", turma);
	List<ParseObject> notas = qNotas.find();
	List<String> dres = new ArrayList<String>();
	Map<String, ParseObject> nAlunos = new
			HashMap<String, ParseObject>();
	for(ParseObject nota : notas) {
		String dre = nota.getString("aluno");
		dres.add(dre);
		nAlunos.put(dre, nota);
	}
	ParseQuery qAlunos = new ParseQuery(RegistroNotas.ALUNOS);
	qAlunos.whereContainedIn("dre", (List)dres);
	qAlunos.addAscendingOrder("nome");
	List<ParseObject> alunos = qAlunos.find();
	for(ParseObject aluno : alunos) {
		String dre = aluno.getString("dre");
		res.add(new Aluno(aluno, nAlunos.get(dre)));
	}
	return res;
}

Preenchendo uma JTable

Baixe os arquivos Aluno.java e JanelaAlunos.java para ver um exemplo de como preencher uma JTable implementando uma classe derivada de AbstractTableModel.

Preenchendo uma JList

Baixe os arquivos Turma.java e JanelaTurmas.java para ver um exemplo de como preencher uma JList usando a classe DefaultListModel.

Enviando

Crie um arquivo .zip com todo o projeto que você criou e mande para esse email até o dia 30/05 (uma quarta-feira). Esse trabalho vale 0,7 na nota de exercícios, e poderá ser feito em dupla. Não esqueça de escrever quem são os autores no email, e em um comentário no(s) seu(s) arquivo(s) .java.


Last modified: Wed May 16 10:00:35 BRT 2012