FDP Sem4 Pablo-Ramos Lopez Al03048327

Descargar como docx, pdf o txt
Descargar como docx, pdf o txt
Está en la página 1de 34

NOMBRE: MATRÍCULA:

PABLO RAMOS LÓPEZ AL03048327

NOMBRE DEL CURSO: NOMBRE DEL PROFESOR:

FUNDAMENTOS DE PROGRAMACIÓN ISAÍN CUADRA RIVAS

MÓDULO: EVIDENCIA 2

SEMANA 4

FECHA: 18/07/2023

Evidencia 2
Desarrollo de la actividad

1. Lee con atención plena el siguiente escenario (Mismo que en la


evidencia 1):

Trabajas para una empresa de desarrollo de software, y te piden dar una


solución que se encargue de administrar cajeros automáticos.

Los casos de uso son los siguientes:

 Retiro de dinero: el cliente podrá retirar su dinero siempre y cuando


cuente con los fondos suficientes, el número de tarjeta y PIN
coincidan, y su tarjeta no esté vencida.
 Transferencia de fondos: transferir dinero entre diferentes cuentas que
se encuentren registradas como válidas. Se podrá realizar la
transferencia de fondos, siempre y cuando la cantidad solicitada se
tenga en la cuenta.
 Depósito de fondos: para depositar dinero a una cuenta se requiere el
número de tarjeta a depositar y el monto. Se aceptan billetes
únicamente, se debe especificar el monto a depositar, solicitar
introducir billetes y realizar la validación, en caso de incumplir, se debe
permitir modificar el monto a depositar.
 Consulta de saldos: el usuario podrá consultar en pantalla su saldo,
solo si su número de tarjeta coincide con su PIN. En caso de que la
tarjeta esté vencida, se debe mostrar en pantalla el siguiente texto:
“Su plástico ha vencido, pase a ventanilla para obtener uno nuevo”.

El banco nos ha proporcionado la siguiente información que representa los


datos que ellos manejan:

Titular Número PIN Fecha Saldo

Juan Montes 4242424242424240 123 23/07/27 $9640

Pedro Zapata 4000056655665550 456 23/07/27 $8700

Ana Martínez 5555555555554440 789 23/07/27 $22650

Rogelio
Guerra 2223003122003220 101 23/07/27 $4680

Fase 2
2. Una vez que tengas la primera fase y hayas desarrollado el algoritmo
y diagrama de flujo, es tiempo de codificar utilizando las estructuras
condicionales y de repetición que aprendiste. La solución deberá
contener lo siguiente:
 Codificación: programa la solución utilizando C#, incluyendo
comentarios de encabezado donde muestres lo que realiza el
programa, las entradas y las salidas (puedes incluir, de
preferencia, comentarios simples dentro del programa para
mejorar el entendimiento de tu programa).
 Pruebas: ejecuta las pruebas y documenta la evidencia de cada
caso de prueba. Genera el reporte de la ejecución de pruebas.

Recuerda que el programa deberá usar las mejores prácticas de indentación y


orden del código.

3. Elabora un reporte con el procedimiento que realizaste para


desarrollar el software y los problemas que presentaste para lograr su
correcto funcionamiento.

Nota: Recuerda incluir en tu reporte lo que hiciste en la primera evidencia


(pseudocódigo y diagrama de flujo), así como el código fuente (archivo .cs) y
capturas de pantalla de cada una de tus pruebas de escritorio.

Fase 3

4. Lee con atención plena el siguiente escenario:

La gente del banco está muy feliz con tus entregables, por motivos de
seguridad piden manejar ellos mismos las entradas de información, es decir, el
banco gestionará la información respecto a los datos de los tarjetahabientes y
la tendrá disponible en un archivo de texto que el sistema deberá llamar cada
vez que se realice una operación.

También piden que cuando el cliente verifique su saldo pueda imprimir su


comprobante en un archivo de texto, mismo que el proveedor de infraestructura
tendrá configurado para imprimirlo físicamente (nosotros interpretamos que
enviarlo a un archivo de texto es lo mismo que imprimir).

Al conocer cómo programar con arrays, funciones, y sabiendo manejar


archivos, podrás desarrollar un software mucho más robusto. Teniendo en
cuenta los dos entregables pasados, en esta entrega final deberás realizar lo
siguiente:

 Tomarás lo que ya desarrollaste y realizarás las adaptaciones


necesarias utilizando dentro de la solución: arreglos, funciones,
manipulación de archivos, ciclos repetitivos, estructuras condicionales,
adecuado manejo de variables y constantes, así como cálculos para
poder realizar cada operación que el cliente tendrá disponible en el
sistema de cajero automático. La solución deberá contener lo
siguiente:
 Análisis: examina los requerimientos que han sufrido alguna
modificación. Define las entradas, procesos y salidas tomando en
cuenta que los datos serán leídos de un archivo de texto, y que en la
consulta de saldos también se hará uso de un archivo de texto que
posteriormente será impreso.
 Diseño: revisa el algoritmo de solución general del programa y los
algoritmos para la lógica de cada uno de los aspectos del proyecto.
Deberás tomar en cuenta el diseño modular para dividir la solución en
subpartes a través del uso de funciones. Genera también el diseño de
casos de prueba (mínimo cinco) que te permitan probar todos los
escenarios que pide el programa; no olvides tomar en cuenta los
casos de prueba en caso de que algún archivo no exista, o que el
formato de entrada sea el incorrecto (cada prueba deberá contener un
identificador, la descripción de la prueba, las entradas y las salidas
esperadas).
 Codificación: programa la solución usando C#, incluye el comentario de
encabezado de cada una de las funciones, en donde se muestre el
objetivo de la función, la definición de parámetros y los retornos (si
aplican). El programa deberá realizarse aplicando arreglos y
archivos.
 Pruebas: ejecuta las pruebas y documenta la evidencia de cada caso de
prueba. Genera el reporte de la ejecución de pruebas.

Recuerda que el programa debe usar las mejores prácticas de documentación


e indentación de código.

5. Elabora un reporte con el procedimiento que seguiste para desarrollar


el software y los problemas que presentaste para lograr el correcto
funcionamiento.
6. Realiza la justificación de tu diseño.
ANÁLISIS DEL PROBLEMA

(Se incluyen las evidencias presentadas en la segunda semana. Al hacer la


implementación en C# basado en el esqueleto proporcionado y referenciado al
final de este documento, el programa sufrió modificaciones de sintaxis y estilo,
por lo cual el diagrama de flujo y las salidas no coincidirán exactamente con lo
presentado. Por cuestión de espacio el diagrama de flujo se anexa en archivo
anexo.)

1. El usuario debe conocer la información personal de su cuenta


2. El programa deberá pedir el número de tarjeta
3. El programa deberá pedir el PIN (CVC) de la tarjeta
4. El programa deberá pedir la fecha de expiración de la tarjeta (para
efectos de esta actividad se considerará como expirada cualquier tarjeta
cuyo año de expiración sea 2023 o anterior)
5. Los datos deben coincidir (usuario, número de tarjeta con CVC/PIN y
que la tarjeta no esté expirada). En caso de que la información no pueda
validarse, el programa le pedirá al usuario que intente de nuevo y
finalizará. Si la validación de los datos es correcta, el programa deberá
mostrar el nombre del usuario e indicarle que seleccione alguna de las
siguientes cinco opciones: 1. Retiro de dinero / 2. Transferencia de
Fondos / 3.Depósito de fondos / 4. Consulta de saldos /   5. Salir
6. El programa deberá facilitar retiro de dinero si:
1. La cuenta tiene fondos suficientes
7. El programa deberá realizar transferencia de fondos entre cuentas si:
1. La cuenta origen cuenta con los fondos suficientes
2. El número de tarjeta que recibirá la transferencia coincide
con las que ya están validadas
8. El programa deberá procesar depósito de fondos a una cuenta tomando
en cuenta que:
1. El programa solo aceptará billetes
2. El programa deberá solicitar el monto a depositar
3. El programa deberá solicitar introducir billetes
4. El programa deberá validar el depósito y confirmarlo (la
suma total de billetes debe coincidir con el monto que se
ingresó como deseado a depositar).
5. En caso de ser inválido, el programa deberá permitir la
modificación del monto a depositar
9. El programa deberá asistir con la consulta de saldo si:
1. La tarjeta está vigente
2. En caso de estar vencida, el cajero debe mostrar el
mensaje: “Su plástico ha vencido, pase a ventanilla para
obtener uno nuevo”
10. Al finalizar cualquier operación el programa preguntará nuevamente si
se quiere hacer alguna operación. En caso de que no sea así, el usuario
seleccionará la opción 5 (Salir) y el programa le agradecerá al usuario
por su visita.

----------------------------------------------------------------------------------------------------------

ENTRADAS

 Número de tarjeta
 PIN (CVC)
 Mes de expiración de la tarjeta
 Año de expiración de la tarjeta

PROCESO

 Pedir número de tarjeta


 Pedir PIN (CVC)
 Pedir fecha de expiración de la tarjeta en formato MM / AA
 Validar los datos anteriores, y proseguir solo si coinciden con las
variables declaradas y condiciones establecidas al inicio del programa
 Solicitar al cliente que elija la operación que quiere realizar
 Para retiro de efectivo, solicitar el monto del mismo
o Validar que el retiro sea igual o menor a los fondos disponibles 
 Para transferencia, solicitar el número de la tarjeta de destino y el monto
a transferir
o Validar que el monto de la transferencia sea igual o menor a los
fondos disponibles 
o Validar que la tarjeta de destino sea una cuenta validada por el
banco
 Para depósitos, solicitar el número de tarjeta que recibirá el depósito, el
monto que se desea depositar y la suma total de los billetes a introducir.
 Para consulta de saldo, validar que la tarjeta no esté expirada
o En caso de estarlo, aconsejar al cliente que pase a ventanilla
SALIDAS
 En caso de que el cliente no pueda ser validado, el programa le
comunicará al cliente que su información no pudo ser validad y le pedirá
que lo intente de nuevo.
 Para retiros, de haber fondos suficientes el cajero exhortará al cliente a
tomar la cantidad procesada. De no haber fondos, mostrará un mensaje
indicando que los fondos son insuficientes
 Para transferencias, de ser exitosas se confirmara el monto y tarjeta
destino. De lo contrario el cajero le indicará al cliente que revise la
información sea correcta y que haya fondos disponibles
 Para depósitos, el cajero confirmará la cantidad cuando se realicen de
forma exitosa. En caso de discrepancia, solicitará al cliente que
modifique el monto a depositar para que coincida con los billetes
 Para consulta de saldo, si la tarjeta está activa mostrará la cantidad de
fondos disponibles en la cuenta. De estar expirada, invitará al cliente a
pasar a ventanilla para obtener un nuevo plástico.
 Cuando finalice una operación, el cajero preguntará nuevamente al
cliente si quiere hacer alguna operación. Cuando haya finalizado, se
deberá seleccionar la opción 5, lo que provocará que el programa
muestre un mensaje agradeciendo al cliente por su visita y finalizará.

PSEUDOCÓDIGO - PROGRAMA CAJERO AUTOMÁTICO

INICIO 

Declarar variables que contengan el número de tarjeta asignado a


cada usuario
juanT ← 4242424242424240
pedroZ ← 4000056655665550
anaM ← 5555555555554440
rogelioG ← 2223003122003220
► Pedir al cliente el numero de tarjeta
numeroTarjeta ← Lectura del teclado
► Pedir al cliente el PIN (CVC)
pinCvc ← Lectura del teclado
► Pedir al cliente el mes de expiración
mesExpiracion ← Lectura del teclado
►Pedir al cliente el año de expiración 
anoExpiracion ← Lectura del teclado

Ejecutar la condición numeroTarjeta = juanT && pinCvc = 123 &&


mesExpiracion >= 01 && anoExpiracion >=24
► En caso de no cumplirse ni esta ni las subsecuentes
condiciones, imprimir "Tu información no pudo ser correctamente
validada. Por favor intenta de nuevo"
Si la condición anterior se cumple, llamar y ejecutar el
subdiagrama Juan_Montes:
Declarar variable: fondosJuan ← 9650
►Imprimir "Bienvenido, Juan Montes. Selecciona tu operación.
1.Retiro 2.Transferencia 3.Depósito 4.Consulta de saldos
5.Salir"
Si se selecciona la opción 1:
► Pedir el monto a retirar
retiro ← Lectura del teclado
Ejecutar la condición retiro <= fondosJuan
Si se cumple la condición anterior:
►Imprimir "Tu retiro de " + retiro + " pesos ha sido
correctamente procesado. Por favor toma tu efectivo."
De no cumplirse:
►Imprimir "Fondos insuficientes. Por favor intenta de nuevo."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 2:
►Pedir el monto de la transferencia
transferencia ← Lectura del teclado
►Pedir tarjeta que recibirá la transferencia
tarjetaDestino ← Lectura del teclado
Ejecutar la condición transferencia <= fondosJuan &&
tarjetaDestino = juanT OR tarjetaDestino = pedroZ OR
tarjetaDestino = anaM OR tarjetaDestino = rogelioG
Si se cumple la condición anterior:
►Imprimir: "La transferencia de " + transferencia + " pesos a la
tarjeta " + tarjetaDestino + " se ha completado correctamente."
De no cumplirse:
►Imprimir "Por favor revisa si cuentas con fondos suficientes y
si el numero de tarjeta es correcto."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 3:
►Pedir el número de tarjeta que recibirá el depósito
depoDestino ← Lectura del teclado
►Pedir que se introduzcan los billetes y teclear la cantidad
introducida
billetes ← Lectura del teclado
►Pedir que se teclee el monto que se desea depositar
deposito ← Lectura del teclado
Ejecutar la condición deposito=billetes
Si se cumple la condición anterior:
►Imprimir "Tu depósito de " + deposito + " pesos se ha procesado
correctamente."
De no cumplirse:
►Imprimir "El total de billetes introducidos no coincide con el
monto que deseas depositar. Por favor modifica la cantidad que
deseas depositar."
Por sub-loop insertado, regresar al paso de pedir que se teclee
el monto que se desea depositar
Una vez que se ha cumplido la condición correctamente:
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 4
►Pedir el año de expiración de la tarjeta
confExpiracion ← Lectura del teclado
Ejecutar la condición confExpiracion >= 24
Si se cumple la condición anterior:
►Imprimir "Tu saldo al dia de hoy es de " + fondosJuan + "
pesos."
De no cumplirse:
►Imprimir "Su plástico ha vencido, pase a ventanilla para
obtener uno nuevo."
Por loop insertado, regresar a selección de operaciones. 

De seleccionarse cualquier otro valor que NO esté entre los


enteros 1 y 5:
►Imprimir "Opción inválida, por favor elige nuevamente."

Si se selecciona la opción 5:
►Imprimir "Gracias por tu visita, vuelve pronto".

—---------------------------------

Ejecutar la condición numeroTarjeta = pedroZ && pinCvc = 456 &&


mesExpiracion >= 01 && anoExpiracion >=24
► En caso de no cumplirse ni esta ni las subsecuentes
condiciones, imprimir "Tu información no pudo ser correctamente
validada. Por favor intenta de nuevo"
Si la condición anterior se cumple, llamar y ejecutar el
subdiagrama Pedro_Zapata:
Declarar variable: fondosPedro ← 17439
►Imprimir "Bienvenido, Pedro Zapata. Selecciona tu operación.
1.Retiro 2.Transferencia 3.Depósito 4.Consulta de saldos
5.Salir"
Si se selecciona la opción 1:
► Pedir el monto a retirar
retiro ← Lectura del teclado
Ejecutar la condición retiro <= fondosPedro
Si se cumple la condición anterior:
►Imprimir "Tu retiro de " + retiro + " pesos ha sido
correctamente procesado. Por favor toma tu efectivo."
De no cumplirse:
►Imprimir "Fondos insuficientes. Por favor intenta de nuevo."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 2:
►Pedir el monto de la transferencia
transferencia ← Lectura del teclado
►Pedir tarjeta que recibirá la transferencia
tarjetaDestino ← Lectura del teclado
Ejecutar la condición transferencia <= fondosPedro &&
tarjetaDestino = juanT OR tarjetaDestino = pedroZ OR
tarjetaDestino = anaM OR tarjetaDestino = rogelioG
Si se cumple la condición anterior:
►Imprimir: "La transferencia de " + transferencia + " pesos a la
tarjeta " + tarjetaDestino + " se ha completado correctamente."
De no cumplirse:
►Imprimir "Por favor revisa si cuentas con fondos suficientes y
si el número de tarjeta es correcto."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 3:
►Pedir el numero de tarjeta que recibirá el depósito
depoDestino ← Lectura del teclado
►Pedir que se introduzcan los billetes y teclear la cantidad
introducida
billetes ← Lectura del teclado
►Pedir que se teclee el monto que se desea depositar
deposito ← Lectura del teclado
Ejecutar la condición deposito=billetes
Si se cumple la condición anterior:
►Imprimir "Tu depósito de " + deposito + " pesos se ha procesado
correctamente."
De no cumplirse:
►Imprimir "El total de billetes introducidos no coincide con el
monto que deseas depositar. Por favor modifica la cantidad que
deseas depositar."
Por sub-loop insertado, regresar al paso de pedir que se teclee
el monto que se desea depositar
Una vez que se ha cumplido la condición correctamente:
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 4
►Pedir el año de expiración de la tarjeta
confExpiracion ← Lectura del teclado
Ejecutar la condición confExpiracion >= 24
Si se cumple la condición anterior:
►Imprimir "Tu saldo al dia de hoy es de " + fondosPedro + "
pesos."
De no cumplirse:
►Imprimir "Su plástico ha vencido, pase a ventanilla para
obtener uno nuevo."
Por loop insertado, regresar a selección de operaciones. 

De seleccionarse cualquier otro valor que NO esté entre los


enteros 1 y 5:
►Imprimir "Opción inválida, por favor elige nuevamente."

Si se selecciona la opción 5:
►Imprimir "Gracias por tu visita, vuelve pronto".
—---------------------------------

Ejecutar la condición numeroTarjeta = anaM && pinCvc = 789 &&


mesExpiracion >= 01 && anoExpiracion >=24
► En caso de no cumplirse ni esta ni las subsecuentes
condiciones, imprimir "Tu información no pudo ser correctamente
validada. Por favor intenta de nuevo"
Si la condición anterior se cumple, llamar y ejecutar el
subdiagrama Ana_Martinez:
Declarar variable: fondosAna ← 4655
►Imprimir "Bienvenida, Ana Martinez. Selecciona tu operación.
1.Retiro 2.Transferencia 3.Depósito 4.Consulta de saldos
5.Salir"
Si se selecciona la opción 1:
► Pedir el monto a retirar
retiro ← Lectura del teclado
Ejecutar la condición retiro <= fondosAna
Si se cumple la condición anterior:
►Imprimir "Tu retiro de " + retiro + " pesos ha sido
correctamente procesado. Por favor toma tu efectivo."
De no cumplirse:
►Imprimir "Fondos insuficientes. Por favor intenta de nuevo."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 2:
►Pedir el monto de la transferencia
transferencia ← Lectura del teclado
►Pedir tarjeta que recibirá la transferencia
tarjetaDestino ← Lectura del teclado
Ejecutar la condición transferencia <= fondosAna &&
tarjetaDestino = juanT OR tarjetaDestino = pedroZ OR
tarjetaDestino = anaM OR tarjetaDestino = rogelioG
Si se cumple la condición anterior:
►Imprimir: "La transferencia de " + transferencia + " pesos a la
tarjeta " + tarjetaDestino + " se ha completado correctamente."
De no cumplirse:
►Imprimir "Por favor revisa si cuentas con fondos suficientes y
si el número de tarjeta es correcto."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 3:
►Pedir el numero de tarjeta que recibirá el depósito
depoDestino ← Lectura del teclado
►Pedir que se introduzcan los billetes y teclear la cantidad
introducida
billetes ← Lectura del teclado
►Pedir que se teclee el monto que se desea depositar
deposito ← Lectura del teclado
Ejecutar la condición deposito=billetes
Si se cumple la condición anterior:
►Imprimir "Tu depósito de " + deposito + " pesos se ha procesado
correctamente."
De no cumplirse:
►Imprimir "El total de billetes introducidos no coincide con el
monto que deseas depositar. Por favor modifica la cantidad que
deseas depositar."
Por sub-loop insertado, regresar al paso de pedir que se teclee
el monto que se desea depositar
Una vez que se ha cumplido la condición correctamente:
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 4
►Pedir el año de expiración de la tarjeta
confExpiracion ← Lectura del teclado
Ejecutar la condición confExpiracion >= 24
Si se cumple la condición anterior:
►Imprimir "Tu saldo al dia de hoy es de " + fondosAna + "
pesos."
De no cumplirse:
►Imprimir "Su plástico ha vencido, pase a ventanilla para
obtener uno nuevo."
Por loop insertado, regresar a selección de operaciones. 

De seleccionarse cualquier otro valor que NO esté entre los


enteros 1 y 5:
►Imprimir "Opción inválida, por favor elige nuevamente."

Si se selecciona la opción 5:
►Imprimir "Gracias por tu visita, vuelve pronto".

—---------------------------------

Ejecutar la condición numeroTarjeta = rogelioG && pinCvc = 789


&& mesExpiracion >= 01 && anoExpiracion >=24
► En caso de no cumplirse ni esta ni las subsecuentes
condiciones, imprimir "Tu información no pudo ser correctamente
validada. Por favor intenta de nuevo"
Si la condición anterior se cumple, llamar y ejecutar el
subdiagrama Rogelio_Guerra:
Declarar variable: fondosRogelio ← 42870
►Imprimir "Bienvenido, Rogelio Guerra. Selecciona tu operación.
1.Retiro 2.Transferencia 3.Depósito 4.Consulta de saldos
5.Salir"
Si se selecciona la opción 1:
► Pedir el monto a retirar
retiro ← Lectura del teclado
Ejecutar la condición retiro <= fondosRogelio
Si se cumple la condición anterior:
►Imprimir "Tu retiro de " + retiro + " pesos ha sido
correctamente procesado. Por favor toma tu efectivo."
De no cumplirse:
►Imprimir "Fondos insuficientes. Por favor intenta de nuevo."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 2:
►Pedir el monto de la transferencia
transferencia ← Lectura del teclado
►Pedir tarjeta que recibirá la transferencia
tarjetaDestino ← Lectura del teclado
Ejecutar la condición transferencia <= fondosRogelio &&
tarjetaDestino = juanT OR tarjetaDestino = pedroZ OR
tarjetaDestino = anaM OR tarjetaDestino = rogelioG
Si se cumple la condición anterior:
►Imprimir: "La transferencia de " + transferencia + " pesos a la
tarjeta " + tarjetaDestino + " se ha completado correctamente."
De no cumplirse:
►Imprimir "Por favor revisa si cuentas con fondos suficientes y
si el número de tarjeta es correcto."
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 3:
►Pedir el numero de tarjeta que recibirá el depósito
depoDestino ← Lectura del teclado
►Pedir que se introduzcan los billetes y teclear la cantidad
introducida
billetes ← Lectura del teclado
►Pedir que se teclee el monto que se desea depositar
deposito ← Lectura del teclado
Ejecutar la condición deposito=billetes
Si se cumple la condición anterior:
►Imprimir "Tu depósito de " + deposito + " pesos se ha procesado
correctamente."
De no cumplirse:
►Imprimir "El total de billetes introducidos no coincide con el
monto que deseas depositar. Por favor modifica la cantidad que
deseas depositar."
Por sub-loop insertado, regresar al paso de pedir que se teclee
el monto que se desea depositar
Una vez que se ha cumplido la condición correctamente:
Por loop insertado, regresar a selección de operaciones. 

Si se selecciona la opción 4
►Pedir el año de expiración de la tarjeta
confExpiracion ← Lectura del teclado
Ejecutar la condición confExpiracion >= 24
Si se cumple la condición anterior:
►Imprimir "Tu saldo al dia de hoy es de " + fondosRogelio + "
pesos."
De no cumplirse:
►Imprimir "Su plástico ha vencido, pase a ventanilla para
obtener uno nuevo."
Por loop insertado, regresar a selección de operaciones. 

De seleccionarse cualquier otro valor que NO esté entre los


enteros 1 y 5:
►Imprimir "Opción inválida, por favor elige nuevamente."

Si se selecciona la opción 5:
►Imprimir "Gracias por tu visita, vuelve pronto".
FIN

CODIFICACION EN C# (la base de este programa se encuentra


referenciada al final del documento)

using System;

namespace Anidadas {
class Program {

// Estructura general para guardar los datos de los clientes


// [nombre, numero_de_tarjeta, pin, fecha, saldo]

// Funcion que solicita los datos de autenticacion del cliente


// y regresa un arrglo unidimensional string con los datos
static string[] pedirDatosCliente() {
string[] datosCliente = new string[5];

Console.WriteLine();
Console.WriteLine("Ingresa el numero de tu tarjeta");
string numeroDeTarjeta = Console.ReadLine();

Console.WriteLine("Ingresa el pin de tu tarjeta");


string pin = Console.ReadLine();

datosCliente[1] = numeroDeTarjeta;
datosCliente[2] = pin;
return datosCliente;
}

// Funcion que escribe la data en el archivo database.txt


static void writeDatabaseFile(string[,] database) {
try {
StreamWriter sw = new StreamWriter("C:\\Users\\carlo\\
Documents\\Progra\\Cajeros\\Cajeros\\database.txt");

for (int i = 0; i < 4; i++) {


string row = "";
for (int j = 0; j < 5; j++) {
row = row + database[i, j];

if (j < 4) {
row = row + ",";
}
}
sw.WriteLine(row);
}

sw.Close();
} catch (Exception e) {
Console.WriteLine("Error writing database");
}

// Funcion que lee la base de datos (database.txt) y regresa


un array bi-dimensional con los
// datos en la "Estructura general de datos del cliente"
static string[,] readData() {
try {
// Line counter -> para saber cuantos renglones tiene
el archivo
StreamReader sr = new StreamReader("C:\\Users\\carlo\\
Documents\\Progra\\Cajeros\\Cajeros\\database.txt");
int lineas = 1;
string line = sr.ReadLine();
while (line != null) {
line = sr.ReadLine();
lineas++;
}

// Array generator -> lee el archivo y lo guarda en un


array bi-dimensional
StreamReader reader = new StreamReader("C:\\Users\\
carlo\\Documents\\Progra\\Cajeros\\Cajeros\\database.txt");
string[,] result = new string[lineas, 5];
line = "";
int counter = 0;
while (line != null) {
line = reader.ReadLine();
if (line != null) {
string[] arr = line.Split(",");
for (int i = 0; i < arr.Length; i++) {
result[counter,i] = arr[i];
}
}
counter++;
}

sr.Close();
reader.Close();

return result;
}
catch (Exception e) {
Console.WriteLine("Error reading database");

return new string[0,0];


}
}

// Funcion que imprime en formato csv la data contenida en la


database
static void printDatabaseData(string[,] database) {
Console.WriteLine("Data in database:");
for (int i = 0; i < 4; i++) {
Console.Write(" ");
for (int j = 0; j < 5; j++) {
Console.Write(database[i, j]);
Console.Write(",");
}
Console.WriteLine();
}
}

// Funcion que imprime los datos de un cliente encontrados en


la base de datos
static void printRow(string[,] database, int customerId) {
string nombre = database[customerId, 0];
string numeroDeTarjeta = database[customerId, 1];
string pin = database[customerId, 2];
string fecha = database[customerId, 3];
string saldo = database[customerId, 4];

Console.WriteLine(" Nombre: " + nombre);


Console.WriteLine(" NumeroDeTarjeta: " +
numeroDeTarjeta);
Console.WriteLine(" Pin: " + pin);
Console.WriteLine(" Saldo: $" + saldo);
}

// funcion que valida que el numero_de_tarjeta y pin coincidan


static int getCustomerId(string[,] database, string[]
customerData) {
for (int i = 0; i < 4; i++) {
if (database[i, 1] == customerData[1] && database[i,
2] == customerData[2]) {
Console.WriteLine("\n\n\t--> Login correcto <--");
Console.WriteLine("Bienvenido: " + database[i,
0]);
return i;
}
}

throw new MemberAccessException("User not found");


}

// Funcion para la funcionalidad Consulta


static void Consulta() {
string[,] database = readData();
// printDatabaseData(database);

string[] customerData = pedirDatosCliente();

int customerId = getCustomerId(database, customerData);


Console.WriteLine("CustomerId: " + customerId);

// IMPRIMIR CONSULTA
Console.WriteLine("\n\n**** -> CUSTOMER DATA <- ****");
printRow(database, customerId);
Console.WriteLine("*****************************");

// Solicita al cliente la cantidad que va a retirar


static int getCantidadARetirar(string[,] database, int
customerId) {
Console.WriteLine("Ingresa la cantidad a retirar (solo
cantidades enteras), tu saldo actual es: $" + database[customerId,
4]);
int retiro = Int32.Parse(Console.ReadLine());

return retiro;
}

// Valida que se pueda hacer el retiro y manda a escribir el


nuevo saldo a la database
static void makeRetiro(string[,] database, int customerId, int
cantidadRetiro) {
Console.WriteLine("\nEstoy retirando: " + cantidadRetiro +
" de tu cuenta");

// validar que el saldo es mayor o igual a la cantidad a


retirar
int saldo = Int32.Parse(database[customerId, 4]);

int nuevoSaldo = saldo;

if (saldo >= cantidadRetiro) {


nuevoSaldo = saldo - cantidadRetiro;

// Actualizar saldo en database info


database[customerId, 4] = nuevoSaldo + "";

// Write database info in file database.txt


writeDatabaseFile(database);

Console.WriteLine("-> Tu saldo anterior: $" + saldo +


", tu nuevo saldo es de: $" + nuevoSaldo);
}
else {
throw new ArithmeticException("Cantidad de retiro
mayor a disponible");
}
}

// Funcion para la funcionalidad de Retiro


static void Retiro() {
string[,] database = readData();
// printDatabaseData(database);

string[] customerData = pedirDatosCliente();

int customerId = getCustomerId(database, customerData);

int cantidadRetiro = getCantidadARetirar(database,


customerId);

makeRetiro(database, customerId, cantidadRetiro);


}

// Solicita al cliente la cantidad que va a depositar y la


tarjeta de destino
static int getCantidadADepositar(string[,] database, int
customerId)
{
Console.WriteLine("Ingresa la cantidad a depositar (solo
cantidades enteras)");
int deposito = Int32.Parse(Console.ReadLine());

return deposito;

Console.WriteLine("Ingresa el numero de tarjeta al que


quieres depositar");
int tarjetaDestino = Int32.Parse(Console.ReadLine());

return tarjetaDestino;

// Valida que se pueda hacer el deposito


static void makeDeposito(string[,] database, int customerId,
int cantidadDeposito)
{
Console.WriteLine("\nSe depositaron: " + cantidadDeposito
+ " a la tarjeta indicada");

// Funcion para la funcionalidad deposito


static void Deposito() {
string[,] database = readData();
// printDatabaseData(database);

string[] customerdata = pedirDatosCliente();


int customerId = getCustomerId(database, customerdata);

int cantidadDeposito = getCantidadADepositar(database,


customerId);

makeDeposito(database, customerId, cantidadDeposito);


}

// Solicita al cliente la cantidad que va a Transferir


static int getCantidadATransfer(string[,] database, int
customerId)
{
Console.WriteLine("Ingresa la cantidad a transferir (solo
cantidades enteras), tu saldo actual es: $" + database[customerId,
4]);
int transfer = Int32.Parse(Console.ReadLine());

return transfer;
}

// Valida que se pueda hacer la transferencia y manda a


escribir el nuevo saldo a la database
static void makeTransfer(string[,] database, int customerId,
int cantidadTransfer)
{
Console.WriteLine("\nEstoy transfiriendo: " +
cantidadTransfer + " a la cuenta indicada");

// validar que el saldo es mayor o igual a la cantidad a


retirar
int saldo = Int32.Parse(database[customerId, 4]);

int nuevoSaldo = saldo;


if (saldo >= cantidadTransfer)
{
nuevoSaldo = saldo - cantidadTransfer;

// Actualizar saldo en database info


database[customerId, 4] = nuevoSaldo + "";

// Write database info in file database.txt


writeDatabaseFile(database);

Console.WriteLine("-> Tu saldo anterior: $" + saldo +


", tu nuevo saldo es de: $" + nuevoSaldo);
}
else
{
throw new ArithmeticException("Cantidad de
transferencia mayor a disponible");
}
}

// Funcion para la funcionalidad transferencia


static void Transferencia()
{
string[,] database = readData();
// printDatabaseData(database);

string[] customerdata = pedirDatosCliente();

int customerId = getCustomerId(database, customerdata);


int cantidadTransfer = getCantidadATransfer(database,
customerId);

makeTransfer(database, customerId, cantidadTransfer);


}
static void Menu() {
char action;
do {
Console.WriteLine("\n\n\n******* Bienvenido *******");
Console.WriteLine("->Elige una opcion<-");
Console.WriteLine(" c) Consulta");
Console.WriteLine(" d) Deposito");
Console.WriteLine(" r) Retiro");
Console.WriteLine(" t) Transferencia");
Console.WriteLine(" z) Apagar cajero");
action = Char.Parse(Console.ReadLine());

try
{
switch (action)
{
case 'c':
Consulta();
break;
case 'r':
Retiro();
break;
case 'd':
Deposito();
break;
case 't':
Transferencia();
break;
case 'z':
Console.WriteLine("\n --->> Hasta luego
<<--");
break;
default:
Console.WriteLine("Error: Opcion no
valida");
break;
}
}
catch (MemberAccessException e) {
Console.WriteLine("\n\n ---> USER NOT FOUND
<---");
Console.WriteLine(" Intenta de nuevo");
}
catch (ArithmeticException e) {
Console.WriteLine("\n\n ---> CANTIDAD DE RETIRO
MAYOR A LA DISPONIBLE <---");
Console.WriteLine(" Intenta de nuevo");
}
catch (Exception e) {
Console.WriteLine("\n\n ---> Ups! Something Went
Wrong, try again <--");
Console.WriteLine(" Intenta de nuevo");
}
} while (action != 'z');
}

static void Main(string[] args) {


Menu();
}
}
}
PRUEBAS

ID de la
prueba Descripción Entradas Salida Esperada Resultado

“Estoy retirando: 450


de tu cuenta
Probar que el programa
entregue la cantidad -> Tu saldo anterior:
correcta de dinero en $9640, tu nuevo
1 retiros Retiro = $450 saldo es de: $9190” PASSED

“Estoy transfiriendo:
980 a la cuenta
Transferencia = $980 indicada
Probar que el programa
realice correctamente Tarjeta -> Tu saldo anterior:
una transferencia entre destino=42424242424 $8700, tu nuevo
2 cuentas 24240 saldo es de: $7720” PASSED

Tarjeta de depósito:
123456789 “Tu depósito de 800
Probar que el programa pesos se ha
realice correctamente un procesado
3 depósito Deposito: $4650 correctamente PASSED

**** -> CUSTOMER


DATA <- ****

Nombre: Rogelio
Guerra

NumeroDeTarjeta:
2223003122003220

Pin: 101

Saldo: $4680
Probar que el programa PASSED
muestre correctamente el
saldo en la cuenta del Año de expiración ************************
4 cliente (AA): 27 *****”

---> USER NOT


FOUND <---
Probar casos de error en
el programa, con Numero de tarjeta no
5 respectivo mensaje incluido en la Database Intenta de nuevo PASSED

**Se adjuntan capturas de consola de Visual Basic en las páginas siguientes


PRUEBA 1

PRUEBA 2
PRUEBA 3

PRUEBA 4
PRUEBA 5

CONCLUSION
El reto más grande en la codificación de una solución para este problema consistió en
la esquematización de esta, ya que tuvieron que integrarse múltiples procesos en un
mismo marco/programa y no crear soluciones separadas, así como ciclar distintas
funciones para que el programa otorgara la opcion de seguir realizando operaciones.
El entender el funcionamiento de los arreglos también fue un reto al principio, y resultó
ser una herramienta bastante poderosa que optimiza enormemente el funcionamiento
del programa y automatiza varias cuestiones que no pudieron lograrse en Raptor.

REFERENCIAS:

1. Cuadra Rivas, I. (2023). Cajero Automático: Programación en C#. (Versión


1) [Software]. Windows. CDMX: [email protected]. Publicado en:
CC.LTTI1802FLE.205.202322 - Fundamentos de programación/General a
las viernes, 14 de julio de 2023 15:02:12

También podría gustarte