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!
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.
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.
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.
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; }
Baixe os arquivos Aluno.java e JanelaAlunos.java para ver um exemplo de como preencher uma JTable implementando uma classe derivada de AbstractTableModel.
Baixe os arquivos Turma.java e JanelaTurmas.java para ver um exemplo de como preencher uma JList usando a classe DefaultListModel.
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
.