Recapitulação - Gerenciador de Conta Bancária
Parte da seção Programação Orientada a Objetos do Journey de C# da Coddy — lição 18 de 70.
Desafio
FácilVamos construir um sistema completo de gerenciamento de contas bancárias que reúne tudo o que você aprendeu sobre arquitetura de classes. Você criará uma classe BankAccount que distingue adequadamente entre dados de instância (exclusivos para cada conta) e dados estáticos (compartilhados entre todas as contas), enquanto usa validação para manter as contas em estados válidos.
Você criará dois arquivos para organizar seu código:
BankAccount.cs: Defina uma classeBankAccountno namespaceBanking. Sua conta deve incluir:- Um campo
constMinimumBalancedefinido como100- o saldo mínimo que todas as contas devem manter - Um campo
staticInterestRate(decimal) que começa em0.03m- compartilhado entre todas as contas - Um campo
staticTotalAccounts(int) que rastreia quantas contas existem - Um campo
readonlyAccountNumber(string) - definido uma vez durante a criação e nunca alterado - Um campo de suporte privado
_ownerNamecom uma propriedadeOwnerNameque remove espaços em branco (trim) ao ser definida - Um campo de suporte privado
_balancecom uma propriedadeBalanceque impede que o saldo fique abaixo deMinimumBalance(se alguém tentar defini-lo como inferior, mantenha-o emMinimumBalance) - Um construtor que aceita o número da conta, o nome do proprietário e o saldo inicial, e incrementa
TotalAccounts - Um método estático
SetInterestRate(decimal rate)para atualizar a taxa de juros compartilhada - Um método
CalculateInterest()que retorna o saldo multiplicado pela taxa de juros
- Um campo
Program.cs: No seu arquivo principal, crie duas contas bancárias usando valores de entrada, atualize a taxa de juros e exiba as informações da conta junto com os dados bancários compartilhados.
Você receberá sete entradas:
- Número da primeira conta
- Nome do primeiro proprietário
- Saldo inicial da primeira conta
- Número da segunda conta
- Nome do segundo proprietário
- Saldo inicial da segunda conta
- Nova taxa de juros (como um decimal como
0.05)
Imprima a saída neste formato:
--- Bank Summary ---
Interest Rate: {InterestRate}
Minimum Balance: {MinimumBalance}
Total Accounts: {TotalAccounts}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}
Account: {AccountNumber}
Owner: {OwnerName}
Balance: {Balance}
Interest Earned: {interest}Por exemplo, se as entradas forem ACC001, Alice Smith , 500, ACC002, Bob Jones, 50, e 0.05, a saída deve ser:
--- Bank Summary ---
Interest Rate: 0.05
Minimum Balance: 100
Total Accounts: 2
Account: ACC001
Owner: Alice Smith
Balance: 500
Interest Earned: 25.0
Account: ACC002
Owner: Bob Jones
Balance: 100
Interest Earned: 5.0Observe como o nome de Alice tem os espaços extras removidos e o saldo de 50 de Bob é elevado para o mínimo de 100. Os juros são calculados usando a taxa atualizada de 0.05 que foi definida após a criação das contas.
Experimente você mesmo
using System;
using Banking;
class Program
{
public static void Main(string[] args)
{
// Lê as entradas para a primeira conta
string accountNumber1 = Console.ReadLine();
string ownerName1 = Console.ReadLine();
decimal balance1 = Convert.ToDecimal(Console.ReadLine());
// Lê as entradas para a segunda conta
string accountNumber2 = Console.ReadLine();
string ownerName2 = Console.ReadLine();
decimal balance2 = Convert.ToDecimal(Console.ReadLine());
// Lê a nova taxa de juros
decimal newRate = Convert.ToDecimal(Console.ReadLine());
// TODO: Criar dois objetos BankAccount usando os valores de entrada
// TODO: Atualizar a taxa de juros usando o método estático
// TODO: Imprimir o resumo do banco no formato exigido
// --- Bank Summary ---
// Interest Rate: {InterestRate}
// Minimum Balance: {MinimumBalance}
// Total Accounts: {TotalAccounts}
// (linha em branco)
// Account: {AccountNumber}
// Owner: {OwnerName}
// Balance: {Balance}
// Interest Earned: {interest}
// (linha em branco)
// Account: {AccountNumber}
// Owner: {OwnerName}
// Balance: {Balance}
// Interest Earned: {interest}
}
}
Todas as lições de Programação Orientada a Objetos
1Fundamentos de POO
Arquivos ExternosNamespaces e DiretivasIntrodução a Classes e ObjetosA Palavra-chave 'this'Métodos e ParâmetrosCampos vs PropriedadesConstrutoresInicializadores de ObjetosRecapitulação - Calculadora Simples4Herança
Sintaxe Básica de Herança (:)A Palavra-chave 'base'Palavras-chave Virtual e OverrideClasses SeladasA Classe Base 'object'Recapitulação - Hierarquia de Funcionários7Recursos Avançados
Sobrecarga de OperadoresIndexadores (this[])Sobrescrita de ToString()Métodos de ExtensãoRecapitulação - Lista Personalizada10Padrões de Projeto Parte 1
Introdução aos Padrões de ProjetoSingleton Thread-SafePadrão FactoryPadrão Observer (Eventos)Padrão Strategy2Propriedades e Membros Estáticos
Propriedades AutoimplementadasPropriedades de Apenas Leitura/EscritaCampos e Métodos EstáticosClasses EstáticasMembros com Corpo de Expressão5Polimorfismo e Interfaces
Polimorfismo: Compilação vs ExecuçãoInterface vs Classe AbstrataMúltiplas InterfacesInterfaces ExplícitasUpcasting e DowncastingRecapitulação - Calculadora de Formas8Conceitos Avançados de POO
Composição sobre HerançaGenerics (Classes e Métodos)Delegates e EventosAtributos e ReflectionIDisposable e a Instrução usingFundamentos de Injeção de Dependência11Padrões de Projeto Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão Composite3Arquitetura de Classes
Dados de Instância vs EstáticosPalavras-chave 'readonly' e 'const'Campos de SuporteRecapitulação - Gerenciador de Conta Bancária6Encapsulamento
Modificadores de AcessoPropriedades para EncapsulamentoImplementação de Ocultação de DadosPadrões de ImutabilidadeRecapitulação - Registros de Estudantes9Argumentos Variáveis
A Palavra-chave 'params'Parâmetros OpcionaisArgumentos NomeadosSobrecarga de Métodos