Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: 0x5d en 20 Mayo 2012, 09:43 am



Título: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: 0x5d en 20 Mayo 2012, 09:43 am
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:
(http://rootcodes.com/imagenes/Pantallazo-Terminal.png)
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
  1. #-*- coding: utf-8 -*-
  2. import datetime, re, os, sys
  3.  
  4. def clear_screen():
  5. os.system("cls") if(os.name=='nt') else os.system("clear")
  6.  
  7. if not os.path.isdir("cuentas"):
  8. respuesta = raw_input("""
  9. No están las carpetas necesarias para el correcto
  10. Funcionamiento del programa
  11.           ¿Desea crerlas? (s/n): """).lower()
  12. if respuesta=="s":
  13. try:
  14. os.mkdir("cuentas")
  15. os.mkdir("cuentas_pagadas")
  16. raw_input("Se crearon los archivos necesarios, presiona una enter para ir al programa.")
  17. except:
  18. print "Error al crear los archivos necesarios."
  19. sys.exit(1)
  20. else:
  21. print "No se instalará el programa."
  22. sys.exit(1)
  23. else:
  24. pass
  25. separar_fecha = str(datetime.datetime.now()).split(" ")[0]
  26. parsear_fecha = separar_fecha.split("-")
  27. fecha_normal = " %s/%s/%s"%(parsear_fecha[2], parsear_fecha[1], parsear_fecha[0])
  28. clear_screen()
  29. class cuentas:
  30. def extraer_cuentas(self):
  31. return os.listdir("cuentas/")
  32.  
  33. def verificar_fechas(self):
  34. try:
  35. for cuenta in self.extraer_cuentas():
  36. ver_pagos = open("cuentas/%s"%cuenta,"r")
  37. for dato, valor in re.findall("(.*):(.*)",ver_pagos.read()):
  38. if "Vence" in dato:
  39. if valor==fecha_normal:
  40. print """
  41. ¡ALERTA!
  42. La cuenta de %s vence hoy!
  43. """%cuenta.capitalize()
  44. ver_pagos.close()
  45. except:
  46. print "No se encontraron cuentas"
  47.  
  48. def __init__(self):
  49. self.verificar_fechas()
  50.  
  51. def ver_cuentas(self):
  52. global todos_lospagos
  53. todos_lospagos = []
  54. try:
  55. for ver_cuenta in self.extraer_cuentas():
  56. ver_pagos = open("cuentas/%s"%ver_cuenta,"r")
  57. todos_lospagos.append(ver_pagos.read()+"\n----")
  58. ver_pagos.close()
  59. return True
  60. except:
  61. return False
  62.  
  63. def agregar_pago(self, tipo, valor, fecha):
  64. clear_screen()
  65. try:
  66. escribir_nuevo = open("cuentas/%s"%tipo,"w")
  67. escribir_nuevo.write("""Tipo de cuenta  : %s
  68. Monto a cancelar: %s
  69. Vence el día    : %s
  70. Estado          : No pagada"""%(tipo, valor, fecha))
  71. escribir_nuevo.close()
  72. return True
  73. except:
  74. return False
  75.  
  76. def cuenta_pagada(self, cuenta, estado, conservar):
  77. if estado == "s":
  78. if conservar == "s":
  79. try:
  80. cuenta_r = open("cuentas/%s"%cuenta,"r")
  81. cuenta_w = open("cuentas_pagadas/%s"%cuenta,"w")
  82. cuenta_w.write(cuenta_r.read().replace("No pagada", "Pagada"))
  83. cuenta_w.close()
  84. cuenta_r.close()
  85. os.remove("cuentas/%s"%cuenta)
  86. return True
  87. except:
  88. return False
  89. else:
  90. try:
  91. os.remove("cuentas/%s"%cuenta)
  92. return True
  93. except:
  94. return False
  95. else:
  96. return False
  97.  
  98. def dinero_encuentas(self):
  99. try:
  100. global suma
  101. suma = 0
  102. for h in os.listdir("cuentas_pagadas"):
  103. for valor in re.findall("Monto a cancelar: (.*)",open("cuentas_pagadas/%s"%h,"r").read()):
  104. suma+=int(valor)
  105. return True
  106. except:
  107. return False
  108.  
  109. pago = cuentas()
  110.  
  111. while True:
  112. print """
  113. ¡ Bienvenido al gestor de pago de cuentas !
  114. La fecha de hoy es%s"""%fecha_normal
  115. try:
  116. opcion_principal = input("""
  117. 1.- Ver cuentas.
  118. 2.- Agregar/Editar una cuenta.
  119. 3.- Informar pago de cuenta.
  120. 4.- Ver cuentas pagadas.
  121. 5.- Calcular cuanto he pagado en cuentas.
  122. 6.- Eliminar una cuenta pagada.
  123. 7.- Salir.
  124.  
  125. Ingresa una opción: """)
  126. if opcion_principal == 7:
  127. break
  128. elif opcion_principal == 1:
  129. clear_screen()
  130. if len(os.listdir("cuentas"))>0:
  131. if pago.ver_cuentas():
  132. pago.verificar_fechas()
  133. print "Cuentas registradas:"
  134. for out in todos_lospagos:
  135. print out
  136. else:
  137. print "Error inesperado."
  138. else:
  139. print "No hay cuentas registradas."
  140. elif opcion_principal == 2:
  141. clear_screen()
  142. print "Si la cuenta ya existe, será reescrita con nuevos datos."
  143. try:
  144. print "Rellene los siguientes campos por favor. Si desea volver al menú presione \"q\" y ENTER."
  145. tipo_c = raw_input("Nombre de la cuenta: ").capitalize()
  146. if tipo_c != "Q":
  147. valor_c = raw_input("¿Cuanto debe pagar?: ")
  148. fecha_pago = raw_input("Fecha de pago(dd/mm/aa):")
  149. v_d = fecha_pago.split("/")
  150. v_f = fecha_normal.split("/")
  151. if len(v_d[0])==2 and len(v_d[1])==2 and len(v_d[2])==4:
  152. if v_d[2]>v_f[2] or v_d[2]==v_f[2] and not v_d[1]<=v_f[1]:
  153. if v_d[1] and v_f[1]:
  154. if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
  155. print "Se agregó la cuenta correctamente."
  156. else:
  157. print "No se pudo agregar la cuenta, intentalo de nuevo."
  158. elif v_d[1]==v_f[1] and v_d[0]>=v_f[0]:
  159. if pago.agregar_pago(tipo_c, valor_c, fecha_pago):
  160. print "Se agregó la cuenta correctamente."
  161. else:
  162. print "No se pudo agregar la cuenta, intentalo de nuevo."
  163. else:
  164. print "La fecha no es válida o ya pasó..."
  165.  
  166. else:
  167. print "Fecha mal ingresada."
  168. else:
  169. clear_screen()
  170. pass
  171. except:
  172. print "Ingrese datos válidos."
  173.  
  174. elif opcion_principal == 3:
  175. clear_screen()
  176. if len(os.listdir("cuentas"))>0:
  177. print "Si usted decide no conservar registro de la cuenta, esta\nno será considerada en la opción 5"
  178. print "\nCuentas aún no pagadas:\n------"
  179. print "\n".join(os.listdir("cuentas"))
  180. cuenta = raw_input("------\nCuenta:").capitalize()
  181. estado = raw_input("¿Pagada?(s/n): ").lower()
  182. conservar = raw_input("¿Conservar registro?(s/n): ").lower()
  183. if pago.cuenta_pagada(cuenta, estado, conservar):
  184. print "Realizado con éxito"
  185. else:
  186. print "Ocurrió un problema."
  187. else:
  188. print "No hay cuentas registradas."
  189. elif opcion_principal == 4:
  190. clear_screen()
  191. if len(os.listdir("cuentas_pagadas"))>0:
  192. try:
  193. for h in os.listdir("cuentas_pagadas"):
  194. print open("cuentas_pagadas/%s"%h,"r").read()
  195. print "----"
  196. except:
  197. print "No se pueden ver las cuentas pagadas."
  198. else:
  199. print "No has pagado ni una cuenta aún."
  200. elif opcion_principal == 5:
  201. clear_screen()
  202. if len(os.listdir("cuentas_pagadas"))>0:
  203. if pago.dinero_encuentas():
  204. print "El dinero que has pagado en cuentas es de:",suma
  205. else:
  206. print "No has pagado ni una cuenta aún."
  207. elif opcion_principal == 6:
  208. clear_screen()
  209. cuentas_totales = os.listdir("cuentas_pagadas")
  210. if len(cuentas_totales)>0:
  211. print "Lista de las cuentas ya canceladas:"
  212. for listar_cuentas in cuentas_totales:
  213. print "* "+listar_cuentas
  214. eliminar_cuenta = raw_input("¿Que cuenta ya cancelada desea eliminar?: ").capitalize()
  215. if eliminar_cuenta in cuentas_totales:
  216. try:
  217. clear_screen()
  218. os.remove("cuentas_pagadas/%s"%eliminar_cuenta)
  219. print "Cuenta eliminada Correctamente"
  220. except:
  221. clear_screen()
  222. print "No se pudo eliminar la cuenta."
  223. else:
  224. clear_screen()
  225. print "No existe la cuenta solicitada."
  226. else:
  227. print "No hay cuentas pagadas."
  228. except:
  229. print "La opción ingresada no es un número."
  230.  

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

Saludos, Javier.


Título: Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: Eleкtro en 20 Mayo 2012, 10:31 am
[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


Título: Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: 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.


Título: Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: 0x5d en 20 Mayo 2012, 21:04 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.


Título: Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: BatchianoISpyxolo en 20 Mayo 2012, 21:09 pm
Un TAD Fecha xD


Título: Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
Publicado por: 0x5d en 21 Mayo 2012, 01:18 am
Un TAD Fecha xD
Qué es un TAD ?