Durante esta actividad, los alumnos serán capaces de:
Los sistemas informáticos juegan un papel crucial en la industria bancaria al proporcionar una infraestructura tecnológica robusta y segura para gestionar una amplia gama de servicios financieros. Estos sistemas permiten una operación eficiente, precisa y rápida, lo que resulta fundamental para mantener la confianza de los clientes, cumplir con las regulaciones gubernamentales y competir en un mercado cada vez más digitalizado. Además, facilitan la innovación en productos financieros y servicios, permitiendo a los bancos adaptarse ágilmente a las cambiantes demandas del mercado y ofrecer una experiencia bancaria moderna y conveniente a sus clientes.
En este proyecto desarrollarás una simulación simplificada de un sistema bancario en C++. El objetivo de este proyecto es proporcionar experiencia práctica con clases, herencia, polimorfismo, sobrecarga de operadores y manejo de excepciones. Crearás un sistema que gestione diferentes tipos de cuentas bancarias y realice diversas operaciones bancarias.
Para esta actividad de programación, se prohíbe el uso de sistemas de inteligencia artificial (IA) como ChatGPT o Copilot. El propósito es evaluar tu habilidad de programar de manera auténtica y sin ayuda de herramientas externas.
El incumplimiento de esta regla será considerado una violación académica y puede resultar en sanciones. Revisa la documentación oficial y otros recursos educativos, y no dudes en preguntar a tu profesor si tienes dudas.
¡Confía en tus habilidades y demuestra tu potencial!
En los equipos de dos personas ya conformados, escribe una aplicación en C++ que cumpla con los siguientes requisitos:
Crea una clase base llamada BankAccount con los siguientes atributos y métodos:
std::string _account_numberstd::string _account_holder_namedouble _balancevirtual void deposit(double amount)virtual void withdraw(double amount)std::string to_string() Devuelve como cadena de caracteres toda la información de la cuenta bancaria en un formato legible.
Sugerencia: Se puede utilizar la siguiente función to_string_with_precision con el fin de que un número de punto flotante a_value se pueda convertir a una cadena de caracteres con exactamente n dígitos después del punto decimal:
#include <sstream> std::string to_string_with_precision(double a_value, int n) { std::ostringstream out; out.precision(n); out << std::fixed << a_value; return std::move(out).str(); }
Crea dos clases derivadas de BankAccount:
SavingsAccount
double _interest_rate
deposit para agregar el interés basado en la tasa de interés después de realizar cada depósito.
withdraw lanzando una excepción si el retiro excede el saldo.
CheckingAccount
double _overdraft_limit
withdraw para permitir el retiro hasta el límite de sobregiro, lanzando una excepción en caso de excederlo.
Asegúrate de que los métodos deposit y withdraw sean virtuales en la clase base y sobrescríbelos en las clases derivadas. Esto permite utilizar polimorfismo para manejar diferentes tipos de cuentas a partir de apuntadores o referencias a la clase base.
Sobrecarga el operador << para mostrar en la salida estándar la información de cualquier cuenta bancaria en un formato legible (utilizando el método BankAccount::to_string).
Implementa el manejo de excepciones para operaciones inválidas. Además de las ya mencionadas, también lanza una excepción si la cantidad de un depósito o retiro es negativa.
Tu código debe funcionar correctamente con la siguiente función main:
#include <iostream> #include <stdexcept> #include <vector> // Incluir aquí las definiciones de las clases: // BankAccount, SavingsAccount y CheckingAccount int main() { // Crear cuentas bancarias SavingsAccount c1( "SA12345", "Carmen Caramelo", 1000.0, 2.0); CheckingAccount c2( "CA54321", "Quique Queso", 500.0, 100.0); CheckingAccount c3( "CA00666", "Damien Thorn", 666.0, 66.0); SavingsAccount c4( "SA19999", "Waldo Waffles", 100.0, 9.8); const std::vector<BankAccount*> accounts = { &c1, &c2, &c3, &c4 }; // Probando depósitos y retiros for (BankAccount* account : accounts) { std::cout << *account << "\n"; account->deposit(100.0); account->withdraw(50.0); std::cout << "=== Después de transacciones ===\n" << *account << "\n\n"; } // Probando el manejo de excepciones try { c1.withdraw(2000.0); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << "\n"; } try { c2.withdraw(700.0); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << "\n"; } try { c3.withdraw(-1000.0); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << "\n"; } try { c4.deposit(-1.0); } catch (const std::exception& e) { std::cerr << "Error: " << e.what() << "\n"; } return 0; }
La salida producida debe ser lo más parecida a lo siguiente:
Número de cuenta: SA12345 Titular de la cuenta: Carmen Caramelo Saldo: $1000.00 === Después de transacciones === Número de cuenta: SA12345 Titular de la cuenta: Carmen Caramelo Saldo: $1072.00 Número de cuenta: CA54321 Titular de la cuenta: Quique Queso Saldo: $500.00 === Después de transacciones === Número de cuenta: CA54321 Titular de la cuenta: Quique Queso Saldo: $550.00 Número de cuenta: CA00666 Titular de la cuenta: Damien Thorn Saldo: $666.00 === Después de transacciones === Número de cuenta: CA00666 Titular de la cuenta: Damien Thorn Saldo: $716.00 Número de cuenta: SA19999 Titular de la cuenta: Waldo Waffles Saldo: $100.00 === Después de transacciones === Número de cuenta: SA19999 Titular de la cuenta: Waldo Waffles Saldo: $169.60 Error: Fondos insuficientes en la cuenta de ahorros Error: Se superó el límite de sobregiro Error: El monto del retiro no puede ser negativo Error: El monto del depósito no puede ser negativo
Todos los archivos del proyecto deben estar contenidos en un directorio llamado proyecto.
Para cada clase, su declaración debe ir en un archivo con extensión .h, mientras que las definiciones de sus respectivos métodos deben ir en un archivo con extensión .cpp. La función main debe ir en su propio archivo .cpp.
Cada uno de los archivos fuente (archivos .h y .cpp) debe incluir en la parte superior y dentro de un comentario la información personal de los autores (matrícula y nombre). Por ejemplo:
// ---------------------------------------------------------- // Proyecto: Simulador de sistema bancario // Fecha: 12 de junio, 2024. // Autores: // A01770771 Sylvie Laufeydottir // A01777771 Loki Laufeyson // ----------------------------------------------------------
Usando el procesador de palabras de tu preferencia, crea un documento PDF llamado documentacion.pdf y colócalo también dentro del directorio proyecto. El documento debe contener lo siguiente:
.h y .cpp) que conforman el programa.
Crea un archivo comprimido TAR GZ o ZIP con el contenido completo del directorio proyecto. El archivo resultante se debe llamar proyecto.tar.gz o proyecto.zip.
Para entregar el archivo proyecto.tar.gz/proyecto.zip, ingresa los siguientes datos:
Solo es necesario que lo entregue un miembro del equipo.
La fecha límite es el miércoles 12 de junio.