Skip to content

Instantly share code, notes, and snippets.

@variux
Created November 2, 2018 03:41
Show Gist options
  • Save variux/821438e244bd49db119df655d2682569 to your computer and use it in GitHub Desktop.
Save variux/821438e244bd49db119df655d2682569 to your computer and use it in GitHub Desktop.
proyecto.py
# ------- Bibliotecas
import random
import time
# ---------------------------------- Funciones ----------------------------------
# ----- Uso de contraseña
def acceso(contrasena,pswd):
clave = contrasena
intento=0
while clave != pswd and intento<2:
print("Contraseña incorrecta. Tiene",2-intento,"restantes")
clave = input("Ingrese su contraseña nuevamente: ")
intento = intento + 1
if clave == pswd:
print()
print(" > Acceso Habilitado < ".center(60))
return True
elif clave != pswd and intento>=2:
print()
print(">Acceso Denegado<".center(60))
return False
# ----- Ingreso y validación de billetes
def corregir(cant):
pregunta = True
while pregunta:
if not cant.isnumeric():
print("No es posible ingresar este dato. Reingresar cantidad")
cant = input()
else:
cantN = float(cant)
while cantN%1 != 0:
cant = input("No es posible ingresar dato. Reintentar cantidad")
cantN = float(cant)
cantF = int(cant)
return cantF
def ingresoBilletes():
print()
print("Favor ingresar la cantidad de billetes por denominación (colones): ")
mil = input("1000: ")
milC = corregir(mil)
dos = input("2000: ")
dosC = corregir(dos)
cinco = input("5000: ")
cincoC = corregir(cinco)
diez = input("10000: ")
diezC = corregir(diez)
veinte = input("20000: ")
veinteC = corregir(veinte)
#Cantidad por denominación
kmil = 1000 * milC
kdos = 2000 * dosC
kcinco = 5000 * cincoC
kdiez = 10000 * diezC
kveinte = 20000 * veinteC
print("Total por denominación:")
print("1000: ",kmil)
print("2000: ",kdos)
print("5000: ",kcinco)
print("10000: ",kdiez)
print("20000: ",kveinte)
totalCaja = kmil + kdos + kcinco + kdiez + kveinte
print("Total de dinero ingresado: ", totalCaja)
return (milC, dosC, cincoC, diezC, veinteC, totalCaja)
# ---- Revisión de usuario
def registro(login):
pswd = 0
for i in range(len(login)):
if login[i].isupper() or login[i] == " ":
return(0)
else:
pswd = pswd + ord(login[i])
pWord = str(pswd)
return(pWord)
# ---- Definir si es posible generar la transacción (por cantidad ingresada)
def transaccion(x,totalCaja):
if x >= 1000:
if x//1000 and x%1000 == 0 and x<=totalCaja:
print("Dividido entre mil cierto")
return(True,x//1000)
else:
return (False,0)
else:
return (False,0)
# ---------------------------------- Funcionamiento de Cajero ----------------------------------
# ------- Variables
cajero = True # Para una ciclado del funcionamiento
estado = True # Estado inicial de cajero: cerrado
#Denominación de billetes (cantidad inicial)
b1 = 0 #1000
b2 = 0 #2000
b5 = 0 #5000
b10 = 0 #10000
b20 = 0 #20000
tCajero = 0 # total en cajero
# Si hay billetes (corresponde numero)
h_1 = 1 #"hay de 1000"
h_2 = 2
h_5 = 5
h_10 = 10
h_20 = 20
atend = 0 # Usuarios Atendidos
nAtend = 0 # Usuarios No Atendidos
div = "-" #Esto es un divisor (print)
divisor = div.center(60,"-")
# ------- Función del cajero
while cajero:
print()
print(divisor)
print()
print("Cooperativa Intelligent Engineering (CIE)".center(60)) # Se genera bienvenida
print("Servicio de cajero automático (ATM)".center(60))
print()
print("Bienvenido".center(60))
print()
fecha = "Fecha" + time.strftime("\t%d/%m/%y")
hora = "Hora " + time.strftime("%H:%M")
print(fecha.center(60))
print(hora.center(60))
print()
print()
print()
print(" > Ingrese 'C' para acceder como Cliente < ".center(60)) # Se indica qué ingresar para acceder por tipo de usuario (cliente o administrador)
print()
print(" > Ingrese 'A' para acceder como Administrador < ".center(60))
print()
print(divisor)
print()
solicit = input() # Ingreso del tipo de cliente
user = solicit.lower() # Se pasa todo a lower
print()
while user != "a" and user != "c": # Se pregunta en caso que no sea ninguno de los 2 hasta que pueda acceder a alguno
print ("Valor inválido. Ingrese 'C' para Cliente o 'A' para Administrador:" )
solicit = input()
user = solicit.lower()
print()
# Si es Administrador ----------------------------------------------------------------------------------------------------------------------
if user =="a":
print(divisor)
print()
print("Usted ha ingresado como: Administrador".center(60))
print()
print()
print("Ingrese 'A' para abrir el cajero".center(60))
print()
print("Ingrese 'C' para cerrar el cajero".center(60))
print()
print()
print("Ingrese 'R' para regresar".center(60))
print()
print(divisor)
print()
accion = input()
admi = accion.lower()
clavEsp = "2018/11/02" # clave de acceso designada para usuario (significa 2018/11/02, pero los "/" se sustituyen por "7")
while admi != "a" and admi != "c" and admi != "r":
print("Entrada inválida".center(60))
print(" A : Abrir ".center(60))
print(" C : Cerrar ".center(60))
print(" R : Regresar ".center(60))
accion = input()
admi = accion.lower()
# Abierto
if estado == False and admi == "a": # En caso que el estado sea cerrado (recordar que estado es abierto = True, cerrado = False)
clave = input("Ingrese su clave de acceso: ") #Ingresa clave de acceso
if acceso (clave,clavEsp): # Se evalúa si True or False (3 intentos en función)
b1,b2,b5,b10,b20,tCajero = ingresoBilletes()
print()
print(" > Cajero Abierto < ".center(60))
estado = True # Cambio estado
hAbre = time.strftime("%H:%M") # hora apertura cajero
else:
print()
print(" > Cajero Bloqueado < ".center(60)) # Si pierde las 3 chances: cierra/bloquea cajero
cajero == False
elif estado == True and admi == "a":
print()
print("El cajero se encuentra abierto".center(60))
# Cerrado
elif estado == True and admi == "c":
clave = input("Ingrese su clave de acceso: ") #Ingresa clave de acceso
if acceso (clave,clavEsp): # Se evalúa si True or False (3 intentos en función)
print()
print(" > Cajero cerrado < ".center(60))
estado = False # Cambio estado
hCierre = time.strftime("%H:%M") # Hora de cerrado
cajero = False
else:
print()
print(" > Cajero se mantiene abierto < ".center(60)) # luego 3 intentos: mantiene cajero abierto
elif estado == False and admi == "c":
print()
print("El cajero se encuentra cerrado".center(60))
# Si es cliente ---------------------------------------------------------------------------------------------------------------------------
if user == "c":
if estado: # Si el cajero está abierto
print(divisor)
print()
print("Usted ha ingresado como: Cliente".center(60))
print()
print()
userName = input("Ingrese su usuario: ")
print()
while registro(userName) == 0 or userName != userName.lower():
print("No exiten coincidencias")
print()
userN=input("Ingrese su usuario nuevamente: ")
print()
claUser = input("Digite su clave: ")
if acceso(claUser,registro(userName)) == False:
print ()
print("No es posible ingresar al sistema")
else:
saldo = random.randrange(1000,10000000)
print()
print()
t_Retiro = 0 # La cuenta del total retirado (en caso q lo haga múltiples veces
retiro = True #
cuenta = saldo
while retiro: # para conservar el usuario
transac=0
print("El monto actual en su cuenta es de: ", cuenta)
print()
print("Ingrese el monto en colones a retirar: ")
kdinero = float(input())
permiso, monto = transaccion(kdinero,tCajero)
if permiso:
t_Retiro = t_Retiro + transac
cuenta = saldo - transac
else:
print("No es posible realizar la transacción con el monto definido")
print()
continuar = input("¿Desea realizar un nuevo retiro? s/n ") # Se pregunta por nuevo retiro
cont=continuar.lower()
print()
while cont != 'n' or cont != 's': # Se pregunta
continuar = input("Entrada inválida, s/n ")
cont=continuar.lower()
print()
if cont == 'n':
factura = input("¿Desea generar una factura? s/n ") # Si se desea una factura (es opcional para cada usuario)
fact = factura.lower()
print()
while fact != "s" or fact != "n" and t_Retiro > 0:
factura = input("Entrada inválida, s/n ")
fact = factura.lower()
print()
if fact == 's':
#Generar función factura
#Como todavia no la ha generado le ponemos un "pass" si no da error
pass
retiro = False
else: # Si el cajero está cerrado : notifica
print(divisor)
print()
print ("El cajero no se encuentra disponible en este".center(60))
print ("momento para realizar transacciones. Por favor,".center(60))
print("inténtelo más tarde, disculpe la molestia".center(60))
print()
print(divisor)
## NOTA
#verificar el getpass
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment