From dcdf5acd99246af5b3b849663c1901c46e6d4e28 Mon Sep 17 00:00:00 2001
From: brodriguez8774 <brodriguez8774@gmail.com>
Date: Thu, 26 Sep 2019 19:10:10 -0400
Subject: [PATCH] Implement basic user interface menus

---
 main.py                     |  14 ++--
 resources/interface.py      | 157 ++++++++++++++++++++++++++++++++++++
 resources/knapsack.py       |  14 +++-
 tests/resources/knapsack.py |   6 +-
 4 files changed, 180 insertions(+), 11 deletions(-)
 create mode 100644 resources/interface.py

diff --git a/main.py b/main.py
index 2938272..a92bdc7 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 0000000..e4e96fb
--- /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 9b06b19..123b231 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 e912275..6455b70 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)
-- 
GitLab