fork download
  1. class Bolsa {
  2. private double desconto;
  3.  
  4. public Bolsa(double desconto) {
  5. this.desconto = desconto;
  6. }
  7.  
  8. public String getDados() {
  9. return "Bolsista com desconto de: " + desconto + "%\n";
  10. }
  11.  
  12. public double aplicarDesconto(Curso curso) {
  13. return curso.getMensalidade() * (1 - desconto / 100);
  14. }
  15.  
  16. protected void setDesconto(double desconto) {
  17. this.desconto = 0;
  18. }
  19. }
  20.  
  21. class BolsaNula extends Bolsa {
  22. public BolsaNula() {
  23. super(0);
  24. }
  25.  
  26. public String getDados() {
  27. return "";
  28. }
  29. }
  30.  
  31. abstract class TrabalhoFinal {
  32. protected int ano_finalizacao;
  33. protected String titulo, orientador;
  34. protected double nota;
  35.  
  36. public String getDados() {
  37. return getFinalizacao() + getTitulo() + getOrientador() + getNota();
  38. }
  39.  
  40. private String getFinalizacao() {
  41. return "Curso finalizado em " + ano_finalizacao + "\n";
  42. }
  43.  
  44. protected String getTitulo() {
  45. return titulo + "\n";
  46. }
  47.  
  48. private String getOrientador() {
  49. return "Orientador(a): Prof. " + orientador + "\n";
  50. }
  51.  
  52. private String getNota() {
  53. return "Nota: " + nota;
  54. }
  55.  
  56. public void setAnoFinalizacao(int ano_finalizacao) {
  57. this.ano_finalizacao = ano_finalizacao;
  58. }
  59.  
  60. public void setTitulo(String titulo) {
  61. this.titulo = titulo;
  62. }
  63.  
  64. public void setOrientador(String orientador) {
  65. this.orientador = orientador;
  66. }
  67.  
  68. public void setNota(double nota) {
  69. this.nota = nota;
  70. }
  71. }
  72.  
  73. class Tcc extends TrabalhoFinal {
  74. protected String getTitulo() {
  75. return "Título do TCC: " + titulo + "\n";
  76. }
  77. }
  78.  
  79. class Monografia extends TrabalhoFinal {
  80. protected String getTitulo() {
  81. return "Título da monografia: " + super.getTitulo();
  82. }
  83. }
  84.  
  85. class Dissertacao extends TrabalhoFinal {
  86. protected String getTitulo() {
  87. return "Título da dissertação: " + super.getTitulo();
  88. }
  89. }
  90.  
  91. class Tese extends TrabalhoFinal {
  92. protected String getTitulo() {
  93. return "Título da tese: " + super.getTitulo();
  94. }
  95. }
  96.  
  97. class TrabalhoFinalIgnorado extends TrabalhoFinal {
  98. protected String getTitulo() {
  99. return "";
  100. }
  101. }
  102.  
  103. class TrabalhoFinalNulo extends TrabalhoFinal {
  104. public String getDados() {
  105. return "";
  106. }
  107. }
  108.  
  109. class Curso {
  110. private String nome, nivel;
  111. private double mensalidade;
  112.  
  113. public Curso(String nome, String nivel, double mensalidade) {
  114. this.nome = nome;
  115. this.nivel = nivel;
  116. this.mensalidade = mensalidade;
  117. }
  118.  
  119. public String getDados() {
  120. return "Curso: " + nivel + " em " + nome +"\n";
  121. }
  122.  
  123. public double getMensalidade() {
  124. return mensalidade;
  125. }
  126.  
  127. public TrabalhoFinal buildTrabalhoFinal(int ano_finalizacao, String titulo, String orientador, double nota) {
  128. TrabalhoFinal trabalho = null;
  129.  
  130. switch (nivel) {
  131. case "Graduação": trabalho = new Tcc(); break;
  132. case "Lato sensu": trabalho = new Monografia(); break;
  133. case "Mestrado": trabalho = new Dissertacao(); break;
  134. case "Doutorado": trabalho = new Tese(); break;
  135. }
  136.  
  137.  
  138. trabalho.setAnoFinalizacao(ano_finalizacao);
  139. trabalho.setTitulo(titulo);
  140. trabalho.setOrientador(orientador);
  141. trabalho.setNota(nota);
  142.  
  143. return trabalho;
  144. }
  145. }
  146.  
  147. class Aluno {
  148. private String nome;
  149. private Curso curso;
  150. private Bolsa bolsa;
  151. private TrabalhoFinal trabalho_final;
  152. private int cod_matricula;
  153.  
  154. public Aluno(
  155. String nome,
  156. Curso curso,
  157. Bolsa bolsa,
  158. TrabalhoFinal trabalho_final,
  159. int cod_matricula
  160. ) {
  161. this.nome = nome;
  162. this.curso = curso;
  163. this.bolsa = bolsa;
  164. this.trabalho_final = trabalho_final;
  165. this.cod_matricula = cod_matricula;
  166. }
  167.  
  168. public String getDados() {
  169. return getNome() + curso.getDados() + bolsa.getDados() + getMensalidade() + trabalho_final.getDados();
  170. }
  171.  
  172. private String getNome() {
  173. return "Aluno: "+ nome +"\n";
  174. }
  175.  
  176. private String getMensalidade() {
  177. return "Mensalidade: R$ " + bolsa.aplicarDesconto(curso) + "\n";
  178. }
  179. }
  180.  
  181. class Teste {
  182. public static void main (String args[]) {
  183. Aluno a1 = new Aluno(
  184. "Martin Fowler",
  185. new Curso("ADS", "Graduação", 920.50),
  186. new Bolsa(20.5),
  187. new TrabalhoFinalNulo(),
  188. 11223344
  189. );
  190.  
  191. Curso curso = new Curso("Computação Aplicada", "Mestrado", 2150.45);
  192. TrabalhoFinal trabalho = curso.buildTrabalhoFinal(2019, "Impacto da Refatoração", "Peter Coad", 9.5);
  193. Aluno a2 = new Aluno(
  194. "Kent Beck",
  195. curso,
  196. new BolsaNula(),
  197. trabalho,
  198. 22334455
  199. );
  200.  
  201.  
  202. System.out.println(a1.getDados());
  203. System.out.println(a2.getDados());
  204. }
  205. }
  206.  
Success #stdin #stdout 0.33s 59240KB
stdin
Standard input is empty
stdout
Aluno: Martin Fowler
Curso: Graduação em ADS
Bolsista com desconto de: 20.5%
Mensalidade: R$ 731.7975

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