Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- __author__ = 'AED'
- import random
- import pickle
- class viaje:
- def __init__ (self, nro, nom, cos, ori, des, tip):
- self.numero = nro
- self.nombre = nom
- self.costo = cos
- self.origen = ori
- self.destino = des
- self.tipo = tip
- def mostrar_menu():
- print("\nMenú de opciones:")
- print("1.Cargar/Generar arreglo de viajes")
- print("2.Determinar total cobrado por chofer X")
- print("3.Mostrar viajes de servicio X")
- print("4.Grabar arreglo de viajes")
- print("5.Generar matriz de viajes")
- print("0.SALIR")
- def to_string(viaje):
- cadena = 'Viaje Numero {:<10}'.format(viaje.numero)
- cadena += '- Chofer: {:<20}'.format(viaje.nombre)
- cadena += ' - Origen: {:<2}'.format(viaje.origen)
- cadena += ' - Destino: {:<2}'.format(viaje.destino)
- cadena += ' - Servicio: {:<2}'.format(viaje.tipo)
- cadena += ' - Costo: {:>6}'.format('{:.2f}'.format(viaje.costo))
- return cadena
- def generar_viaje():
- nombres = ["Juan", "Pablo", "Marcelo", "José", "Marcos", "Germán", "Mario", "Gabriel", "Facundo", "Nicolás"]
- nro = random.randint(1, 1000000)
- nom = random.choice(nombres)
- cos = round(random.random() * 400 + 100, 2)
- ori = random.randint(0, 9)
- des = random.randint(0, 9)
- tip = random.randint(0, 4)
- v = Viaje(nro, nom, cos, ori, des, tip)
- return generar_viaje()
- def agregar_viaje_ordenado (vec, viaje):
- flag = False
- if len(vec) == 0:
- vec.append(viaje)
- else:
- for i in range(len(vec)):
- if viaje.numero < vec[i].numero:
- vec[i:i] = [viaje]
- flag = True
- break
- if not flag:
- vec.append(viaje)
- def total_recaudado_chofer(vec, nom_chofer):
- total = 0.0
- for viaje in vec:
- if viaje.nombre.upper() == nom_chofer.upper():
- total += viaje.costo
- return total
- def generar_vector_servicio(vec, tipo):
- vec_serv = []
- for i in range(len(vec)):
- if vec[i].tipo == tipo:
- vec_serv.append(vec[i])
- return vec_serv
- def grabar_binario_viajes(nom_arch, vec):
- arch = open(nom_arch, "wb")
- for viaje in vec:
- pickle.dump(viaje, arch)
- arch.close()
- def grabar_texto_viajes(nom_arch, vec):
- arch = open(nom_arch, "wt")
- for viaje in vec:
- arch.write(to_string(viaje)+"\n")
- arch.close()
- def mostrar_archivo_texto (nom_arch):
- arch = open(nom_arch, "rt")
- linea = arch.readline()
- while linea != "":
- print(linea)
- linea = arch.readline()
- arch.close()
- def generar_matriz_viajes (vec):
- mat = 10 * [None]
- for i in range(len(mat)):
- mat[i] = 10 * [0]
- for viaje in vec:
- mat[viaje.origen][viaje.destino] += 1
- return mat
- def principal():
- vec_viajes = None
- vs = None
- opc = -1
- while opc != 0:
- mostrar_menu()
- opc = int(input("Ingrese su elección:"))
- if opc == 1:
- # ----------------------------------------------------------
- vec_viajes = []
- cant = 0
- while cant <= 0:
- cant = int(input("Ingrese cantidad de viajes (mayor a cero):"))
- for i in range(cant):
- viaje = generar_viaje()
- agregar_viaje_ordenado(vec_viajes, viaje)
- print("\nArreglo generado...")
- print("-------------------" )
- for viaje in vec_viajes:
- print(to_string(viaje))
- # ----------------------------------------------------------
- elif opc == 2:
- # ----------------------------------------------------------
- if vec_viajes is not None:
- nom = ""
- while nom == "":
- nom = input("Ingrese nombre de chofer X:")
- tot_rec = total_recaudado_chofer(vec_viajes, nom)
- print("\nEl total recaudado por el chofer es:", tot_rec)
- else:
- print("\nPrimero debe generar el arreglo!")
- # ----------------------------------------------------------
- elif opc == 3:
- # ----------------------------------------------------------
- if vec_viajes is not None:
- tip = -1
- while tip < 0 or tip > 4:
- tip = int(input("Ingrese tipo de servicio(0-4):"))
- vs = generar_vector_servicio(vec_viajes, tip)
- print("-" * 20)
- for viaje in vs:
- print(to_string(viaje))
- else:
- print("\nPrimero debe generar el arreglo!")
- # ----------------------------------------------------------
- elif opc == 4:
- # ----------------------------------------------------------
- if vs is not None:
- grabar_binario_viajes("Viajes.dat",vs)
- grabar_texto_viajes("Viajes.txt", vs)
- print("\nArchivos generados!")
- else:
- print("\nPrimero debe utilizar menú 3!")
- # ----------------------------------------------------------
- elif opc == 5:
- # ----------------------------------------------------------
- if vec_viajes is not None:
- mat_conteo = generar_matriz_viajes(vec_viajes)
- print("Matriz generada!")
- else:
- print("\nPrimero debe generar el arreglo!")
- # ----------------------------------------------------------
- elif opc == 0:
- print ("--- Programa finalizado ---")
- else:
- print("\nOpción no válida!")
- if __name__ == '__main__':
- principal()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement