-
Notifications
You must be signed in to change notification settings - Fork 20.9k
Description
Arquivo 1: Reserva.java
(A classe Pai Abstrata)
code
Java
download
content_copy
expand_less
public abstract class Reserva {
protected String hospede;
protected int dias;
protected double valorDiaria;
public Reserva(String hospede, int dias, double valorDiaria) {
this.hospede = hospede;
this.dias = dias;
this.valorDiaria = valorDiaria;
}
public abstract double calcularTotal();
public abstract String getTipo();
// Método que gera o texto e já mostra na tela (conforme seu estilo anterior)
public abstract String gerarFatura();
}
Arquivo 2: ReservaSimples.java
(Filha 1 - Cálculo normal)
code
Java
download
content_copy
expand_less
import javax.swing.JOptionPane;
public class ReservaSimples extends Reserva {
public ReservaSimples(String hospede, int dias, double valorDiaria) {
super(hospede, dias, valorDiaria);
}
@Override
public double calcularTotal() {
return dias * valorDiaria;
}
@Override
public String getTipo() {
return "Simples";
}
@Override
public String gerarFatura() {
double total = calcularTotal();
String fatura = "Tipo: " + getTipo() +
"\nHóspede: " + hospede +
"\nDias: " + dias +
"\nValor Diária: " + valorDiaria +
"\nTOTAL A PAGAR: R$ " + total;
// Mostra o popup
JOptionPane.showMessageDialog(null, fatura);
return fatura;
}
}
Arquivo 3: ReservaExecutiva.java
(Filha 2 - Taxa de 15%)
code
Java
download
content_copy
expand_less
import javax.swing.JOptionPane;
public class ReservaExecutiva extends Reserva {
public ReservaExecutiva(String hospede, int dias, double valorDiaria) {
super(hospede, dias, valorDiaria);
}
@Override
public double calcularTotal() {
// Acréscimo de 15%
return (dias * valorDiaria) * 1.15;
}
@Override
public String getTipo() {
return "Executiva";
}
@Override
public String gerarFatura() {
double total = calcularTotal();
String fatura = "Tipo: " + getTipo() +
"\nHóspede: " + hospede +
"\nDias: " + dias +
"\nValor Diária: " + valorDiaria +
"\nTOTAL A PAGAR: R$ " + total;
JOptionPane.showMessageDialog(null, fatura);
return fatura;
}
}
Arquivo 4: ReservaPremium.java
(Filha 3 - Taxa fixa de R$ 120)
code
Java
download
content_copy
expand_less
import javax.swing.JOptionPane;
public class ReservaPremium extends Reserva {
public ReservaPremium(String hospede, int dias, double valorDiaria) {
super(hospede, dias, valorDiaria);
}
@Override
public double calcularTotal() {
// Valor normal + Taxa fixa de 120
return (dias * valorDiaria) + 120;
}
@Override
public String getTipo() {
return "Premium";
}
@Override
public String gerarFatura() {
double total = calcularTotal();
String fatura = "Tipo: " + getTipo() +
"\nHóspede: " + hospede +
"\nDias: " + dias +
"\nValor Diária: " + valorDiaria +
"\nTOTAL A PAGAR: R$ " + total;
JOptionPane.showMessageDialog(null, fatura);
return fatura;
}
}
Arquivo 5: ProcessadorReservas.java
(Motor de Faturamento - Polimorfismo)
code
Java
download
content_copy
expand_less
public class ProcessadorReservas {
// Recebe a classe genérica 'Reserva'
public double processar(Reserva r) {
// Chama o método polimórfico (cada filha responde do seu jeito)
r.gerarFatura();
// Retorna o valor para somar no relatório
return r.calcularTotal();
}
}
Arquivo 6: Sistema.java
(O menu principal com ArrayList)
code
Java
download
content_copy
expand_less
import javax.swing.JOptionPane;
import java.util.ArrayList;
public class Sistema {
public static void main(String[] args) {
// Lista para guardar todas as reservas
ArrayList<Reserva> listaReservas = new ArrayList<>();
// Instancia o processador
ProcessadorReservas processador = new ProcessadorReservas();
boolean executando = true;
while (executando) {
String menu = "HOTEL SYSTEM - MENU:\n" +
"1 - Nova Reserva\n" +
"2 - Listar Reservas\n" +
"3 - Processar Faturamento\n" +
"4 - Relatório Financeiro\n" +
"5 - Sair";
String opcao = JOptionPane.showInputDialog(menu);
// Tratamento para botão cancelar ou opção 5
if (opcao == null || opcao.equals("5")) {
executando = false;
break;
}
// --- 1. CADASTRAR NOVA RESERVA ---
if (opcao.equals("1")) {
String tipo = JOptionPane.showInputDialog("Tipo (1-Simples, 2-Executiva, 3-Premium):");
String nome = JOptionPane.showInputDialog("Nome do Hóspede:");
int dias = Integer.parseInt(JOptionPane.showInputDialog("Número de Dias:"));
double valor = Double.parseDouble(JOptionPane.showInputDialog("Valor da Diária:"));
// Criação do objeto correto (Polimorfismo)
if (tipo.equals("1")) {
listaReservas.add(new ReservaSimples(nome, dias, valor));
} else if (tipo.equals("2")) {
listaReservas.add(new ReservaExecutiva(nome, dias, valor));
} else if (tipo.equals("3")) {
listaReservas.add(new ReservaPremium(nome, dias, valor));
} else {
JOptionPane.showMessageDialog(null, "Tipo inválido!");
}
}
// --- 2. LISTAR RESERVAS ---
else if (opcao.equals("2")) {
String textoLista = "--- RESERVAS CADASTRADAS ---\n";
for (Reserva r : listaReservas) {
textoLista += r.getTipo() + ": " + r.hospede + "\n";
}
JOptionPane.showMessageDialog(null, textoLista);
}
// --- 3. PROCESSAR (MOSTRAR FATURAS) ---
else if (opcao.equals("3")) {
for (Reserva r : listaReservas) {
// O processador chama o gerarFatura() de cada um
processador.processar(r);
}
}
// --- 4. RELATÓRIO FINANCEIRO ---
else if (opcao.equals("4")) {
double totalBruto = 0;
double totalLiquido = 0;
for (Reserva r : listaReservas) {
// Acumula o valor total (com taxas)
totalBruto += r.calcularTotal();
// Calcula o valor base (sem taxas) apenas para estatística
// Como os atributos são protected, podemos acessar direto na mesma package
// Ou usar getters se preferir
totalLiquido += (r.dias * r.valorDiaria);
}
double totalTaxas = totalBruto - totalLiquido;
String relatorio = "RELATÓRIO FINANCEIRO:\n" +
"Total Faturado (Bruto): R$ " + totalBruto + "\n" +
"Total Líquido (Base): R$ " + totalLiquido + "\n" +
"Total em Taxas: R$ " + totalTaxas;
JOptionPane.showMessageDialog(null, relatorio);
}
}
}
}