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 relação
Aluno
e Curso
chamada de Rendimento
:
- 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:
- Contêm 4 valores do tipo
double
: a nota da NP1, da NP2, da reposição, e do exame.
O seu programa deve gerar alguns relatórios baseados nas seguintes regras:
- Cada
Rendimento
tem os valores associados
- um valor
aprovado
do tipo boolean
- um valor
media
, do tipo double
, 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.
Os dados persistentes deverão ser lidos e salvos em um arquivo csv
. (2pts)
Serão 3 tipos de arquivos
- Um arquivo CSV com os dados dos alunos, na ordem "id;nome"
123;Ana
124;Beto
125;Carlos Magno
b26;Danilo E.
127;Fernando
128;Gabriel M.
129;Hugo S.
- Um arquivo CSV com os dados dos cursos na ordem "nome;nível;ano"
LPOO;GRADUACAO;2018
ALPOO;GRADUACAO;2018
ALPOO;GRADUACAO;2019
ALPOO;POS_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.
123;8.0;7.0;0.0;0.0
124;3.0;4.0;5.0;2.0
125;2.0;4.0;1.0;9.0
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
b26;1.0;5.0;5.0;0.0
129;10.0;0.0;2.0;0.0
O seu sistema deve acessar e manipular os dados persistentes.
De modo que, ao iniciar o programa, o usuário final tenha acesso aos dados persistentes.
Ao terminar o programa, qualquer adiçao que o usuário tenha feito esteja representada pelos dados persistentes no mesmo formato descrito.
Neste sistema deve ser possível que um usuário final:
- Cadastre alunos (1pt)
- Listar alunos (1pt)
- Cadastre as matérias(1pt).
- Listar todas as matérias cadastradas (1pt).
- Listar matérias de um ano específico (1pt).
- Escolher um aluno (pelo RA) e mostrar o relatório do aluno com:(1pt)
- Todas as matérias cursadas por este aluno com as notas e o status (se passou ou não)
- Mostrar a média do histórico do aluno.
- Escolher uma matéria (pelo nome, ano e nível) e mostrar o relatório da matéria com:(1pt)
- Cada aluno que cursou a matéria, com a sua média e status (se passou ou não)
- A média das médias da matéria.
- Escolher um
Aluno
e um Curso
e cadastrar um Rendimento
.
O seu programa deve se comunicar com o usuário final através do terminal, o usuário deve poder executar todos os comandos listados em "Sistemas".
- Estruturas de Dados Interna: Caso o seu programa use estruturas de dados como
Map
e/ou Set
para organizar os dados internos: (+1pt)
- Herança e polimorfismo: Caso seu programa use herança para organizar os diferentes tipos de
Rendimento
(cálculo da média final de GRADUACAO e POS_GRADUACAO). Por exemplo: Faça com que Rendimento
seja uma classe abstrata que tenha duas subclasses que tenham override do cálculo da média. (+1pt)
- Controle de Erros: Caso o seu programa tenha controle de erros usando
try-catch
da entrada do usuário final (+1pt)
.