Advertisement
Guest User

Untitled

a guest
May 27th, 2015
222
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 7.78 KB | None | 0 0
  1. #Se guarda en csv solo si se sale desde el menu con 'q'
  2.  
  3. import csv
  4.  
  5. def abrir_archivo_materia(csv_materias):
  6.     '''Abre el archivo de materias y lo lee, devuelve los codigos de las materias y sus datos (correlativas, nombre, creditos).'''
  7.     diccionario_codigos={}
  8.     mi_archivo=open(csv_materias,'r')
  9.     diccionario_materias=csv.DictReader(mi_archivo)
  10.     for diccionario in diccionario_materias:
  11.         codigo = diccionario['codigo']
  12.         diccionario.pop('codigo')
  13.         diccionario_codigos[codigo] = tuple(diccionario.values()) #{codigo:(correlativas,nombre,creditos)}
  14.     return diccionario_codigos
  15.     mi_archivo.close()
  16.  
  17. def abrir_archivo_aprobadas():
  18.     '''Intenta abrir el archivo de materias aprobadas, y devuelve su contenido. Si no existe, inicializa el listado de materias aprobadas.'''
  19.     try:
  20.         lista_aprobadas=[]
  21.         aprobadas_r=open('aprobadas.csv','r')
  22.         leer_aprobadas=csv.reader(aprobadas_r)
  23.         for lista in leer_aprobadas:
  24.             lista_aprobadas.append(lista)
  25.         return lista_aprobadas[1:]
  26.         aprobadas_r.close()
  27.     except IOError:
  28.         return []
  29.  
  30. def escribir_csv_aprobadas(lista_aprobadas):
  31.     '''Recibe las materias aprobadas y guarda su codigo en el archivo aprobadas.csv bajo el encabezado "codigo"'''
  32.     encabezado=['codigo']
  33.     aprobadas_w=open('aprobadas.csv','w')
  34.     escribir_aprobadas=csv.writer(aprobadas_w)
  35.     if lista_aprobadas[0]!=encabezado:
  36.         lista_aprobadas.insert(0,encabezado)
  37.     for codigo in lista_aprobadas:
  38.         escribir_aprobadas.writerow(codigo)
  39.     aprobadas_w.close()
  40.  
  41. def marcar_como_aprobada(diccionario_codigos,lista_aprobadas,lista_habilitadas):
  42.     '''Pide el codigo de una materia, valida que exista (si no vuelve al menu),
  43.     pide confirmacion mostrando el nombre (si no vuelve al menu) y la aniade a la lista de aprobadas si ya se aprobaron las correlativas.'''
  44.     ingreso_codigo=raw_input('Ingrese el codigo de la materia: ')
  45.     if ingreso_codigo in diccionario_codigos:
  46.         if ingreso_codigo in lista_habilitadas:
  47.             nombre_materia=diccionario_codigos[ingreso_codigo][1]
  48.             print '\n>>>>>>> '+ingreso_codigo+' - '+nombre_materia+'\n'
  49.             if not [ingreso_codigo] in lista_aprobadas:
  50.                 confirmacion=raw_input('Marcar materia como aprobada?[s/n]: ')
  51.                 if confirmacion=='s':
  52.                     lista_aprobadas.append([ingreso_codigo])
  53.                     print '\n>>>>>>> Registraste satisfactoriamente la materia como aprobada.\n'
  54.                 elif confirmacion=='n':
  55.                     pass
  56.                 else:
  57.                     print '\n>>>>>>> Ingrese <s> para confirmar o <n> para volver al menu.\n'  
  58.             else:
  59.                 print '\n>>>>>>> Ya aprobaste esta materia!\n'
  60.         else:
  61.             print '\n>>>>>>> No es posible marcarla como aprobada ya que hay correlativas sin aprobar.\n'
  62.     else:
  63.         print '\n>>>>>>> Su ingreso no corresponde al codigo de una materia, intente otra vez.\n'
  64.     return lista_aprobadas
  65.  
  66. def ver_aprobadas_y_creditos(diccionario_codigos,lista_aprobadas):
  67.     '''Muestra el codigo, nombre y creditos de todas las materias marcadas como aprobadas. Al final muestra el total de creditos sumados.'''
  68.     total_creditos=0
  69.     if len(lista_aprobadas)==0:
  70.         print '\n>>>>>>> No aprobaste ninguna materia.\n'
  71.     else:
  72.         for lista_materia in lista_aprobadas:
  73.             for str_materia in lista_materia:
  74.                 nombre_materia=diccionario_codigos[str_materia][1]
  75.                 creditos=int(diccionario_codigos[str_materia][2])
  76.                 total_creditos+=creditos
  77.                 print '>>>>>>> '+str_materia+' - '+nombre_materia+'     '+str(creditos)+'c'
  78.         print '>>>>>>> ----------------------------\n>>>>>>> Total creditos: '+str(total_creditos)
  79.  
  80. def materias_habilitadas(diccionario_codigos,lista_aprobadas):
  81.     '''Devuelve las materias habilitadas para cursar'''
  82.     lista_str_aprobadas=[]
  83.     lista_habilitadas=[]
  84.     for lista in lista_aprobadas:
  85.         str_aprobadas=''.join(lista)
  86.         lista_str_aprobadas.append(str_aprobadas)
  87.     for codigo in diccionario_codigos:
  88.         correlativas_aprobadas=0
  89.         lista_correlativas=diccionario_codigos[codigo][0].split('-')
  90.         numero_correlativas=len(lista_correlativas)
  91.         for n in range (numero_correlativas):
  92.             if lista_correlativas[n] in lista_str_aprobadas:
  93.                 correlativas_aprobadas+=1
  94.             else:
  95.                 break
  96.         if correlativas_aprobadas==numero_correlativas or lista_correlativas==['']:
  97.             lista_habilitadas.append(codigo)
  98.     return lista_habilitadas
  99.  
  100. def print_materias_habilitadas(diccionario_codigos,lista_habilitadas):
  101.     '''Imprime el codigo, nombre y creditos de todas las materias habilitadas para cursar.
  102.     Es decir, todas las materias cuyas correlativas estan aprobadas.'''
  103.     print '\n>>>>>>> Materias habilitadas para cursar:\n'
  104.     for codigo in lista_habilitadas:
  105.         nombre_materia=diccionario_codigos[codigo][1]
  106.         creditos=diccionario_codigos[codigo][2]
  107.         print '>>>>>>> '+codigo+' - '+nombre_materia+'     '+creditos+'c'
  108.  
  109.  
  110. def ver_informacion_materia(diccionario_codigos,lista_aprobadas):
  111.     '''Pide el codigo de una materia, y luego muesta el codigo, nombre y creditos de la misma.
  112.     Tambien muestra si esta aprobada o no, lista las materias correlativas y muestra cuales de ellas estan aprobadas y cuales no.'''
  113.     ingreso_codigo=raw_input('Ingrese el codigo de la materia: ')
  114.     if ingreso_codigo in diccionario_codigos:
  115.         nombre_materia=diccionario_codigos[ingreso_codigo][1]
  116.         lista_correlativas=diccionario_codigos[ingreso_codigo][0].split('-')
  117.         print lista_correlativas
  118.         creditos=diccionario_codigos[ingreso_codigo][2]
  119.         if [ingreso_codigo] in lista_aprobadas:
  120.             estado_materia='Si'
  121.         else:
  122.             estado_materia='No'
  123.         print '\n>>>>>>> '+ingreso_codigo+' - '+nombre_materia+'\n>>>>>>> Creditos: '+creditos+'\n\nAprobada: '+estado_materia+'\n\n>>>>>>> Correlativas:'
  124.         for correlativa in lista_correlativas:
  125.             if correlativa=='':
  126.                 print 'No tiene correlativas'
  127.                 continue
  128.             if [correlativa] in lista_aprobadas:
  129.                 estado_correlativa='(Aprobada)'
  130.             else:
  131.                 estado_correlativa='(No aprobada)'
  132.             nombre_correlativa=diccionario_codigos[correlativa][1]
  133.             creditos_correlativa=diccionario_codigos[correlativa][2]
  134.             print '\n>>>>>>> '+correlativa+' - '+nombre_correlativa+'\n>>>>>>> '+creditos_correlativa+'c    - '+estado_correlativa
  135.         return
  136.     else:
  137.         print '\n>>>>>>> Su ingreso no corresponde al codigo de una materia, intente otra vez.\n'
  138.         return
  139.  
  140.  
  141.  
  142. def main():
  143.     '''Ejecuta las funciones principales del programa a traves de un menu interactivo, maneja los errores en las funciones
  144.     que manejan archivos'''
  145.     try:
  146.         diccionario_codigos=abrir_archivo_materia('materias.csv')
  147.     except IOError:
  148.         print "\n>>>>>>> Hubo un problema al intentar abrir o cerrar el archivo de materias.\n"
  149.         return
  150.     lista_aprobadas=abrir_archivo_aprobadas()
  151.     opcion=''
  152.     while opcion!='q':
  153.         opcion=raw_input('\nBienvenido a Fiuba Companion\nIngrese la letra deseada indicada en el menu de opciones y oprima enter\n\nQue desea hacer?\n\n(a): Marcar una materia como aprobada\n\n(b): Ver las materias aprobadas y la cantidad de creditos\n\n(c): Ver las materias habilitadas para cursar\n\n(d): Ver la informacion detallada de una materia\n\n(q): Guardar y salir\n').lower()
  154.         if opcion=='a':
  155.             lista_habilitadas=materias_habilitadas(diccionario_codigos,lista_aprobadas)
  156.             lista_aprobadas=marcar_como_aprobada(diccionario_codigos,lista_aprobadas,lista_habilitadas)
  157.             continue
  158.         elif opcion=='b':
  159.             ver_aprobadas_y_creditos(diccionario_codigos,lista_aprobadas)
  160.             continue
  161.         elif opcion=='c':
  162.             lista_habilitadas=materias_habilitadas(diccionario_codigos,lista_aprobadas)
  163.             print_materias_habilitadas(diccionario_codigos,lista_habilitadas)
  164.             continue
  165.         elif opcion=='d':
  166.             ver_informacion_materia(diccionario_codigos,lista_aprobadas)
  167.             continue
  168.         elif opcion=='q':
  169.             continue
  170.         else:
  171.             print '\n>>>>>>> Ingrese una letra que corresponda a una opcion\n' 
  172.             continue
  173.     if lista_aprobadas!=[]:
  174.         try:
  175.             prueba=escribir_csv_aprobadas(lista_aprobadas)
  176.         except IOError:
  177.             print '\n>>>>>>>Ocurrio un error al crear o cerrar el archivo csv de materias aprobadas.\n'
  178.     print '\n>>>>>>> Ha salido de Fiuba Companion.'
  179.  
  180. main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement