Implemente programas para os problemas descritos a seguir.
Crie um programa para simular uma aplicação bancária. O banco possui clientes com contas bancárias (Conta). Além disso, existem outros dois tipos de contas que compartilham informações da conta base, mas que possuem suas próprias peculiaridades: conta especial (ContaEspecial) e conta poupança (ContaPoupanca). As funcionalidades de cada uma são descritas a seguir, mas caso seja necessário, novos atributos e métodos podem ser adicionados.
Crie um programa para simular uma aplicação bancária. O banco possui clientes com contas bancárias (Conta). Além disso, existem outros dois tipos de contas que compartilham informações da conta base, mas que possuem suas próprias peculiaridades: conta especial (ContaEspecial) e conta poupança (ContaPoupanca). As funcionalidades de cada uma são descritas a seguir, mas caso seja necessário, novos atributos e métodos podem ser adicionados.
Conta | ContaPoupanca | ContaEspecial | |
---|---|---|---|
Atributos | Cliente: Nome completo <br> Saldo: Saldo da conta | Taxa: Taxa de rendimento <br> fixada pelo banco para todos os <br> clientes | Limite: Cada cliente <br> possui um limite especial, <br> limitado emno máximo <br> R$10.000,00 |
Métodos | Sacar: Retirar do saldo <br> (não pode deixar a conta <br> negativa) <br> Depositar: Colocar no <br> saldo | Atualizar: Atualiza o saldo <br> baseado na taxa definida | Sacar: Reimplementar a <br> funcionalidade levando <br> em consideração o novo <br> limite |
O programa deve prover as seguintes funcionalidades:
- Abrir contas de qualquer tipo para novos clientes
- Exibir informações de uma determinada conta com o saldo (busca deverá ser feita pelo nome do cliente)
- Atualizar o saldo da conta poupança de todos os clientes
- Sacar ou depositar valores em uma determinada conta
Dica: Na classe que contiver o método principal crie 3 Arrays que
Passo 1
Beleza, vamos lá! Você quer criar um programa que simula uma aplicação bancária. O banco tem clientes com contas básicas e dois tipos especiais de contas: Conta Poupança e Conta Especial. Vamos usar conceitos de Programação Orientada a Objetos (POO) como classes e herança para organizar tudo isso. Precisaremos definir as classes com seus atributos e métodos, além de implementar funcionalidades como abrir contas, exibir informações, atualizar saldos e realizar saques ou depósitos.
Passo 2
Primeiro, vamos criar a classe Conta, que será a base para os outros tipos de contas. Ela vai ter dois atributos principais:
cliente
(nome completo do cliente) e saldo
(o saldo da conta). Além disso, vamos adicionar os métodos sacar
e depositar
.class Conta:
def __init__(self, cliente, saldo=0):
self.cliente = cliente
self.saldo = saldo
def sacar(self, valor):
if self.saldo >= valor:
self.saldo -= valor
print(f"Saque de R${valor:.2f} realizado com sucesso.")
else:
print("Saldo insuficiente para o saque.")
def depositar(self, valor):
self.saldo += valor
print(f"Depósito de R${valor:.2f} realizado com sucesso.")
Aqui, criamos o construtor
__init__
para inicializar o nome do cliente e o saldo (que começa em 0 por padrão). O método sacar
verifica se há saldo suficiente antes de descontar o valor, e o método depositar
simplesmente adiciona o valor ao saldo.Passo 3
Agora, vamos criar a classe ContaPoupanca que herda da Conta. Além dos atributos da classe base, ela tem uma
taxa
de rendimento. Também vamos adicionar o método atualizar
para atualizar o saldo com base nessa taxa.class ContaPoupanca(Conta):
def __init__(self, cliente, saldo=0, taxa=0.01):
super().__init__(cliente, saldo)
self.taxa = taxa # Taxa de rendimento, por exemplo, 1%
def atualizar(self):
rendimento = self.saldo * self.taxa
self.saldo += rendimento
print(f"Saldo atualizado com rendimento de R${rendimento:.2f}. Novo saldo: R${self.saldo:.2f}")
Usamos
super().__init__
para aproveitar o construtor da classe base. A taxa
é definida como 1% por padrão, mas pode ser alterada se necessário. O método atualizar
calcula o rendimento e atualiza o saldo.Passo 4
Em seguida, vamos criar a classe ContaEspecial, que também herda da Conta. Ela possui um atributo adicional
limite
, que é o limite especial da conta, com máximo de R$10.000,00. Precisamos reimplementar o método sacar
para considerar esse limite.class ContaEspecial(Conta):
def __init__(self, cliente, saldo=0, limite=10000):
super().__init__(cliente, saldo)
self.limite = limite # Limite especial, até R$10.000,00
def sacar(self, valor):
if self.saldo + self.limite >= valor:
self.saldo -= valor
print(f"Saque de R${valor:.2f} realizado com sucesso.")
print(f"Saldo atual: R${self.saldo:.2f}")
else:
print("Saldo e limite insuficientes para o saque.")
No método
sacar
, verificamos se o valor do saque está dentro do saldo mais o limite. Se sim, permite o saque mesmo que o saldo fique negativo, respeitando o limite.Passo 5
Agora, vamos implementar as funcionalidades principais do programa:
- Abrir contas de qualquer tipo para novos clientes
- Exibir informações de uma conta pelo nome do cliente
- Atualizar o saldo das contas poupança
- Sacar ou depositar valores em uma conta específica
Vamos organizar as contas em três listas separadas:
contas
, contas_poupanca
e contas_especial
.def main():
contas = []
contas_poupanca = []
contas_especial = []
while True:
print("\n--- Banco Simples ---")
print("1. Abrir Conta")
print("2. Exibir Informações da Conta")
print("3. Atualizar Contas Poupança")
print("4. Sacar/Depositar")
print("5. Sair")
escolha = input("Escolha uma opção: ")
if escolha == '1':
tipo = input("Tipo de conta (1 - Conta, 2 - Conta Poupança, 3 - Conta Especial): ")
nome = input("Nome do cliente: ")
saldo = float(input("Saldo inicial: "))
if tipo == '1':
conta = Conta(nome, saldo)
contas.append(conta)
print("Conta criada com sucesso!")
elif tipo == '2':
taxa = float(input("Taxa de rendimento (ex: 0.01 para 1%): "))
conta_poupanca = ContaPoupanca(nome, saldo, taxa)
contas_poupanca.append(conta_poupanca)
print("Conta Poupança criada com sucesso!")
elif tipo == '3':
limite = float(input("Limite especial (até R$10.000,00): "))
if limite > 10000:
print("Limite excede o máximo permitido de R$10.000,00.")
else:
conta_especial = ContaEspecial(nome, saldo, limite)
contas_especial.append(conta_especial)
print("Conta Especial criada com sucesso!")
else:
print("Opção inválida.")
elif escolha == '2':
nome = input("Nome do cliente para busca: ")
encontrada = False
for conta in contas:
if conta.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta ---\nCliente: {conta.cliente}\nSaldo: R${conta.saldo:.2f}")
encontrada = True
for cp in contas_poupanca:
if cp.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta Poupança ---\nCliente: {cp.cliente}\nSaldo: R${cp.saldo:.2f}\nTaxa de Rendimento: {cp.taxa*100:.2f}%")
encontrada = True
for ce in contas_especial:
if ce.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta Especial ---\nCliente: {ce.cliente}\nSaldo: R${ce.saldo:.2f}\nLimite Especial: R${ce.limite:.2f}")
encontrada = True
if not encontrada:
print("Conta não encontrada.")
elif escolha == '3':
for cp in contas_poupanca:
cp.atualizar()
print("Todas as contas poupança foram atualizadas.")
elif escolha == '4':
nome = input("Nome do cliente: ")
operacao = input("Operação (1 - Sacar, 2 - Depositar): ")
valor = float(input("Valor: "))
encontrada = False
# Verificar em Conta
for conta in contas:
if conta.cliente.lower() == nome.lower():
if operacao == '1':
conta.sacar(valor)
elif operacao == '2':
conta.depositar(valor)
encontrada = True
# Verificar em Conta Poupança
for cp in contas_poupanca:
if cp.cliente.lower() == nome.lower():
if operacao == '1':
cp.sacar(valor)
elif operacao == '2':
cp.depositar(valor)
encontrada = True
# Verificar em Conta Especial
for ce in contas_especial:
if ce.cliente.lower() == nome.lower():
if operacao == '1':
ce.sacar(valor)
elif operacao == '2':
ce.depositar(valor)
encontrada = True
if not encontrada:
print("Conta não encontrada.")
elif escolha == '5':
print("Encerrando o programa. Até mais!")
break
else:
print("Opção inválida. Tente novamente.")
*Explicamos cada funcionalidade dentro do loop principal:
- Abrir Conta: Pergunta o tipo de conta e cria a respectiva instância, adicionando à lista correspondente.
- Exibir Informações: Busca o cliente nas três listas e exibe as informações se encontrar.
- Atualizar Contas Poupança: Chama o método
atualizar
para cada conta poupança. - Sacar/Depositar: Busca a conta pelo nome e realiza a operação escolhida.
- Sair: Encerra o programa.*
Resposta
Aqui está o código completo para a simulação da aplicação bancária:
class Conta:
def __init__(self, cliente, saldo=0):
self.cliente = cliente
self.saldo = saldo
def sacar(self, valor):
if self.saldo >= valor:
self.saldo -= valor
print(f"Saque de R${valor:.2f} realizado com sucesso.")
else:
print("Saldo insuficiente para o saque.")
def depositar(self, valor):
self.saldo += valor
print(f"Depósito de R${valor:.2f} realizado com sucesso.")
class ContaPoupanca(Conta):
def __init__(self, cliente, saldo=0, taxa=0.01):
super().__init__(cliente, saldo)
self.taxa = taxa # Taxa de rendimento, por exemplo, 1%
def atualizar(self):
rendimento = self.saldo * self.taxa
self.saldo += rendimento
print(f"Saldo atualizado com rendimento de R${rendimento:.2f}. Novo saldo: R${self.saldo:.2f}")
class ContaEspecial(Conta):
def __init__(self, cliente, saldo=0, limite=10000):
super().__init__(cliente, saldo)
self.limite = limite # Limite especial, até R$10.000,00
def sacar(self, valor):
if self.saldo + self.limite >= valor:
self.saldo -= valor
print(f"Saque de R${valor:.2f} realizado com sucesso.")
print(f"Saldo atual: R${self.saldo:.2f}")
else:
print("Saldo e limite insuficientes para o saque.")
def main():
contas = []
contas_poupanca = []
contas_especial = []
while True:
print("\n--- Banco Simples ---")
print("1. Abrir Conta")
print("2. Exibir Informações da Conta")
print("3. Atualizar Contas Poupança")
print("4. Sacar/Depositar")
print("5. Sair")
escolha = input("Escolha uma opção: ")
if escolha == '1':
tipo = input("Tipo de conta (1 - Conta, 2 - Conta Poupança, 3 - Conta Especial): ")
nome = input("Nome do cliente: ")
saldo = float(input("Saldo inicial: "))
if tipo == '1':
conta = Conta(nome, saldo)
contas.append(conta)
print("Conta criada com sucesso!")
elif tipo == '2':
taxa = float(input("Taxa de rendimento (ex: 0.01 para 1%): "))
conta_poupanca = ContaPoupanca(nome, saldo, taxa)
contas_poupanca.append(conta_poupanca)
print("Conta Poupança criada com sucesso!")
elif tipo == '3':
limite = float(input("Limite especial (até R$10.000,00): "))
if limite > 10000:
print("Limite excede o máximo permitido de R$10.000,00.")
else:
conta_especial = ContaEspecial(nome, saldo, limite)
contas_especial.append(conta_especial)
print("Conta Especial criada com sucesso!")
else:
print("Opção inválida.")
elif escolha == '2':
nome = input("Nome do cliente para busca: ")
encontrada = False
for conta in contas:
if conta.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta ---\nCliente: {conta.cliente}\nSaldo: R${conta.saldo:.2f}")
encontrada = True
for cp in contas_poupanca:
if cp.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta Poupança ---\nCliente: {cp.cliente}\nSaldo: R${cp.saldo:.2f}\nTaxa de Rendimento: {cp.taxa*100:.2f}%")
encontrada = True
for ce in contas_especial:
if ce.cliente.lower() == nome.lower():
print(f"\n--- Informações da Conta Especial ---\nCliente: {ce.cliente}\nSaldo: R${ce.saldo:.2f}\nLimite Especial: R${ce.limite:.2f}")
encontrada = True
if not encontrada:
print("Conta não encontrada.")
elif escolha == '3':
for cp in contas_poupanca:
cp.atualizar()
print("Todas as contas poupança foram atualizadas.")
elif escolha == '4':
nome = input("Nome do cliente: ")
operacao = input("Operação (1 - Sacar, 2 - Depositar): ")
valor = float(input("Valor: "))
encontrada = False
# Verificar em Conta
for conta in contas:
if conta.cliente.lower() == nome.lower():
if operacao == '1':
conta.sacar(valor)
elif operacao == '2':
conta.depositar(valor)
encontrada = True
# Verificar em Conta Poupança
for cp in contas_poupanca:
if cp.cliente.lower() == nome.lower():
if operacao == '1':
cp.sacar(valor)
elif operacao == '2':
cp.depositar(valor)
encontrada = True
# Verificar em Conta Especial
for ce in contas_especial:
if ce.cliente.lower() == nome.lower():
if operacao == '1':
ce.sacar(valor)
elif operacao == '2':
ce.depositar(valor)
encontrada = True
if not encontrada:
print("Conta não encontrada.")
elif escolha == '5':
print("Encerrando o programa. Até mais!")
break
else:
print("Opção inválida. Tente novamente.")
if __name__ == "__main__":
main()
Para rodar o programa, simplesmente execute o script Python. Ele apresentará um menu interativo onde você pode escolher as opções desejadas, como abrir contas, exibir informações, atualizar saldos das contas poupança e realizar saques ou depósitos. As contas são armazenadas em listas separadas conforme o tipo, facilitando a gestão das diferentes funcionalidades.
Exercícios relacionados
Para cada um dos problemas abaixo, desenhe uma hierarquia de classes que as represente. Não deve-se implementar nenhum código.
a) Considere uma universidade com alunos. Os alunos podem ser de graduação e de pós-graduação. Os alunos de graduação podem ser calouros, intermediários ou formandos. Os alunos de pós-graduação podem ser de mestrado ou de doutorado.
a) Considere uma universidade com alunos. Os alunos podem ser de graduação e de pós-graduação. Os alunos de graduação podem ser calouros, intermediários ou formandos. Os alunos de pós-graduação podem ser de mestrado ou de doutorado.
Implemente:
b) Uma subclasse de MeioDeTransporte chamada Carro. Carro deve ter os atributos marca (String), nome (String) e quilometragem (tipo int) e os métodos necessários para ler os atributos e alterá-los (get e set). A quilometragem não pode ser negativa, nem ultrapassar o valor 999999. A velocidade do Carro não pode ser negativa, nem ultrapassar 200.
b) Uma subclasse de MeioDeTransporte chamada Carro. Carro deve ter os atributos marca (String), nome (String) e quilometragem (tipo int) e os métodos necessários para ler os atributos e alterá-los (get e set). A quilometragem não pode ser negativa, nem ultrapassar o valor 999999. A velocidade do Carro não pode ser negativa, nem ultrapassar 200.
Para cada um dos problemas abaixo, desenhe uma hierarquia de classes que as represente. Não deve-se implementar nenhum código.
b) Considere as várias formas existentes no universo. As formas podem ser bidimensionais ou tridimensionais. Quadrilateral, elíptica e triangular são formas bidimensionais. Um trapezoidee um paralelogramo são quadrilaterais, enquanto um círculo é uma elipse. Um quadrado é um tipo de retângulo, que esse por sua vez é um tipo de paralelogramo. Já esfera, cone, cubo, cilindro, prisma são objetos tridimensionais.
b) Considere as várias formas existentes no universo. As formas podem ser bidimensionais ou tridimensionais. Quadrilateral, elíptica e triangular são formas bidimensionais. Um trapezoidee um paralelogramo são quadrilaterais, enquanto um círculo é uma elipse. Um quadrado é um tipo de retângulo, que esse por sua vez é um tipo de paralelogramo. Já esfera, cone, cubo, cilindro, prisma são objetos tridimensionais.
Descreva os principais algoritmos envolvidos na solução proposta;