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_number
std::string _account_holder_name
double _balance
virtual 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.