from abc import ABC, abstractmethod
# Classe Abstrata
class Veiculo(ABC):
def __init__(self, marca, modelo, ano, valor):
self.__marca = marca
self.__modelo = modelo
self.__ano = ano
self.__valor = valor
# Métodos getters e setters com encapsulamento
def get_marca(self):
return self.__marca
def set_marca(self, marca):
self.__marca = marca
def get_modelo(self):
return self.__modelo
def set_modelo(self, modelo):
self.__modelo = modelo
def get_ano(self):
return self.__ano
def set_ano(self, ano):
self.__ano = ano
def get_valor(self):
return self.__valor
def set_valor(self, valor):
self.__valor = valor
# Método abstrato para calcular seguro
@abstractmethod
def calcular_seguro(self):
pass
def exibir_dados(self):
return f"Marca: {self.__marca}, Modelo: {self.__modelo}, Ano: {self.__ano},
Valor: R${self.__valor:.2f}"
# Classe Carro que herda de Veiculo
class Carro(Veiculo):
def __init__(self, marca, modelo, ano, valor, portas):
super().__init__(marca, modelo, ano, valor)
self.__portas = portas
def get_portas(self):
return self.__portas
def set_portas(self, portas):
self.__portas = portas
def calcular_seguro(self):
# Seguro para carro = 5% do valor
return self.get_valor() * 0.05
def exibir_dados(self):
dados = super().exibir_dados()
return f"{dados}, Portas: {self.__portas}"
# Classe Motocicleta que herda de Veiculo
class Motocicleta(Veiculo):
def __init__(self, marca, modelo, ano, valor, cilindradas):
super().__init__(marca, modelo, ano, valor)
self.__cilindradas = cilindradas
def get_cilindradas(self):
return self.__cilindradas
def set_cilindradas(self, cilindradas):
self.__cilindradas = cilindradas
def calcular_seguro(self):
# Seguro para motocicleta = 3% do valor
return self.get_valor() * 0.03
def exibir_dados(self):
dados = super().exibir_dados()
return f"{dados}, Cilindradas: {self.__cilindradas}cc"
# Função para exibir o menu principal
def menu():
print("\n=== Sistema de Gerenciamento de Veículos ===")
print("1. Cadastrar Carro")
print("2. Cadastrar Motocicleta")
print("3. Exibir Veículos")
print("4. Calcular Seguro")
print("5. Sair")
return int(input("Escolha uma opção: "))
# Lista para armazenar os veículos
veiculos = []
# Loop principal do sistema
while True:
opcao = menu()
if opcao == 1:
# Cadastro de Carro
marca = input("Marca do carro: ")
modelo = input("Modelo do carro: ")
ano = int(input("Ano do carro: "))
valor = float(input("Valor do carro: "))
portas = int(input("Número de portas: "))
carro = Carro(marca, modelo, ano, valor, portas)
[Link](carro)
print("Carro cadastrado com sucesso!")
elif opcao == 2:
# Cadastro de Motocicleta
marca = input("Marca da motocicleta: ")
modelo = input("Modelo da motocicleta: ")
ano = int(input("Ano da motocicleta: "))
valor = float(input("Valor da motocicleta: "))
cilindradas = int(input("Cilindradas: "))
moto = Motocicleta(marca, modelo, ano, valor, cilindradas)
[Link](moto)
print("Motocicleta cadastrada com sucesso!")
elif opcao == 3:
# Exibir todos os veículos cadastrados
if not veiculos:
print("Nenhum veículo cadastrado.")
else:
print("\n=== Veículos Cadastrados ===")
for i, veiculo in enumerate(veiculos, start=1):
print(f"{i}. {veiculo.exibir_dados()}")
elif opcao == 4:
# Calcular seguro
if not veiculos:
print("Nenhum veículo cadastrado.")
else:
print("\n=== Cálculo de Seguro ===")
for veiculo in veiculos:
print(f"{veiculo.exibir_dados()} - Seguro: R$
{veiculo.calcular_seguro():.2f}")
elif opcao == 5:
# Sair do sistema
print("Saindo do sistema. Até mais!")
break
else:
print("Opção inválida. Tente novamente.")