interface TrabalhoFinal {
boolean temTrabalho( ) ;
}
class TrabalhoFinalNenhum implements TrabalhoFinal {
return "" ;
}
public boolean temTrabalho( ) {
return false ;
}
}
class TrabalhoFinalConcluido implements TrabalhoFinal {
private final String orientador
;
this .orientador = orientador;
this .titulo = titulo;
this .nota = nota;
}
if ( "Graduação" .equals ( nivelCurso) ) {
tipoTrabalho = "do TCC" ;
} else if ( "Lato sensu" .equals ( nivelCurso) ) {
tipoTrabalho = "da monografia" ;
} else if ( "Mestrado" .equals ( nivelCurso) ) {
tipoTrabalho = "da dissertação" ;
} else if ( "Doutorado" .equals ( nivelCurso) ) {
tipoTrabalho = "da tese" ;
} else {
tipoTrabalho = "do trabalho final" ;
}
return "Título " + tipoTrabalho + ": " + titulo + "\n " +
"Orientador(a): Prof. " + orientador + "\n " +
"Nota: " + nota + "\n " ;
}
public boolean temTrabalho( ) {
return true ;
}
}
class Aluno {
private final String nomeCurso
; private final String nivelCurso
; private final int codMatricula;
private final boolean bolsista;
private final boolean cursoFinalizado;
private final int anoFinalizacao;
private final double mensalidade;
private final double desconto;
private final TrabalhoFinal trabalhoFinal;
int codMatricula,
boolean bolsista,
boolean cursoFinalizado,
int anoFinalizacao,
double mensalidade,
double desconto,
TrabalhoFinal trabalhoFinal) {
this .nome = nome;
this .nomeCurso = nomeCurso;
this .nivelCurso = nivelCurso;
this .codMatricula = codMatricula;
this .bolsista = bolsista;
this .cursoFinalizado = cursoFinalizado;
this .anoFinalizacao = anoFinalizacao;
this .mensalidade = mensalidade;
this .desconto = desconto;
this .trabalhoFinal = ( trabalhoFinal != null ) ? trabalhoFinal : new TrabalhoFinalNenhum( ) ;
}
StringBuilder sb = new StringBuilder( ) ;
sb.append ( "Aluno: " ) .append ( nome) .append ( "\n " ) ;
sb.append ( "Curso: " ) .append ( nivelCurso) .append ( " em " ) .append ( nomeCurso) .append ( "\n " ) ;
if ( bolsista) {
double valorFinal = mensalidade * ( 1 - desconto / 100 ) ;
sb.append ( "Bolsista com desconto de: " ) .append ( desconto) .append ( "%\n " ) ;
sb.
append ( "Mensalidade: R$ " ) .
append ( String .
format ( "%.2f" , valorFinal
) ) .
append ( "\n " ) ; } else {
sb.
append ( "Mensalidade: R$ " ) .
append ( String .
format ( "%.2f" , mensalidade
) ) .
append ( "\n " ) ; }
if ( cursoFinalizado) {
sb.append ( "Curso finalizado em " ) .append ( anoFinalizacao) .append ( "\n " ) ;
if ( trabalhoFinal.temTrabalho ( ) ) {
sb.append ( trabalhoFinal.getDescricaoParaExibicao ( nivelCurso) ) ;
}
}
return sb.toString ( ) ;
}
}
class Main {
public static void main
( String [ ] args
) { // Aluno sem trabalho de conclusão
Aluno aluno1 = new Aluno(
"Martin Fowler" ,
"ADS" ,
"Graduação" ,
11223344 ,
true ,
false ,
- 1 ,
920.50 ,
20.5 ,
new TrabalhoFinalNenhum( )
) ;
// Aluno com dissertação
Aluno aluno2 = new Aluno(
"Kent Beck" ,
"Computação Aplicada" ,
"Mestrado" ,
22334455 ,
false ,
true ,
2019 ,
2150.45 ,
0 ,
new TrabalhoFinalConcluido( "Peter Coad" , "Impacto da Refatoração" , "9.5" )
) ;
System .
out .
println ( aluno1.
getDados ( ) ) ; System .
out .
println ( "-----------------------------" ) ; System .
out .
println ( aluno2.
getDados ( ) ) ; }
}
aW50ZXJmYWNlIFRyYWJhbGhvRmluYWwgewogICAgU3RyaW5nIGdldERlc2NyaWNhb1BhcmFFeGliaWNhbyhTdHJpbmcgbml2ZWxDdXJzbyk7CiAgICBib29sZWFuIHRlbVRyYWJhbGhvKCk7Cn0KCmNsYXNzIFRyYWJhbGhvRmluYWxOZW5odW0gaW1wbGVtZW50cyBUcmFiYWxob0ZpbmFsIHsKICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGVzY3JpY2FvUGFyYUV4aWJpY2FvKFN0cmluZyBuaXZlbEN1cnNvKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQogICAgcHVibGljIGJvb2xlYW4gdGVtVHJhYmFsaG8oKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9CgpjbGFzcyBUcmFiYWxob0ZpbmFsQ29uY2x1aWRvIGltcGxlbWVudHMgVHJhYmFsaG9GaW5hbCB7CiAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBvcmllbnRhZG9yOwogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgdGl0dWxvOwogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbm90YTsKCiAgICBwdWJsaWMgVHJhYmFsaG9GaW5hbENvbmNsdWlkbyhTdHJpbmcgb3JpZW50YWRvciwgU3RyaW5nIHRpdHVsbywgU3RyaW5nIG5vdGEpIHsKICAgICAgICB0aGlzLm9yaWVudGFkb3IgPSBvcmllbnRhZG9yOwogICAgICAgIHRoaXMudGl0dWxvID0gdGl0dWxvOwogICAgICAgIHRoaXMubm90YSA9IG5vdGE7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXREZXNjcmljYW9QYXJhRXhpYmljYW8oU3RyaW5nIG5pdmVsQ3Vyc28pIHsKICAgICAgICBTdHJpbmcgdGlwb1RyYWJhbGhvOwogICAgICAgIGlmICgiR3JhZHVhw6fDo28iLmVxdWFscyhuaXZlbEN1cnNvKSkgewogICAgICAgICAgICB0aXBvVHJhYmFsaG8gPSAiZG8gVENDIjsKICAgICAgICB9IGVsc2UgaWYgKCJMYXRvIHNlbnN1Ii5lcXVhbHMobml2ZWxDdXJzbykpIHsKICAgICAgICAgICAgdGlwb1RyYWJhbGhvID0gImRhIG1vbm9ncmFmaWEiOwogICAgICAgIH0gZWxzZSBpZiAoIk1lc3RyYWRvIi5lcXVhbHMobml2ZWxDdXJzbykpIHsKICAgICAgICAgICAgdGlwb1RyYWJhbGhvID0gImRhIGRpc3NlcnRhw6fDo28iOwogICAgICAgIH0gZWxzZSBpZiAoIkRvdXRvcmFkbyIuZXF1YWxzKG5pdmVsQ3Vyc28pKSB7CiAgICAgICAgICAgIHRpcG9UcmFiYWxobyA9ICJkYSB0ZXNlIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aXBvVHJhYmFsaG8gPSAiZG8gdHJhYmFsaG8gZmluYWwiOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICJUw610dWxvICIgKyB0aXBvVHJhYmFsaG8gKyAiOiAiICsgdGl0dWxvICsgIlxuIiArCiAgICAgICAgICAgICAgICJPcmllbnRhZG9yKGEpOiBQcm9mLiAiICsgb3JpZW50YWRvciArICJcbiIgKwogICAgICAgICAgICAgICAiTm90YTogIiArIG5vdGEgKyAiXG4iOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIHRlbVRyYWJhbGhvKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgfQp9CgpjbGFzcyBBbHVubyB7CiAgICBwcml2YXRlIGZpbmFsIFN0cmluZyBub21lOwogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbm9tZUN1cnNvOwogICAgcHJpdmF0ZSBmaW5hbCBTdHJpbmcgbml2ZWxDdXJzbzsKICAgIHByaXZhdGUgZmluYWwgaW50IGNvZE1hdHJpY3VsYTsKICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBib2xzaXN0YTsKICAgIHByaXZhdGUgZmluYWwgYm9vbGVhbiBjdXJzb0ZpbmFsaXphZG87CiAgICBwcml2YXRlIGZpbmFsIGludCBhbm9GaW5hbGl6YWNhbzsKICAgIHByaXZhdGUgZmluYWwgZG91YmxlIG1lbnNhbGlkYWRlOwogICAgcHJpdmF0ZSBmaW5hbCBkb3VibGUgZGVzY29udG87CiAgICBwcml2YXRlIGZpbmFsIFRyYWJhbGhvRmluYWwgdHJhYmFsaG9GaW5hbDsKCiAgICBwdWJsaWMgQWx1bm8oU3RyaW5nIG5vbWUsCiAgICAgICAgICAgICAgICAgU3RyaW5nIG5vbWVDdXJzbywKICAgICAgICAgICAgICAgICBTdHJpbmcgbml2ZWxDdXJzbywKICAgICAgICAgICAgICAgICBpbnQgY29kTWF0cmljdWxhLAogICAgICAgICAgICAgICAgIGJvb2xlYW4gYm9sc2lzdGEsCiAgICAgICAgICAgICAgICAgYm9vbGVhbiBjdXJzb0ZpbmFsaXphZG8sCiAgICAgICAgICAgICAgICAgaW50IGFub0ZpbmFsaXphY2FvLAogICAgICAgICAgICAgICAgIGRvdWJsZSBtZW5zYWxpZGFkZSwKICAgICAgICAgICAgICAgICBkb3VibGUgZGVzY29udG8sCiAgICAgICAgICAgICAgICAgVHJhYmFsaG9GaW5hbCB0cmFiYWxob0ZpbmFsKSB7CiAgICAgICAgdGhpcy5ub21lID0gbm9tZTsKICAgICAgICB0aGlzLm5vbWVDdXJzbyA9IG5vbWVDdXJzbzsKICAgICAgICB0aGlzLm5pdmVsQ3Vyc28gPSBuaXZlbEN1cnNvOwogICAgICAgIHRoaXMuY29kTWF0cmljdWxhID0gY29kTWF0cmljdWxhOwogICAgICAgIHRoaXMuYm9sc2lzdGEgPSBib2xzaXN0YTsKICAgICAgICB0aGlzLmN1cnNvRmluYWxpemFkbyA9IGN1cnNvRmluYWxpemFkbzsKICAgICAgICB0aGlzLmFub0ZpbmFsaXphY2FvID0gYW5vRmluYWxpemFjYW87CiAgICAgICAgdGhpcy5tZW5zYWxpZGFkZSA9IG1lbnNhbGlkYWRlOwogICAgICAgIHRoaXMuZGVzY29udG8gPSBkZXNjb250bzsKICAgICAgICB0aGlzLnRyYWJhbGhvRmluYWwgPSAodHJhYmFsaG9GaW5hbCAhPSBudWxsKSA/IHRyYWJhbGhvRmluYWwgOiBuZXcgVHJhYmFsaG9GaW5hbE5lbmh1bSgpOwogICAgfQoKICAgIHB1YmxpYyBTdHJpbmcgZ2V0RGFkb3MoKSB7CiAgICAgICAgU3RyaW5nQnVpbGRlciBzYiA9IG5ldyBTdHJpbmdCdWlsZGVyKCk7CiAgICAgICAgc2IuYXBwZW5kKCJBbHVubzogIikuYXBwZW5kKG5vbWUpLmFwcGVuZCgiXG4iKTsKICAgICAgICBzYi5hcHBlbmQoIkN1cnNvOiAiKS5hcHBlbmQobml2ZWxDdXJzbykuYXBwZW5kKCIgZW0gIikuYXBwZW5kKG5vbWVDdXJzbykuYXBwZW5kKCJcbiIpOwoKICAgICAgICBpZiAoYm9sc2lzdGEpIHsKICAgICAgICAgICAgZG91YmxlIHZhbG9yRmluYWwgPSBtZW5zYWxpZGFkZSAqICgxIC0gZGVzY29udG8gLyAxMDApOwogICAgICAgICAgICBzYi5hcHBlbmQoIkJvbHNpc3RhIGNvbSBkZXNjb250byBkZTogIikuYXBwZW5kKGRlc2NvbnRvKS5hcHBlbmQoIiVcbiIpOwogICAgICAgICAgICBzYi5hcHBlbmQoIk1lbnNhbGlkYWRlOiBSJCAiKS5hcHBlbmQoU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHZhbG9yRmluYWwpKS5hcHBlbmQoIlxuIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc2IuYXBwZW5kKCJNZW5zYWxpZGFkZTogUiQgIikuYXBwZW5kKFN0cmluZy5mb3JtYXQoIiUuMmYiLCBtZW5zYWxpZGFkZSkpLmFwcGVuZCgiXG4iKTsKICAgICAgICB9CgogICAgICAgIGlmIChjdXJzb0ZpbmFsaXphZG8pIHsKICAgICAgICAgICAgc2IuYXBwZW5kKCJDdXJzbyBmaW5hbGl6YWRvIGVtICIpLmFwcGVuZChhbm9GaW5hbGl6YWNhbykuYXBwZW5kKCJcbiIpOwogICAgICAgICAgICBpZiAodHJhYmFsaG9GaW5hbC50ZW1UcmFiYWxobygpKSB7CiAgICAgICAgICAgICAgICBzYi5hcHBlbmQodHJhYmFsaG9GaW5hbC5nZXREZXNjcmljYW9QYXJhRXhpYmljYW8obml2ZWxDdXJzbykpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gc2IudG9TdHJpbmcoKTsKICAgIH0KfQoKY2xhc3MgTWFpbiB7CiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB7CiAgICAgICAgLy8gQWx1bm8gc2VtIHRyYWJhbGhvIGRlIGNvbmNsdXPDo28KICAgICAgICBBbHVubyBhbHVubzEgPSBuZXcgQWx1bm8oCiAgICAgICAgICAgICJNYXJ0aW4gRm93bGVyIiwKICAgICAgICAgICAgIkFEUyIsCiAgICAgICAgICAgICJHcmFkdWHDp8OjbyIsCiAgICAgICAgICAgIDExMjIzMzQ0LAogICAgICAgICAgICB0cnVlLAogICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgLTEsCiAgICAgICAgICAgIDkyMC41MCwKICAgICAgICAgICAgMjAuNSwKICAgICAgICAgICAgbmV3IFRyYWJhbGhvRmluYWxOZW5odW0oKQogICAgICAgICk7CgogICAgICAgIC8vIEFsdW5vIGNvbSBkaXNzZXJ0YcOnw6NvCiAgICAgICAgQWx1bm8gYWx1bm8yID0gbmV3IEFsdW5vKAogICAgICAgICAgICAiS2VudCBCZWNrIiwKICAgICAgICAgICAgIkNvbXB1dGHDp8OjbyBBcGxpY2FkYSIsCiAgICAgICAgICAgICJNZXN0cmFkbyIsCiAgICAgICAgICAgIDIyMzM0NDU1LAogICAgICAgICAgICBmYWxzZSwKICAgICAgICAgICAgdHJ1ZSwKICAgICAgICAgICAgMjAxOSwKICAgICAgICAgICAgMjE1MC40NSwKICAgICAgICAgICAgMCwKICAgICAgICAgICAgbmV3IFRyYWJhbGhvRmluYWxDb25jbHVpZG8oIlBldGVyIENvYWQiLCAiSW1wYWN0byBkYSBSZWZhdG9yYcOnw6NvIiwgIjkuNSIpCiAgICAgICAgKTsKCiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFsdW5vMS5nZXREYWRvcygpKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIik7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKGFsdW5vMi5nZXREYWRvcygpKTsKICAgIH0KfQ==