Primeira Parte do Projeto
Paulo Borba e Joabe Bezerra
Centro de Informática
Universidade Federal de Pernambuco
Sistema de Alocação Docente do CIn
O sistema de alocação docente do CIn é utilizado pelos coordenadores dos cursos de graduação e pós-graduação do CIn para alocar professores para ensinar às várias disciplinas oferecidas pelo CIn.
Este sistema armazena vários itens de alocação, cada um contendo as seguintes informações: nome e código da disciplina, o endereço de sua página na internet, nomes dos professores que vão ensiná-la (às vezes uma disciplina é ministrada por mais de um professor), número de créditos (IP vale 1.5, ICC vale 0.5 e Cálculo vale 1), e uma indicação se esta disciplina é ministrada em conjunto com uma outra disciplina (da pós-graduação, por exemplo). O arquivo Alocacao2003-2.xls contém vários destes itens de alocação, com até mais informações do que precisam ser consideradas para esta versão do sistema. Um conjunto com vários itens de alocação é chamado de alocação.
Além dos vários itens de alocação, o sistema armazena informações sobre os docentes do centro. Em particular, armazena-se o código SIAPE e nome do professor, o cargo do professor na instituição (Professor Adjunto II, Professor Titular, etc.), sua função no centro (Coordenador de Graduação, Diretor do Centro, etc.), seu regime de trabalho (Dedicação Exclusiva, 20hs, etc.), e o endereço de sua página na internet. O arquivo CorpoDocente2003-2.xls contém vários professores cadastrados e suas respectivas informações.
Além dos serviços para manter (inserir, remover e procurar por nome) os itens de alocação e as informações sobre os docentes, o sistema permite, com base nos itens de alocação armazenados, retornar um relatório indicando para cada professor quais são as disciplinas que ele ministrará. Este relatório é chamado de relatório de alocação por professor. Cada entrada (item) deste relatório contém as seguintes informações: dados do docente relacionado, nomes das disciplinas que ele ministrará, e o número de créditos associados ao mesmo (a soma dos créditos de cada uma de suas disciplinas divididos pelo número de professores que ministrarão a disciplina, e dividindo ainda por 2 caso a disciplina seja ministrada em conjunto com outra).
Nesta versão, o sistema deve ter uma interface bem simples com o usuário. Basicamente, deve ser usado os números de 1 a 8 para indicar que deseja-se realizar, respectivamente, as seguintes operações: inserir um novo docente, remover um docente, procurar um docente pelo nome, atualizar os dados do docente, inserir um item de alocação, remover um item de alocação, procurar um item pelo nome da disciplina, e imprimir o relatório de alocação por professor, similar a AlocacaoPorProfessor.html, mas sem necessariamente usar HTML e sem detalhes sobre o curso (Turismo, Graduação em CC, etc.) associado a disciplina e os outros professores que a ministrarão. Também não precisa usar o formato de tabela, como ilustrado.
Com base na descrição acima, responda as seguintes perguntas:
Quem vai usar o sistema?
Que serviços precisam ser oferecidos para estes usuários?
Que entidades serão necessárias para implementar estes serviços?
Como estas entidades interagirão para implementar estes serviços?
Implemente o sistema em Java, estendendo e modificando os arquivos em ParteDaImplementacao.zip, e seguindo as seguintes recomendações:
Implemente um serviço por vez (desde a sua parte na interface com o usuário até a classe básica), só passando para o próximo quando o anterior for testado com sucesso.
Só implemente métodos e atributos que sejam usados para implementar os serviços requisitados. Nem mais nem menos.
Os arquivos Alocacao2003-2.xls e CorpoDocente2003-2.xls devem ser lidos para inicializar a alocação do sistema. Por exemplo, os itens de alocação inicialmente disponíveis no sistema devem ser os armazenados no primeiro arquivo, desprezando-se algumas informações que não são consideradas nesta versão da aplicação.
Para ler o arquivo Alocacao2003-2.xls, use objetos das classes em excel.zip (para estas classes funcionarem adequadamente, você terá também que disponibilizar em algum diretório do seu classpath os arquivos que estão em javapoi.zip), que oferecem vários serviços para ler o conteúdo de planilhas Excel. Os objetos das classes ExcelWorkbook, ExcelSheet, ExcelRow e ExcelCell representam, respectivamente, um arquivo .xls, uma planilha do arquivo, uma linha em uma planilha, e uma célula em uma linha. Assim, para ler uma arquivo Excel deve-se primeiro criar um objeto de ExcelWorkbook passando o nome do arquivo como parâmetro. Através deste objeto, pode-se obter uma planilha dele chamando-se o método getSheet passando o nome da planilha como parâmetro (Alocacao2003-2.xls só tem uma planilha, chamada Alocacao2003-2). Através de uma planilha, podemos acessar uma linha da mesma chamando o método getRow, que recebe o número da linha. Similarmente, dada uma linha pode-se acessar uma de suas células com o método getCell, que recebe o número da célula (um short). Finalmente, pode-se ler o conteúdo de uma célula chamando-se os métodos getNumericCellValue (retorna um double) e getStringCellValue (retorna uma string). Leia o conteúdo da planilha e crie itens de alocação a partir deles, mas antes teste estas classes isoladamente, para ver se elas funcionam adequadamente. Isso deve ser feito toda vez que vamos usar uma API implementada por terceiros. Verifique também os possíveis erros que podem acontecer quando chamando estes métodos. Por exemplo, getNumericCellValue só pode ser chamado em células que armazenam valores numéricos.
Use classes para representar o relatório e seus itens. A interface com o usuário deve receber um objeto relatório e navegar por todos os seus elementos, imprimindo um a um na tela, usando a classe Console.
Siga os fatores de qualidade de software.
Teste bem o seu sistema, incrementalmente, escrevendo o código de teste em um método main para cada classe. Por exemplo, o main da fachada do sistema deve cadastrar vários professores e itens de alocação e realizar várias operações com os mesmos, verificando se estas operações estão funcionando (caso não estejam isso deve ser impresso pelo teste, assim você poderá sempre executar automaticamente os testes e só verificar o resultado final deles impresso na tela). Teste as situações mais comuns (por exemplo, array com vários elementos mas não cheio, argumento positivo, etc.) mas também as mais extremas (por exemplo, array cheio e vazio, argumento negativo ou null, etc.).
Quando o seu sistema apresentar defeitos, use os recursos de depuração do JBuilder e comente linhas de código para facilitar a identificação dos defeitos. Depois de corrigidos, execute todos os testes anteriores para ter certeza que novos defeitos não foram introduzidos.