fork download
  1. interface TrabalhoFinal {
  2. String getDescricaoParaExibicao(String nivelCurso);
  3. boolean temTrabalho();
  4. }
  5.  
  6. class TrabalhoFinalNenhum implements TrabalhoFinal {
  7. public String getDescricaoParaExibicao(String nivelCurso) {
  8. return "";
  9. }
  10. public boolean temTrabalho() {
  11. return false;
  12. }
  13. }
  14.  
  15. class TrabalhoFinalConcluido implements TrabalhoFinal {
  16. private final String orientador;
  17. private final String titulo;
  18. private final String nota;
  19.  
  20. public TrabalhoFinalConcluido(String orientador, String titulo, String nota) {
  21. this.orientador = orientador;
  22. this.titulo = titulo;
  23. this.nota = nota;
  24. }
  25.  
  26. public String getDescricaoParaExibicao(String nivelCurso) {
  27. String tipoTrabalho;
  28. if ("Graduação".equals(nivelCurso)) {
  29. tipoTrabalho = "do TCC";
  30. } else if ("Lato sensu".equals(nivelCurso)) {
  31. tipoTrabalho = "da monografia";
  32. } else if ("Mestrado".equals(nivelCurso)) {
  33. tipoTrabalho = "da dissertação";
  34. } else if ("Doutorado".equals(nivelCurso)) {
  35. tipoTrabalho = "da tese";
  36. } else {
  37. tipoTrabalho = "do trabalho final";
  38. }
  39.  
  40. return "Título " + tipoTrabalho + ": " + titulo + "\n" +
  41. "Orientador(a): Prof. " + orientador + "\n" +
  42. "Nota: " + nota + "\n";
  43. }
  44.  
  45. public boolean temTrabalho() {
  46. return true;
  47. }
  48. }
  49.  
  50. class Aluno {
  51. private final String nome;
  52. private final String nomeCurso;
  53. private final String nivelCurso;
  54. private final int codMatricula;
  55. private final boolean bolsista;
  56. private final boolean cursoFinalizado;
  57. private final int anoFinalizacao;
  58. private final double mensalidade;
  59. private final double desconto;
  60. private final TrabalhoFinal trabalhoFinal;
  61.  
  62. public Aluno(String nome,
  63. String nomeCurso,
  64. String nivelCurso,
  65. int codMatricula,
  66. boolean bolsista,
  67. boolean cursoFinalizado,
  68. int anoFinalizacao,
  69. double mensalidade,
  70. double desconto,
  71. TrabalhoFinal trabalhoFinal) {
  72. this.nome = nome;
  73. this.nomeCurso = nomeCurso;
  74. this.nivelCurso = nivelCurso;
  75. this.codMatricula = codMatricula;
  76. this.bolsista = bolsista;
  77. this.cursoFinalizado = cursoFinalizado;
  78. this.anoFinalizacao = anoFinalizacao;
  79. this.mensalidade = mensalidade;
  80. this.desconto = desconto;
  81. this.trabalhoFinal = (trabalhoFinal != null) ? trabalhoFinal : new TrabalhoFinalNenhum();
  82. }
  83.  
  84. public String getDados() {
  85. StringBuilder sb = new StringBuilder();
  86. sb.append("Aluno: ").append(nome).append("\n");
  87. sb.append("Curso: ").append(nivelCurso).append(" em ").append(nomeCurso).append("\n");
  88.  
  89. if (bolsista) {
  90. double valorFinal = mensalidade * (1 - desconto / 100);
  91. sb.append("Bolsista com desconto de: ").append(desconto).append("%\n");
  92. sb.append("Mensalidade: R$ ").append(String.format("%.2f", valorFinal)).append("\n");
  93. } else {
  94. sb.append("Mensalidade: R$ ").append(String.format("%.2f", mensalidade)).append("\n");
  95. }
  96.  
  97. if (cursoFinalizado) {
  98. sb.append("Curso finalizado em ").append(anoFinalizacao).append("\n");
  99. if (trabalhoFinal.temTrabalho()) {
  100. sb.append(trabalhoFinal.getDescricaoParaExibicao(nivelCurso));
  101. }
  102. }
  103.  
  104. return sb.toString();
  105. }
  106. }
  107.  
  108. class Main {
  109. public static void main(String[] args) {
  110. // Aluno sem trabalho de conclusão
  111. Aluno aluno1 = new Aluno(
  112. "Martin Fowler",
  113. "ADS",
  114. "Graduação",
  115. 11223344,
  116. true,
  117. false,
  118. -1,
  119. 920.50,
  120. 20.5,
  121. new TrabalhoFinalNenhum()
  122. );
  123.  
  124. // Aluno com dissertação
  125. Aluno aluno2 = new Aluno(
  126. "Kent Beck",
  127. "Computação Aplicada",
  128. "Mestrado",
  129. 22334455,
  130. false,
  131. true,
  132. 2019,
  133. 2150.45,
  134. 0,
  135. new TrabalhoFinalConcluido("Peter Coad", "Impacto da Refatoração", "9.5")
  136. );
  137.  
  138. System.out.println(aluno1.getDados());
  139. System.out.println("-----------------------------");
  140. System.out.println(aluno2.getDados());
  141. }
  142. }
Success #stdin #stdout 0.18s 58540KB
stdin
Standard input is empty
stdout
Aluno: Martin Fowler
Curso: Graduação em ADS
Bolsista com desconto de: 20.5%
Mensalidade: R$ 731.80

-----------------------------
Aluno: Kent Beck
Curso: Mestrado em Computação Aplicada
Mensalidade: R$ 2150.45
Curso finalizado em 2019
Título da dissertação: Impacto da Refatoração
Orientador(a): Prof. Peter Coad
Nota: 9.5