def main(): m = HashMap() m.load_package_details("package_details.txt", m) d = Distance() d.load_distances('node_list.txt', 'combo.txt', d) t = Truck() truck_1_packages, truck_2_packages, truck_3_packages = t.prep_trucks() all_packages = combine_lists(truck_1_packages, truck_2_packages, truck_3_packages) print print(42 * "-") print("Data Structures and Algorithms 2 - C950") print(13 * " " + "Rob Muhlestein") print(42 * "-") print(30 * '-') print(6 * " " + "M A I N - M E N U") print(30 * '-') print("1. Lookup package details (ID input & Time input") print("2. Lookup package details (Address input & Time input") print("3. Run Delivery Simulation - Input Time") print("4. Print Delivery Report (ID# & Status Only) - Input Time") print(30 * '-') ## Get Input ### choice = raw_input() ### Take action as per selected menu-option ## if choice == '1': # lookup package details (ID and time input) print("Preparing Simulation...") for packages in all_packages: m.retrieve(packages) print user_time = raw_input( "What time would you like to simulate? \n (24 hr format e.g. 0900, 1315): " ) if len(user_time) != 4 or ":" in user_time: # raise error message if time entered is not in a useable format raise ValueError( "Entry: {} is not a valid entry.\n\tPlease ensure the time you enter is in the format '0000'. E.g. 0900.\n\tDo not include ':' or 'AM' or 'PM'." .format(user_time)) else: if user_time[-2:] > '59': # raise error message if time entered isn't a valid time raise ValueError( 'Entry: {} -- minutes > 59 is not a valid time entry.'. format(user_time)) else: inquiry_ID = raw_input("Enter ID#: ") elapsed_time = convert_time(user_time) if elapsed_time < 65: # 0905 # 0800- all trucks get loaded # Truck 1, having the highest priority packages, # leaves first truck_1 = t.load_truck(m, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print("\nPrinting Package Info for {}".format(inquiry_ID)) key, vals = m.retrieve(inquiry_ID) print("{}: {}".format(key, vals)) main() elif elapsed_time < 140: # 1020 # 0905 Delayed packages arrive # Truck 2 delivers delayed packages # with 1030 deadline first. # Truck 1 should arrive back to the hub @ 1007 truck_1 = t.load_truck(m, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) send_2(m, start_time, distances_2, truck_2) print("\nPrinting Package Info for {}".format(inquiry_ID)) key, vals = m.retrieve(inquiry_ID) print("{}: {}".format(key, vals)) main() else: # wrong address is corrected # Truck 3 leaves after correction at 1020 truck_1 = t.load_truck(m, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) total_1 = send_1(m, elapsed_time, distances_1, truck_1) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) total_2 = send_2(m, start_time, distances_2, truck_2) start_time = elapsed_time - 140 new_address = "410 S State St" correct_address(m, truck_3_packages, new_address) truck_3 = t.load_truck(m, d, truck_3_packages) distances_3 = d.distance_traveled(elapsed_time, truck_3) total_3 = send_3(m, start_time, distances_3, truck_3) print("\nPrinting Package Info for {}".format(inquiry_ID)) key, vals = m.retrieve(inquiry_ID) print("{}: {}".format(key, vals)) main() elif choice == '2': # lookup package details address and time print("Preparing Simulation...") for packages in all_packages: m.retrieve(packages) print user_time = raw_input( "What time would you like to simulate? \n (24 hr format e.g. 0900, 1315): " ) if len(user_time) != 4 or ":" in user_time: # raise error message if time entered is not in a useable format raise ValueError( "Entry: {} is not a valid entry.\n\tPlease ensure the time you enter is in the format '0000'. E.g. 0900.\n\tDo not include ':' or 'AM' or 'PM'." .format(user_time)) else: if user_time[-2:] > '59': # raise error message if time entered isn't a valid time raise ValueError( 'Entry: {} -- minutes > 59 is not a valid time entry.'. format(user_time)) else: inquiry_address = raw_input("Enter Address: ") elapsed_time = convert_time(user_time) if elapsed_time < 65: # 0905 # 0800- all trucks get loaded # Truck 1, having the highest priority packages, # leaves first truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print("\nPrinting status for package(s) going to {}". format(inquiry_address)) packages = m.get_package_number(inquiry_address) print("{}\t{}\t{}".format(inquiry_address, packages, m.get_status(packages[0]))) main() elif elapsed_time < 140: # 1020 # 0905 Delayed packages arrive # Truck 2 delivers delayed packages # with 1030 deadline first. # Truck 1 should arrive back to the hub @ 1007 truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, d, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) send_2(m, start_time, distances_2, truck_2) print("\nPrinting status for package(s) going to {}". format(inquiry_address)) packages = m.get_package_number(inquiry_address) print("{}\t{}\t{}".format(inquiry_address, packages, m.get_status(packages[0]))) main() else: # wrong address is corrected # Truck 3 leaves after correction at 1020 truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) total_1 = send_1(m, elapsed_time, distances_1, truck_1) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, d, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) total_2 = send_2(m, start_time, distances_2, truck_2) start_time = elapsed_time - 140 new_address = "410 S State St" correct_address(m, truck_3_packages, new_address) truck_3 = t.load_truck(m, d, truck_3_packages) distances_3 = d.distance_traveled(elapsed_time, truck_3) total_3 = send_3(m, start_time, distances_3, truck_3) print("\nPrinting status for package(s) going to {}". format(inquiry_address)) packages = m.get_package_number(inquiry_address) print("{}\t{}\t{}".format(inquiry_address, packages, m.get_status(packages[0]))) main() elif choice == '3': print("Preparing Simulation...") for packages in all_packages: m.retrieve(packages) print user_time = raw_input( "What time would you like to simulate? \n (24 hr format e.g. 0900, 1315): " ) if len(user_time) != 4 or ":" in user_time: # raise error message if time entered is not in a useable format raise ValueError( "Entry: {} is not a valid entry.\n\tPlease ensure the time you enter is in the format '0000'. E.g. 0900.\n\tDo not include ':' or 'AM' or 'PM'." .format(user_time)) else: if user_time[-2:] > '59': # raise error message if time entered isn't a valid time raise ValueError( 'Entry: {} -- minutes > 59 is not a valid time entry.'. format(user_time)) else: elapsed_time = convert_time(user_time) if elapsed_time < 65: # 0905 # 0800- all trucks get loaded # Truck 1, having the highest priority packages, # leaves first print( '\nloading truck 1...\ntruck 1 departed the hub at 0800\nstatus of packages on truck 1 as of {}...' .format(user_time)) truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print('\ntruck 2 is scheduled to leave the hub at 0905') print("truck 3 is scheduled to leave the hub at 1020") main() elif elapsed_time < 140: # 1020 # 0905 Delayed packages arrive # Truck 2 delivers delayed packages # with 1030 deadline first. # Truck 1 should arrive back to the hub @ 1007 print( '\nloading truck 1...\ntruck 1 departed the hub at 0800\nstatus of packages on truck 1 as of {}...' .format(user_time)) truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print( '\nloading truck 2...\ntruck 2 departed the hub at 0905\nstatus of packages on truck 2 as of {}...' .format(user_time)) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, d, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) send_2(m, start_time, distances_2, truck_2) print("\ntruck 3 is scheduled to leave the hub at 1020") main() else: # wrong address is corrected # Truck 3 leaves after correction at 1020 print( '\nloading truck 1...\ntruck 1 departed the hub at 0800\nstatus of packages on truck 1 as of {}...' .format(user_time)) truck_1 = t.load_truck(m, d, truck_1_packages) distances_1 = d.distance_traveled(elapsed_time, truck_1) total_1 = send_1(m, elapsed_time, distances_1, truck_1) print("total milage for truck 1: {}".format(total_1)) print( '\nloading truck 2...\ntruck 2 departed the hub at 0905\nstatus of packages on truck 2 as of {}...' .format(user_time)) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, d, truck_2_packages) distances_2 = d.distance_traveled(elapsed_time, truck_2) total_2 = send_2(m, start_time, distances_2, truck_2) print("total milage for truck 2: {}".format(total_2)) print( '\nloading truck 3...\ntruck 3 departed the hub at 1020\nstatus of packages on truck 3 as of {}...' .format(user_time)) start_time = elapsed_time - 140 new_address = "410 S State St" correct_address(m, truck_3_packages, new_address) truck_3 = t.load_truck(m, d, truck_3_packages) distances_3 = d.distance_traveled(elapsed_time, truck_3) total_3 = send_3(m, start_time, distances_3, truck_3) print("total milage for truck 3: {}".format(total_3)) #print("\nPrinting Package Report as of {}...\n".format(user_time)) #m.print_all() truck_total = float(total_1) + float(total_2) + float( total_3) print("\nTotal distance traveled by all trucks: {:0.1f}". format(truck_total)) print("Last package is delivered at: 1229") main() elif choice == '4': print("Preparing Simulation...") for packages in all_packages: m.retrieve(packages) print user_time = raw_input( "What time would you like to simulate? \n (24 hr format e.g. 0900, 1315): " ) if len(user_time) != 4 or ":" in user_time: # raise error message if time entered is not in a useable format raise ValueError( "Entry: {} is not a valid entry.\n\tPlease ensure the time you enter is in the format '0000'. E.g. 0900.\n\tDo not include ':' or 'AM' or 'PM'." .format(user_time)) else: if user_time[-2:] > '59': # raise error message if time entered isn't a valid time raise ValueError( 'Entry: {} -- minutes > 59 is not a valid time entry.'. format(user_time)) else: elapsed_time = convert_time(user_time) if elapsed_time < 65: # 0905 # 0800- all trucks get loaded # Truck 1, having the highest priority packages, # leaves first print( '\nloading truck 1...\ntruck 1 has the following destinations' ) truck_1 = t.load_truck(m, truck_1_packages) print(truck_1) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print("\nPrinting Status Report as of {}...\n".format( user_time)) m.print_all_status() main() elif elapsed_time < 140: # 1020 # 0905 Delayed packages arrive # Truck 2 delivers delayed packages # with 1030 deadline first. # Truck 1 should arrive back to the hub @ 1007 print( '\nloading truck 1...\ntruck 1 has the following destinations' ) truck_1 = t.load_truck(m, truck_1_packages) print(truck_1) distances_1 = d.distance_traveled(elapsed_time, truck_1) send_1(m, elapsed_time, distances_1, truck_1) print( '\nloading truck 2...\ntruck 2 has the following destinations' ) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, truck_2_packages) print(truck_2) distances_2 = d.distance_traveled(elapsed_time, truck_2) send_2(m, start_time, distances_2, truck_2) print("\nPrinting Status Report as of {}...\n".format( user_time)) m.print_all_status() main() else: # wrong address is corrected # Truck 3 leaves after correction at 1020 print( '\nloading truck 1...\ntruck 1 has the following destinations' ) truck_1 = t.load_truck(m, truck_1_packages) print(truck_1) distances_1 = d.distance_traveled(elapsed_time, truck_1) total_1 = send_1(m, elapsed_time, distances_1, truck_1) print( '\nloading truck 2...\ntruck 2 has the following destinations' ) start_time = elapsed_time - 65 truck_2 = t.load_truck(m, truck_2_packages) print(truck_2) distances_2 = d.distance_traveled(elapsed_time, truck_2) total_2 = send_2(m, start_time, distances_2, truck_2) print( '\nloading truck 3...\ntruck 3 has the following destinations' ) start_time = elapsed_time - 140 new_address = "410 S State St" correct_address(m, truck_3_packages, new_address) truck_3 = t.load_truck(m, d, truck_3_packages) print(truck_3) distances_3 = d.distance_traveled(elapsed_time, truck_3) total_3 = send_3(m, start_time, distances_3, truck_3) print("\nPrinting Status Report as of {}...\n".format( user_time)) m.print_all_status() print("\nDay ends at: 1312") print("Total distance traveled by all trucks at 1312: {}". format( float(total_1) + float(total_2) + float(total_3))) main() else: print("\n======= Invalid Selection. Please try again. ========") print(" ================= select [1-3] =================\n") main()