Resumen - Gestor de cuentas bancarias
Parte de la sección Programación Orientada a Objetos del Journey de C# de Coddy — lección 18 de 70.
Desafío
FácilVamos a construir un sistema completo de gestión de cuentas bancarias que reúna todo lo que has aprendido sobre la arquitectura de clases. Crearás una clase BankAccount que distinga adecuadamente entre los datos de instancia (únicos para cada cuenta) y los datos estáticos (compartidos entre todas las cuentas), utilizando validación para mantener las cuentas en estados válidos.
Crearás dos archivos para organizar tu código:
BankAccount.cs: Define una claseBankAccounten el espacio de nombresBanking. Tu cuenta debe incluir:- Un campo
constMinimumBalanceestablecido en100- el saldo mínimo que todas las cuentas deben mantener - Un campo
staticInterestRate(decimal) que comienza en0.03m- compartido entre todas las cuentas - Un campo
staticTotalAccounts(int) que rastrea cuántas cuentas existen - Un campo
readonlyAccountNumber(string) - se establece una vez durante la creación y nunca cambia - Un campo de respaldo privado
_ownerNamecon una propiedadOwnerNameque elimina los espacios en blanco (trim) al establecerse - Un campo de respaldo privado
_balancecon una propiedadBalanceque evita que el saldo baje deMinimumBalance(si alguien intenta establecerlo más bajo, mantenlo enMinimumBalance) - Un constructor que acepta el número de cuenta, el nombre del propietario y el saldo inicial, e incrementa
TotalAccounts - Un método estático
SetInterestRate(decimal rate)para actualizar la tasa de interés compartida - Un método
CalculateInterest()que devuelve el saldo multiplicado por la tasa de interés
- Un campo
Program.cs: En tu archivo principal, crea dos cuentas bancarias utilizando valores de entrada, actualiza la tasa de interés y muestra la información de la cuenta junto con los datos bancarios compartidos.
Recibirás siete entradas:
- Primer número de cuenta
- Primer nombre del propietario
- Primer saldo inicial
- Segundo número de cuenta
- Segundo nombre del propietario
- Segundo saldo inicial
- Nueva tasa de interés (como un decimal como
0.05)
Imprime la salida en este 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 ejemplo, si las entradas son ACC001, Alice Smith , 500, ACC002, Bob Jones, 50, y 0.05, la salida debería 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.0Observa cómo el nombre de Alice se recorta de espacios adicionales y el saldo de Bob de 50 se eleva al mínimo de 100. El interés se calcula utilizando la tasa actualizada de 0.05 que se estableció después de crear las cuentas.
Pruébalo tú mismo
using System;
using Banking;
class Program
{
public static void Main(string[] args)
{
// Leer las entradas para la primera cuenta
string accountNumber1 = Console.ReadLine();
string ownerName1 = Console.ReadLine();
decimal balance1 = Convert.ToDecimal(Console.ReadLine());
// Leer las entradas para la segunda cuenta
string accountNumber2 = Console.ReadLine();
string ownerName2 = Console.ReadLine();
decimal balance2 = Convert.ToDecimal(Console.ReadLine());
// Leer la nueva tasa de interés
decimal newRate = Convert.ToDecimal(Console.ReadLine());
// TODO: Crear dos objetos BankAccount usando los valores de entrada
// TODO: Actualizar la tasa de interés usando el método estático
// TODO: Imprimir el resumen bancario en el formato requerido
// --- Resumen Bancario ---
// Tasa de Interés: {InterestRate}
// Saldo Mínimo: {MinimumBalance}
// Total de Cuentas: {TotalAccounts}
// (línea en blanco)
// Cuenta: {AccountNumber}
// Propietario: {OwnerName}
// Saldo: {Balance}
// Interés Ganado: {interest}
// (línea en blanco)
// Cuenta: {AccountNumber}
// Propietario: {OwnerName}
// Saldo: {Balance}
// Interés Ganado: {interest}
}
}
Todas las lecciones de Programación Orientada a Objetos
1Fundamentos de OOP
Archivos externosNamespaces y directivasIntro a clases y objetosLa palabra clave 'this'Métodos y parámetrosCampos vs PropiedadesConstructoresInicializadores de objetosResumen - Calculadora simple4Herencia
Sintaxis básica de herencia (:)La palabra clave 'base'Palabras clave Virtual y OverrideClases selladas (Sealed)La clase base 'object'Resumen: Jerarquía de empleados7Características avanzadas
Sobrecarga de operadoresIndexadores (this[])Sobrescritura de ToString()Métodos de extensiónResumen - Lista personalizada10Patrones de diseño - Parte 1
Introducción a los patrones de diseñoSingleton Thread-SafePatrón FactoryPatrón Observer (Eventos)Patrón Strategy2Propiedades y miembros estáticos
Propiedades autoimplementadasPropiedades de solo lectura y escrituraCampos y métodos estáticosClases estáticasMiembros con cuerpo de expresión5Polimorfismo e Interfaces
Polimorfismo: Compilación vs. EjecuciónInterfaz vs. Clase AbstractaInterfaces MúltiplesInterfaces ExplícitasUpcasting y DowncastingRepaso: Calculadora de Figuras8Conceptos avanzados de POO
Composición sobre herenciaGenéricos (clases y métodos)Delegados y eventosAtributos y ReflexiónIDisposable y la sentencia usingFundamentos de Inyección de dependencias11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Arquitectura de clases
Datos de instancia vs. estáticosPalabras clave 'readonly' y 'const'Campos de respaldoResumen - Gestor de cuentas bancarias6Encapsulamiento
Modificadores de accesoPropiedades para el encapsulamientoImplementación de ocultamiento de datosPatrones de inmutabilidadRepaso - Registros de estudiantes