def eliminar(): # Carga en memoria en la variable listado_alumnos todo el contenido del archivo json donde se guardan los datos del programa. listado_alumnos = leer_datos_json.get_lista_alumnos() while True: carnet = input("Ingrese el carnet del alumno a eliminar: ").upper() if (not es_carnet_valido(carnet)): print("Carnet Invalido - Respetar formato AB12345") elif (buscar_alumno.indice_alumno(carnet, listado_alumnos) == -1): print( "\nEl carnet ingresado no existe. Debe registrar al alumno.\nPuede registrarlo seleccionando la opcion en el menu." ) return # Regresar al menu principal else: break # Elimina de la List de Dicts alumno el alumno ubicado en la posicion devuelta por la funcion indice_alumno listado_alumnos.pop(buscar_alumno.indice_alumno(carnet, listado_alumnos)) # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se elimino el alumno. with open("datos-alumnos.json", "w") as salida: json.dump(listado_alumnos, salida) print("*" * caracteres_decorativos) print("Alumno eliminado con exito.") return
def imprimir_alumno(): while True: carnet = input("Ingrese el carnet del alumno a mostrar: ").upper() if(not es_carnet_valido(carnet)): print("Carnet Invalido - Respetar formato AB12345") elif(buscar_alumno.indice_alumno(carnet, leer_datos_json.get_lista_alumnos()) == -1): print("\nEl carnet ingresado no existe. Debe registrar al alumno.\nPuede registrarlo seleccionando la opcion en el menu.") # Regresar al menu principal return else: break indice = buscar_alumno.indice_alumno( carnet, leer_datos_json.get_lista_alumnos()) alumno = leer_datos_json.get_lista_alumnos()[indice] columnas = ["CARNET", "NOMBRE", "APELLIDO", "NOTA 1", "NOTA 2", "NOTA 3", "PROMEDIO"] # Crea un nuevo DataFrame con las columnas previamente definidas df = pd.DataFrame(columns=columnas) # Verifica que el alumno tenga notas registradas en el sistema, si es asi se agregan a la columna correspondiente del DataFrame. Si no es asi, solo se agregan carnet, nombre y apellido y en las columnas de notas se agregan guiones. if(alumno["notas"]): df.loc[0] = [alumno["carnet"], alumno["nombre"], alumno["apellido"], alumno["notas"][0], alumno["notas"] [1], alumno["notas"][2], alumno["notas"][3]] if(not alumno["notas"]): df.loc[0] = [alumno["carnet"], alumno["nombre"], alumno["apellido"], "-", "-", "-", "-.-"] print() print(df) print() return
def registrar(): listado_alumnos = leer_datos_json.get_lista_alumnos() while True: carnet = input("Carnet: ").upper() if(not es_carnet_valido(carnet)): print("Carnet Invalido - Respetar formato AB12345") elif(indice_alumno(carnet, listado_alumnos) != -1): print("El carnet ingresado ya existe") else: break while True: nombre = input(carnet + " - Nombre: ") if(not es_nombre_apellido_valido(nombre)): print("Nombre Invalido - Debe ser solo un nombre sin espacios.") else: break while True: apellido = input(carnet + " - Apellido: ") if(not es_nombre_apellido_valido(apellido)): print("Apellido Invalido - Debe ser solo un apellido sin espacios.") else: break nuevo_alumno = { "carnet": carnet.upper(), "nombre": nombre, "apellido": apellido, "notas": [] } listado_alumnos.append(nuevo_alumno) with open("datos-alumnos.json", "w") as salida: json.dump(listado_alumnos, salida) print("*" * caracteres_decorativos) print("Alumno registrado con exito") return
def imprimir_lista_alumnos(): lista_alumnos = leer_datos_json.get_lista_alumnos() p1 = [] p2 = [] p3 = [] promedio = [] # Se asignan valores a las variables previamente declaradas. Los valores asignados a cada variable dependen de si el alumno en cuestion tiene o no las notas agregadas en el sistema. for alumno in lista_alumnos: # Si tiene notas registradas estas se asignan a las variables correspondientes if(alumno["notas"]): p1.append(alumno["notas"][0]) p2.append(alumno["notas"][1]) p3.append(alumno["notas"][2]) promedio.append(alumno["notas"][3]) # Si NO tiene notas registradas se asignan guiones a las variables correspondientes elif(not alumno["notas"]): p1.append("-") p2.append("-") p3.append("-") promedio.append("-.-") # Se crea un nuevo DataFrame en base a los datos contenidos en el archivo json df = pd.read_json(r"datos-alumnos.json") del df['notas'] # Elimina la columna notas del DataFrame previamente creado # Agrega 3 columnas al DataFrame df.columns = ["CARNET", "NOMBRE", "APELLIDO"] # Llena las columnas con los datos contenidos en las variables p1, p2, p3 y promedio df["NOTA 1"] = p1 df["NOTA 2"] = p2 df["NOTA 3"] = p3 df["PROMEDIO"] = promedio print() print(df) # Imprime el DataFrame en pantalla print()
def editar_alumno(): # Carga en memoria en la variable listado_alumnos todo el contenido del archivo json donde se guardan los datos del programa. lista_alumnos = leer_datos_json.get_lista_alumnos() while True: carnet = input("Ingrese el carnet del alumno a editar: ").upper() if(not es_carnet_valido(carnet)): print("Carnet Invalido - Respetar formato AB12345") elif(indice_alumno(carnet, lista_alumnos) == -1): print("\nEl carnet ingresado no existe. Debe registrar al alumno.\nPuede registrarlo seleccionando la opcion en el menu.") # Regresa al menu principal return else: break pos_alumno = indice_alumno(carnet, lista_alumnos) while True: opcion = input("\n" + carnet + " - Seleccione el dato a modificar:\n\n1-Carnet\n2-Nombre\n3-Apellido\n4-Menu Principal\n") print("*" * caracteres_decorativos) if(es_opcion_valida(opcion, 1, 4)): opcion = eval(opcion) break else: print("Seleccione una opcion valida") print("*" * caracteres_decorativos) if (opcion == 1): while True: nuevo_carnet = input( "Carnet Actual: " + lista_alumnos[pos_alumno]["carnet"] + "\nCarnet Nuevo: ") if(es_carnet_valido(nuevo_carnet)): if(indice_alumno(nuevo_carnet, lista_alumnos) != -1): print( "\nEl carnet ingresado ya existe.\nEl nuevo carnet debe ser ¡¡¡NUEVO!!!") else: break else: print("El nuevo carnet no es valido") lista_alumnos[pos_alumno]["carnet"] = nuevo_carnet.upper() # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico el carnet del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Carnet modificado con exito.") return if (opcion == 2): while True: nuevo_nombre = input( "Nombre Actual: " + lista_alumnos[pos_alumno]["nombre"] + "\nNuevo Nombre: ") if(es_nombre_apellido_valido(nuevo_nombre)): break else: print("El nuevo nombre no es valido") lista_alumnos[pos_alumno]["nombre"] = nuevo_nombre # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico el nombre del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Nombre modificado con exito.") return if (opcion == 3): while True: nuevo_apellido = input( "Apellido Actual: " + lista_alumnos[pos_alumno]["apellido"] + "\nNuevo Apellido: ") if(es_nombre_apellido_valido(nuevo_apellido)): break else: print("El nuevo apellido no es valido") lista_alumnos[pos_alumno]["apellido"] = nuevo_apellido # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico el apellido del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Apellido modificado con exito.") return if (opcion == 4): # Regresar al menu principal return
def ingresar_notas(): listado_alumnos = leer_datos_json.get_lista_alumnos() while True: carnet = input("Ingrese el carnet del alumno: ").upper() if (not es_carnet_valido(carnet)): print("\nCarnet Invalido - Respetar formato AB12345") elif (buscar_alumno.indice_alumno(carnet, listado_alumnos) == -1): print( "\nEl carnet ingresado no existe. Debe registrar al alumno.\nPuede registrarlo seleccionando la opcion en el menu." ) # Regresar al menu principal return elif (len(listado_alumnos[buscar_alumno.indice_alumno( carnet, listado_alumnos)]["notas"]) == 4): print( "\nEl alumno " + carnet + " ya tiene las notas registradas.\nPuede modificarlas seleccionando la opcion en el menu." ) # Regresar al menu principal return else: break while True: primeraNota = input(carnet + " - Primera Nota: ") if (esNotaValida(primeraNota)): break else: print("Nota Invalida") while True: segundaNota = input(carnet + " - Segunda Nota: ") if (esNotaValida(segundaNota)): break else: print("Nota Invalida") while True: terceraNota = input(carnet + " - Tercera Nota: ") if (esNotaValida(terceraNota)): break else: print("Nota Invalida") promedio = (eval(primeraNota) + eval(segundaNota) + eval(terceraNota)) / 3 promedio = round(promedio, 2) listado_alumnos[buscar_alumno.indice_alumno(carnet, listado_alumnos)]["notas"] = [ eval(primeraNota), eval(segundaNota), eval(terceraNota), promedio ] with open("datos-alumnos.json", "w") as salida: json.dump(listado_alumnos, salida) print("*" * caracteres_decorativos) print("Notas del alumno " + carnet + " registradas con exito.") # Regresar al menu principal return
def modificar_nota(): # Carga en memoria en la variable listado_alumnos todo el contenido del archivo json donde se guardan los datos del programa. lista_alumnos = leer_datos_json.get_lista_alumnos() while True: carnet = input("Ingrese el carnet del alumno a modificar: ").upper() if (not es_carnet_valido(carnet)): print("Carnet Invalido - Respetar formato AB12345") elif (indice_alumno(carnet, lista_alumnos) == -1): print( "\nEl carnet ingresado no existe. Debe registrar al alumno.\nPuede registrarlo seleccionando la opcion en el menu." ) # Regresar al menu principal return elif (len(lista_alumnos[indice_alumno(carnet, lista_alumnos)]["notas"]) == 0): print( "\nEl alumno " + carnet + " no tiene notas registradas.\nPuede registrarlas seleccionando la opcion en el menu." ) # Regresar al menu principal return else: break pos_alumno = indice_alumno(carnet, lista_alumnos) while True: opcion = input( "\n" + carnet + " - Seleccione la nota a modificar:\n\n1-Primera Nota\n2-Segunda Nota\n3-Tercera Nota\n4-Menu Principal\n" ) print("*" * caracteres_decorativos) if (es_opcion_valida(opcion, 1, 4)): opcion = eval(opcion) break else: print("Seleccione una opcion valida") print("*" * caracteres_decorativos) if (opcion == 1): while True: nueva_nota = input(carnet + " - Nota Actual: " + str(lista_alumnos[pos_alumno]["notas"][0]) + "\n" + carnet + " - Nueva Nota: ") if (esNotaValida(nueva_nota)): break else: print("Nota Invalida") lista_alumnos[pos_alumno]["notas"][0] = eval(nueva_nota) nueva_nota = -1 actualizar_promedio(carnet, lista_alumnos) # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico la nota 1 y el promedio del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Nota 1 modificada con exito.") return if (opcion == 2): while True: nueva_nota = input(carnet + " - Nota Actual: " + str(lista_alumnos[pos_alumno]["notas"][1]) + "\n" + carnet + " - Nueva Nota: ") if (esNotaValida(nueva_nota)): break else: print("Nota Invalida") lista_alumnos[pos_alumno]["notas"][1] = eval(nueva_nota) nueva_nota = -1 actualizar_promedio(carnet, lista_alumnos) # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico la nota 2 y el promedio del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Nota 2 modificada con exito.") return if (opcion == 3): while True: nueva_nota = input(carnet + " - Nota Actual: " + str(lista_alumnos[pos_alumno]["notas"][2]) + "\n" + carnet + " - Nueva Nota: ") if (esNotaValida(nueva_nota)): break else: print("Nota Invalida") lista_alumnos[pos_alumno]["notas"][2] = eval(nueva_nota) actualizar_promedio(carnet, lista_alumnos) # Abre el archivo json donde se guardan los datos del programa, en modo de escritura(w) y lo sobreescribe con los datos de la List actual donde ya se modifico la nota 3 y el promedio del alumno. with open("datos-alumnos.json", "w") as salida: json.dump(lista_alumnos, salida) print("*" * caracteres_decorativos) print("Nota 3 modificada con exito.") return if (opcion == 4): # Regresar al menu principal return
def generar_grafica(): listado_alumnos = leer_datos_json.get_lista_alumnos() notas1 = [] notas2 = [] notas3 = [] promedios = [] carnets_alumno = [] xpos = [] alumno_actual = 0 # Se asignan los valores a las variables previamente declaradas; los cuales serviran para generar la grafica (se incluyen los carnets, notas y promedios asociados a cada uno - solo si el alumno ya tiene las notas registradas) for alumno in listado_alumnos: if (alumno["notas"]): notas1.append(alumno["notas"][0]) notas2.append(alumno["notas"][1]) notas3.append(alumno["notas"][2]) promedios.append(alumno["notas"][3]) carnets_alumno.append(alumno["carnet"].upper()) xpos.append(alumno_actual) alumno_actual += 1 # Coloca las etiquetas con los carnets en el eje x (base de la grafica) con una rotacion de 25 grados de derecha hacia arriba plt.xticks(xpos, carnets_alumno, rotation=25) # Generan cada una de las 4 lineas con puntos que conforman la grafica plt.plot(xpos, notas1, color='#2980b9', linestyle='solid', linewidth=2, marker='o', markerfacecolor='#2980b9', markersize=3, label='Nota 1') plt.plot(xpos, notas2, color='#27ae60', linestyle='solid', linewidth=2, marker='o', markerfacecolor='#27ae60', markersize=3, label='Nota 2') plt.plot(xpos, notas3, color='#8e44ad', linestyle='solid', linewidth=2, marker='o', markerfacecolor='#8e44ad', markersize=3, label='Nota 3') plt.plot(xpos, promedios, color='#c0392b', linestyle='dotted', linewidth=2, marker='o', markerfacecolor='#c0392b', markersize=3, label='Promedio') # Modifica el rango de las etiquetas del eje y ( van de 0 a 10, de uno en uno, el 11 no se incluye en el rango) plt.yticks(range(0, 11, 1)) # Cambia el tamaño de letra de las etiquetas de los ejes X-Y (ALUMNOS y CALIFICACIONES) plt.xticks(fontsize=6) plt.yticks(fontsize=10) # Coloca la etiqueta del eje X plt.xlabel('ALUMNOS') # Coloca la etiqueta del eje Y plt.ylabel('CALIFICACIONES') # Coloca el titulo de la grafica plt.title('CALIFICACIONES DE ALUMNOS CICLO I - 2020') # Indica que la leyenda (donde aparece el color asociado a cada linea y que representa cada linea en la grafica) esté presente. plt.legend() # Cambia el tamaño de letra y la posicion de la leyenda (loc=4 indica esquina inferior derecha para la posicion) plt.legend(loc=4, prop={'size': 6}) # Muestra la grafica en pantalla plt.show()