Contenido del curso

Actividad 9

 

Simulador de Cuenta Bancaria

En esta ocasión, el objetivo de la Actividad será crear una clase que represente una cuenta bancaria. Debe tener  al menos el atributo saldo, y los métodos necesarios para ingresar y retirar dinero de la cuenta bancaria, utilizando comunicación por puerto serie.

De esta manera, crearemos un programa que lea por el monitor serial mensajes entrantes, los cuales serán comandos que ejecuten las diferentes acciones posibles que permita la clase CuentaBancaria definida (obtener saldo actual, ingresar dinero, retirar dinero, etc).

Nuestro monitor serial funcionará como un cajero automático, donde podremos operar una cuenta bancaria simulada.

Recuerda que, un método de una clase, puede devolver cualquier tipo de dato, pero solamente uno. Es
decir, podremos devolver un int, String, bool, incluso no devolver nada (indicándolo con el tipo void).
El único tipo de carácter que no se puede devolver es un Array, da igual el tipo de datos que almacene
éste.
Recuerda que puedes utilizar la siguiente función para recibir una cadena de texto completa por el
Monitor Serial:

String mensaje = Serial.readString();
Puedes coger un valor numérico que tengas almacenado en una cadena de caracteres (String) y
convertirlo a float, un tipo de dato para almacenar números con punto decimal. Esto se consigue
mediante la siguiente función:

float numero = cadena.toFloat();
Ten en cuenta que, si utilizas la condición if else para detectar el comando que se ha ingresado por el
Monitor Serial, debes comprobar el tipo de ajuste que tienes configurado para el final de línea. Si vas a
utilizar comprobaciones del tipo mensaje == "COMANDO" lo ideal es configurar el envío en el Monitor
Serial como Sin ajuste de línea (No Line Ending). Sea como sea tu solución, recuerda crearla acorde a
este ajuste.
// Creamos la clase necesaria para nuestra Cuenta Bancaria simulada
class CuentaBancaria {

    // Para este caso, definimos todos los métodos como públicos
    public:

        // Necesitamos almacenar el saldo de la cuenta
        float saldo;

        // Definimos el constructor pasando un saldo inicial como argumento
        CuentaBancaria(float saldo_inicial) {
            saldo = saldo_inicial;
        }

        // Definimos un método para obtener el saldo actual en la cuenta
        float obtenerSaldo() {
            return saldo; // Devolvemos el atributo de la clase
        }

        // Definimos un método para ingresar saldo a la cuenta
        // En este caso no nos importa devolver nada
        void ingresar(float cantidad) {
            saldo += cantidad; // Aumentamos el atributo de la clase
        }

        // Definimos un método para retirar saldo de la cuenta
        // En este caso, como debemos comprobar que exista suficiento saldo
        // cuando se vaya a realizar la operación, devolvemos un booleano
        // en función de si se puede retirar el saldo o no
        bool retirar(float cantidad) {
            if(cantidad <= saldo) { // Si hay suficiente saldo para retirar lo indicado
                saldo -= cantidad; // Retiramos el saldo de la cuenta
                return true; // Devolvemos un true indicando que se hizo con éxtio el retiro
            } else { // Si no hay suficiente saldo en la cuenta
                return false; // Devolvemos un false indicando que no se ha podido retirar saldo
            }
        }

};

// Creamos nuestro objeto de tipo CuentaBancaria con un saldo inicial de 1000€
CuentaBancaria miCuenta(1000);

void setup() {

    // Inicializamos el monitor serial
    Serial.begin(9600);

}

void loop() {

    // Comprobamos mensaje entrantes por el Monitor Serial
    if(Serial.available()) {

        // Obtenemos el mensaje del Monitor Serial como un String
        String mensaje = Serial.readString();
        // Comprobamos que el mensaje solicite consultar el saldo de la cuenta
        if(mensaje == "CONSULTAR") {

            // Devolvemos por el Serial el saldo actual en la Cuenta Bancaria
            Serial.print("Tu saldo actual es de: ");
            Serial.print(miCuenta.obtenerSaldo());
            Serial.println("€");

        }

        // Comprobamos que el mensaje solicite ingresar saldo a la cuenta
        if(mensaje == "INGRESAR") {

            // Solicitamos que el usuario introduzca la cantidad
            Serial.println("Introduce una cantidad a ingresar: ");
            // Esperamos la respuesta
            while(!Serial.available()) {}
            // Obtenemos la cantidad a ingresar recibida por Serial como un número
            String cantidad_enviada = Serial.readString();
            float cantidad_numerica = cantidad_enviada.toFloat();
            // Hacemos el ingreso e informamos al usuario
            miCuenta.ingresar(cantidad_numerica);
            Serial.print("Tu nuevo saldo es de: ");
            Serial.print(miCuenta.obtenerSaldo());
            Serial.println("€");

        }

        if(mensaje == "RETIRAR") {

            // Solicitamos que el usuario introduzca la cantidad
            Serial.println("Introduce una cantidad a retirar: ");
            // Esperamos la respuesta
            while(!Serial.available()) {}
            // Obtenemos la cantidad a retirar recibida por Serial como un número
            String cantidad_enviada = Serial.readString();
            float cantidad_numerica = cantidad_enviada.toFloat();
            // Intentamos hacer la retirada y guardamos el resultado
            bool operacion = miCuenta.retirar(cantidad_numerica);
            // Comprobamos el resultado de la operación y respondemos al usuario
            if(operacion == false) {

                Serial.println("Saldo insuficiente...");

            } else {

                Serial.print("Tu nuevo saldo es de: ");
                Serial.print(miCuenta.obtenerSaldo());
                Serial.println("€");

            }

        }

    }

}
Vistas
9 Número de vistas
9 Vistas de miembros
0 Vistas públicas
Acciones
0 Gustos
0 No me gusta
0 Comentarios
Compartir en redes sociales
Compartir enlace
Compartir por correo

Por favor iniciar sesión para compartir esto webpage por correo.