sábado, 30 de agosto de 2014

Trabajo practico 1 - Cajero Automatico

Simulación Cajero Automático

Autor : René Curín
Competencia : Desarrollo de software (nivel 1)
Asignatura: Programación 1

Palabras clave: Programación, Funciones, Python

Descripción de la actividad

Durante el desarrollo de esta actividad comprendí el uso de las funciones en los programas, las que facilitan enormemente el trabajo de la programación. Además mejore las técnicas de programación ya que requerían de una lógica mas avanzada para realizar un código mas corto y simple de escribir
En esta actividad debíamos crear una especie de simulación de cajero automático, donde debía tener las funciones básicas que contiene un cajero automático como depositar dinero, girar dinero, transferencias, además de pedir una clave de ingreso y alertar al usuario si entre las cuentas contiene alguna con valor negativo.
Este programa debía funcionar correctamente para que el usuario pudiera volver atrás o cancelar alguna situación en la que se encontrara, por lo cual esto ayudo mucho a la utilización de ciclos y el uso de condiciones.

El enunciado de la actividad es el siguiente:

Elabore una solución computacional en python para simular el funcionamiento de un cajero automático. La situación a simular es un cliente que usa el cajero automático. El usuario tiene 3 cuentas bancarias del mismo banco: como cuenta rut, cuenta corriente, cuenta vista.

El cajero debe:

  -Permitir el ingreso de una clave de acceso y validarla con la contraseña que haya en el sistema,   permitiendo o no el acceso al sistema de cuentas bancarias del usuario. Si la contraseña fuera no válida, se puede reingresar hasta tres veces, después de lo cual si la clave correcta no ha sido ingresada se sale del sistema.

  -Permitir ver los montos de dinero existente en cada cuenta (el saldo de cada cuenta).

  -Mostrar una advertencia al usuario al ingresar a la pantalla principal de opciones si es que en alguna cuenta hubiera un saldo negativo, mencionar en que cuentas se debe dinero y el monto que se debe en total.

  -Poder realizar transferencias de dinero de una cuenta a otra a petición del usuario.

  -Permitir realizar giros de una cuenta específica y generar automáticamente la substracción en el saldo de la cuenta respectiva.

  -Poder realizar un deposito de dinero por buzón por parte del usuario y generar automáticamente incremento en el saldo de la cuenta respectiva.

  -Permitir salir del sistema.

  -Permitir trabajar en el cajero automático cuantas veces sea necesario, dejando todas las alternativas de acciones antes vistas accesibles.

Ademas debíamos implementar ciertos métodos que debíamos usar al momento de realizar una solución al problema, y los que necesitamos eran los siguiente:

-Variables
-Tipos de datos
-Estructura de secuencias
-Diagramas de flujos
-Ciclos
-Condicionales simples y anidados
-Manejo de cadenas
-Programación en Python


Herramientas usadas

   Python
   Ide Ninja

Solución de la actividad

Pseudocodigo

Funcion x <- deposito(x)
    Escribir "Ingrese monoto a depositas"
    leer n
    x <- x + n
FinFuncion

Funcion x <- giro(x)
    Escribir "Ingrese monoto a girar"
    leer n
    x <- x - n
FinFuncion

Funcion trans(x,i)
    Escribir "Ingrese monoto a trasnferir"
    Leer n
    x <- x - n
    i <- i + n
FinFuncion

Funcion n <- seleccion()
    escribir "Que desea hacer?"
    escribir "1 Deposito, 2 Giro, 3 Transferencia"
    leer n
FinFuncion

Funcion n <- selec_cuenta()
    Escribir "1 Cuenta Rut, 2 Cuenta Corriente, 3 Cuenta vista"
    Leer n
FinFuncion
   
Funcion m <- cuentaTrans(x)
    m <- ""
    Si x == 1
        Escribir "1 Cuenta Corriente, 2 Cuenta Vista"
        Leer m
    FinSi  
    Si x == 2
        Escribir "1 Cuenta Rut, 2 Cuenta Vista"
        Leer m
    FinSi
    SI x == 3
        Escribir "Cuenta Corriente, 2 Cuenta Rut"
        Leer m
    FinSi
FinFuncion

Funcion x <-salir(x)
    Escribir "Desea Otra Operacion"
    Escribir "1 Si, 2 No"
    Leer n
    Si n == "1"
        x <- Verdadero
    FinSi
    Si n == "2"
        x <-Falso
    FinSi
FinFuncion

paswd <- 0
saldo_rut <- 0
saldo_corriente <- 0
saldo_vista <- 0
cont <- 3
Proceso sin_titulo
    Mientras cont > 0
        Escribir "Ingrese su clave secreta: "
        leer pas
        si paswd = pas entonces
            z <- Verdadero
            Mientras z == Verdadero
                Si saldo_rut < 0
                    Escribir "Saldo negativo en Cuenta Rut, Saldo: $", saldo_rut
                FinSi
                Si saldo_corriente < 0
                    Escribir "Saldo negativo en Cuenta Corriente, Saldo: $", saldo_corriente
                FinSi
                Si saldo_vista < 0
                    Escribir "Saldo negativo en Cuenta Vista, Saldo: $", saldo_vista
                FinSi
                Escribir "Seleccione una cuenta:"
                cuenta <- selec_cuenta()
                si cuenta == "1"
                    escribir "Su saldo actual es de $", saldo_rut
                    n <- seleccion()
                    si n == "1" entonces
                        saldo_rut <- deposito(saldo_rut)
                    Finsi
                    si n == "2"
                        saldo_rut <- giro(saldo_rut)
                    FinSi
                    si n == "3"
                        x <- 2
                        n <- cuentaTrans(x)
                        si n == "1" entonces
                            saldo_rut, saldo_corriente <- trans(saldo_rut, saldo_corriente)
                        Sino n=="2"
                            saldo_rute, saldo_vista <- trans(saldo_rut, saldo_vista)
                        FinSi
                    FinSi
                    Escribir "Su saldo actual es de $", saldo_rut
                    z <- salir(z)
                FinSi
                si cuenta == "2"
                    escribir "Su saldo actual es de $", saldo_corriente
                    n <- seleccion()
                    si n == "1" entonces
                        ssaldo_corriente <- deposito(saldo_corriente)
                    Finsi
                    si n == "2"
                        saldo_corriente <- giro(saldo_corriente)
                    FinSi
                    si n == "3"
                        x <- 2
                        n <- cuentaTrans(x)
                        si n == "1" entonces
                            saldo_corriente, saldo_rut = trans(saldo_corriente, saldo_rut)
                        Sino n=="2"
                            saldo_corriente, saldo_vista = trans(saldo_corriente, saldo_vista)
                        FinSi
                    FinSi
                    Escribir "Su saldo actual es de $", saldo_vista
                    z <- salir(z)
                    si cuenta == "3"
                        escribir "Su saldo actual es de $", saldo_rut
                        n <- seleccion()
                        si n == "1" entonces
                            saldo_vista = deposito(saldo_vista)
                        Finsi
                        si n == "2"
                            saldo_vista = giro(saldo_vista)
                        FinSi
                        si n == "3"
                            x <- 2
                            n <- cuentaTrans(x)
                            si n == "1" entonces
                                saldo_vista, saldo_corriente = trans(saldo_vista, saldo_corriente)
                            Sino n=="2"
                                saldo_vista, saldo_rut = trans(saldo_vista, saldo_rut)
                            FinSi
                        FinSi
                        Escribir "Su saldo actual es de $", saldo_vista
                        z <- salir(z)
                    FinSi
                FinSi
            cont <- -1
            FinMientras
        Sino
            cont <- cont -1
            Escribir "Clave incorrecta - Intentos restantes ", cont
        FinSi
    FinMientras
    si cont == 0
        Escribir "Tarjeta bloqueada, Porfavor Acerquese a nuestras oficinas lo antes posible"
    FinSi
    si cont == -1
        Escribir "Gracias por preferir nuestros servicios!"
    FinSi
FinProceso


Código Fuente:

paswd = "1234" #esta es la contraseña 1234
saldo_rut = 0
saldo_corriente = 0
saldo_vista = 0

def deposito(x):
    n = int(input("Ingrese monto a depositar: "))
    x = x + n
    return x

def giro(x):
    n = int(input("Ingrese monto a girar: "))
    x = x - n
    return x

def trans(x,y):
    n = int(input("Ingrese monto a transferir: "))
    x = x - n
    y = y + n
    return x, y

def seleccion():
    print "Que desea hacer?"
    print "1 Deposito, 2 Giro, 3 Transferencia"
    n = raw_input()
    return n

def selec_cuenta():
    print "1 Cuenta Rut, 2 Cuenta Corriente, 3 Cuenta vista"
    n = raw_input()
    return n

def cuentaTrans(x):
    m = ""
    if x == 1:
        print "1 Cuenta Corriente, 2 Cuenta Vista"
        m = raw_input()
    if x == 2:
        print "1 Cuenta Rut, 2 Cuenta Vista"
        m = raw_input()
    if x == 3:
        print "Cuenta Corriente, 2 Cuenta Rut"
        m = raw_input()
    return m

def salir(x):
    print "Desea Otra Operacion"
    print "1 Si, 2 No"
    n = raw_input()
    if n == "1":
        x = True
        return x
    elif n == "2":
        x = False
        return x


cont = 3
while cont > 0:
    pas = raw_input("Ingrese su clave secreta: ")
    if paswd == pas:
        z = True
        while z == True:
            if saldo_rut < 0:
                print "Saldo negativo en Cuenta Rut, Saldo: $", saldo_rut
            if saldo_corriente < 0:
                print "Saldo negativo en Cuenta Corriente, Saldo: $", saldo_corriente
            if saldo_vista < 0:
                print "Saldo negativo en Cuenta Vista, Saldo: $", saldo_vista
            print "Seleccione una cuenta:"
            cuenta = selec_cuenta()  # Selecciona la cuenta
            #-------------------------Cuenta Rut-------------------------->
            if cuenta == "1":
                print "Su saldo actual es de $", saldo_rut
                n = seleccion()    # Elije deposito, Giro o Transferencia
                if n == "1":
                    saldo_rut = deposito(saldo_rut)      # Aqui deposita a la cuenta Rut
                elif n == "2":
                    saldo_rut = giro(saldo_rut)         # Aqui Hace un giro a la cuenta rut
                elif n == "3":
                    x = 1
                    n = cuentaTrans(x)  # Selecciona la cuenta a la cual quiere transferir
                    if n == "1":
                        saldo_rut, saldo_corriente = trans(saldo_rut, saldo_corriente)
                    elif n == "2":
                        saldo_rute, saldo_vista = trans(saldo_rut, saldo_vista)
                print "Su saldo actual es de $", saldo_rut
                z = salir(z)
            #------------------------- Fin Cuenta Rut----------------------------->
            #-------------------------Cuenta Corriente----------------------->
            elif cuenta == "2":
                print "Su saldo actual es de $", saldo_corriente
                n = seleccion()    # Elije deposito, Giro o Transferencia
                if n == "1":
                    saldo_corriente = deposito(saldo_corriente)   # Aqui deposita a la cuenta corritente
                elif n == "2":
                    saldo_corriente = giro(saldo_corriente)       # Aqui hace un giro a la cuenta corriente
                elif n == "3":
                    x = 2
                    n = cuentaTrans(x)   # Selecciona la cuenta a la cual quiere transferir
                    if n == "1":
                        saldo_corriente, saldo_rut = trans(saldo_corriente, saldo_rut)
                    elif n == "2":
                        saldo_corriente, saldo_vista = trans(saldo_corriente, saldo_vista)
                print "Su saldo actual es de $", saldo_corriente
                z = salir(z)
            #-------------------------Fin Cuenta Rut---------------------->
            #-------------------------Cuenta Vista------------------------>
            elif cuenta == "3":
                print "Su saldo actual es de $", saldo_vista
                n = seleccion()     # Elije deposito, Giro o Transferencia
                if n == "1":
                    saldo_vista = deposito(saldo_vista)   # Aqui deposita a la cuenta Vista
                elif n == "2":
                    saldo_vista = giro(saldo_vista)       # Aqui deposita a la cuenta Vista
                elif n == "3":
                    x = 3
                    n = cuentaTrans(x)  # Selecciona la cuenta a la cual quiere transferir
                    if n == "1":
                        saldo_vista, saldo_corriente = trans(saldo_vista, saldo_corriente)
                    elif n == "2":
                        saldo_vista, saldo_rut = trans(saldo_vista, saldo_rut)
                print "Su saldo actual es de $", saldo_vista
                z = salir(z)
        #-------------------------Fin Cuenta Rut--------------------->
        cont = -1
    else:
        cont -= 1
        print "Clave incorrecta - Intentos restantes ", cont

if cont == 0:
    print "Tarjeta bloqueada, Porfavor Acerquese a nuestras oficinas lo antes posible"

if cont == -1:
    print "Gracias por preferir nuestros servicios - Banco Pobre!"

Como vemos el cuerpo del código esta casi completamente dentro de un ciclo while, esto es para poder terminar el código y verificar si el usuario cerrara la sesión o bloqueo la tarjeta producto de ingresar muchas veces la contraseña incorrecta.


Un ejemplo del funcionamiento completo


De que me sirvió esta actividad

Principalmente me sirvió para comprender mejor el uso de las condiciones de pregunta como son los IF, manejar ciclos para mantener un tipo de seguridad en la parte de la contraseña y sobre todo a entender como funcionan y utilizan las funciones, comprendí el funcionamiento básico de lo que es la programación, ya que desde un comienzo no había logrado obtener la lógica de la programación, pero con este proyecto la desarrolle y trabaje, a demás me di cuenta de como funciona un sistema mirándolo desde adentro, como un programador y no como un usuario: Fue un gran aporte para mi conocimiento el realizar esta actividad ya que tuve que investigar por mi propia cuenta algunas funciones o formas de desarrollar una solución para los diversos problemas que se me iban presentando.

No hay comentarios:

Publicar un comentario