class Curso {
private double mensalidadeBase;
public Curso
( String nome,
String nivel,
double mensalidadeBase
) { this .nome = nome;
this .nivel = nivel;
this .mensalidadeBase = mensalidadeBase;
}
return nivel;
}
public double getMensalidadeBase( ) {
return mensalidadeBase;
}
return "Curso: " + this .nivel + " em " + this .nome ;
}
}
class TrabalhoConclusao {
this .orientador = orientador;
this .titulo = titulo;
this .nota = nota;
}
switch ( nivelCurso) {
case "Graduação" : tipoTrabalho = "do TCC: " ; break ;
case "Lato sensu" : tipoTrabalho = "da monografia: " ; break ;
case "Mestrado" : tipoTrabalho = "da dissertação: " ; break ;
case "Doutorado" : tipoTrabalho = "da tese: " ; break ;
default : tipoTrabalho = "do trabalho final: " ; break ;
}
String resp
= "Título " + tipoTrabalho
+ this .
titulo + "\n " ; resp += "Orientador(a): Prof. " + this .orientador + "\n " ;
resp += "Nota: " + this .nota ;
return resp;
}
}
class TrabalhoNulo extends TrabalhoConclusao {
public TrabalhoNulo( ) {
super ( null , null , null ) ;
}
@Override
return "" ;
}
}
class Aluno {
private int codMatricula;
private boolean ehBolsista;
private double percentualDesconto;
private boolean cursoFinalizado;
private int anoFinalizacao;
private Curso curso;
private TrabalhoConclusao trabalhoConclusao;
public Aluno
( String nome,
int codMatricula,
boolean ehBolsista,
double percentualDesconto,
boolean cursoFinalizado, int anoFinalizacao, Curso curso, TrabalhoConclusao trabalho) {
this .nome = nome;
this .codMatricula = codMatricula;
this .ehBolsista = ehBolsista;
this .percentualDesconto = percentualDesconto;
this .cursoFinalizado = cursoFinalizado;
this .anoFinalizacao = anoFinalizacao;
this .curso = curso;
this .trabalhoConclusao = trabalho;
}
public double calculaMensalidade( ) {
if ( ehBolsista) {
return this .curso .getMensalidadeBase ( ) * ( 1 - this .percentualDesconto / 100 ) ;
}
return this .curso .getMensalidadeBase ( ) ;
}
String resp
= "Aluno: " + this .
nome + "\n " ; resp += this .curso .getDados ( ) + "\n " ;
if ( this .ehBolsista ) {
resp += "Bolsista com desconto de: " + this .percentualDesconto + "%\n " ;
}
resp
+= "Mensalidade: R$ " + String .
format ( "%.2f" ,
this .
calculaMensalidade ( ) ) + "\n " ;
if ( this .cursoFinalizado ) {
resp += "Curso finalizado em " + anoFinalizacao + "\n " ;
String dadosTrabalho
= this .
trabalhoConclusao .
getDados ( this .
curso .
getNivel ( ) ) ; if ( ! dadosTrabalho.isEmpty ( ) ) {
resp += dadosTrabalho;
}
}
return resp.trim ( ) ;
}
}
class Teste {
public static void main
( String args
[ ] ) { Curso cursoAds = new Curso( "ADS" , "Graduação" , 920.50 ) ;
Curso cursoMestrado = new Curso( "Computação Aplicada" , "Mestrado" , 2150.45 ) ;
TrabalhoConclusao trabalho1 = new TrabalhoNulo( ) ;
Aluno aluno1 = new Aluno( "Martin Fowler" , 11223344 , true , 20.5 , false , - 1 , cursoAds, trabalho1) ;
TrabalhoConclusao trabalho2 = new TrabalhoConclusao( "Peter Coad" , "Impacto da Refatoração" , "9.5" ) ;
Aluno aluno2 = new Aluno( "Kent Beck" , 22334455 , false , 0 , true , 2019 , cursoMestrado, trabalho2) ;
System .
out .
println ( aluno1.
getDados ( ) ) ; System .
out .
println ( "\n --------------------------------\n " ) ; System .
out .
println ( aluno2.
getDados ( ) ) ; }
}
Y2xhc3MgQ3Vyc28gewogICAgcHJpdmF0ZSBTdHJpbmcgbm9tZTsKICAgIHByaXZhdGUgU3RyaW5nIG5pdmVsOwogICAgcHJpdmF0ZSBkb3VibGUgbWVuc2FsaWRhZGVCYXNlOwoKICAgIHB1YmxpYyBDdXJzbyhTdHJpbmcgbm9tZSwgU3RyaW5nIG5pdmVsLCBkb3VibGUgbWVuc2FsaWRhZGVCYXNlKSB7CiAgICAgICAgdGhpcy5ub21lID0gbm9tZTsKICAgICAgICB0aGlzLm5pdmVsID0gbml2ZWw7CiAgICAgICAgdGhpcy5tZW5zYWxpZGFkZUJhc2UgPSBtZW5zYWxpZGFkZUJhc2U7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXROaXZlbCgpIHsKICAgICAgICByZXR1cm4gbml2ZWw7CiAgICB9CgogICAgcHVibGljIGRvdWJsZSBnZXRNZW5zYWxpZGFkZUJhc2UoKSB7CiAgICAgICAgcmV0dXJuIG1lbnNhbGlkYWRlQmFzZTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldERhZG9zKCkgewogICAgICAgIHJldHVybiAiQ3Vyc286ICIgKyB0aGlzLm5pdmVsICsgIiBlbSAiICsgdGhpcy5ub21lOwogICAgfQp9CgpjbGFzcyBUcmFiYWxob0NvbmNsdXNhbyB7CiAgICBwcml2YXRlIFN0cmluZyB0aXR1bG87CiAgICBwcml2YXRlIFN0cmluZyBvcmllbnRhZG9yOwogICAgcHJpdmF0ZSBTdHJpbmcgbm90YTsKCiAgICBwdWJsaWMgVHJhYmFsaG9Db25jbHVzYW8oU3RyaW5nIG9yaWVudGFkb3IsIFN0cmluZyB0aXR1bG8sIFN0cmluZyBub3RhKSB7CiAgICAgICAgdGhpcy5vcmllbnRhZG9yID0gb3JpZW50YWRvcjsKICAgICAgICB0aGlzLnRpdHVsbyA9IHRpdHVsbzsKICAgICAgICB0aGlzLm5vdGEgPSBub3RhOwogICAgfQogICAgCiAgICBwdWJsaWMgU3RyaW5nIGdldERhZG9zKFN0cmluZyBuaXZlbEN1cnNvKSB7CiAgICAgICAgU3RyaW5nIHRpcG9UcmFiYWxobyA9ICIiOwogICAgICAgIHN3aXRjaCAobml2ZWxDdXJzbykgewogICAgICAgICAgICBjYXNlICJHcmFkdWHDp8OjbyI6IHRpcG9UcmFiYWxobyA9ICJkbyBUQ0M6ICI7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJMYXRvIHNlbnN1IjogdGlwb1RyYWJhbGhvID0gImRhIG1vbm9ncmFmaWE6ICI7IGJyZWFrOwogICAgICAgICAgICBjYXNlICJNZXN0cmFkbyI6IHRpcG9UcmFiYWxobyA9ICJkYSBkaXNzZXJ0YcOnw6NvOiAiOyBicmVhazsKICAgICAgICAgICAgY2FzZSAiRG91dG9yYWRvIjogdGlwb1RyYWJhbGhvID0gImRhIHRlc2U6ICI7IGJyZWFrOwogICAgICAgICAgICBkZWZhdWx0OiB0aXBvVHJhYmFsaG8gPSAiZG8gdHJhYmFsaG8gZmluYWw6ICI7IGJyZWFrOwogICAgICAgIH0KICAgICAgICBTdHJpbmcgcmVzcCA9ICJUw610dWxvICIgKyB0aXBvVHJhYmFsaG8gKyB0aGlzLnRpdHVsbyArICJcbiI7CiAgICAgICAgcmVzcCArPSAiT3JpZW50YWRvcihhKTogUHJvZi4gIiArIHRoaXMub3JpZW50YWRvciArICJcbiI7CiAgICAgICAgcmVzcCArPSAiTm90YTogIiArIHRoaXMubm90YTsKICAgICAgICByZXR1cm4gcmVzcDsKICAgIH0KfQoKY2xhc3MgVHJhYmFsaG9OdWxvIGV4dGVuZHMgVHJhYmFsaG9Db25jbHVzYW8gewogICAgcHVibGljIFRyYWJhbGhvTnVsbygpIHsKICAgICAgICBzdXBlcihudWxsLCBudWxsLCBudWxsKTsKICAgIH0KICAgIAogICAgQE92ZXJyaWRlCiAgICBwdWJsaWMgU3RyaW5nIGdldERhZG9zKFN0cmluZyBuaXZlbEN1cnNvKSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgfQp9CgpjbGFzcyBBbHVubyB7CiAgICBwcml2YXRlIFN0cmluZyBub21lOwogICAgcHJpdmF0ZSBpbnQgY29kTWF0cmljdWxhOwogICAgcHJpdmF0ZSBib29sZWFuIGVoQm9sc2lzdGE7CiAgICBwcml2YXRlIGRvdWJsZSBwZXJjZW50dWFsRGVzY29udG87CiAgICBwcml2YXRlIGJvb2xlYW4gY3Vyc29GaW5hbGl6YWRvOwogICAgcHJpdmF0ZSBpbnQgYW5vRmluYWxpemFjYW87CiAgICBwcml2YXRlIEN1cnNvIGN1cnNvOwogICAgcHJpdmF0ZSBUcmFiYWxob0NvbmNsdXNhbyB0cmFiYWxob0NvbmNsdXNhbzsKCiAgICBwdWJsaWMgQWx1bm8oU3RyaW5nIG5vbWUsIGludCBjb2RNYXRyaWN1bGEsIGJvb2xlYW4gZWhCb2xzaXN0YSwgZG91YmxlIHBlcmNlbnR1YWxEZXNjb250bywKICAgICAgICAgICAgICAgICBib29sZWFuIGN1cnNvRmluYWxpemFkbywgaW50IGFub0ZpbmFsaXphY2FvLCBDdXJzbyBjdXJzbywgVHJhYmFsaG9Db25jbHVzYW8gdHJhYmFsaG8pIHsKICAgICAgICB0aGlzLm5vbWUgPSBub21lOwogICAgICAgIHRoaXMuY29kTWF0cmljdWxhID0gY29kTWF0cmljdWxhOwogICAgICAgIHRoaXMuZWhCb2xzaXN0YSA9IGVoQm9sc2lzdGE7CiAgICAgICAgdGhpcy5wZXJjZW50dWFsRGVzY29udG8gPSBwZXJjZW50dWFsRGVzY29udG87CiAgICAgICAgdGhpcy5jdXJzb0ZpbmFsaXphZG8gPSBjdXJzb0ZpbmFsaXphZG87CiAgICAgICAgdGhpcy5hbm9GaW5hbGl6YWNhbyA9IGFub0ZpbmFsaXphY2FvOwogICAgICAgIHRoaXMuY3Vyc28gPSBjdXJzbzsKICAgICAgICB0aGlzLnRyYWJhbGhvQ29uY2x1c2FvID0gdHJhYmFsaG87CiAgICB9CgogICAgcHVibGljIGRvdWJsZSBjYWxjdWxhTWVuc2FsaWRhZGUoKSB7CiAgICAgICAgaWYgKGVoQm9sc2lzdGEpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc28uZ2V0TWVuc2FsaWRhZGVCYXNlKCkgKiAoMSAtIHRoaXMucGVyY2VudHVhbERlc2NvbnRvIC8gMTAwKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuY3Vyc28uZ2V0TWVuc2FsaWRhZGVCYXNlKCk7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXREYWRvcygpIHsKICAgICAgICBTdHJpbmcgcmVzcCA9ICJBbHVubzogIiArIHRoaXMubm9tZSArICJcbiI7CiAgICAgICAgcmVzcCArPSB0aGlzLmN1cnNvLmdldERhZG9zKCkgKyAiXG4iOwoKICAgICAgICBpZiAodGhpcy5laEJvbHNpc3RhKSB7CiAgICAgICAgICAgIHJlc3AgKz0gIkJvbHNpc3RhIGNvbSBkZXNjb250byBkZTogIiArIHRoaXMucGVyY2VudHVhbERlc2NvbnRvICsgIiVcbiI7CiAgICAgICAgfQogICAgICAgIHJlc3AgKz0gIk1lbnNhbGlkYWRlOiBSJCAiICsgU3RyaW5nLmZvcm1hdCgiJS4yZiIsIHRoaXMuY2FsY3VsYU1lbnNhbGlkYWRlKCkpICsgIlxuIjsKCiAgICAgICAgaWYgKHRoaXMuY3Vyc29GaW5hbGl6YWRvKSB7CiAgICAgICAgICAgIHJlc3AgKz0gIkN1cnNvIGZpbmFsaXphZG8gZW0gIiArIGFub0ZpbmFsaXphY2FvICsgIlxuIjsKICAgICAgICAgICAgU3RyaW5nIGRhZG9zVHJhYmFsaG8gPSB0aGlzLnRyYWJhbGhvQ29uY2x1c2FvLmdldERhZG9zKHRoaXMuY3Vyc28uZ2V0Tml2ZWwoKSk7CiAgICAgICAgICAgIGlmICghZGFkb3NUcmFiYWxoby5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgIHJlc3AgKz0gZGFkb3NUcmFiYWxobzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICByZXR1cm4gcmVzcC50cmltKCk7CiAgICB9Cn0KCmNsYXNzIFRlc3RlIHsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZyBhcmdzW10pIHsKICAgICAgICBDdXJzbyBjdXJzb0FkcyA9IG5ldyBDdXJzbygiQURTIiwgIkdyYWR1YcOnw6NvIiwgOTIwLjUwKTsKICAgICAgICBDdXJzbyBjdXJzb01lc3RyYWRvID0gbmV3IEN1cnNvKCJDb21wdXRhw6fDo28gQXBsaWNhZGEiLCAiTWVzdHJhZG8iLCAyMTUwLjQ1KTsKCiAgICAgICAgVHJhYmFsaG9Db25jbHVzYW8gdHJhYmFsaG8xID0gbmV3IFRyYWJhbGhvTnVsbygpOwogICAgICAgIEFsdW5vIGFsdW5vMSA9IG5ldyBBbHVubygiTWFydGluIEZvd2xlciIsIDExMjIzMzQ0LCB0cnVlLCAyMC41LCBmYWxzZSwgLTEsIGN1cnNvQWRzLCB0cmFiYWxobzEpOwoKICAgICAgICBUcmFiYWxob0NvbmNsdXNhbyB0cmFiYWxobzIgPSBuZXcgVHJhYmFsaG9Db25jbHVzYW8oIlBldGVyIENvYWQiLCAiSW1wYWN0byBkYSBSZWZhdG9yYcOnw6NvIiwgIjkuNSIpOwogICAgICAgIEFsdW5vIGFsdW5vMiA9IG5ldyBBbHVubygiS2VudCBCZWNrIiwgMjIzMzQ0NTUsIGZhbHNlLCAwLCB0cnVlLCAyMDE5LCBjdXJzb01lc3RyYWRvLCB0cmFiYWxobzIpOwogICAgICAgIAogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihhbHVubzEuZ2V0RGFkb3MoKSk7CiAgICAgICAgU3lzdGVtLm91dC5wcmludGxuKCJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oYWx1bm8yLmdldERhZG9zKCkpOwogICAgfQp9Cgo=