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
Пример #3
0
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
Пример #4
0
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
Пример #6
0
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
Пример #7
0
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()