#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
const int MAX_CUENTAS = 10; //cantidad maxima de cuentas, es constante
const int MAX_CDP = 100; //cantidad maxima de depositos a plazo, es constante
int menu_principal = 1; //indica si hay que seguir corriendo el menu principal
int menu_ahorro = 1; //indica si hay que seguir corriendo el menu de ahorros
int menu_inversion = 1; //indica si hay que seguir corriendo el menu de inversion
int menu_balances = 1; //indica si hay que seguir corriendo el menu de balances
int opcion_principal; //contiene la opcion elegida en el menu principal
int opcion_ahorro; //contiene la opcion elegida en el menu de ahorros
int opcion_inversion; //contiene la opcion elegida en el menu de inversion
int opcion_balance; //contiene la opcion elegida en el menu de balances
char usuario[100]; //nombre del usuario del sistema
int id_cuenta[10] = {0}; //id de cuenta para cada cliente
char nombre_cuenta[MAX_CUENTAS][100]; //nombre de cada cliente
char cedula_cuenta[MAX_CUENTAS][100]; //cedula de cada cliente
char residencia_cuenta[MAX_CUENTAS][100]; //lugar de residencia de cada cliente
float monto_cuenta[MAX_CUENTAS]; //monto de la cuenta de cada cliente
float monto_cdp[MAX_CDP]; //monto de cada CDP
float interes_mensual = 0.15/12.0; //interes mensual para los CDP
int cuenta_cdp[MAX_CDP]; //cuenta asociada a cada CDP
int meses_cdp[MAX_CDP]; //cantidad de meses para cada CDP
int id_cdp[100] = {0}; //id unico para cada CDP
int i; //indice para iterar sobre arreglos
int id; //lectura temporal de un id de cuenta
int id_cdp_temp; //lectura temporal de un id para un CDP
int cuenta; //variable para determinar si ya existe un id de cuenta
int cdp; //variable para determinar si ya existe un id de un CDP
float monto_final_cdp; //monto final del CDP (valor original + intereses)
printf("\t$$$ Bienvenido al Gran Banco Costarricense $$$\n\n");
printf("Digite el nombre de usuario por favor: ");
scanf(" %[^\n]", &usuario);
system("cls");
while(menu_principal != 0) //El menu principal es distinto de cero, cuando es cero el ciclo termina
{//Este ciclo me permite ejecutar el menu siempre y cuando sea distinto de cero, cuando el valor de la opcion es el case 3, el menu se hace cero y se sale del programa, corresponde a la condicion de parada
printf("\t* Menu principal *\n\n"); //Se despliega el menu principal
printf("Bienvenid@ %s\n\n", usuario);
printf("1) Menu de ahorro\n");
printf("2) Menu de inversion\n");
printf("3) Salir\n\n");
printf("Digite su opcion por favor: ");
scanf("%d", &opcion_principal);
system("cls"); //Limpiar pantalla
switch(opcion_principal) //Me lleva a las opciones existentes segun el numero digitado
{
case 1:
while(menu_ahorro != 0) //Se ejecuta la opcion mientras el menu sea distinto de cero, en caso de serlo, se sale al menu anterior
{
printf("\t** Menu de Ahorro **\n\n");
printf("1) Crear cuenta nueva\n");
printf("2) Ver cuentas existentes\n");
printf("3) Volver al menu principal\n\n");
printf("Digite su opcion por favor: ");
scanf("%d", &opcion_ahorro);
system("cls");
switch(opcion_ahorro) // Me despliega las acciones segun la opcion elegida
{
case 1:
printf("Digite el numero de cuenta: "); //Corresponde al numero temporal de cuenta, debo verificar diferentes condiciones
scanf("%d", &id);
if(id == 0) // Validar si es 0, pues se asume que 0 es un campo disponible
{
printf("El numero de cuenta debe ser distinto de 0!\n\n"); //Si la cuenta es cero, se tomaria como un campo disponible, entonces no se crea la cuenta nueva
}
else
{
cuenta = -1; // Se asume que no existe la cuenta y no hay campos disponibles, o sea ya tengo 10 cuentas
for(i = 0; i < MAX_CUENTAS; i++) //MAX_CUENTAS lo habia declarado como 10
{
if(id_cuenta[i] == id) //Para verificar cuenta unica
{
printf("El numero de cuenta ya existe!\n\n"); //Si ya hay una cuenta con el mismo id, el id temporal no puede establecer una nueva cuenta
break; //Detener aqui
}
if(id_cuenta[i] == 0) //El campo de la cuenta esta disponible, utilizarlo
{
cuenta = i; // Se le asigna un campo i a la cuenta
id_cuenta[i] = id; // A la identificacion temporal se le asigna un id de cuenta nueva en el arreglo
break; //Detener aqui
}
}
if(cuenta == -1) //A la cuenta se le asigna el -1, porque el numero ya existe o no se pudo encontrar un campo
{
if(id_cuenta[i] != id) // Si no se pudo encontrar un campo
{
printf("No es posible crear mas cuentas!\n\n");
}
}
else //Todo bien, seguir pidiendo datos
{
printf("Digite el nombre del cliente: ");
scanf(" %[^\n]", &nombre_cuenta[cuenta]);
printf("Digite el numero de cedula del cliente: ");
scanf(" %[^\n]", &cedula_cuenta[cuenta]);
printf("Digite la residencia del cliente: ");
scanf(" %[^\n]", &residencia_cuenta[cuenta]);
printf("Digite el monto inicial de la cuenta: ");
scanf("%f", &monto_cuenta[cuenta]);
system("cls");
}
}
break;
case 2:
while(menu_balances != 0) //El menu se ejecuta siempre y cuando sea distinto de cero, que es la condicion de parada
{
printf("\t*** Menu de Cuentas ***\n\n"); //Ingreso al menu de cuentas (balance de cuentas)
printf("1) Consultar todas las cuentas\n");
printf("2) Consultar cuenta especifica\n");
printf("3) Volver al menu de ahorro\n\n");
scanf("%d", &opcion_balance);
printf("Digite su opcion por favor: ");
system("cls");
switch(opcion_balance) // Despliego opciones segun desee el usuario desde el menu de cuentas
{
case 1:
printf("NUMERO\tNOMBRE\tCEDULA\tMONTO\t\tRESIDENCIA\t\n"); // Fila fija para designar nombres de columnas
for(i = 0; i < MAX_CUENTAS; i++) //El ciclo se ejecuta hasta que el numero maximo de cuentas sea 10
{
if(id_cuenta[i] != 0) //No imprimir los campos con cuentas invalidas
{
printf("%d\t%s\t%s\t%f\t%s\n", id_cuenta[i], nombre_cuenta[i], cedula_cuenta[i], monto_cuenta[i], residencia_cuenta[i]);
//Previamente se declararon los arreglos anteriores que guardan los datos que se digitan, se le asigna un campo a cada dato de cada cliente
}
}
printf("\n");
break; //Detener aqui
case 2:
printf("Digite el numero de cuenta: ");
scanf("%d", &id);
cuenta = -1; // Asumo que es falso
for(i = 0; i < MAX_CUENTAS; i++)
{
if(id_cuenta[i] == id) // El id temporal corresponde al id de cuenta existente
{
cuenta = i; // Cuenta en el iesimo campo, se despliegan datos, se convierte en algo verdadero
printf("NUMERO\tNOMBRE\tCEDULA\tMONTO\tRESIDENCIA\t\n"); // Desplegar los datos de la cuenta existente que se desee consultar
printf("%d\t%s\t%s\t%f\t%s\n", id_cuenta[i], nombre_cuenta[i], cedula_cuenta[i], monto_cuenta[i], residencia_cuenta[i]);
break; //Detener aqui
}
}
if(cuenta == -1) // Si es falso, entonces la cuenta no existe
{
printf("La cuenta no existe!\n\n");
}
printf("\n");
break;
case 3:
menu_balances = 0; // Me asigna la condicion de salida
break;
}
}
menu_balances = 1; // Para devolverme al menu anterior, el de balances
break;
case 3:
menu_ahorro = 0; //Dejar de ejecutar el ciclo
break;
}
}
menu_ahorro = 1; // Devolverme al menu de ahorro
break;
case 2:
while(menu_inversion != 0) // El menu se ejecuta siempre y cuando no se cumpla la condicion de parada
{
printf("\t** Menu de Inversiones **\n\n");
printf("1) Comprar certificado de deposito a largo plazo (CDP)\n");
printf("2) Volver al menu principal\n\n");
scanf("%d", &opcion_inversion);
printf("Digite su opcion por favor: ");
system("cls");
switch(opcion_inversion) // Me despliega las opciones presentes dentro del menu anterior
{
case 1:
printf("Digite el id del CDP: "); // Le asigno un id temporal al CDP
scanf("%d", &id_cdp_temp);
cdp = -1; // Si termina en -1 significa que no hay mas campos
for(i = 0; i < MAX_CDP; i++)
{
if(id_cdp[i] == id_cdp_temp) // Si el id ya existe
{
printf("El numero de CDP ya existe!\n\n");
break; // Detener aqui
}
if(id_cdp[i] == 0) // Existe un campo disponible para el CDP
{
cdp = i;
id_cdp[i] = id_cdp_temp;
break; // Detener aqui
}
}
if(cdp == -1 && id_cdp[i] != id_cdp_temp) //No hay mas campos
{
printf("No es posible crear mas CDP's!\n\n");
break; // Detener aqui
}
else
{// Datos para el CDP
printf("Digite el monto: ");
scanf("%f", &monto_cdp[cdp]);
printf("Digite la cantidad de meses: ");
scanf("%d", &meses_cdp[cdp]);
printf("Digite el numero de cuenta: ");
scanf("%d", &cuenta_cdp[cdp]);
cuenta == -1; // Se asume que no existe
for(i = 0; i < MAX_CUENTAS; i++) // Ver si la cuenta existe, recorro las cuentas existentes. Si no existe, blanquear los campos de nuevo
{
if(cuenta_cdp[cdp] == id_cuenta[i])
{
cuenta = i;
break; // Detener aqui
}
}
if(cuenta == -1) // No se pudo encontrar el numero de cuenta
{
//Es necesario poner los valores de nuevo en 0
id_cdp[cdp] = 0;
monto_cdp[cdp] = 0;
meses_cdp[cdp] = 0;
cuenta_cdp[cdp] = 0;
}
else
{
//Calcular el monto final del CDP
monto_final_cdp = monto_cdp[cdp] + (monto_cdp[cdp]*(interes_mensual*meses_cdp[cdp]));
monto_cuenta[cuenta] += monto_final_cdp; //Se acumula en la cuenta existente
printf("El valor final del CDP fue de %f\n", monto_final_cdp);
printf("La cuenta ahora tiene %f\n\n\n", monto_cuenta[cuenta]);
}
}
break;
case 2:
menu_inversion = 0; // Salir del menu de inversion, condicion de parada
break;
}
}
menu_inversion = 1; // Volver al menu inversion
break;
case 3:
menu_principal = 0; // Salir del menu principal, condicion de parada del programa
break;
}
}
system("PAUSE");
return 0;
}
// Mision cumplida :) !!!!