Created
November 2, 2018 05:53
-
-
Save variux/72375b16fac4f9d12300b8c1091fee7b to your computer and use it in GitHub Desktop.
cajero con tkinter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# ------- Bibliotecas | |
import random | |
import time | |
from tkinter import * | |
PASSWORD = '' | |
def getpwd(): | |
global PASSWORD | |
root = Tk() | |
pwdbox = Entry(root, show = '*') | |
def onokclick(): | |
global PASSWORD | |
PASSWORD = pwdbox.get() | |
root.destroy() | |
Label(root, text = 'Ingrese su contraseña').pack(side = 'top') | |
pwdbox.pack(side = 'top') | |
button = Button(root, command=onokclick, text = 'Ingresar') | |
button.pack(side = 'top') | |
windowWidth = root.winfo_reqwidth() | |
windowHeight = root.winfo_reqheight() | |
positionRight = int(root.winfo_screenwidth()/2 - windowWidth/2) | |
positionDown = int(root.winfo_screenheight()/2 - windowHeight/2) | |
root.geometry("+{}+{}".format(positionRight, positionDown)) | |
root.title("Sistema de seguridad") | |
root.update() | |
root.mainloop() | |
return PASSWORD | |
# ---------------------------------- 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 = getpwd() | |
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 = getpwd() #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 = getpwd() #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 = getpwd() | |
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
Me podrias explicar lo del getpass o facilitarme con la contraseña