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
#-*- 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.