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ácilConstruyamos 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 distingue correctamente 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 registra cuántas cuentas existen - Un campo
readonlyAccountNumber(string): se establece una vez durante la creación y nunca cambia - Un campo privado de respaldo
_ownerNamecon una propiedadOwnerNameque elimina los espacios en blanco al establecerse - Un campo privado de respaldo
_balancecon una propiedadBalanceque evita que el saldo sea inferior aMinimumBalance(si alguien intenta establecer un valor menor, mantenlo enMinimumBalance) - Un constructor que acepte el número de cuenta, el nombre del propietario y el saldo inicial, e incremente
TotalAccounts - Un método estático
SetInterestRate(decimal rate)para actualizar la tasa de interés compartida - Un método
CalculateInterest()que devuelva 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 las cuentas junto con los datos bancarios compartidos.
Recibirás siete entradas:
- Número de la primera cuenta
- Nombre del propietario de la primera cuenta
- Saldo inicial de la primera cuenta
- Número de la segunda cuenta
- Nombre del propietario de la segunda cuenta
- Saldo inicial de la segunda cuenta
- Nueva tasa de interés (como un decimal, por ejemplo
0.05)
Imprime la salida con 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 pierde los espacios adicionales y cómo el saldo de Bob, que era 50, aumenta hasta el 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
// --- Bank Summary ---
// Interest Rate: {InterestRate}
// Minimum Balance: {MinimumBalance}
// Total Accounts: {TotalAccounts}
// (línea en blanco)
// Cuenta: {AccountNumber}
// Propietario: {OwnerName}
// Saldo: {Balance}
// Interest Earned: {interest}
// (línea en blanco)
// Cuenta: {AccountNumber}
// Propietario: {OwnerName}
// Saldo: {Balance}
// Interest Earned: {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 estudiantesPractica por tu cuenta: Compilador de C# online