def infoSistema(cohetes, peticiones, lanzamientos):

    print('')

    if len(cohetes) != 0:

        #MOSTRAMOS LISTA DE COHETES
        print("COHETES EN SISTEMA")
        print(chr(734) * 10)
        for i in cohetes:
            print("Cohete:", i[0])
            print("Carga útil:", i[1])
            print(chr(1421) * 20)
    else:

        print("- NO EXISTEN COHETES EN EL SISTEMA. \n")

    if len(peticiones) != 0:
        #MOSTRAMOS LISTA DE PETICIONES
        print("PETICIONES EN SISTEMA")
        print(chr(734) * 10)
        for i in peticiones:
            print("Identificador:", i[0])
            print("Tipo de suministro :", i[1])
            print("Peso:", i[2])
            if i[3] == 0:
                print("Tiempo para entrega: Petición ya entregada")
            else:
                print("Tiempo para entrega:", i[3])

            if i[4] == 0:
                print("Petición pendiente de asignar")
            elif i[4] == 1:
                print("Petición previamente asignada")

            print(chr(1421) * 20)
    else:

        print("- NO EXISTEN PETICIONES EN EL SISTEMA. \n")

    if len(lanzamientos) != 0:
        #MOSTRAMOS LISTA DE LANZAMIENTOS
        print("LANZAMIENTOS EN SISTEMA")
        print(chr(734) * 10)
        for i in lanzamientos:
            print("Cohete:", i[0])
            if i[1] == 0:
                print("Días misión: Misión ya completada")
            else:
                print("Días misión:", i[1])
            print(chr(1421) * 20)

    else:

        print("- NO EXISTEN LANZAMIENTOS EN EL SISTEMA. \n")

    gestionaMenu(menu.imprimeMenu())
Ejemplo n.º 2
0
def errorComun(textoError):
    print(chr(1421) * 30)
    print("\nERROR: ", textoError)
    print("\nPor favor vuelva a intentarlo\n")
    print("Los cambios introducidos no se han guardado.\n")
    print("Será redirigido al Menú Principal en...\n")
    for c in range(3, 0, -1):
        print(c, "...")
        time.sleep(1)
    opcion = menu.imprimeMenu()
    return opcion
def simulacionDias(peticiones):

    if len(peticionAsignada) == 0:

        print(
            "NO HAY DATOS SUFICIENTES EN EL SISTEMA PARA REALIZAR LA SIMULACIÓN, POR FAVOR INTRODUZCA COHETES, PETICIONES Y LANZAMIENTOS Y ASIGNE LAS PETICIONES."
        )
        threeSecDelayToMainMenu()

    else:
        cohetesEnRutaTemp = []
        try:
            dias = input("¿Cuantos días van a pasar?:")

            while dias.isnumeric() == False:
                print("El número de dias debe ser un entero positivo...")
                dias = input("¿Cuantos días van a pasar?:")

            dias = int(dias)

        except Exception as e:

            gestionaMenu(error.errorComun(e.__doc__))

        else:

            while dias <= 0 or type(dias) != int:

                print("El tiempo debe ser superior a 0...")

                try:

                    dias = input("¿Cuantos días van a pasar?:")
                    while dias.isnumeric() == False:
                        print("El tiempo debe ser superior a 0...")
                        dias = input("¿Cuantos días van a pasar?:")

                    dias = int(dias)

                except Exception as e:

                    gestionaMenu(error.errorComun(e.__doc__))

        #AHORA SE LANZARÍAN TODOS LOS COHETES QUE TUVIERAN CARGA ASIGNADA
        for i in peticionAsignada:  #Cada peticion asignada se compone de IDmision, duracion, cohete, enviada (0 no 1 si)
            for j in peticiones:  #j[3] son numero de dias

                if i[0] == j[0]:
                    i[1] = i[1] - dias

                    if i[1] <= 0:
                        if i[3] == 0:
                            print("\n", chr(1421), "La petición ", j[0],
                                  " ha sido entregada a tiempo.")
                            peticionCompletada.append(j[0])
                            i[3] = 1
                            j[3] = 0
                        i[1] = 0
                for r in lanzamientos:
                    r[1] -= dias
                    if r[1] < 0:
                        r[1] = 0

        print("\nPETICIONES PENDIENTES DE ENTREGA:\n")
        print(chr(734) * 20)
        for g in peticiones:
            if g[3] != 0:
                print("Id de la petición: ", g[0])

        print("\nHISTÓRICO DE PETICIONES ENTREGADAS:\n")
        print(chr(734) * 20)
        for g in peticionAsignada:
            if g[3] == 1:
                print("Id de la petición: ", g[0])
        print("\n")
        #AHORA SE QUITAN LOS COHETES LANZADOS DE LA LISTA DE DISPONIBLES
        for m in lanzamientos:

            if m[1] != 0:

                cohetesEnRutaTemp.append(m[0])
                cohetesEnRutaTemp.append(m[1])

                cohetesEnRuta.append(cohetesEnRutaTemp)

        # elif lanzamientos[m] >= dias:

        print("COHETES EN RUTA:")
        print(chr(734) * 20)

        compruebaRepite = 0

        for n in peticionAsignada:

            if n[1] != 0:
                if compruebaRepite != n[2]:
                    print("NOMBRE DEL COHETE: ", n[2])
                    compruebaRepite = n[2]
                    print("Dias de viaje restantes: ", n[1])

        print("\n")
        gestionaMenu(menu.imprimeMenu())
def tipoCohete(cohetes):

    coheteTemp = []

    try:

        nombreCohete = input("Por favor introduzca el nombre del cohete:")

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:

        for h in cohetes:

            while nombreCohete == h[0] or len(nombreCohete) < 3:
                print(
                    "Introduzca otro nombre (Debe contener al menos 3 caracteres y no existir previamente en el sistema)"
                )
                try:

                    nombreCohete = input(
                        "Por favor introduzca el nombre del cohete:")

                except Exception as e:

                    gestionaMenu(error.errorComun(e.__doc__))

    try:

        cargaUtil = input("Introduzca la carga útil del cohete:")

        while cargaUtil.isnumeric() == False:

            print("La carga util debe ser un numero entero positivo...")

            try:
                cargaUtil = input("Introduzca la carga útil del cohete:")

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

        cargaUtil = int(cargaUtil)

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:

        while type(cargaUtil) != int or cargaUtil <= 0:

            print("La carga util debe ser un numero entero positivo...")
            try:

                cargaUtil = input("Introduzca la carga útil del cohete:")

                while cargaUtil.isnumeric() == False:
                    print(
                        "La carga util debe ser un numero entero positivo...")
                    cargaUtil = input("Introduzca la carga útil del cohete:")

                cargaUtil = int(cargaUtil)

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

    #EN CASO DE QUE TODO HAYA SIDO CORRECTO CON LA TOMA DE DATOS DEL USUARIO
    #SE ASIGNAN LOS VALORES DEL NUEVO COHETE A LA LISTA. ASI EVITAMOS QUE POR EJEMPLO
    #SE ASIGNE UN NOMBRE DE COHETE PREVIAMENTE A LA INTRODUCCION DE LA CARGA UTIL
    #QUE SI POR ERROR NO SE ASIGNARA NOS "DESBARATARÍA" LA LISTA DE COHETES

    coheteTemp.append(nombreCohete)
    coheteTemp.append(cargaUtil)

    cohetes.append(coheteTemp)

    print('COHETE INTRODUCIDO CON ÉXITO\n')

    print("Cohetes en sistema:\n")

    # con el siguiente bucle anidado vamos a mostrar los cohetes actuales al usuario
    for i in cohetes:
        print("Cohete:", i[0])
        print("Carga útil:", i[1])
        print(chr(1421) * 20)

    try:

        a = input("¿Deseea introducir otro cohete?(s/n):")

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    if a == 's':
        tipoCohete(cohetes)
    elif a == 'n':
        gestionaMenu(menu.imprimeMenu())
    else:
        gestionaMenu(error.errorComun())
def asignacionPrioritarios(lanzamientos, peticiones, cohetes):

    if len(cohetes) == 0 or len(peticiones) == 0 or len(lanzamientos) == 0:

        print(
            "No existen datos suficientes para llevar a cabo la asignación. Por favor introduce cohetes, peticiones y lanzamientos."
        )

        threeSecDelayToMainMenu()

    peticionesOrdenada = peticiones.copy()
    ordenaPeticiones(peticionesOrdenada)
    lanzamientosOrdenado = lanzamientos.copy()
    ordenaLanzamientos(lanzamientosOrdenado)

    asignar = True

    if len(peticionAsignada) != 0:
        asignar = False

    #PARA COMPRENDER LA ASIGNACION DEBEMOS TENER MUY CLARAS LAS ESTRUCTURAS DE DATOS ASI COMO LAS
    #VARIABLES DE ITERACION QUE SE USARÁ CON CADA UNA (I, J, K, ETC...) YA QUE IREMOS RECORRIENDO LAS
    #LISTAS DE DATOS USANDO LOS INDICES QUE CORRESPONDAN
    for i in peticionesOrdenada:  #check i[3] numero de dias

        if i[4] == 0:  #La peticion debe no haber sido asignada previamente para ser tenida en cuenta en la asignación

            for k in lanzamientosOrdenado:  #check k[1] numero de dias

                #el requisito principal de asignación es que los dias de la peticion sean superiores a los dias
                #del lanzamiento. Además para no tener en cuenta en futuras asignaciones las peticiones ya asignadas
                #o entregadas estas deben tener mas de 0 dias (ya ha sido entregada)
                if i[3] >= k[1] and i[3] > 0:

                    for j in cohetes:  # j[0] es nombreCohete j[1] es cargaUtil

                        if k[0] == j[0]:

                            j[1] = j[1] - i[2]

                            if j[1] == 0:

                                for f in peticionAsignada:

                                    #comprobamos que la peticion no haya sido asignada previamente
                                    if f[0] == i[0]:

                                        asignar = False

                                    else:

                                        asignar = True

                                while asignar:

                                    print("La petición ", i[0], "(", i[2],
                                          " Kg de ", i[1], ")")
                                    print("ha sido asignada al cohete ", k[0],
                                          "...Duración lanzamiento: ", k[1],
                                          "dias.\n")
                                    peticionAsignada.append(
                                        [i[0], k[1], j[0], 0])
                                    cohetesLlenos.append(j[0])
                                    cambioEstado = peticiones.index(i)
                                    peticiones[cambioEstado][
                                        4] = 1  #Actualizamos el estado de la peticion a "Asignada"
                                    print("ATENCION: EL COHETE ", j[0],
                                          " ESTÁ CARGADO A MÁXIMA CARGA\n")
                                    break

                            elif j[1] < 0:
                                #para no dejar la carga util en menos de cero si hubieramos
                                #llegado al límite, volvemos atrás de este modo.
                                #así además cumplimos el requisito de llenar cohetes hasta
                                #que tengan la carga util menor a cualquier petición pendiente
                                #y nunca se asignará carga a dicho cohete
                                j[1] = j[1] + i[2]

                            else:
                                #comprobamos que la peticion no haya sido asignada previamente
                                for g in peticionAsignada:

                                    if g[0] == i[0]:

                                        asignar = False

                                    else:

                                        asignar = True

                                while asignar:
                                    print("La petición ", i[0], "(", i[2],
                                          " Kg de ", i[1], ")")
                                    print("ha sido asignada al cohete ", k[0],
                                          "...Duración lanzamiento: ", k[1],
                                          "dias.")

                                    print("El cohete ", k[0],
                                          " aún dispone de ", j[1],
                                          "kg de carga útil.\n")

                                    peticionAsignada.append(
                                        [i[0], k[1], j[0], 0])

                                    cambioEstado = peticiones.index(i)
                                    peticiones[cambioEstado][
                                        4] = 1  #Actualizamos el estado de la peticion a "Asignada"

                                    cohetesLlenos.append(j[0])

                                    break

    print(
        "MISIONES IMPOSIBLES DE CUMPLIR:"
    )  #cualquier peticiones que siga en la lista de peticiones significa que no ha sido posible de cumplit
    print(chr(734) * 35)
    for z in peticiones:

        if z[4] != 1:

            print("La petición", z[0], " es imposible de cumplir")
            print(chr(734) * 15)

    print("PETICIONES YA ASIGNADAS PERO NO ENVIADAS")
    print(chr(734) * 38)

    for r in peticionAsignada:

        if r[3] == 0:
            print("Mision: ", r[0], " Duración: ", r[1], " Cohete asignado: ",
                  r[2])
            print(chr(734) * 15)

    gestionaMenu(menu.imprimeMenu())
def lanzamientoDisponible(lanzamientos):
    flag = 0
    lanzamientoTemp = []

    if len(cohetes) == 0:

        print(
            "No existen cohetes en el sistema; para introducir lanzamientos por favor introduzca cohetes primero."
        )
        threeSecDelayToMainMenu()

    else:
        try:

            idCohete = input(
                "Por favor introduzca el nombre exacto (con mayúsculas y/o minúsculas) del cohete:"
            )

        except Exception as e:

            gestionaMenu(error.errorComun(e.__doc__))

        else:

            for i in cohetes:
                if i[0] == idCohete:
                    flag = 1

            if flag != 1:
                print(
                    "No existe ningún cohete con ese nombre en el sistema...")
                lanzamientoDisponible(lanzamientos)

        try:

            tiempoMision = input("Introduzca dias de duracion de la mision:")

            while tiempoMision.isnumeric() == False:

                print("El tiempo debe ser un entero superior a 0...")
                tiempoMision = input(
                    "Introduzca dias de duracion de la mision:")

            tiempoMision = int(tiempoMision)

        except Exception as e:

            gestionaMenu(error.errorComun(e.__doc__))

        else:

            while type(tiempoMision) != int or tiempoMision <= 0:

                print("El tiempo debe ser un entero superior a 0...")

                try:
                    tiempoMision = input("Dias para recibir:")
                    while tiempoMision.isnumeric() == False:
                        print("El tiempo debe ser un entero superior a 0...")
                        tiempoMision = input("Dias para recibir:")

                    tiempoMision = int(tiempoMision)

                except Exception as e:

                    gestionaMenu(error.errorComun(e.__doc__))

        #si todo ha ido bien, asignamos los datos del usuario a la lista de lanzamientos

        lanzamientoTemp.append(idCohete)
        lanzamientoTemp.append(tiempoMision)

        lanzamientos.append(lanzamientoTemp)

        print("LANZAMIENTO INTRODUCIDO CON EXITO\n")

        print("Lanzamientos en sistema:")

        # con el siguiente bucle anidado vamos a mostrar los cohetes actuales al usuario
        for i in lanzamientos:

            print("Cohete:", i[0])
            print("Días misión:", i[1])
            print(chr(1421) * 20)

        a = input("¿Deseea introducir otro lanzamiento?(s/n):")

        if a == 's':
            lanzamientoDisponible(lanzamientos)
        else:
            gestionaMenu(menu.imprimeMenu())
def peticionSuministro(peticiones):

    peticionTemp = []

    try:

        numeroPeticion = input("Identificador de la petición:")

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:

        for h in peticiones:

            while numeroPeticion == h[0] or len(numeroPeticion) < 3:
                print(
                    "Introduzca otro id de peticion (Debe contener al menos 3 caracteres y no existir previamente en el sistema)"
                )
                try:

                    numeroPeticion = input("Identificador de la petición:")

                except Exception as e:

                    gestionaMenu(error.errorComun(e.__doc__))

    try:

        tipoSuministro = input("Tipo de suministro:")

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:
        #vamos a exigir que el tipo de suministro tenga al menos 2 caracteres, ya que salvo
        #"té" no se me ocurre otra posible petición con menos caracteres y aun así no se
        #hasta que punto se solicitaría una petición con el ejemplo dado
        while len(tipoSuministro) < 2:

            print(
                "Introduzca otro tipo de suministro (Debe contener al menos 2 caracteres)"
            )

            try:

                tipoSuministro = input("Tipo de suministro:")

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

    try:

        pesoSuministro = input("Cantidad solicitada, en KG:")

        while pesoSuministro.isnumeric() == False:

            print("El peso debe ser un número superior a 0...")

            try:

                pesoSuministro = input("Cantidad solicitada, en KG:")

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

        pesoSuministro = round(float(pesoSuministro), 3)

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:

        while type(pesoSuministro) != float or pesoSuministro <= 0:

            print("El peso debe ser superior a 0...")

            try:

                pesoSuministro = input("Cantidad solicitada, en KG:")

                while pesoSuministro.isnumeric() == False:
                    print("El peso debe ser superior a 0...")
                    pesoSuministro = input("Cantidad solicitada, en KG:")

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

            pesoSuministro = round(float(pesoSuministro), 3)

    try:

        tiempoSuministro = input("Dias para recibir:")

        while tiempoSuministro.isnumeric() == False:

            print("El tiempo debe ser un número entero positivo...")
            tiempoSuministro = input("Dias para recibir:")

        tiempoSuministro = int(tiempoSuministro)

    except Exception as e:

        gestionaMenu(error.errorComun(e.__doc__))

    else:

        while type(tiempoSuministro) != int or tiempoSuministro <= 0:

            print("El tiempo debe ser superior a 0...")

            try:

                tiempoSuministro = input("Dias para recibir:")

                while tiempoSuministro.isnumeric() == False:
                    print("El tiempo debe ser superior a 0...")
                    tiempoSuministro = input("Dias para recibir:")

                tiempoSuministro = int(tiempoSuministro)

            except Exception as e:

                gestionaMenu(error.errorComun(e.__doc__))

    #UNA VEZ QUE SABEMOS QUE TODOS LOS DATOS INTRODUCIDOS SON CORRECTOS SEGUN LAS ESPECIFICACIONES
    #DADAS POR EL CLIENTE, PODEMOS ASIGNARLAS A LA LISTA DE PETICIONES SIN DUDA DE COMPLICACIONES

    peticionTemp.append(numeroPeticion)
    peticionTemp.append(tipoSuministro)
    peticionTemp.append(pesoSuministro)
    peticionTemp.append(tiempoSuministro)
    peticionTemp.append(
        0)  #por defecto ponemos las nuevas peticiones como no asignadas

    peticiones.append(peticionTemp)

    print('PETICION INTRODUCIDA CON ÉXITO')
    print(' ')

    print("Peticiones de suministro en sistema:")

    # con el siguiente bucle anidado vamos a mostrar las peticiones actuales al usuario
    for i in peticiones:
        print("Identificador:", i[0])
        print("Tipo de suministro :", i[1])
        print("Peso:", i[2])
        print("Tiempo para entrega:", i[3])
        if i[4] == 0:
            print("Petición pendiente de asignar")
        elif i[4] == 1:
            print("Petición previamente asignada")
        print(chr(1421) * 20)

    a = input("¿Deseea introducir otra peticion?(s/n):")

    if a == 's':
        peticionSuministro(peticiones)
    else:
        gestionaMenu(menu.imprimeMenu())
def threeSecDelayToMainMenu():
    for c in range(3, 0, -1):
        print(c, "...")
        time.sleep(1)

    gestionaMenu(menu.imprimeMenu())
        except:
            print(
                "No existen peticiones asignadas en el fichero. Haga una asignación si desea realizar una simulación."
            )

    try:
        fichero.close()
    except Exception as e:
        gestionaFicheros(error.errorFichero(e.__doc__))
    else:
        print("\nVolviendo al menu en...")
        threeSecDelayToMainMenu()


def threeSecDelayToMainMenu():
    for c in range(3, 0, -1):
        print(c, "...")
        time.sleep(1)

    gestionaMenu(menu.imprimeMenu())


#COMIENZA MAIN

mensajeBienvenida = "BIENVENIDO A ISS_SUPPLY"

print('\n', mensajeBienvenida)
print(chr(773) * len(mensajeBienvenida))

gestionaMenu(menu.imprimeMenu())
Ejemplo n.º 10
0
import funcionalidades
import menu

operador = 0

while operador != 5:

    menu.imprimeMenu()
    operador = int(input('Qual a operacao desejada: '))

    if operador != 5:

        op1 = int(input('Digite o primeiro operando: '))
        op2 = int(input('Digite o segundo operando: '))

        if operador == 1:
            print('Resultado: ' + funcionalidades.soma(op1, op2))

        if operador == 2:
            print('Resultado: ' + funcionalidades.subtracao(op1, op2))

        if operador == 3:
            print('Resultado: ' + funcionalidades.multiplicacao(op1, op2))

        if operador == 4:
            print('Resultado: ' + funcionalidades.divisao(op1, op2))