class NivelCurso {
this .nome = nome;
this .tipo_trabalho = tipo_trabalho;
}
return this .nome ;
}
public String getTipoTrabalho
( ) { return this .tipo_trabalho ;
}
}
class Graduacao extends NivelCurso {
public Graduacao( ) {
super ( "Graduação" , "TCC" ) ;
}
}
class Mestrado extends NivelCurso {
public Mestrado( ) {
super ( "Mestrado" , "Dissertação" ) ;
}
}
class Doutorado extends NivelCurso {
public Doutorado( ) {
super ( "Doutorado" , "Tese" ) ;
}
}
class LatoSensu extends NivelCurso {
public LatoSensu( ) {
super ( "Lato Sensu" , "Monografia" ) ;
}
}
class Trabalho {
private String titulo, orientador
; private double nota;
public Trabalho
( String titulo,
String orientador,
double nota
) { this .titulo = titulo;
this .orientador = orientador;
this .nota = nota == 0 ? 0 : nota;
}
return "Título: " + this .titulo + "\n Orientador: " + this .orientador + "\n Nota: " + this .nota ;
}
return this .titulo ;
}
public String getOrientador
( ) { return this .orientador ;
}
public double getNota( ) {
return this .nota ;
}
}
class Curso{
private NivelCurso nivel;
private double mensalidade;
private boolean finalizado;
private int ano_finalização;
private Trabalho trabalho;
public Curso
( String nome, NivelCurso nivel,
double mensalidade,
boolean finalizado,
int ano_finalização, Trabalho trabalho
) { this .nome = nome;
this .nivel = nivel;
this .mensalidade = mensalidade;
this .finalizado = finalizado;
this .ano_finaliza ção = ano_finalização == - 1 ? - 1 : ano_finalização;
this .trabalho = trabalho == null ? new Trabalho( null , null , 0 ) : trabalho;
}
public double getMensalidade( double desconto) {
desconto = desconto == 0 ? 0 : desconto;
return this .mensalidade * ( 1 - desconto/ 100 ) ;
}
return "Curso: " + this .nivel + " em " + this .nome + "\n " ;
}
public boolean isFinalizado( ) {
return this .finalizado && this .ano_finaliza ção != - 1 ;
}
public int getAnoFinalização( ) {
return this .ano_finaliza ção;
}
public boolean hasTrabalho( ) {
return this .trabalho != null ;
}
public NivelCurso getNivel( ) {
return this .nivel ;
}
public Trabalho getTrabalho( ) {
return this .trabalho ;
}
}
class Aluno{
private Curso curso;
private int cód_matrícula;
private boolean é_bolsista;
private double desconto;
Curso curso,
int cód_matrícula,
boolean é_bolsista,
double desconto) {
this .nome = nome;
this .curso = curso;
this .c ód_matrícula = cód_matrícula;
this .é_bolsista = é_bolsista;
this .desconto = desconto == 0 ? 0 : desconto;
}
{
String resp
= "Aluno: " + this .
nome + "\n " ;
resp += this .curso .getDados ( ) + "\n " ;
if ( this .é_bolsista)
{
resp += "Bolsista com desconto de: " + this .desconto + "%\n " ;
}
resp += "Mensalidade: R$ " + this .curso .getMensalidade ( this .desconto ) + "\n " ;
if ( this .curso .isFinalizado ( ) )
{
resp += "Curso finalizado em " + this .curso .getAnoFinaliza ção( ) + "\n " ;
if ( this .curso .hasTrabalho ( ) )
{
resp += "Título " + this .curso .getNivel ( ) .getTipoTrabalho ( ) + ": " ;
resp += this .curso .getTrabalho ( ) .getTitulo ( ) + "\n " ;
resp += "Orientador(a): Prof. " + this .curso .getTrabalho ( ) .getOrientador ( ) + "\n " ;
resp += "Nota: " + this .curso .getTrabalho ( ) .getNota ( ) ;
}
}
return resp;
}
}
class Teste
{
public static void main
( String args
[ ] ) {
Aluno aluno1 = new Aluno( "Martin Fowler" ,
new Curso( "ADS" , new Graduacao( ) , 920.50 , false , - 1 , new Trabalho( null , null , 0 ) ) ,
11223344 ,
true ,
20.5 ) ;
Aluno aluno2 = new Aluno( "Kent Beck" ,
new Curso( "Computação Aplicada" , new Mestrado( ) , 2150.45 , false , - 1 , new Trabalho( "Peter Coad" , "Impacto da Refatoração" , 9.5 ) ) ,
22334455 ,
false ,
0 ) ;
System .
out .
println ( aluno1.
getDados ( ) ) ; System .
out .
println ( aluno2.
getDados ( ) ) ; }
}
CmNsYXNzIE5pdmVsQ3Vyc28gewogICAgcHJpdmF0ZSBTdHJpbmcgbm9tZTsKICAgIHByaXZhdGUgU3RyaW5nIHRpcG9fdHJhYmFsaG87CgogICAgcHVibGljIE5pdmVsQ3Vyc28oU3RyaW5nIG5vbWUsIFN0cmluZyB0aXBvX3RyYWJhbGhvKXsKICAgICAgICB0aGlzLm5vbWUgPSBub21lOwogICAgICAgIHRoaXMudGlwb190cmFiYWxobyA9IHRpcG9fdHJhYmFsaG87CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXROb21lKCl7CiAgICAgICAgcmV0dXJuIHRoaXMubm9tZTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldFRpcG9UcmFiYWxobygpewogICAgICAgIHJldHVybiB0aGlzLnRpcG9fdHJhYmFsaG87CiAgICB9Cn0KCmNsYXNzIEdyYWR1YWNhbyBleHRlbmRzIE5pdmVsQ3Vyc28gewogICAgcHVibGljIEdyYWR1YWNhbygpewogICAgICAgIHN1cGVyKCJHcmFkdWHDp8OjbyIsICJUQ0MiKTsKICAgIH0KfQoKY2xhc3MgTWVzdHJhZG8gZXh0ZW5kcyBOaXZlbEN1cnNvIHsKICAgIHB1YmxpYyBNZXN0cmFkbygpewogICAgICAgIHN1cGVyKCJNZXN0cmFkbyIsICJEaXNzZXJ0YcOnw6NvIik7CiAgICB9Cn0KCmNsYXNzIERvdXRvcmFkbyBleHRlbmRzIE5pdmVsQ3Vyc28gewogICAgcHVibGljIERvdXRvcmFkbygpewogICAgICAgIHN1cGVyKCJEb3V0b3JhZG8iLCAiVGVzZSIpOwogICAgfQp9CgpjbGFzcyBMYXRvU2Vuc3UgZXh0ZW5kcyBOaXZlbEN1cnNvIHsKICAgIHB1YmxpYyBMYXRvU2Vuc3UoKXsKICAgICAgICBzdXBlcigiTGF0byBTZW5zdSIsICJNb25vZ3JhZmlhIik7CiAgICB9Cn0KCmNsYXNzIFRyYWJhbGhvIHsKICAgIHByaXZhdGUgU3RyaW5nIHRpdHVsbywgb3JpZW50YWRvcjsKICAgIHByaXZhdGUgZG91YmxlIG5vdGE7CgogICAgcHVibGljIFRyYWJhbGhvKFN0cmluZyB0aXR1bG8sIFN0cmluZyBvcmllbnRhZG9yLCBkb3VibGUgbm90YSl7CiAgICAgICAgdGhpcy50aXR1bG8gPSB0aXR1bG87CiAgICAgICAgdGhpcy5vcmllbnRhZG9yID0gb3JpZW50YWRvcjsKICAgICAgICB0aGlzLm5vdGEgPSBub3RhID09IDAgPyAwIDogbm90YTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldERhZG9zKCl7CiAgICAgICAgcmV0dXJuICJUw610dWxvOiAiICsgdGhpcy50aXR1bG8gKyAiXG5PcmllbnRhZG9yOiAiICsgdGhpcy5vcmllbnRhZG9yICsgIlxuTm90YTogIiArIHRoaXMubm90YTsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldFRpdHVsbygpewogICAgICAgIHJldHVybiB0aGlzLnRpdHVsbzsKICAgIH0KCiAgICBwdWJsaWMgU3RyaW5nIGdldE9yaWVudGFkb3IoKXsKICAgICAgICByZXR1cm4gdGhpcy5vcmllbnRhZG9yOwogICAgfQoKICAgIHB1YmxpYyBkb3VibGUgZ2V0Tm90YSgpewogICAgICAgIHJldHVybiB0aGlzLm5vdGE7CiAgICB9Cn0KCmNsYXNzIEN1cnNvewoKICAgIHByaXZhdGUgU3RyaW5nIG5vbWU7CiAgICBwcml2YXRlIE5pdmVsQ3Vyc28gbml2ZWw7CiAgICBwcml2YXRlIGRvdWJsZSBtZW5zYWxpZGFkZTsKICAgIHByaXZhdGUgYm9vbGVhbiBmaW5hbGl6YWRvOwogICAgcHJpdmF0ZSBpbnQgYW5vX2ZpbmFsaXphw6fDo287CiAgICBwcml2YXRlIFRyYWJhbGhvIHRyYWJhbGhvOwoKCiAgICBwdWJsaWMgQ3Vyc28oU3RyaW5nIG5vbWUsIE5pdmVsQ3Vyc28gbml2ZWwsIGRvdWJsZSBtZW5zYWxpZGFkZSwgYm9vbGVhbiBmaW5hbGl6YWRvLCBpbnQgYW5vX2ZpbmFsaXphw6fDo28sICAgVHJhYmFsaG8gdHJhYmFsaG8pewogICAgICAgIHRoaXMubm9tZSA9IG5vbWU7CiAgICAgICAgdGhpcy5uaXZlbCA9IG5pdmVsOwogICAgICAgIHRoaXMubWVuc2FsaWRhZGUgPSBtZW5zYWxpZGFkZTsKICAgICAgICB0aGlzLmZpbmFsaXphZG8gPSBmaW5hbGl6YWRvOwogICAgICAgIHRoaXMuYW5vX2ZpbmFsaXphw6fDo28gPSBhbm9fZmluYWxpemHDp8OjbyA9PSAtMSA/IC0xIDogYW5vX2ZpbmFsaXphw6fDo287CiAgICAgICAgdGhpcy50cmFiYWxobyA9IHRyYWJhbGhvID09IG51bGwgPyBuZXcgVHJhYmFsaG8obnVsbCwgbnVsbCwgMCkgOiB0cmFiYWxobzsKICAgIH0KCiAgICBwdWJsaWMgZG91YmxlIGdldE1lbnNhbGlkYWRlKGRvdWJsZSBkZXNjb250byl7CiAgICAgICAgZGVzY29udG8gPSBkZXNjb250byA9PSAwID8gMCA6IGRlc2NvbnRvOwogICAgICAgIHJldHVybiB0aGlzLm1lbnNhbGlkYWRlKigxLWRlc2NvbnRvLzEwMCk7CiAgICB9CgogICAgcHVibGljIFN0cmluZyBnZXREYWRvcygpewogICAgICAgIHJldHVybiAiQ3Vyc286ICIgKyB0aGlzLm5pdmVsICsgIiBlbSAiICsgdGhpcy5ub21lICsiXG4iOwogICAgfQoKICAgIHB1YmxpYyBib29sZWFuIGlzRmluYWxpemFkbygpewogICAgICAgIHJldHVybiB0aGlzLmZpbmFsaXphZG8gJiYgdGhpcy5hbm9fZmluYWxpemHDp8OjbyAhPSAtMTsKICAgIH0KCiAgICBwdWJsaWMgaW50IGdldEFub0ZpbmFsaXphw6fDo28oKXsKICAgICAgICByZXR1cm4gdGhpcy5hbm9fZmluYWxpemHDp8OjbzsKICAgIH0KCiAgICBwdWJsaWMgYm9vbGVhbiBoYXNUcmFiYWxobygpewogICAgICAgIHJldHVybiB0aGlzLnRyYWJhbGhvICE9IG51bGw7CiAgICB9CgogICAgcHVibGljIE5pdmVsQ3Vyc28gZ2V0Tml2ZWwoKXsKICAgICAgICByZXR1cm4gdGhpcy5uaXZlbDsKICAgIH0KCiAgICBwdWJsaWMgVHJhYmFsaG8gZ2V0VHJhYmFsaG8oKXsKICAgICAgICByZXR1cm4gdGhpcy50cmFiYWxobzsKICAgIH0KfQoKY2xhc3MgQWx1bm97Cglwcml2YXRlIFN0cmluZyBub21lOwogICAgcHJpdmF0ZSBDdXJzbyBjdXJzbzsKCXByaXZhdGUgaW50IGPDs2RfbWF0csOtY3VsYTsKCXByaXZhdGUgYm9vbGVhbiDDqV9ib2xzaXN0YTsKCXByaXZhdGUgZG91YmxlIGRlc2NvbnRvOwogICAgCiAgICBwdWJsaWMgQWx1bm8oU3RyaW5nIG5vbWUsCgkJCQlDdXJzbyBjdXJzbywKCQkJCWludCBjw7NkX21hdHLDrWN1bGEsCgkJCQlib29sZWFuIMOpX2JvbHNpc3RhLAoJCQkJZG91YmxlIGRlc2NvbnRvKSB7CgkJdGhpcy5ub21lID0gbm9tZTsKCQl0aGlzLmN1cnNvID0gY3Vyc287CgkJdGhpcy5jw7NkX21hdHLDrWN1bGEgPSBjw7NkX21hdHLDrWN1bGE7CgkJdGhpcy7DqV9ib2xzaXN0YSA9IMOpX2JvbHNpc3RhOwoJCXRoaXMuZGVzY29udG8gPSBkZXNjb250byA9PSAwID8gMCA6IGRlc2NvbnRvOwoJCQkJfQoJCQoJCXB1YmxpYyBTdHJpbmcgZ2V0RGFkb3MoKQoJCXsKCQkJU3RyaW5nIHJlc3AgPSAiQWx1bm86ICIrIHRoaXMubm9tZSArIlxuIjsKCQkJCiAgICAgICAgICAgIHJlc3AgKz0gdGhpcy5jdXJzby5nZXREYWRvcygpICsiXG4iOwoJCQlpZiAodGhpcy7DqV9ib2xzaXN0YSkgCgkJCSAgICB7ICAgCgkJCQlyZXNwICs9ICJCb2xzaXN0YSBjb20gZGVzY29udG8gZGU6ICIgKyB0aGlzLmRlc2NvbnRvICsgIiVcbiI7CgkJCSAgICB9CgkJCXJlc3AgKz0gIk1lbnNhbGlkYWRlOiBSJCAiICsgdGhpcy5jdXJzby5nZXRNZW5zYWxpZGFkZSh0aGlzLmRlc2NvbnRvKSArICJcbiI7CgoJCQlpZiAodGhpcy5jdXJzby5pc0ZpbmFsaXphZG8oKSkKCQkJewoJCQkgcmVzcCArPSAiQ3Vyc28gZmluYWxpemFkbyBlbSAiK3RoaXMuY3Vyc28uZ2V0QW5vRmluYWxpemHDp8OjbygpICsgIlxuIjsKCQkJIGlmICh0aGlzLmN1cnNvLmhhc1RyYWJhbGhvKCkpCgkJCSB7CgkJCQlyZXNwICs9ICJUw610dWxvICIgKyB0aGlzLmN1cnNvLmdldE5pdmVsKCkuZ2V0VGlwb1RyYWJhbGhvKCkgKyAiOiAiOwoJCQkJcmVzcCArPSB0aGlzLmN1cnNvLmdldFRyYWJhbGhvKCkuZ2V0VGl0dWxvKCkgKyAiXG4iOwoJCQkJcmVzcCArPSAiT3JpZW50YWRvcihhKTogUHJvZi4gIiArIHRoaXMuY3Vyc28uZ2V0VHJhYmFsaG8oKS5nZXRPcmllbnRhZG9yKCkgKyAiXG4iOwoJCQkJcmVzcCArPSAiTm90YTogIiArIHRoaXMuY3Vyc28uZ2V0VHJhYmFsaG8oKS5nZXROb3RhKCk7CgkJCX0KCQkJfQoJCQlyZXR1cm4gcmVzcDsKCQl9Cn0KCmNsYXNzIFRlc3RlCnsKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmcgYXJnc1tdKQoJewoJCUFsdW5vIGFsdW5vMSA9IG5ldyBBbHVubygiTWFydGluIEZvd2xlciIsCgkJCQkJCQluZXcgQ3Vyc28oIkFEUyIsIG5ldyBHcmFkdWFjYW8oKSwgOTIwLjUwLCBmYWxzZSwgLTEsIG5ldyBUcmFiYWxobyhudWxsLCBudWxsLCAwKSksCgkJCQkJCQkxMTIyMzM0NCwKCQkJCQkJCXRydWUsCgkJCQkJCQkyMC41KTsKCQkJCQkJCQoJCUFsdW5vIGFsdW5vMiA9IG5ldyBBbHVubygiS2VudCBCZWNrIiwKCQkJCQkJCW5ldyBDdXJzbygiQ29tcHV0YcOnw6NvIEFwbGljYWRhIiwgbmV3IE1lc3RyYWRvKCksIDIxNTAuNDUsIGZhbHNlLCAtMSwgbmV3IFRyYWJhbGhvKCJQZXRlciBDb2FkIiwgIkltcGFjdG8gZGEgUmVmYXRvcmHDp8OjbyIsIDkuNSkpLAoJCQkJCQkJMjIzMzQ0NTUsCgkJCQkJCQlmYWxzZSwKCQkJCQkJCTApOwoJCVN5c3RlbS5vdXQucHJpbnRsbihhbHVubzEuZ2V0RGFkb3MoKSk7CgkJU3lzdGVtLm91dC5wcmludGxuKGFsdW5vMi5nZXREYWRvcygpKTsKCX0KfQ==