def explorar_cruceros_filtros(cruceros): print(' Que tipo de filtro le quiere aplicar a la busqueda?') all_habitaciones = [] # Todos los objetos de habitaciones en un solo lugar for crucero in cruceros: for piso in crucero.pisos: for habitacion in piso.habitaciones: all_habitaciones.append(habitacion) habitacion.add_parent_crucero(crucero.get_nombre()) # Agregando referecia al crucero padre while True: filtro = m(['Por Tipo', 'Por Capacidad', 'Por ID', 'Volver']).get_menu() if filtro == '1': # Por tipo tipo = m(['Sencilla', 'Premium', 'VIP', 'Volver']).get_menu() if tipo == '1': mostrar_por_tipo('simple', all_habitaciones) elif tipo == '2': mostrar_por_tipo('premium', all_habitaciones) elif tipo == '3': mostrar_por_tipo('vip', all_habitaciones) elif tipo == '4': pass else: print('Opción elegida invalidad. Intentar otra vez.\n') elif filtro == '2': # Por Capcidad while True: try: capacidad = int(input('Ingrese capacidad de habitacion: ')) break except: print('Valor ingresado invalido. Intentar otra vez.\n') mostrar_por_capacidad(capacidad, all_habitaciones) elif filtro == '3': # Por ID (Tipo, Pasillo, Habitacion_num) print(' Primero escoja el tipo de habitacion') tipo = m(['Sencilla', 'Premium', 'VIP', 'Volver']).get_menu() identificador = input('Ingrese identificador (E.g: C3): ') if tipo == '1': mostrar_por_identidicador('simple', identificador, all_habitaciones) elif tipo == '2': mostrar_por_identidicador('premium', identificador, all_habitaciones) elif tipo == '3': mostrar_por_identidicador('vip', identificador, all_habitaciones) elif tipo == '4': pass else: print('Opción elegida invalidad. Intentar otra vez.\n') elif filtro == '4': break else: print('Opción elegida invalidad. Intentar otra vez.\n')
def cancelar_reservacion(cruceros): while True: representar_cruceros(cruceros) try: c1 = int(input('Introduja numero de crucero: ')) if c1 > len(cruceros): raise Exception piso = int(m(['Sencillo', 'Premium', 'VIP']).get_menu()) if piso > 3: raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') for crucero in range(len(cruceros)): if crucero == c1 - 1: print('\n Passillos ocupados: ') cruceros[crucero].pisos[piso - 1].get_representacion_ocupado() c2 = input( 'Ingrese ID (E.g. D3) de la habitacion que quiera desocupar: ' ) habitaciones_disponibles_id = [ ] # ID de habitaciones q esta ocupadas for habitacion in cruceros[crucero].pisos[piso - 1].habitaciones: if habitacion.ocupado == True: habitacion_disponible = habitacion habitaciones_disponibles_id.append( habitacion.identificador) if c2 in habitaciones_disponibles_id: # Chekeando que habitacion este disponible print( 'No refunds btw :)' ) # No estoy quitando los pagos que se hicieron para mantener los datos del cliente c3 = m([ f'Confirmar Cancelacion de Habitacion {habitacion_disponible.get_id()}', 'No, Volver' ]).get_menu() if c3 == '1': update_datos(habitacion_disponible, cruceros) else: print('Cancelacion NO exitosa.') return else: print('\n ID no disponible. Verifique datos.') pass return
def selecionar_estadistica(): while True: estadistica = m([ 'Promedio de gastos de todos los clientes', 'Promedio de gastos de un solo cliente', 'Porcentaje de clientes que no comprar tour', 'Top 3 Clientes', 'Top 3 Cruceros con mayor venta de tickets', 'Volver' ]).get_menu() try: if estadistica == '1': # NO lei bien las isntrucciones. Pero bueno dejo esto aqui! promedio_de_gastos() elif estadistica == '2': promedio_de_gastos_cliente() elif estadistica == '3': porcentaje_de_no_tours() elif estadistica == '4': top3_clientes() elif estadistica == '5': top3_cruceros() elif estadistica == '6': break else: print('Opción elegida invalidad. Intentar otra vez.\n') except: print( 'Todavia no hay pagos. Realize almenos un pago para utilizar este modulo' ) break
def buscar_item(restaurante): b1 = m(['Buscar por nombre', 'Por precio', 'Ver todos', 'Volver']).get_menu() if b1 == '1': # Por nombre nombre = input('Ingrese nombre: ') print('Productos que hacen match el nombre ingresado:\n') for item in restaurante.menu: if item.nombre == nombre: mostrar_item(item) elif b1 == '2': # Por price range try: minimo = float(input('Ingrese precio minimo: ')) maximo = float(input('Ingrese precio maximo: ')) except: print('Opción elegida invalidad. Intentar otra vez.\n') print(f'Todos los items entre ${minimo} y ${maximo}:\n') for item in restaurante.menu: if item.precio_base > minimo and item.precio_base < maximo: mostrar_item(item) elif b1 == '3': for item in restaurante.menu: mostrar_item(item) elif b1 == '4': return else: print('Opción elegida invalidad. Intentar otra vez.\n')
def eliminar_combo(restaurante): combos = [] # Lista con todos los combos opciones = [] if len(restaurante.combos) == 0: print('No hay combos para eliminar.') else: print(' Combos disponibles para eliminar:') for combo in restaurante.combos: opciones.append( f'{combo.nombre} ${combo.precio_base} | Items: {combo.items}') combos.append(f'{combo.nombre}') try: opcion = int(m(opciones).get_menu()) if opcion > len(combos) or opcion < 0: raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') return restaurante.eliminar_combo(opcion - 1) update_datos(restaurante) return
def buscar_combo(restaurante): b2 = m(['Buscar por nombre', 'Por precio', 'Ver Todos', 'Volver']).get_menu() if b2 == '1': # Por nombre nombre = input('Ingrese nombre: ') for combo in restaurante.combos: if combo.nombre == nombre: mostrar_combo(combo) return elif b2 == '2': # Por price range try: minimo = float(input('Ingrese precio minimo: ')) maximo = float(input('Ingrese precio maximo: ')) except: print('Opción elegida invalidad. Intentar otra vez.\n') return print(f'Todos los items entre ${minimo} y ${maximo}:') for combo in restaurante.combos: if combo.precio_base > minimo and combo.precio_base < maximo: mostrar_combo(combo) elif b2 == '3': for combo in restaurante.combos: mostrar_combo(combo) elif b2 == '4': return else: print('Opción elegida invalidad. Intentar otra vez.\n')
def mostrar_crucero(crucero, explore=True): while True: print(f''' Actualmente {'explorando' if explore else 'viendo'} pisos de {crucero.get_nombre()}! Capacidad Costo Sencillo: {crucero.get_capacidad('sencillo')} ${crucero.get_costo('sencillo')} Premium: {crucero.get_capacidad('premium')} ${crucero.get_costo('premium')} VIP: {crucero.get_capacidad('vip')} ${crucero.get_costo('vip')} ''') print(f'Eliga piso que quisiera {"explorar" if explore else "ver"}') seleccion2 = m(['Sencillo', 'Premium', 'VIP']).get_menu() if seleccion2 == '1': # Sencillo crucero.pisos[int(seleccion2) - 1].get_representacion() return seleccion2 elif seleccion2 == '2': # Premium crucero.pisos[int(seleccion2) - 1].get_representacion() return seleccion2 elif seleccion2 == '3': # VIP crucero.pisos[int(seleccion2) - 1].get_representacion() return seleccion2 else: print('Opción elegida invalidad. Intentar otra vez.\n')
def parse(self, i): ''' Parses the menu: an array of dictionaries consisting of the keys id, data, parent_id, child_ids. Note: MENUS is not zero-indexed. We want to iterate through the array nonlinearly, by child_ids. The parsing will be memoized as a result. Now, if child_ids is an empty list or yields a cycle, then we go to the next ID in sequence. ''' k = i + 1 if not self.visited[k]: self.visited[k] = True menu_id = self.menus[i]['id'] data = self.menus[i]['data'] child_ids = self.menus[i]['child_ids'] if 'parent_id' in self.menus[i]: current_parent = self.menus[i]['parent_id'] previous_parent = None while True: previous_parent = current_parent if 'parent_id' not in self.menus[previous_parent - 1]: current_parent = self.menus[previous_parent - 1]['id'] break current_parent = self.menus[previous_parent - 1]['parent_id'] self.trees[current_parent].appendChildren(child_ids) else: parent_id = menu_id for c in child_ids: if c in self.trees: parent_id = c child_ids.remove(c) self.trees[parent_id] = m(menu_id, child_ids) for child in child_ids: self.parse(child - 1)
def comprar_tour(tours): tours_disponibles = [] # Tours que todavia tienen cupo for tour in tours: if tour.get_disponibilidad(): tours_disponibles.append(tour) while True: print('Estos son los tours disponibles\n') representar_tours(tours_disponibles) for tour in range(len(tours_disponibles)): print(f' [{tour+1}] {tours_disponibles[tour].nombre}') oo1 = input('\nEscoja: ') opcion_tour = None for i in range(len(tours_disponibles)): if oo1 == f'{i+1}': opcion_tour = tours_disponibles[i] if opcion_tour == None: # Si es invalida devolver print('Opción elegida invalidad. Intentar otra vez.\n') break try: cedula = int(input('Ingrese su cedula: ')) party = int(input('Numero de personas con usted: ')) if party > opcion_tour.max_personas: print( 'Cantidad de personas en el party exede la cantidad de personas maximas' ) break if party + opcion_tour.cupos_ocupados > opcion_tour.cupos: # Asegurando que existen suficientes cupos print( '\nCupos agotados. Si quiere este tour debe ingresar con menos personas.\n' ) break mostrar_factura(cedula, party, opcion_tour) print('Quiere comprar este tour?') confirmar = m(['Si', 'No']).get_menu() if confirmar == '1': update_datos(opcion_tour, party, cedula, tours) break elif confirmar == '2': break else: print('\nValor ingresado invalido. Intentar otra vez.') except: print('\nValor ingresado invalido. Intentar otra vez.') break
def agregar_item(restaurante): nombre = input('Ingrese nombre de item: ') opcion_tipo = m(['Alimento', 'Bebida']).get_menu() if opcion_tipo == '1': opcion_info = m(['Empaque', 'Preparación']).get_menu() tipo = 'a' if opcion_info == '1': info = 'e' elif opcion_info == '2': info = 'p' else: print('Opción elegida invalidad. Intentar otra vez.\n') return elif opcion_tipo == '2': opcion_info = m(['Pequeño', 'Mediano', 'Grande']).get_menu() tipo = 'b' if opcion_info == '1': info = 'p' elif opcion_info == '2': info = 'm' elif opcion_info == '2': info = 'g' else: print('Opción elegida invalidad. Intentar otra vez.\n') return else: print('Opción elegida invalidad. Intentar otra vez.\n') return try: precio = int(input('Ingrese precio de este item: ')) if precio < 0: raise Exception except: print('Valor invalido. Intentar otravez') return restaurante.agregar_item(nombre, tipo, info, precio) update_datos(restaurante)
def agregar_combo(restaurante): nombre = input('Ingrese nombre de combo: ') opciones = [] # Indexs de todos los item selecionados items = [] try: cantidad_items = int( input('Ingrese cantidad de items que quiere agregar (mas de 2): ')) if cantidad_items < 2 or cantidad_items > len(restaurante.menu): raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') return for item in restaurante.menu: # Para mostrar todos los items que se pudiera elegir items.append( f'{item.nombre} | {item.get_info()}, ${item.get_precio_base()}') for item in range(cantidad_items): print((f'\n Item #{item+1} Escoga numero de item')) try: opcion = int(m(items).get_menu()) if opcion > len(restaurante.menu) or opcion < 0: raise Exception opciones.append(opcion - 1) except: print('Opción elegida invalidad. Intentar otra vez.\n') return try: precio = float(input('Ingrese precio de este combo: ')) if precio < 0: raise Exception except: print('Valor invalido. Intentar otravez') return nombre_de_items = [] # Lista con todos los nombre del combo for index in range(len(opciones)): nombre_de_items.append(restaurante.menu[opciones[index]].nombre) restaurante.agregar_combo(nombre, precio, nombre_de_items) update_datos(restaurante)
def gestion_productos(restaurante): while True: b2 = m([ 'Agregar Item', 'Agregar Combo', 'Eliminar Item', 'Eliminar Combo', 'Modificar Item', 'Volver' ]).get_menu() if b2 == '1': agregar_item(restaurante) elif b2 == '2': agregar_combo(restaurante) elif b2 == '3': eliminar_item(restaurante) elif b2 == '4': eliminar_combo(restaurante) elif b2 == '5': modificar_item(restaurante) elif b2 == '6': break else: print('Opción elegida invalidad. Intentar otra vez.\n')
def eliminar_item(restaurante): items = [] # Lista con todos los items del menu opciones = [] print('\n Items en menu que se pueden eliminar:') for item in restaurante.menu: opciones.append( f'{item.nombre} | {item.get_info()}, ${item.get_precio_base()}') items.append(f'{item.nombre}') try: opcion = int(m(opciones).get_menu()) if opcion > len(items) or opcion < 0: raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') return restaurante.eliminar_item(opcion - 1) update_datos(restaurante) return
def comprar_por_criterios(crucero, cruceros): print('\n Escoga tipo de habitacion') try: piso = int(m(['Sencillo', 'Premium', 'VIP']).get_menu()) - 1 party = int(input('Cantidad de personas en su party: ')) if crucero.pisos[ piso].capacidad_habitacion < party: # Determinando Cantidadd de habitaciones que se deben comprar si la party es mayor que la capacidad habitaciones_a_compar = floor( (party) / (crucero.pisos[piso].capacidad_habitacion)) if party % crucero.pisos[piso].capacidad_habitacion != 0: habitaciones_a_compar += 1 print( f'La cantidad de gente que viaja con usted es mayor que la cantidad de gente que puede viajar en habitaciones de este tipo. Por lo tanto, debe comprar un minimo de {habitaciones_a_compar} habitaciones.' ) seleccionar_habitacion(crucero.pisos[piso], party, cruceros, habitaciones_a_compar) else: # Si la cantidad de habitaciones a comprar es solamente 1 seleccionar_habitacion(crucero.pisos[piso], party, cruceros) except: print('Introdujo un valor invalido. Intentelo denuevo\n')
def modificar_item(restaurante): items = [] # Lista con todos los items del menu opciones = [] print('\n Items en menu que se pueden modificar:') for item in restaurante.menu: opciones.append( f'{item.nombre} | Tipo: {item.get_tipo()}, Info: {item.get_info()}, Precio: ${item.get_precio_base()}' ) items.append(f'{item.nombre}') try: opcion = int(m(opciones).get_menu()) if opcion > len(items) or opcion < 0: raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') return print('Que desea modificar de este item?') cosa_a_modificar = m(['Nombre', 'Tipo', 'Info', 'Precio']).get_menu() if cosa_a_modificar == '1': nombre = input('Ingrese nuevo nombre: ') restaurante.menu[opcion - 1].modificar_algo('n', nombre) elif cosa_a_modificar == '2': print('Ingrese nuevo tipo: ') tipo = m(['Alimento', 'Bebida']).get_menu() if tipo == '1': new_tipo = 'a' elif tipo == '2': new_tipo = 'b' else: print('Opción elegida invalidad. Intentar otra vez.\n') return restaurante.menu[opcion - 1].modificar_algo('t', new_tipo) elif cosa_a_modificar == '3': if restaurante.menu[opcion - 1].tipo == 'a': info = m(['Empaque', 'Preparación']).get_menu() if info == '1': new_info = 'e' elif info == '2': new_info = 'p' else: print('Opción elegida invalidad. Intentar otra vez.\n') return elif restaurante.menu[opcion - 1].tipo == 'b': info = m(['Pequeño', 'Mediano', 'Grande']).get_menu() if info == '1': new_info = 'p' elif info == '2': new_info = 'm' elif info == '3': new_info = 'g' else: print('Opción elegida invalidad. Intentar otra vez.\n') return restaurante.menu[opcion - 1].modificar_algo('i', new_info) elif cosa_a_modificar == '4': try: new_price = float(input('Ingrese nuevo precio: ')) if new_price < 0: raise Exception except: print('Opción elegida invalidad. Intentar otra vez.\n') return restaurante.menu[opcion - 1].modificar_algo('p', new_price) else: print('Opción elegida invalidad. Intentar otra vez.\n') return update_datos(restaurante) return
def main(): cruceros = get_cruceros() #Lista de todos los cruceros tours = get_tours() #Lista de todos los tours restaurante = get_restaurante() load_data(cruceros=cruceros) # Para mantener data de cruceros load_data(tours=tours) # Para mantener data de tours restaurante.update_menu() # Para mantenere data de restaurantes while True: opcion = m([ 'Gestión de Cruceros', 'Gestión de Habitaciones', 'Venta de tours', 'Gestión de restaurante', 'Estadísticas', 'Salir' ]).get_menu() if opcion == '1': # MODULO 1 while True: opcion12 = m(['Explorar Todos los Cruceros', 'Volver']).get_menu() if opcion12 == '1': # Representacion de Cruceros (1) representar_cruceros(cruceros) break elif opcion12 == '2': break else: print('Opción elegida invalidad. Intentar otra vez.\n') elif opcion == '2': # MODULO 2 while True: opcion21 = m([ 'Explorar Habitaciones', 'Reservar Habitación', 'Cancelar Reservación', 'Volver' ]).get_menu() if opcion21 == '1': # Para Explorar habitaciones disponibles while True: opcion22 = m([ 'Explorar todas las habitaciones dispobibles', 'Explorar Habitaciones por filtros', 'Volver' ]).get_menu() if opcion22 == '1': # Explorar todas (1) explorar_cruceros(cruceros) elif opcion22 == '2': # Explorar con filtros (4) explorar_cruceros_filtros(cruceros) elif opcion22 == '3': break else: print( 'Opción elegida invalidad. Intentar otra vez.\n' ) elif opcion21 == '2': # Para la compra de Habitacion (2) elegir_habitacion(cruceros) elif opcion21 == '3': cancelar_reservacion(cruceros) elif opcion21 == '4': break else: print('Opción elegida invalidad. Intentar otra vez.\n') elif opcion == '3': # MODULO 3 comprar_tour(tours) elif opcion == '4': # MODULO 4 while True: opcion41 = m([ 'Buscar item', 'Buscar Combo', 'Gestionar Items & Combos', 'Volver' ]).get_menu() if opcion41 == '1': buscar_item(restaurante) elif opcion41 == '2': buscar_combo(restaurante) elif opcion41 == '3': gestion_productos(restaurante) elif opcion41 == '4': break else: print('Opción elegida invalidad. Intentar otra vez.\n') elif opcion == '5': # MODULO 5 selecionar_estadistica() elif opcion == '6': print('Programa terminado. Hasta luego!') break else: print('Opción elegida invalidad. Intentar otra vez.\n')
def comprar_habitacion(habitacion, personas, cruceros): print( '\nA continuacion se le preguntara informacion necesaria para completar la compra.' ) current_cart = [] # Lista de objetos personas en la cuenta actual while True: if len( current_cart ) < personas: # Asegurar que la cantidad de personas que se registran coinciden con la cantidad del party try: if len(current_cart) == 0: print( f'\n⇃Datos de persona a pagar! (La compra estara a su nombre)' ) else: print(f'\n⇃Datos de persona #{len(current_cart) + 1}⇂') nombre = input('Ingrese su nombre: ') cedula = int(input('Ingerese su cedula: ')) edad = int(input('Ingrese su edad: ')) discapacidad = input('Sufre de alguna discapacidad? [Y/N]: ') if cedula < 0: # Para que gente no ponga numeros negativos raise Exception # Verificando que el input es Y o N. Y formatiando el valor para que sea bool if discapacidad == 'y' or discapacidad == 'Y': discapacidadF = True elif discapacidad == 'n' or discapacidad == 'N': discapacidadF = False else: raise Exception temp_persona = Persona( # Creando objeto persona nombre, cedula, edad, discapacidadF, habitacion.identificador, habitacion.costo) print(f'{temp_persona.nombre} se ha Registrado!' ) # Verificando Registracion current_cart.append(temp_persona) habitacion.agregar_personas( temp_persona) # porsicaso necesito una referencio luego except: print('Valor invalido. Intente otravez.') else: # Una vez que la cantidad de personas correctas se registren, salir del loop break # Una vez que se registraron todos. Mostramos factura y preguntamos si la compra se quire hacer para finalizar transaccion costo = mostrar_factura(current_cart) while True: print('Confirma tu compra') confirmar = m(['Si', 'Cancelar']).get_menu() if confirmar == '1': print('Tu Compra ha sido realizada!') update_datos(habitacion, costo, current_cart[0], cruceros) break elif confirmar == '2': print('Compra Cancelada') break else: print('Opción elegida invalidad. Intentar otra vez.\n')
def elegir_habitacion(cruceros): while True: o1 = m([ 'Comprar en base a destino', 'Comprar en base a crucero', 'Volver' ]).get_menu() if o1 == '1': #En base a destino destinos_disponibles = [] # Lista con destinos disponibles for crucero in cruceros: for destino in crucero.ruta: if destino not in destinos_disponibles: destinos_disponibles.append(destino) print(f'Destinos disponibles: \n') for destino in range(len(destinos_disponibles)): print(f' [{destino+1}] {destinos_disponibles[destino]}') o2 = input('\nEscoja Cual destino quiera: ') o22 = None for i in range(len(destinos_disponibles)): if o2 == f'{i+1}': o22 = destinos_disponibles[i] if o22 == None: # Si es invalida devolver print('Opción elegida invalidad. Intentar otra vez.\n') break cruceros_disponibles = [ ] # Todos los cruseros con el destino requerido for crucero in cruceros: for destino in crucero.ruta: if o22 in destino: if crucero.get_nombre( ) not in cruceros_disponibles: # Cunado una ruta esa dos veces cruceros_disponibles.append(crucero.get_nombre()) print(f'Los crucero con ese destino son: {cruceros_disponibles}\n') representar_cruceros(cruceros) # Mostrar cruceros actuales barco = input( f'NOTA! El(los) unico(s) crucero(s) con su destino querido es(son): {cruceros_disponibles}\nEliga el numero de crucero del cual quiera comprar una habitacion: ' ) for crucero in range(len(cruceros)): if barco == f'{crucero + 1}': comprar_por_criterios(cruceros[crucero], cruceros) return print('Opción elegida invalidad. Intentar otra vez.\n') elif o1 == '2': # En base a barco while True: representar_cruceros(cruceros) # Mostrar cruceros actuales barco = input( 'Eliga el numero de crucero del cual quiera comprar una habitacion: ' ) for crucero in range(len(cruceros)): if barco == f'{crucero + 1}': comprar_por_criterios(cruceros[crucero], cruceros) return print('Opción elegida invalidad. Intentar otra vez.\n') elif o1 == '3': break else: print('Opción elegida invalidad. Intentar otra vez.\n')