Skip to content

Instantly share code, notes, and snippets.

@Gabrielgtt
Last active November 3, 2017 12:52
Show Gist options
  • Save Gabrielgtt/7eee0f011a58e34cdf97f981a0eed816 to your computer and use it in GitHub Desktop.
Save Gabrielgtt/7eee0f011a58e34cdf97f981a0eed816 to your computer and use it in GitHub Desktop.
/**
* Representação de um aluno da UFCG que possui contas na cantina, laboratório e
* matrículas em disciplinas. Também é registrado o estado da saúde do aluno.
*
* @author Gabriel Alves Tavares
*/
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.ArrayList;
public class Aluno {
private String nome;
private Saude saude;
private Map <String, ContaLaboratorio> contasLaboratorio;
private Map <String, ContaCantina> contasCantina;
private Map <String, Disciplina> disciplinas;
/**
* Constrói o aluno a partir de um nome
*
* @param nomeAluno: nome do aluno
*/
public Aluno(String nomeAluno){
this.nome = nomeAluno;
this.saude = new Saude();
this.contasLaboratorio = new LinkedHashMap <>();
this.contasCantina = new LinkedHashMap <>();
this.disciplinas = new LinkedHashMap <>();
}
/**
* Cria e guarda uma nova conta no laboratório
*
* @param nomeLaboratorio: nome do laboratório
*/
public void cadastraLaboratorio(String nomeLaboratorio){
ContaLaboratorio contaLab = new ContaLaboratorio(nomeLaboratorio);
this.contasLaboratorio.put(nomeLaboratorio, contaLab);
}
/**
* Cria e guarda uma nova conta no laboratório com uma cota específica
*
* @param nomeLaboratorio: nome do laboratório
*/
public void cadastraLaboratorio(String nomeLaboratorio, int cota){
this.contasLaboratorio.put(nomeLaboratorio, new ContaLaboratorio(nomeLaboratorio, cota));
}
/**
* Acessa um laboratório no Map e consome espaço
*
* @param nomeLaboratorio: nome do laboratório
* @param mbytes: espaço consumido
*/
public void consomeEspaco(String nomeLaboratorio, int mbytes){
this.contasLaboratorio.get(nomeLaboratorio).consomeEspaco(mbytes);
}
/**
* Acessa um laboratório no Map e libera espaço
*
* @param nomeLaboratorio: nome do laboratório
* @param mbytes: espaço liberado
*/
public void liberaEspaco(String nomeLaboratorio, int mbytes){
this.contasLaboratorio.get(nomeLaboratorio).liberaEspaco(mbytes);
}
/**
* Verifica se um laboratório atingiu a cota
*
* @param nomeLaboratorio: nome do laboratório
* @return true se o aluno atingiu a cota, false do contrário
*/
public boolean atingiuCota(String nomeLaboratorio){
return this.contasLaboratorio.get(nomeLaboratorio).atingiuCota();
}
/**
* Retorna a string que representa o laboratório
*
* @param nomeLaboratorio: nome do laboratório
* @return "-nomeDoLaboratório- -espacoConsumido- -cota-"
*/
public String laboratorioToString(String nomeLaboratorio){
return this.contasLaboratorio.get(nomeLaboratorio).toString();
}
/**
* Cadastra uma disciplina
*
* @param nomeDisciplina: nome da disciplina
*/
public void cadastraDisciplina(String nomeDisciplina){
Disciplina disciplina = new Disciplina(nomeDisciplina);
this.disciplinas.put(nomeDisciplina, disciplina);
}
/**
* Cadastra uma disciplina com uma determinada quantidade de notas
*
* @param nomeDisciplina: nome da disciplina
* @param numProvas: número de provas
*/
public void cadastraDisciplina(String nomeDisciplina, int numProvas){
Disciplina disciplina = new Disciplina(nomeDisciplina, numProvas);
this.disciplinas.put(nomeDisciplina, disciplina);
}
/**
* Cadastra horas trabalhas em um laboratório
*
* @param nomeDisciplina: nome da disciplina
* @param horas: horas trabalhadas
*/
public void cadastraHoras(String nomeDisciplina, int horas){
this.disciplinas.get(nomeDisciplina).cadastraHoras(horas);
}
/**
* Cadastra uma nota em uma determinada prova
*
* @param nomeDisciplina: nome da disciplina
* @param prova: o número da prova, varia de 1 a 4 (o index no array de notas começa em 0)
* @param valorNota: o valor para qual a nota é mudada
*/
public void cadastraNota(String nomeDisciplina, int prova, double valorNota){
this.disciplinas.get(nomeDisciplina).cadastraNota(prova, valorNota);
}
/**
* Verifica a aprovação do aluno na disciplina
*
* @param nomeDisciplina: nome da disciplina
* @return true se a media do aluno for maior ou igual a 7.0, false do contrário
*/
public boolean aprovado(String nomeDisciplina){
return this.disciplinas.get(nomeDisciplina).aprovado();
}
/**
* Retorna a string que representa a disciplina
*
* @param nomeDisciplina: nome da disciplina
* @return "nomeDaDisciplina espacoConsumido cota"
*/
public String disciplinaToString(String nomeDisciplina){
return this.disciplinas.get(nomeDisciplina).toString();
}
/**
* Cadastra uma cantina
*
* @param nomeCantina: nome da cantina
*/
public void cadastraCantina(String nomeCantina){
ContaCantina contaCant = new ContaCantina(nomeCantina);
this.contasCantina.put(nomeCantina, contaCant);
}
/**
* Cadastra um lanche comprado pelo aluno
*
* @param nomeCantina: nome na cantina
* @param qtdItens: quantidade de itens comprados
* @param valorCentavos: preço do lanche
*/
public void cadastraLanche(String nomeCantina, int qtdItens, int valorCentavos){
this.contasCantina.get(nomeCantina).cadastraLanche(qtdItens, valorCentavos);
}
/**
* Cadastra um lanche comprado pelo aluno, com detalhes
*
* @param nomeCantina: nome na cantina
* @param qtdItens: quantidade de itens comprados
* @param valorCentavos: preço do lanche
* @param detalhes: descrição do lanche que é armazenada n início de um ArrayList
*/
public void cadastraLanche(String nomeCantina, int qtdItens, int valorCentavos, String detalhes){
this.contasCantina.get(nomeCantina).cadastraLanche(qtdItens, valorCentavos, detalhes);
}
/**
* Diminui a dívida do aluno em uma cantina
*
* @param valorCentavos: valor diminuido na dívida
*/
public void pagaConta(String nomeCantina, int valorCentavos){
this.contasCantina.get(nomeCantina).pagaConta(valorCentavos);
}
/**
* Representação em String da conta na cantina
*
* @param nomeCantina: nome na cantina
* @return uma string com o nome da cantina, qtds de itens comprado e a dívida na cantina
*/
public String cantinaToString(String nomeCantina){
return this.contasCantina.get(nomeCantina).toString();
}
/**
* Define um valor para a saúde mental do aluno
*
* @param valor: estado da saude mental
*/
public void defineSaudeMental(String valor){
this.saude.defineSaudeMental(valor);
}
/**
* Define um valor para a saúde física do aluno
*
* @param valor: estado da saude física
*/
public void defineSaudeFisica(String valor){
this.saude.defineSaudeFisica(valor);
}
/**
* Define um emoji para o aluno
*
* @param valor: String que representa o emoji
*/
public void defineEmoji(String valor){
this.saude.defineEmoji(valor);
}
/**
* Constrói uma string com as disciplinas do aluno
*
* @return uma String de palavras separadas por quebras de linha, do método toString de cada disciplina
* cadastrada pelo aluno
*/
private String toStringListaDisciplinas(){
String disciplina = "";
for (Map.Entry<String, Disciplina> entry : disciplinas.entrySet()) {
Disciplina dis = entry.getValue();
disciplina += dis.toString();
disciplina += "\n";
}
return disciplina;
}
/**
* Constrói uma string com as cantinas cadastradas pelo aluno
*
* @return uma String de palavras separadas por quebras de linha, do método toString de cada cantina
* cadastrada pelo aluno
*/
private String toStringListaCantinas(){
String cantina = "";
for (Map.Entry<String, ContaCantina> entry : contasCantina.entrySet()) {
ContaCantina can = entry.getValue();
cantina += can.toString();
cantina += "\n";
}
return cantina;
}
/**
* Constrói uma string com os laboratórios do aluno
*
* @return uma String de palavras separadas por quebras de linha, do método toString de cada laboratório
* cadastrada pelo aluno
*/
private String toStringListaLaboratorios(){
String laboratorios = "";
for (Map.Entry<String, ContaLaboratorio> entry : contasLaboratorio.entrySet()) {
ContaLaboratorio lab = entry.getValue();
laboratorios += lab.toString();
laboratorios += "\n";
}
return laboratorios;
}
/**
* Gera uma string com todas as principais informações do aluno
*
* @return o nome do aluno, as disciplinas que está cursando, as cantinas e laboratórios cadastrados
* e sua saúde
*/
public String geral(){
String laboratorios = this.toStringListaLaboratorios();
String cantinas = this.toStringListaCantinas();
String disciplinas = this.toStringListaDisciplinas();
String saude = this.saude.geral();
String barras = "----------------------------\n";
return String.format("%sAluno: %s\nSaúde %s\nDisciplinas cadastradas:\n%s\nCantinas cadastradas:\n%s\nLaboratórios cadastrados:\n%s%s",
barras, this.nome, saude, disciplinas, cantinas, laboratorios, barras);
}
}
// SPLab, notice me senpai!!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment