Durante esta actividad, los alumnos serán capaces de:
Esta actividad promueve las siguientes habilidades, valores y actitudes: análisis y síntesis, capacidad de resolver problemas, creatividad, y uso eficiente de la informática y las telecomunicaciones.
Para esta actividad de programación, el uso de herramientas asistidas por IA, como GitHub Copilot, ChatGPT, Gemini o plataformas similares, para generar código automáticamente está estrictamente prohibido. El uso de herramientas de IA de esta manera socava el proceso de aprendizaje y viola las políticas de integridad académica. El propósito de esta tarea es evaluar su comprensión y aplicación de los conceptos cubiertos en el curso. El incumplimiento de estas pautas puede resultar en sanciones académicas, que incluyen, entre otras, una calificación más baja.
Si tienes alguna pregunta sobre la tarea o necesitas una aclaración sobre algún concepto, no dudes en visitar a tu profesor durante las horas de asesoría. Confía únicamente en tu conocimiento, los materiales del curso y cualquier recurso autorizado proporcionado por el profesor.
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.
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: 15 de junio, 2025. // Autores: // A01770771 James Howlett // A01777771 Wade Wilson // ----------------------------------------------------------
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 domingo 15 de junio.