Trabalho em grupo de, no máximo, 5 pessoas
Neste trabalho o grupo deve fazer um programa de acesso aos dados de uma faculdade, com informações sobre cadastro de alunos e cursos; e notas dos alunos.
o seu programa deve processar dados relativos a alunos, cursos, notas e rendimentos da faculdade.
- Um
Aluno
tem:
- um
id
, do tipo String
;
- um
nome
do tipo String
- Cada aluno tem um
id
único e pode ser identificado exclusivamente por seu id
; dois alunos podem ter o mesmo nome, mas nunca o mesmo id
- Um
Curso
tem:
- um
nome
, do tipo String
;
- um
nivel
de dois possíveis, podendo ser de "graduacao", ou "pos_graduacao";
- um
ano
, do tipo inteiro, representando o ano que o curso foi dado;
- Cada curso deve ser identificado pela combinação de seus três campos; dois cursos são iguais se, e somente se, seus três campos forem iguais.
- Uma
Nota
:
- são números decimais, com 2 dígitos significativos, ente 0.00 e 10.00
- As
Notas
de cada Rendimento
:
- contêm 4 valores do tipo
Nota
: a nota da NP1, da NP2, da reposição, e do exame.
- Um
Rendimento
representa a qualidade das notas que um Aluno
obteve em um Curso
:
- um
rendimento
está atrelado à um aluno
e um curso
- um
rendimento
tem:
- as
Notas
que o aluno
tirou no curso
- um valor
aprovado
do tipo boolean
(um valor não quer dizer que a classe deva ter uma variável chamada aprovado
, pode ser um método)
- um valor
media
, do tipo Nota
, associada às notas do curso, esta média deve ser calculada da seguinte maneira:
- deve ser calculada uma média inicial (variável local) da seguinte maneira: caso a nota da reposição seja maior que a nota da NP1 ou da NP2, a menor nota, entre a NP1 e a NP2, deve ser substituída pela nota da reposição, (esta substituição deve ser feita apenas no cálculo da média, a nota em da NP1 ou da NP2 não devem mudar de valor.) O valor da média entre a NP1 e NP2, depois de ter sido feita a substituíção, será a média inicial
- caso o curso seja um curso de graduação:
- se a média inicial for maior ou igual a 7.0, então a média se mantém no valor da média inicial e o valor de aprovado é verdadeiro.
- se a média inicial não for maior que 7.0, então a média final será calculada a partir da média entre a nota do exame e a média inicial. A média terá o valor da média final e se o seu valor for maior ou igual a 5.0, o valor de aprovado será verdadeiro, caso esta média final seja menor que 5.0 o valor de aprovado é falso
- caso o curso seja um curso de pós graduação:
- se a média inicial for maior ou igual a 5.0, então a média se mantém no valor da média inicial e o valor de aprovado é verdadeiro.
- se a média inicial não for maior que 5.0, então a média final será calculada a partir da média entre a nota do exame e a média inicial. Se o seu valor for maior ou igual a 5.0, o valor de aprovado será verdadeiro, e a média terá o valor de 5.0. Caso esta média final seja menor que 5.0 o valor de aprovado é falso e a média terá o valor da média final.
o programa deve ter uma interface com o usuário através do terminal, deve ser possível para o usuário
- Listar todos os cursos dados: para cada curso deve ser impresso seu nome, nível e ano, somente
- Listar todos os alunos inscritos: para cada aluno deve ser impresso seu nome e id, somente
- Listar o histórico de um determinado aluno:
- o seu programa deve ter meios para o usuário escolher o aluno
- o histórico de um aluno deve conter todos os cursos que o aluno foi inscrito, e para cada curso o programa deve imprimir o curso, as notas, a média e se foi aprovado.
- Listar o relatório de rendimento de cada curso:
- o seu programa deve ter meios para o usuário escolher o curso
- o relatório de rendimento de um curso deve conter todos os alunos que fizeram o curso, e para cada aluno imprimir o aluno, as notas, a média e se foi aprovado.
- Incluir um novo aluno: deve ser pedido para o usuário informar o id e o nome do aluno.
- Incluir um novo curso: deve ser pedido para o usuário informar o nome, escolher o tipo, e informar o ano.
- Incluir um novo rendimento, deve ser pedido para o usuário escolher um aluno já inscrito, um curso já inscrito, e o usuário deve informar as notas (NP1, NP2, substitutiva e exame) do novo rendimento.
Os dados iniciais do programa devem ser lidos de arquivos externos.
O local dos arquivos será preconfigurado em algum local da escolha do grupo. Os arquivos podem ser carregados no momento que o programa iniciar.
Teremos três tipos de arquivos:
- Um arquivo CSV com os dados dos alunos, na ordem "id;nome"
Exemplo:
123;Ana
124;Beto
125;Carlos Magno
b26;Danilo E.
127;Fernando
- Um arquivo CSV com os dados dos cursos na ordem "nome;nível;ano"
Exemplo:
ALPOO;GRADUACAO;2019
ALPOO;GRADUACAO;2018
ALPOO;POS_GRADUACAO;2019
LPOO;GRADUACAO;2019
- Para cada curso, um arquivo com o nome "nome_nível_ano.csv", com as informações das notas dos alunos naquele curso, na ordem "id_do_aluno;nota_NP1;nota_NP2;nota_reposicao;nota_exame". Havendo a possibilidade de o arquivo não ter nenhum dado, representando o fato de que ninguém cursou aquela matéria naquele ano.
Exemplos:
123;7.0;9.0;0.0;0.0
124;2.0;3.0;4.0;2.0
125;2.0;4.0;5.0;9.0
Após terminar o programa, os arquivos listados devem estar atualizados com quaisquer modificações feitas pelo usuário, mas mantendo o formato especificado nesta seção.
O seu programa deve ter um controle para entradas do usuário e conseguir voltar para um estado estável caso o usuário coloque alguma entrada não aceitável.
O seu programa será avaliado nos seguintes requisitos:
- De acordo com cada item feito da descrição do trabalho
- De acordo com a estruturação do programa, se cada classe está fazendo o que deveria fazer (tente manter a regra de que cada classe deve ter apenas um trabalho)
- Os nomes das classes, métodos e variáveis serão avaliados
- Controle de erros em relação à entrada do usuário usando ou não o ambiente
try-catch
- Uso de recursos dados em aula:
- se o seu programa usa o paradigma de orientação a objetos (herança e polimorfismo)
- se suas classes implementam interfaces dadas em aula (Comparable, Iterable)
- se usa conceitos dados em aula (encapsulamento e composição)
- se usa estruturas dadas em aula (ArrayList, Set, Map)
- Você é convidado a usar outros conceitos não vistos, como "enumerate", "factory pattern", MVC, "programação genérica"...