using System.Collections.Generic;
public static class Program
public static void Main(string[] args)
Cuenta cuenta = new Cuenta();
Cajero cajero = new Cajero();
Console.WriteLine("Bienvenido al cajero automatico");
Console.WriteLine("Por favor digita el valor de alguna de las siguientes opciones: ");
Console.WriteLine("1. Registrar usuario");
Console.WriteLine("2. Autenticar usuario");
int opcionMenuUsuario = Convert.ToInt32(Console.ReadLine());
switch (opcionMenuUsuario)
Cuenta cuentaNueva = cuenta.registar();
cajero.agregarCuenta(cuentaNueva);
Console.WriteLine("Por favor ingresa tu numero de cuenta:");
numeroCuenta = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Por favor ingresa tu clave de la cuenta " + numeroCuenta + ": ");
int clave = Convert.ToInt32(Console.ReadLine());
cajero.autenticarCuenta(numeroCuenta, clave);
Console.WriteLine("La opción seleccionada es incorrecta");
System.Environment.Exit(-1);
Console.WriteLine("Por favor digita el valor de alguna de las siguientes opciones de tu cuenta: ");
Console.WriteLine("1. Consultar saldo");
Console.WriteLine("2. Retirar dinero");
Console.WriteLine("3. Transferir a otra cuenta");
int opcionMenuCuenta = Convert.ToInt32(Console.ReadLine());
switch (opcionMenuCuenta)
cajero.consultarSaldo(numeroCuenta);
Console.WriteLine("Por favor inserta el valor a retirar: ");
int valorARetirar = Convert.ToInt32(Console.ReadLine());
cajero.retirarDinero(numeroCuenta, valorARetirar);
Console.WriteLine("Por digita la cuenta a transferir: ");
int cuentaATransferir = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Por favor inserta el valor a transferir: ");
int valorATransferir = Convert.ToInt32(Console.ReadLine());
cajero.transferirEntreCuentas(numeroCuenta, cuentaATransferir, valorATransferir);
Console.WriteLine("La opción seleccionada es incorrecta");
System.Environment.Exit(-1);
Random random = new Random();
Usuario usuario = new Usuario();
Console.WriteLine("Para crear tu cuenta por favor ingresa tu cedula: ");
usuario.cedula = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("Por favor ingresa tu nombre: ");
usuario.nombre = Console.ReadLine();
Console.WriteLine("Por favor ingresa tu saldo inicial a depositar: ");
this.saldo = Convert.ToInt32(Console.ReadLine());
this.numero = random.Next(1000, 10000);
this.clave = this.validarClave();
Console.WriteLine("Error con el regitro del usuario nuevo");
System.Environment.Exit(-1);
protected int? validarClave()
int claveProvisional = 0;
Console.WriteLine("Por favor ingresa la clave para tu cuenta, que sean 4 caracteres numericos: ");
claveProvisional = Convert.ToInt32(Console.ReadLine());
if ((claveProvisional < 1000) | (claveProvisional > 9999))
throw new ArgumentException("La clave debe ser númerica mayor o igual a 1000 y menor o igual a 9999");
Console.WriteLine("Error con la asignación de tu clave por favor intentalo de nuevo");
public bool autenticar(int claveProvisional)
if (claveProvisional != this.clave)
public void consultarSaldo()
Console.WriteLine("El saldo disponible en la cuenta es de " + this.saldo);
public void DisminuirSaldo(int valorADisminuir)
this.saldo = this.saldo - valorADisminuir;
public void AumentarSaldo(int valorAAumentar)
this.saldo = this.saldo + valorAAumentar;
public List<Cuenta> cuentas = new List<Cuenta>();
public Cuenta autenticarCuenta(int? numeroCuenta, int clave)
Console.WriteLine("No hay cuentas registradas");
System.Environment.Exit(-1);
Cuenta? cuenta = this.cuentas.Where(x => x.numero == numeroCuenta).First();
if (!cuenta.autenticar(clave))
Console.WriteLine("Ingresaste una clave incorrecta para la cuenta ingresada");
System.Environment.Exit(-1);
public void agregarCuenta(Cuenta nuevaCuenta)
this.cuentas.Add(nuevaCuenta);
public void consultarSaldo(int numeroCuenta)
Cuenta cuenta = this.cuentas.Where(x => x.numero == numeroCuenta).First();
public void retirarDinero(int numeroCuenta, int valorARetirar)
int retiroMaximo = 2000000;
Cuenta cuenta = this.cuentas.Where(x => x.numero == numeroCuenta).First();
Console.WriteLine("Debes tener saldo disponible en tu cuenta para retirar el dinero");
else if (valorARetirar > retiroMaximo)
Console.WriteLine("Por favor debes tener en cuenta que no puedes retirar más de $" + retiroMaximo);
else if ((cuenta.saldo < valorARetirar))
Console.WriteLine("El valor disponible de tu saldo en cuenta es $" + cuenta.saldo + " y no te alcanza para retirar " + valorARetirar);
cuenta.DisminuirSaldo(valorARetirar);
Console.WriteLine("Por favor retirar de la bandeja de dinero el valor de: " + valorARetirar);
public void transferirEntreCuentas(int numeroCuenta, int cuentaATransferir, int valorATransferir)
Cuenta cuentaOrigen = this.cuentas.Where(x => x.numero == numeroCuenta).First();
if ((cuentaOrigen.saldo <= 0))
Console.WriteLine("Debes tener saldo disponible en tu cuenta para transferir el dinero");
else if ((cuentaOrigen.saldo < valorATransferir))
Console.WriteLine("El valor disponible de tu saldo en cuenta es $" + cuentaOrigen.saldo + " y no te alcanza para transferir " + valorATransferir);
else if (!this.cuentas.Where(x => x.numero == cuentaATransferir).Any())
Console.WriteLine("La cuenta de destino no existe");
cuentaOrigen.DisminuirSaldo(valorATransferir);
Cuenta cuentaDestino = this.cuentas.Where(x => x.numero == cuentaATransferir).First();
cuentaDestino.AumentarSaldo(valorATransferir);
Console.WriteLine("La transferencia de dinero por el valor de: $" + valorATransferir + " desde la cuenta " + numeroCuenta + " con destino a la cuenta " + cuentaATransferir + " fue exitoso");