CRYPTOBANK - aigora/twE105_1920-cryptobank GitHub Wiki
Objetivos:
- El objetivo principal ha sido crear un programa que 'imite' una aplicación informática de una entidad bancaria, donde el usuario puede iniciar sesión en su cuenta o registrarse creando una nueva, y una vez en la cuenta podrá realizar las operaciones bancarias disponibles:
- Retirar efectivo.
- Ingresar efectivo.
- Consultar el saldo.
- Consultar movimientos.
- Cambio de pin.
Funcionalidades y guía de uso:
Durante el programa, el usuario deberá ir seleccionando la opción que desee realizar. Para ello solo tiene que marcar el número que precede tiene cada opción.
- Nuestro banco pide al usuario que inicie sesión en una cuenta existente o se registre y cree una nueva cuenta.
- Para iniciar sesión al usuario se le solicitará el nombre de la cuenta y su clave personal.
- Para registrarse y crear una cuenta al usuario se le solicitará también el nombre de la cuenta y la clave personal que quiera usar, una vez realizado este proceso se debe reiniciar el programa para que la cuenta se genere correctamente.
- Una vez iniciada la sesión o creada la nueva cuenta, introduciendo el nombre y a clave de la cuenta, al usuario le aparecerá un menú con las diferentes operaciones bancarias que puede realizar, tras cada operación el usuario volverá a este menú.
-
Para retirar efectivo el programa le solicitara la cantidad que desea retirar y si esta es valida le mostrara el saldo restante en pantalla.
-
Pero si no dispone de esa cantidad el programa se lo hará saber y le pedirá que introduzca una nueva cantidad.
-
Para ingresar dinero en la cuenta el procedimiento es el mismo que para retirarlo, el programa solicita una cantidad al usuario, la suma al saldo anterior y muestra en pantalla el nuevo saldo disponible.
-
Si selecciona la opción de consultar el saldo el programa muestra en pantalla el saldo disponible del usuario.
- Si se selecciona la opción de consulta de movimientos se muestran en pantalla los movimientos realizados en su cuenta junto al saldo restante y la fecha y hora a la que fueron realizados.
- Para cambiar la clave personal el programa solicita al usuario la clave actual y una vez introducida correctamente solicita la nueva clave que quiere utilizar.
- Una vez realizadas las operaciones bancarias y el usuario cerrar sesión. El programa vuelve a solicitar al siguiente usuario que inicie sesión con su cuenta o que se registre.
Código y uso de funciones y estructuras:
Para que la lectura del programa sea mas sencilla hemos dividido el condigo en dos partes.
- La primera de ellas, codigo.c, almacena la estructura principal del programa donde usaremos ficheros donde se encuentran guardados los datos de los usuarios, y a través de varios switch-case anidados podemos movernos por los distintos menús del programa, mencionados anteriormente.
- Debido a que casi todas opciones del menú están formadas por funciones que poseen punteros y estructuras, y para que resultara mas legible la lectura del programa hemos realizado una librería donde desarrollaremos todas estas funciones:
int comprobarUsuario (datosCliente *cliente, datosUsuario *usuario);
int comprobarClave (datosCliente *cliente, datosUsuario *usuario);
void crearUsuario (datosCliente *cliente, datosUsuario *usuario, FILE *pf);
int actualizarFile1 (datosUsuario *usuario, FILE *pf);
int actualizarFile2 (datosUsuario *usuario, FILE *pf);
int retirarEfectivo (datosCliente *cliente, datosUsuario *usuario);
int imprimeMovimientos (datosUsuario *usuario);
int ingresarEfectivo (datosCliente *cliente, datosUsuario *usuario);
void cambiarClave (datosUsuario *usuario);
void fechayhora(datosMovimientos *movimientos);
El uso de puntero en las funciones nos permite acceder a las estructuras sin la necesidad de usar variables globales.
- Funciones como comprobarUsuario o comprobarClave solo realizan compraraciones entre cadenas de distintas estructuras, lo que intentamos realizar con esto es que comprobar que el usuario introducido existe y que la clave de dicho usuario es correcta.
- La función crearUsuario se encarga de introducir los datos solicitados por pantalla dentro del fichero donde se encuentran el resto de usuarios.
- Las funciones actualizarFile se encargan de cambiar en el fichero aquellos datos que han sido modificados por el usuario tras el uso del programa y los distintos menús.
- Las funciones de ingresarEfectivo y retirarEfectivo no solo modificaran el saldo de la cuenta del usuario tras comprobar que existe la cantidad solicitada en la cuenta (en el caso de retirada de efectivo), sino que también almacenará la operación realizada junto con la fecha y hora (usando la funcion fechayhora)y saldo final en un fichero único de cada usuario donde se almacenarán todos los últimos movimientos realzados.
- La función imprimeMovimientos leerá el fichero mencionado anteriormente, donde se encuentran los movimentos del usuario, y lo imprimirá por pantalla.
Todas estas funciones no serian útiles sin las siguientes estructuras:
typedef struct // MOVIMIENTOS DE CLIENTES
{
char fechayhora[16];
float cantidad;
}datosMovimientos;
typedef struct{ // DATOS DE CLIENTES GUARDADOS
char nombre[20];
char clave[20];
float saldo;
datosMovimientos movimientos[20];
}datosUsuario;
typedef struct{ // DATOS DE CLIENTES NUEVOS
char nombre[20];
char clave[20];
float cantidad;
}datosCliente;
Ficheros:
- Para la realización de este programa hemos usado un fichero de tipo .txt llamado usuarios en el cual se almacenaban los datos mas generales de cada usuario, es decir, el nombre de la cuenta, la clave personal y el saldo, separados por punto y coma cada uno de estos datos.
- Mientras que para almacenar los movimientos, cada usuario tenia un fichero de tipo .txt independiente, llamado con el nombre de la cuenta a la que pertenece. Estos ficheros contienen la fecha, hora, cantidad, y saldo restante, separados también por punto y coma, correspondiente a cada movimiento realizado en la cuenta.