[Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d

Iniciado por 0x5d, 20 Mayo 2012, 09:43 AM

0 Miembros y 1 Visitante están viendo este tema.

0x5d

Hola, buen día a todos !

Hace un rato que no subo nada de nada  , últimamente ando programando cosas, pero nada subo a la red :'( , así que programé un "Gestor de pagos de cuentas".

Tiene sencillas opciones:

1.- Ver cuentas.
2.- Agregar/Editar una cuenta.
3.- Informar pago de cuenta.
4.- Ver cuentas pagadas.
5.- Calcular cuanto he pagado en cuentas.
6.- Eliminar una cuenta pagada.
7.- Salir.


Pasaré a explicar algunas:

La primera opción nos permitirá visualizar las cuentas que hayamos ingresado anteriormente con la opción 2.

La segunda opción nos permitirá agregar alguna cuenta que tengamos pendientes en pagar. Nos pedirá el nombre de la cuenta, cuanto es el monto a cancelar y la fecha en la que debemos pagar la cuenta. El programa cuando se inicia verifica todas las cuentas y nos avisa que cuenta vence el día en que se ejecute.

La tercera opción nos dará la posibilidad de informar que ya hemos pagado una cuenta pendiente. Al entrar en esta opción nos mostrará las cuentas que no se han pagado, nos pedirá el nombre de la cuenta que vamos a señalar que está pagada, luego preguntará ¿Pagada?(s/n) , luego nos dirá si queremos conservar el registro de que esa cuenta fue pagada, en caso de ser "s" luego tendremos acceso a esos datos desde el menú, de lo contrario se perderán.

La opción cuatro solo nos mostrará en pantalla las cuentas que hemos pagado.

Opción 5 hará un calculo total de cuanto dinero hemos utilizado en el pago de nuestras cuentas, recuerda que si en la opción 3 no señalaste guardar un registro aquí no se sumará dicho gasto.

Mientras que la opción 6 nos mostrará por pantalla las cuentas que ya hemos pagado, dándonos la posibilidad de eliminar uno de los registros.


Sin más preámbulos , el código:

Código (python) [Seleccionar]
#-*- coding: utf-8 -*-
import datetime, re, os, sys

def clear_screen():
os.system("cls") if(os.name=='nt') else os.system("clear")

if not os.path.isdir("cuentas"):
respuesta = raw_input("""
No están las carpetas necesarias para el correcto
Funcionamiento del programa
           ¿Desea crerlas? (s/n): """).lower()
if respuesta=="s":
try:
os.mkdir("cuentas")
os.mkdir("cuentas_pagadas")
raw_input("Se crearon los archivos necesarios, presiona una enter para ir al programa.")
except:
print "Error al crear los archivos necesarios."
sys.exit(1)
else:
print "No se instalará el programa."
sys.exit(1)
else:
pass
separar_fecha = str(datetime.datetime.now()).split(" ")[0]
parsear_fecha = separar_fecha.split("-")
fecha_normal = " %s/%s/%s"%(parsear_fecha[2], parsear_fecha[1], parsear_fecha[0])
clear_screen()
class cuentas:
def extraer_cuentas(self):
return os.listdir("cuentas/")

def verificar_fechas(self):
try:
for cuenta in self.extraer_cuentas():
ver_pagos = open("cuentas/%s"%cuenta,"r")
for dato, valor in re.findall("(.*):(.*)",ver_pagos.read()):
if "Vence" in dato:
if valor==fecha_normal:
print """
¡ALERTA!
La cuenta de %s vence hoy!
"""%cuenta.capitalize()
ver_pagos.close()
except:
print "No se encontraron cuentas"

def __init__(self):
self.verificar_fechas()

def ver_cuentas(self):
global todos_lospagos
todos_lospagos = []
try:
for ver_cuenta in self.extraer_cuentas():
ver_pagos = open("cuentas/%s"%ver_cuenta,"r")
todos_lospagos.append(ver_pagos.read()+"\n----")
ver_pagos.close()
return True
except:
return False

def agregar_pago(self, tipo, valor, fecha):
clear_screen()
try:
escribir_nuevo = open("cuentas/%s"%tipo,"w")
escribir_nuevo.write("""Tipo de cuenta  : %s
Monto a cancelar: %s
Vence el día    : %s
Estado          : No pagada"""%(tipo, valor, fecha))
escribir_nuevo.close()
return True
except:
return False

def cuenta_pagada(self, cuenta, estado, conservar):
if estado == "s":
if conservar == "s":
try:
cuenta_r = open("cuentas/%s"%cuenta,"r")
cuenta_w = open("cuentas_pagadas/%s"%cuenta,"w")
cuenta_w.write(cuenta_r.read().replace("No pagada", "Pagada"))
cuenta_w.close()
cuenta_r.close()
os.remove("cuentas/%s"%cuenta)
return True
except:
return False
else:
try:
os.remove("cuentas/%s"%cuenta)
return True
except:
return False
else:
return False

def dinero_encuentas(self):
try:
global suma
suma = 0
for h in os.listdir("cuentas_pagadas"):
for valor in re.findall("Monto a cancelar: (.*)",open("cuentas_pagadas/%s"%h,"r").read()):
suma+=int(valor)
return True
except:
return False

pago = cuentas()

while True:
print """
¡ Bienvenido al gestor de pago de cuentas !
La fecha de hoy es%s"""%fecha_normal
try:
opcion_principal = input("""
1.- Ver cuentas.
2.- Agregar/Editar una cuenta.
3.- Informar pago de cuenta.
4.- Ver cuentas pagadas.
5.- Calcular cuanto he pagado en cuentas.
6.- Eliminar una cuenta pagada.
7.- Salir.

Ingresa una opción: """)
if opcion_principal == 7:
break
elif opcion_principal == 1:
clear_screen()
if len(os.listdir("cuentas"))>0:
if pago.ver_cuentas():
pago.verificar_fechas()
print "Cuentas registradas:"
for out in todos_lospagos:
print out
else:
print "Error inesperado."
else:
print "No hay cuentas registradas."
elif opcion_principal == 2:
clear_screen()
print "Si la cuenta ya existe, será reescrita con nuevos datos."
try:
print "Rellene los siguientes campos por favor. Si desea volver al menú presione \"q\" y ENTER."
tipo_c = raw_input("Nombre de la cuenta: ").capitalize()
if tipo_c != "Q":
valor_c = raw_input("¿Cuanto debe pagar?: ")
fecha_pago = raw_input("Fecha de pago(dd/mm/aa):")
v_d = fecha_pago.split("/")
v_f = fecha_normal.split("/")
if len(v_d[0])==2 and len(v_d[1])==2 and len(v_d[2])==4:
if v_d[2]>v_f[2] or v_d[2]==v_f[2] and not v_d[1]<=v_f[1]:
if v_d[1] and v_f[1]:
if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
print "Se agregó la cuenta correctamente."
else:
print "No se pudo agregar la cuenta, intentalo de nuevo."
elif v_d[1]==v_f[1] and v_d[0]>=v_f[0]:
if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
print "Se agregó la cuenta correctamente."
else:
print "No se pudo agregar la cuenta, intentalo de nuevo."
else:
print "La fecha no es válida o ya pasó..."

else:
print "Fecha mal ingresada."
else:
clear_screen()
pass
except:
print "Ingrese datos válidos."

elif opcion_principal == 3:
clear_screen()
if len(os.listdir("cuentas"))>0:
print "Si usted decide no conservar registro de la cuenta, esta\nno será considerada en la opción 5"
print "\nCuentas aún no pagadas:\n------"
print "\n".join(os.listdir("cuentas"))
cuenta = raw_input("------\nCuenta:").capitalize()
estado = raw_input("¿Pagada?(s/n): ").lower()
conservar = raw_input("¿Conservar registro?(s/n): ").lower()
if pago.cuenta_pagada(cuenta, estado, conservar):
print "Realizado con éxito"
else:
print "Ocurrió un problema."
else:
print "No hay cuentas registradas."
elif opcion_principal == 4:
clear_screen()
if len(os.listdir("cuentas_pagadas"))>0:
try:
for h in os.listdir("cuentas_pagadas"):
print open("cuentas_pagadas/%s"%h,"r").read()
print "----"
except:
print "No se pueden ver las cuentas pagadas."
else:
print "No has pagado ni una cuenta aún."
elif opcion_principal == 5:
clear_screen()
if len(os.listdir("cuentas_pagadas"))>0:
if pago.dinero_encuentas():
print "El dinero que has pagado en cuentas es de:",suma
else:
print "No has pagado ni una cuenta aún."
elif opcion_principal == 6:
clear_screen()
cuentas_totales = os.listdir("cuentas_pagadas")
if len(cuentas_totales)>0:
print "Lista de las cuentas ya canceladas:"
for listar_cuentas in cuentas_totales:
print "* "+listar_cuentas
eliminar_cuenta = raw_input("¿Que cuenta ya cancelada desea eliminar?: ").capitalize()
if eliminar_cuenta in cuentas_totales:
try:
clear_screen()
os.remove("cuentas_pagadas/%s"%eliminar_cuenta)
print "Cuenta eliminada Correctamente"
except:
clear_screen()
print "No se pudo eliminar la cuenta."
else:
clear_screen()
print "No existe la cuenta solicitada."
else:
print "No hay cuentas pagadas."
except:
print "La opción ingresada no es un número."


Fuente: http://rootcodes.com/pythongestor-de-pago-de-cuentas/

Saludos, Javier.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

Eleкtro

[OFFTOPIC]

Es la primera vez que veo un menú indentado a propósito, Resulta original y curioso de ver xD
La idea de la aplicación también es muy original para tratarse de un script.

[/OFFTOPIC]

Salu2








Runex

No he tenido tiempo de ejecutarlo, pero según el source, únicamente se permite ingresar años iguales o superiores a 2012, así que, ¿que pasa si tengo una cuenta a deber desde 1999? xD.

Bueno es :), Un saludo, Runex.
"No renunciaría al bambú.
Nunca renuciaría a ti.
No te compares con otros" "El me dijo:
El bambú tenía un propósito diferente al del
helecho, sin embargo eran necesarios y
hacían del bosque un lugar hermoso".

0x5d

Cita de: Runex en 20 Mayo 2012, 18:16 PM
No he tenido tiempo de ejecutarlo, pero según el source, únicamente se permite ingresar años iguales o superiores a 2012, así que, ¿que pasa si tengo una cuenta a deber desde 1999? xD.

Bueno es :), Un saludo, Runex.
Jajaja me la batallé como 3 horas con eso de las fechas, se supone que son cuentas tipo: Cuenta de la Luz
Para organizar los pagos y cosas en un futuro, mensualmente.


Saludos.
¡ SIGUEME EN TWITTER -> @JavierEsteban__ !

BatchianoISpyxolo

Puede que desees aprender a programar desde 0: www.espascal.es

0x5d

¡ SIGUEME EN TWITTER -> @JavierEsteban__ !