diff --git a/main.py b/main.py index 293827203d5384be609ab45c49c99dcef3e920d2..a92bdc7b4c4337ea69bae7107aabfdd170fc3de7 100644 --- a/main.py +++ b/main.py @@ -5,7 +5,7 @@ Assignment: Fractional Knapsack Problem Author: Brandon Rodriguez -<File Description Here> +Start of Fractional Knapsack Program. """ # System Imports. @@ -13,14 +13,14 @@ Author: Brandon Rodriguez # User Class Imports. from resources import logging as init_logging - +from resources.interface import UserInterface # Initialize Logger. logger = init_logging.get_logger(__name__) -def test(): - logger.info('Testing from main.py.') - - -test() +if __name__ == '__main__': + logger.info('Starting program.') + interface = UserInterface() + interface.user_interface_loop() + logger.info('Terminating program.') diff --git a/resources/interface.py b/resources/interface.py new file mode 100644 index 0000000000000000000000000000000000000000..e4e96fb10bf6517316f8c262c7e1f74fde7df4ef --- /dev/null +++ b/resources/interface.py @@ -0,0 +1,157 @@ +""" +Date: 09-20-19 +Class: CS5310 +Assignment: Fractional Knapsack Problem +Author: Brandon Rodriguez + + +User interface for program. +""" + +# System Imports. + + +# User Class Imports. +from resources import logging as init_logging +from resources.knapsack import FractionalKnapsackAlgorithm + + +# Initialize Logger. +logger = init_logging.get_logger(__name__) + + +class UserInterface(): + def __init__(self): + self._run_program_bool_ = True + self._knapsack_algorithm = FractionalKnapsackAlgorithm() + + def user_interface_loop(self): + """ + Basically the program start/root. Runs a loop until user exits. + """ + # Loop until user decides to exit program. + while self._run_program_bool_: + self.display_main_menu() + + # Get user's input. + user_input = input() + print('') + + # Handle based on input. + if user_input == '1': + self.set_program_values_menu() + print('') + elif user_input == '2': + self.display_program_values() + print('') + elif user_input == '3': + self.solve_knapsack_problem() + print('') + elif user_input == '4': + self._run_program_bool_ = False + print('Exiting Program') + print('') + else: + print('Unrecognized user input. Please try again.') + + def display_main_menu(self): + """ + Displays "Main Menu" to user. + """ + print('') + print('MAIN MENU') + print('Select an option:') + print(' 1) Set program values.') + print(' 2) Display current program values.') + print(' 3) Solve Knapsack Problem with current program values.') + print(' 4) Exit program.') + print('') + + #region Program Values Menu + + def set_program_values_menu(self): + """ + Display "set program values" menu to user. + """ + # Stay in menu until user manually leaves. + stay_in_menu = True + while stay_in_menu: + self.display_set_program_values_menu() + + # Get user's input. + user_input = input() + print('') + + # Handle based on input. + if user_input == '1': + self.set_max_weight() + print('') + elif user_input == '2': + self.clear_max_weight() + print('') + elif user_input == '3': + self.set_item_set_by_json() + print('') + elif user_input == '4': + self.add_to_item_Set() + print('') + elif user_input == '5': + self.clear_item_set() + print('') + elif user_input == '6': + stay_in_menu = False + print('') + else: + print('Unrecognized user input. Please try again.') + + def display_set_program_values_menu(self): + """ + Displays "Set Program Values" menu to user. + """ + print('') + print('PROGRAM VALUES MENU') + print('Select an option:') + print(' 1) Set "Max Weight" value.') + print(' 2) Clear "Max Weight" value.') + print(' 3) Set "Item Set" by JSON import.') + print(' 4) Add value to "Item Set" manually.') + print(' 5) Clear entire "Item Set".') + print(' 6) Back') + print('') + + def set_max_weight(self): + """ + Sets "Max Weight" value for program. + """ + + def clear_max_weight(self): + """ + Resets "Max Weight" value for program to 0. + """ + + def set_item_set_by_json(self): + """ + Sets "Item Set" value by importing from JSON file. + """ + + def add_to_item_Set(self): + """ + Adds new "Item" to "Item Set" by manual input. + """ + + def clear_item_set(self): + """ + Removes all items from item set. + """ + + #endregion Program Values Menu + + def display_program_values(self): + """ + Displays program values for user. + """ + + def solve_knapsack_problem(self): + """ + Solves knapsack with current problems and displays result to user. + """ diff --git a/resources/knapsack.py b/resources/knapsack.py index 9b06b194de3225ec73cd1722a37a8891ba966e69..123b23192c8b92bffc3f85e4ca5e48484750510d 100644 --- a/resources/knapsack.py +++ b/resources/knapsack.py @@ -20,7 +20,7 @@ from resources import logging as init_logging logger = init_logging.get_logger(__name__) -class Knapsack(): +class FractionalKnapsackAlgorithm(): """ Knapsack algorithm. """ @@ -70,6 +70,18 @@ class Knapsack(): self._max_weight_ = max_weight self._weight_populated_ = True + def display_item_set(self): + """ + Prints current item set with logging. + """ + logger.info('Current Item Set: {0}'.format(self._item_set_)) + + def display_max_weight(self): + """ + Prints current max weight with logging. + """ + logger.info('Current Max Weight: {0}'.format(self._max_weight_)) + def calculate_fractional_knapsack(self): """ Calculates optimal choices for fractional knapsack problem. diff --git a/tests/resources/knapsack.py b/tests/resources/knapsack.py index e9122752173894054ddccfe5eaf34e772d73daf7..6455b70b4314344a1d6d9809e891e3fdd329bc5f 100644 --- a/tests/resources/knapsack.py +++ b/tests/resources/knapsack.py @@ -12,12 +12,12 @@ Tests for knapsack.py. import unittest # User Class Imports. -from resources.knapsack import Knapsack +from resources.knapsack import FractionalKnapsackAlgorithm class TestKnapsack(unittest.TestCase): def setUp(self): - self.knapsack = Knapsack() + self.knapsack = FractionalKnapsackAlgorithm() self.item_set_1 = [ { @@ -58,7 +58,7 @@ class TestKnapsack(unittest.TestCase): ] def test_knapsack_creation(self): - self.assertTrue(isinstance(self.knapsack, Knapsack)) + self.assertTrue(isinstance(self.knapsack, FractionalKnapsackAlgorithm)) def test_set_item_set_success(self): self.knapsack.set_item_set(self.item_set_1)