elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d  (Leído 3,453 veces)
0x5d

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
[Código-Python]Gestor de pago de cuentas - JaAViEr|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:

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.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.878



Ver Perfil
Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
« Respuesta #1 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


En línea



Runex

Desconectado Desconectado

Mensajes: 192


http://tutogramacion.blogspot.com


Ver Perfil WWW
Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
« Respuesta #2 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.
En línea

"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

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
« Respuesta #3 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.
En línea

BatchianoISpyxolo

Desconectado Desconectado

Mensajes: 166


Ver Perfil
Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
« Respuesta #4 en: 20 Mayo 2012, 21:09 pm »

Un TAD Fecha xD
En línea

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

Desconectado Desconectado

Mensajes: 241



Ver Perfil WWW
Re: [Código-Python]Gestor de pago de cuentas - JaAViEr|0x5d
« Respuesta #5 en: 21 Mayo 2012, 01:18 am »

Un TAD Fecha xD
Qué es un TAD ?
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python]Localizador IP - JaAViEr(0x5d)
Scripting
0x5d 2 3,585 Último mensaje 30 Diciembre 2011, 15:11 pm
por Novlucker
[Código-Python-Android]Calculadora por secuencia - JaAViEr(0x5d)
Scripting
0x5d 0 3,367 Último mensaje 27 Diciembre 2011, 02:22 am
por 0x5d
[Código-Python]Cliente FTP V2 - JaAViEr | 0x5d
Scripting
0x5d 5 3,648 Último mensaje 4 Mayo 2012, 17:25 pm
por 0x5d
[Proyecto-Python]Navegar por consola en foros SMF - JaAViEr (0x5d)
Scripting
0x5d 2 2,682 Último mensaje 8 Diciembre 2012, 23:06 pm
por 0x5d
[Código-Python]Sucesión Fibonacci - Versión Reducida - JaAViEr (0x5d)
Scripting
0x5d 0 2,219 Último mensaje 10 Enero 2013, 22:47 pm
por 0x5d
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines