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