UNIVERSIDAD NACIONAL AUTONOMA DE HONDURAS-CORTES
INFORME SISTEMA DE PRESTAMOS BANCARIOS
INTEGRANTES:
PABLO JOSE ALVARENGA AGUILAR 20232030443
JHONY SEBASTAN TREJO LOPEZ 20212000326
LICENCIADA:
ERICKA GIRON
ASIGNATURA:
METODOLOGIA DE LA PROGRAMACION
SECCION: 1900
SAN PEDRO SULA, CORTES
INTRODUCCION
El presente informe detalla el desarrollo y funcionamiento de un sistema de
gestión de préstamos bancarios, implementado en el lenguaje de programación
C++.
Este sistema ofrece herramientas para registrar clientes, procesar solicitudes
de préstamos y consultar un historial global de operaciones.
Su diseño busca simular de forma sencilla, pero realista, el proceso que sigue
una institución financiera para evaluar, aprobar o rechazar solicitudes,
aplicando condiciones, restricciones y cálculos basados en criterios reales del
sector bancario.
Gracias a su estructura, permite al usuario administrar de manera eficiente la
información de los clientes y realizar estimaciones precisas sobre pagos y
cuotas mensuales, asegurando que cada préstamo cumpla con las políticas
establecidas.
INDICE
Contenido
INTRODUCCION............................................................................................................... 2
INDICE........................................................................................................................... 3
OBJETIVOS GENERALES Y ESPECIFICOS..........................................................4
Objetivos específicos................................................................................................4
Objetivos Generales.................................................................................................4
DESARROLLO DEL SISTEMA...................................................................................5
Estructura de datos...................................................................................................5
Ordinograma del proceso............................................................................................6
ANEXOS........................................................................................................................ 8
PSEUDOCODIGO EN PSEINT:..............................................................................8
CODIGO C++:......................................................................................................... 18
Documentación: Trabajo en Equipo.........................................................................29
OBJETIVOS GENERALES Y ESPECIFICOS
Objetivos específicos
Implementar funciones para registrar clientes con sus datos personales y
económicos.
Aplicar criterios de aprobación de prestamos basados en edad, tipo de
cliente y capacidad de pago.
Calcular las coutas mensuales de pago considerando la tasa de interés y
el plazo
Mantener un historial de clientes y prestamos otorgados
Objetivos Generales
Desarrollar un sistema de préstamo bancario C++ que permita gestionar
de manera eficiente el registro de clientes y la administración de
solicitudes de prestamos
Simular el funcionamiento básico de una institución financiera, aplicando
criterios reales de aprobación, como limites de edad, ingresos y buen
historial crediticio.
Mejorar la experiencia del usuario al brindar un sistema sencillo, claro y
adaptable a diferentes tipos de clientes(naturales y juridicos)
DESARROLLO DEL SISTEMA
El sistema de préstamo bancario ha sido implementado en el lenguaje de
programación C++, empleando un enfoque de programación estructurada que
garantiza un control preciso del flujo de ejecución y una comprensión clara de
cada uno de sus módulos funcionales. A continuación, se presenta una
descripción detallada de su lógica interna y del comportamiento de cada
componente que lo conforma.
Estructura de datos
El sistema se basa en dos estructuras principales:
1. Cliente
Contiene la información básica y financiera del solicitante, como:
o Código del cliente
o Nombre y apellido
o Edad
o Tipo de cliente (natural o jurídico)
o Ingresos mensuales
o Estado de récord crediticio (bueno o malo)
2. Préstamo
Almacena la información de cada operación de crédito:
o Monto solicitado
o Plazo (en meses o años)
o Tasa de interés aplicada
o Cuota mensual calculada
o Estado de aprobación o rechazo
Estas estructuras permiten que la información se organice de forma ordenada y
sea fácil de manipular dentro del programa.
Funciones principales
El programa se compone de varias funciones que dividen las tareas y evitan la
repetición de código. Entre las más importantes se encuentran:
buscarc(): Localiza un cliente existente mediante su código.
potencia(): Realiza el cálculo de potencias necesarias para la fórmula
de cuotas.
calcums(): Aplica la fórmula de anualidades para calcular la cuota
mensual del préstamo.
tplazo(): Devuelve la tasa de interés en función del plazo elegido.
mostrarc(): Muestra toda la información de un cliente específico.
solicpr(): Gestiona el proceso de solicitud de préstamo, verificando
requisitos y calculando cuotas.
regiscl(): Registra los datos de un nuevo cliente.
histo(): Muestra un historial completo de todos los clientes y préstamos
registrados.
Ordinograma del proceso
Explicacion del Ordinograma
El ordinograma representa el flujo lógico de funcionamiento del sistema de
préstamos bancarios, detallando cada una de las operaciones que el usuario
puede realizar.
1. Inicio
El programa comienza mostrando la pantalla inicial y cargando los
recursos necesarios para su funcionamiento.
2. Menú Principal
Una vez iniciado, el sistema presenta un menú principal con las
opciones disponibles:
1. Registrar cliente.
2. Solicitar préstamo.
3. Ver historial global.
4. Salir.
3. Opción 1 – Registrar Cliente
o El usuario ingresa los datos personales del cliente (nombre,
identificación, edad, etc.).
o El sistema valida la información y la guarda en el registro de
clientes.
o Tras finalizar, retorna al menú principal.
4. Opción 2 – Solicitar Préstamo
o El sistema solicita el código o identificación del cliente.
o Se verifican las condiciones de aprobación (edad, ingresos,
historial, etc.).
Si no cumple los requisitos, la solicitud es rechazada y se
regresa al menú.
Si cumple, se calcula la cuota mensual en base al monto,
tasa de interés y plazo.
o El préstamo aprobado se guarda en el historial y el sistema
regresa al menú principal.
5. Opción 3 – Ver Historial Global
o Se muestra en pantalla una lista de todos los clientes registrados
junto con la información de los préstamos realizados.
o Tras la visualización, se retorna al menú principal.
6. Opción 4 – Salir
o El sistema finaliza su ejecución mostrando el mensaje de cierre y
liberando los recursos utilizados.
ANEXOS
PSEUDOCODIGO EN PSEINT:
Definir tipo Cliente:
codigo Como Entero
nombre Como Cadena
edad Como Entero
ingresoM Como Real
FinTipo
Definir tipo Prestamo:
codigoc Como Entero
monto Como Real
tasai Como Real
plazom Como Entero
tipoc Como Cadena
subtipp Como Cadena
FinTipo
Definir clientes[100] Como Cliente
Definir prestamos[100] Como Prestamo
Definir totalc, totalpr Como Entero
totalc <- 0
totalpr <- 0
SubProceso CopiarCadena(origen, destino Por Referencia)
destino <- origen
FinSubProceso
SubProceso MostrarCliente(c Como Cliente)
Escribir "--- Datos del Cliente ---"
Escribir "Codigo: ", [Link]
Escribir "Nombre: ", [Link]
Escribir "Edad: ", [Link]
Escribir "Ingreso mensual: L.", [Link]
FinSubProceso
Funcion pos <- BuscarCliente(codigo)
Definir i Como Entero
pos <- -1
Para i <- 0 Hasta totalc-1
Si clientes[i].codigo = codigo Entonces
pos <- i
i <- totalc // salir del bucle
FinSi
FinPara
FinFuncion
Funcion resultado <- Potencia(base, exponente)
Definir i Como Entero
resultado <- 1
Si exponente >= 0 Entonces
Para i <- 1 Hasta exponente
resultado <- resultado * base
FinPara
SiNo
Para i <- 1 Hasta Abs(exponente)
resultado <- resultado / base
FinPara
FinSi
FinFuncion
Funcion cuota <- CalcularCuotaMensual(monto, tasaAnual, meses)
Definir tasaMensual, denom Como Real
tasaMensual <- tasaAnual / 12
denom <- 1 - Potencia(1 + tasaMensual, -meses)
cuota <- (monto * tasaMensual) / denom
FinFuncion
Funcion tasa <- TasaPorPlazo(plazo)
Segun plazo Hacer
12: tasa <- 0.13
24: tasa <- 0.16
36: tasa <- 0.20
De Otro Modo: tasa <- 0.25
FinSegun
FinFuncion
SubProceso SolicitarPrestamo(codigoCliente)
pos <- BuscarCliente(codigoCliente)
Si pos = -1 Entonces
Escribir ">> Cliente no encontrado."
SalirSubProceso
FinSi
c <- clientes[pos]
MostrarCliente(c)
Escribir "Seleccione tipo de cliente:"
Escribir "1. Natural"
Escribir "2. Juridico"
Leer tipoCliente
Si tipoCliente = 1 Entonces
Si [Link] < 18 O [Link] > 54 Entonces
Escribir ">> Prestamo RECHAZADO: Edad fuera del rango permitido (18-54)."
SalirSubProceso
FinSi
SiNo
Si tipoCliente = 2 Entonces
Si [Link] < 26 O [Link] > 59 Entonces
Escribir ">> Prestamo RECHAZADO: Edad fuera del rango permitido (26-59)."
SalirSubProceso
FinSi
SiNo
Escribir ">> Tipo de cliente invalido."
SalirSubProceso
FinSi
FinSi
Escribir "Tiene buen record crediticio? (S/N): "
Leer record
Si record <> "S" Y record <> "s" Entonces
Escribir ">> Prestamo RECHAZADO: No cumple con buen record crediticio."
SalirSubProceso
FinSi
Si tipoCliente = 1 Entonces
tipoClienteStr <- "Natural"
Escribir "Seleccione tipo de prestamo:"
Escribir "1. Personal"
Escribir "2. Educacion"
Escribir "3. Hipotecario"
Leer subTipo
Segun subTipo Hacer
1: subtipoStr <- "Personal"
2: subtipoStr <- "Educacion"
De Otro Modo: subtipoStr <- "Hipotecario"
FinSegun
SiNo
tipoClienteStr <- "Juridico"
Escribir "Seleccione tipo de prestamo:"
Escribir "1. Microempresario"
Escribir "2. Maquinaria y Equipo"
Leer subTipo
Segun subTipo Hacer
1: subtipoStr <- "Microempresario"
De Otro Modo: subtipoStr <- "Maquinaria y Equipo"
FinSegun
FinSi
Escribir "Ingrese monto del prestamo: L"
Leer monto
Escribir "Seleccione plazo (meses): "
Leer plazo
tasa <- TasaPorPlazo(plazo)
cuota <- CalcularCuotaMensual(monto, tasa, plazo)
maxCuota <- [Link] * 0.45
Escribir "Tasa de interes anual: ", tasa * 100, "%"
Escribir "Pago mensual aproximado: L.", cuota
Escribir "Limite permitido (45% de ingresos): L.", maxCuota
Si cuota > maxCuota Entonces
Escribir ">> Prestamo RECHAZADO: la cuota mensual supera el 45% de sus
ingresos."
SalirSubProceso
FinSi
// Guardar prestamo
[Link] <- codigoCliente
[Link] <- monto
[Link] <- tasa
[Link] <- plazo
[Link] <- tipoClienteStr
[Link] <- subtipoStr
prestamos[totalpr] <- p
totalpr <- totalpr + 1
Escribir ">> Prestamo aprobado con exito."
FinSubProceso
SubProceso RegistrarCliente()
Definir c Como Cliente
Escribir "Ingrese codigo del cliente: "
Leer [Link]
Si BuscarCliente([Link]) <> -1 Entonces
Escribir ">> Cliente ya registrado."
SalirSubProceso
FinSi
Escribir "Ingrese nombre del cliente: "
Leer [Link]
Escribir "Ingrese edad: "
Leer [Link]
Escribir "Ingrese ingreso mensual: "
Leer [Link]
clientes[totalc] <- c
totalc <- totalc + 1
Escribir ">> Cliente registrado con exito."
Escribir "Desea solicitar un prestamo ahora? (S/N): "
Leer opc
Si opc = "S" O opc = "s" Entonces
SolicitarPrestamo([Link])
FinSi
FinSubProceso
SubProceso Historial()
Si totalc = 0 Entonces
Escribir ">> No hay clientes registrados."
SalirSubProceso
FinSi
Escribir "=== HISTORIAL GLOBAL DE CLIENTES Y PRESTAMOS ==="
Para i <- 0 Hasta totalc-1
c <- clientes[i]
Escribir "Cliente #", i + 1
Escribir "Codigo: ", [Link]
Escribir "Nombre: ", [Link]
Escribir "Edad: ", [Link]
Escribir "Ingreso mensual: L.", [Link]
tienePrestamos <- Falso
Para j <- 0 Hasta totalpr-1
p <- prestamos[j]
Si [Link] = [Link] Entonces
Si No tienePrestamos Entonces
Escribir "Prestamos:"
tienePrestamos <- Verdadero
FinSi
Escribir " - Monto: L.", [Link], ", Tasa: ", [Link] * 100, "%, Plazo: ", [Link],
" meses, Tipo cliente: ", [Link], ", Subtipo: ", [Link]
FinSi
FinPara
Si No tienePrestamos Entonces
Escribir "Prestamos: Ninguno"
FinSi
FinPara
FinSubProceso
Proceso Principal
Definir opcion Como Entero
Repetir
Escribir ""
Escribir " SISTEMA DE PRESTAMO BANCARIO "
Escribir "1. Registrar nuevo cliente"
Escribir "2. Buscar cliente"
Escribir "3. Ver historial global"
Escribir "0. Salir"
Escribir "Seleccione una opcion: "
Leer opcion
Segun opcion Hacer
1: RegistrarCliente()
2:
Escribir "Ingrese codigo del cliente a buscar: "
Leer cod
pos <- BuscarCliente(cod)
Si pos = -1 Entonces
Escribir ">> Cliente no encontrado."
SiNo
MostrarCliente(clientes[pos])
FinSi
3: Historial()
0: Escribir "Saliendo del sistema..."
De Otro Modo:
Escribir ">> Opcion no valida."
FinSegun
Hasta Que opcion = 0
FinProceso
CODIGO C++:
#include <iostream>
using namespace std;
struct Cliente {
int codigo;
char nombre[50];
int edad;
float ingresoM;
};
struct Prestamo {
int codigoc;
float monto;
float tasai;
int plazom;
char tipoc[20];
char subtipp[30];
};
Cliente clientes[100];
Prestamo prestamos[100];
int totalc = 0;
int totalpr = 0;
int buscarc(int codigo);
float potencia(float base, int exponente);
float calcums(float monto, float tasaAnual, int meses);
float tplazo(int plazo);
void mostrarc(const Cliente& c);
void solicpr(int codigoCliente);
void regiscl();
void histo();
void copicad(char destino[], const char origen[]);
int main() {
int opcion;
do {
cout << "\n SISTEMA DE PRESTAMO BANCARIO \n";
cout << "1. Registrar nuevo cliente\n";
cout << "2. Buscar cliente\n";
cout << "3. Ver historial global\n";
cout << "0. Salir\n";
cout << "Seleccione una opcion: ";
cin >> opcion;
[Link]();
switch (opcion) {
case 1: regiscl(); break;
case 2: {
int cod;
cout << "Ingrese codigo del cliente a buscar: ";
cin >> cod;
[Link]();
int pos = buscarc(cod);
if (pos == -1) cout << ">> Cliente no encontrado.\n";
else mostrarc(clientes[pos]);
break;
case 3: histo(); break;
case 0: cout << "Saliendo del sistema...\n";
break;
default: cout << ">> Opcion no valida.\n";
} while (opcion != 0);
return 0;
int buscarc(int codigo) {
for (int i = 0; i < totalc; i++)
if (clientes[i].codigo == codigo)
return i;
return -1;
float potencia(float base, int exponente) {
float resultado = 1.0f;
if (exponente >= 0) {
for (int i = 0; i < exponente; i++) {
resultado *= base;
}
} else {
for (int i = 0; i < -exponente; i++) {
resultado /= base;
return resultado;
float calcums(float monto, float tasaAnual, int meses) {
float tasaMensual = tasaAnual / 12;
float denom = 1 - potencia(1 + tasaMensual, -meses);
return (monto * tasaMensual) / denom;
float tplazo(int plazo) {
if (plazo == 12) return 0.13f;
else if (plazo == 24) return 0.16f;
else if (plazo == 36) return 0.20f;
else return 0.25f;
void mostrarc(const Cliente& c) {
cout << "\n--- Datos del Cliente ---\n";
cout << "Codigo: " << [Link] << "\n";
cout << "Nombre: " << [Link] << "\n";
cout << "Edad: " << [Link] << "\n";
cout << "Ingreso mensual: L." << [Link] << "\n";
}
void solicpr(int codigoCliente) {
int pos = buscarc(codigoCliente);
if (pos == -1) {
cout << ">> Cliente no encontrado.\n";
return;
Cliente & c = clientes[pos];
mostrarc(c);
cout << "\nSeleccione tipo de cliente:\n1. Natural\n2. Juridico\nOpcion: ";
int tipoCliente;
cin >> tipoCliente;
[Link]();
if (tipoCliente == 1) {
if ([Link] < 18 || [Link] > 54) {
cout << ">> Prestamo RECHAZADO: Edad fuera del rango permitido para cliente
Natural (18-54).\n";
return;
} else if (tipoCliente == 2) {
if ([Link] < 26 || [Link] > 59) {
cout << ">> Prestamo RECHAZADO: Edad fuera del rango permitido para cliente
Juridico (26-59).\n";
return;
}
} else {
cout << ">> Tipo de cliente invalido.\n";
return;
char record;
cout << "Tiene buen record crediticio? (S/N): ";
cin >> record;
[Link]();
if (record != 'S' && record != 's') {
cout << ">> Prestamo RECHAZADO: No cumple con buen record crediticio.\n";
return;
char tipoClienteStr[20];
char subtipoStr[30];
if (tipoCliente == 1) {
copicad(tipoClienteStr, "Natural");
cout << "Seleccione tipo de prestamo:\n1. Personal\n2. Educacion\n3.
Hipotecario\nOpcion: ";
int subTipo;
cin >> subTipo;
[Link]();
if (subTipo == 1) copicad(subtipoStr, "Personal");
else if (subTipo == 2) copicad(subtipoStr, "Educacion");
else copicad(subtipoStr, "Hipotecario");
} else {
copicad(tipoClienteStr, "Juridico");
cout << "Seleccione tipo de prestamo:\n1. Microempresario\n2. Maquinaria y
Equipo\nOpcion: ";
int subTipo;
cin >> subTipo;
[Link]();
if (subTipo == 1) copicad(subtipoStr, "Microempresario");
else copicad(subtipoStr, "Maquinaria y Equipo");
float monto;
int plazo;
cout << "Ingrese monto del prestamo: L";
cin >> monto;
cout << "Seleccione plazo (meses): ";
cin >> plazo;
[Link]();
float tasa = tplazo(plazo);
float cuota = calcums(monto, tasa, plazo);
float maxCuota = [Link] * 0.45f;
cout << "\n Detalles del prestamo \n";
cout << "Tasa de interes anual: " << tasa * 100 << "%\n";
cout << "Pago mensual aproximado: L." << cuota << "\n";
cout << "\nCuota mensual calculada: L." << cuota << "\n";
cout << "Limite permitido (45% de ingresos): L." << maxCuota << "\n";
if (cuota > maxCuota) {
cout << ">> Prestamo RECHAZADO: la cuota mensual supera el 45% de sus
ingresos.\n";
return;
Prestamo p;
[Link] = codigoCliente;
[Link] = monto;
[Link] = tasa;
[Link] = plazo;
copicad([Link], tipoClienteStr);
copicad([Link], subtipoStr);
prestamos[totalpr++] = p;
cout << ">> Prestamo aprobado con exito.\n";
void regiscl() {
Cliente c;
cout << "Ingrese codigo del cliente: ";
cin >> [Link];
[Link]();
if (buscarc([Link]) != -1) {
cout << ">> Cliente ya registrado.\n";
return;
}
cout << "Ingrese nombre del cliente: ";
[Link]([Link], 50);
cout << "Ingrese edad: ";
cin >> [Link];
cout << "Ingrese ingreso mensual: ";
cin >> [Link];
[Link]();
clientes[totalc++] = c;
cout << ">> Cliente registrado con exito.\n";
char opc;
cout << "Desea solicitar un prestamo ahora? (S/N): ";
cin >> opc;
[Link]();
if (opc == 'S' || opc == 's') {
solicpr([Link]);
void histo() {
if (totalc == 0) {
cout << ">> No hay clientes registrados.\n";
return;
cout << "\n=== HISTORIAL GLOBAL DE CLIENTES Y PRESTAMOS ===\n";
for (int i = 0; i < totalc; i++) {
Cliente& c = clientes[i];
cout << "\nCliente #" << (i + 1) << "\n";
cout << "Codigo: " << [Link] << "\n";
cout << "Nombre: " << [Link] << "\n";
cout << "Edad: " << [Link] << "\n";
cout << "Ingreso mensual: $" << [Link] << "\n";
bool tienePrestamos = false;
for (int j = 0; j < totalpr; j++) {
Prestamo& p = prestamos[j];
if ([Link] == [Link]) {
if (!tienePrestamos) {
cout << "Prestamos:\n";
tienePrestamos = true;
cout << " - Monto: $" << [Link]
<< ", Tasa: " << [Link] * 100 << "%"
<< ", Plazo: " << [Link] << " meses"
<< ", Tipo cliente: " << [Link]
<< ", Subtipo: " << [Link] << "\n";
if (!tienePrestamos)
cout << "Prestamos: Ninguno\n";
}
void copicad(char destino[], const char origen[]) {
int i = 0;
while (origen[i] != '\0') {
destino[i] = origen[i];
i++;
destino[i] = '\0';
}
Documentación: Trabajo en Equipo
1. Concepto de Trabajo en Equipo
El trabajo en equipo es un proceso colaborativo en el que varias personas, con
habilidades y roles complementarios, unen esfuerzos para alcanzar un objetivo común.
Se basa en la comunicación efectiva, la cooperación y la coordinación de tareas, de
manera que el resultado final sea más eficiente y de mayor calidad que el que podría
lograrse de forma individual.
2. Importancia en Proyectos de Programación
En el desarrollo de software, el trabajo en equipo es esencial debido a la complejidad
de las tareas y la necesidad de integrar múltiples conocimientos. Algunos beneficios
clave son:
1) Distribución de responsabilidades: evitando la sobrecarga en una sola persona.
2) Diversidad de ideas: lo que permite encontrar soluciones creativas y efectivas.
3) Mayor productividad: gracias a la especialización de tareas.