static void Main(string[] args) { Console.WriteLine("Hello! Welcome to the Revature Resturaunt!"); string inputOne = "0"; int n; bool isNumeric; int menuSwitch = 1; // Menu switch guide //1 - start menu //2 - manager menu //3 - customer menu //4 - return customer menu //5 - new customer menu //6 - customer options menu //7 - manager store view menu //8 - order menu //9 - Select store ID bool whileInMenu = true; bool whileInSecondaryMenu = true; BusinessLogic.Objects.Customer retrievedCustomer = new BusinessLogic.Objects.Customer(); BusinessLogic.Objects.Store retrievedStore = new BusinessLogic.Objects.Store(); BusinessLogic.Objects.Order inputOrder = new BusinessLogic.Objects.Order(); List <BusinessLogic.Objects.Order> orderList = new List <BusinessLogic.Objects.Order>(); StoreApp.BusinessLogic.Objects.Manager retrievedManager = new BusinessLogic.Objects.Manager(); //DB initialization DbContextOptions <StoreApplicationContext> options = new DbContextOptionsBuilder <StoreApplicationContext>() .UseSqlServer(StoreApp.DataLibrary.ConnectionData.Secret.connectionString) .Options; using var context = new StoreApplicationContext(options); DBRHandler = new RetrieveDatabaseHandler(context); while (whileInMenu) { string managerIDInput; int managerID; int customerID; int storeNum; switch (menuSwitch) { case 1: //Start menu while (whileInSecondaryMenu) { Console.WriteLine("Are you using this console as a manager or a customer?\n[1] Manager\n[2] Customer\n"); inputOne = CheckAndReturnCustomerOptionChosen(Console.ReadLine(), 2); if (inputOne == "1") //Manager { //code for manager //Can display current stocks and things for locations and other things stored //Managment can stock their stores and check and edit customer data whileInSecondaryMenu = false; menuSwitch = 2; } else if (inputOne == "2") //Customer { //code for customer //Will run code to make new customer, retrieve old customer data, and place orders menuSwitch = 3; whileInSecondaryMenu = false; } else //Invalid input { Console.WriteLine("Invalid input, please type one of the following options"); } } whileInSecondaryMenu = true; //resets menu true to go into next menu break; case 2: // manager menu //Some code to compare manager ID to the table and welcome manager options while (whileInSecondaryMenu) { Console.WriteLine("What is your manager ID?"); managerIDInput = Console.ReadLine(); isNumeric = int.TryParse(managerIDInput, out n); if (isNumeric == false) { Console.WriteLine("Invalid characters. Please try again with a numerical value"); break; } else //if the input only has numbers in it { managerID = Int32.Parse(managerIDInput); try { retrievedManager = DBRHandler.GetManagerDataFromID(managerID); retrievedStore = DBRHandler.GetStoreFromStoreNumber(retrievedManager.storeNumberManaged); Console.WriteLine("Welcome back, " + retrievedManager.firstName + " " + retrievedManager.lastName + "!\nManager of Store Number: " + retrievedManager.storeNumberManaged + "\n"); menuSwitch = 7; whileInSecondaryMenu = false; //set case to go to the manager options menu on 7 } catch (NullReferenceException e) { Console.WriteLine("Unable to perform the operation due to null value returned with Customer ID " + managerID + ": " + e.Message + "\n"); } catch (Exception e) { Console.WriteLine("Unknown exeption " + e); } } } whileInSecondaryMenu = true; //resets menu true to go into next menu break; case 3: //general customer menu while (whileInSecondaryMenu) { Console.WriteLine("Are you a new customer or a return customer?\n[1] New Customer\n[2] Return Customer\n"); inputOne = CheckAndReturnCustomerOptionChosen(Console.ReadLine(), 2); if (inputOne == "1") { whileInSecondaryMenu = false; menuSwitch = 5; } else if (inputOne == "2") { whileInSecondaryMenu = false; menuSwitch = 4; } else { Console.WriteLine("Invalid input, please type one of the following options"); } } whileInSecondaryMenu = true; break; case 4: //return customer while (whileInSecondaryMenu) { Console.WriteLine("Welcome back! What is your customer ID?"); inputOne = Console.ReadLine(); isNumeric = int.TryParse(inputOne, out n); if (isNumeric == false) { Console.WriteLine("Invalid characters. Please try again with a numerical value"); break; } else //if the input only has numbers in it { customerID = Int32.Parse(inputOne); try { retrievedCustomer = DBRHandler.GetCustomerDataFromID(customerID); Console.WriteLine("Welcome back, " + retrievedCustomer.firstName + " " + retrievedCustomer.lastName + "! What can we do for you today?"); menuSwitch = 6; whileInSecondaryMenu = false; } catch (NullReferenceException e) { Console.WriteLine("Unable to perform the operation due to null value returned with Customer ID " + customerID + ": " + e.Message + "\n"); } catch (Exception e) { Console.WriteLine("Unknown exeption " + e); } } } whileInSecondaryMenu = true; //resets menu true to go into next menu break; case 5: //new customer menu StoreApp.BusinessLogic.Objects.Customer newCust = new StoreApp.BusinessLogic.Objects.Customer(); while (whileInSecondaryMenu) { if (newCust.CheckCustomerNotNull() == false) { if (newCust.firstName == null) { Console.WriteLine("What is your first name?"); newCust.firstName = Console.ReadLine(); } else if (newCust.lastName == null) { Console.WriteLine("What is your last name?"); newCust.lastName = Console.ReadLine(); } else if (newCust.customerAddress.CheckAddressNotNull() == false) { Console.WriteLine("Please enter an address. What is your street?"); newCust.customerAddress.street = Console.ReadLine(); Console.WriteLine("Please enter a city"); newCust.customerAddress.city = Console.ReadLine(); Console.WriteLine("Please enter a state"); newCust.customerAddress.state = Console.ReadLine(); Console.WriteLine("Please enter a zip"); newCust.customerAddress.zip = Console.ReadLine(); } } else { try { Console.WriteLine("Adding profile to database. . .\n"); DBIHandler.AddNewCustomerData(newCust, context); Console.WriteLine("Customer profile successfully created! Welcome, " + newCust.firstName + "!\n"); int newID = DBRHandler.GetNewCustomerID(); //Note, not safe for multiple connections to the DB inputting at once. Console.WriteLine("Your new customer ID is: " + newID); retrievedCustomer = DBRHandler.GetCustomerDataFromID(newID); whileInSecondaryMenu = false; menuSwitch = 6; } catch (Exception e) { Console.WriteLine("Unknown exception thrown: " + e); } } } whileInSecondaryMenu = true; //resets menu true to go into next menu break; case 6: //customer options menu while (whileInSecondaryMenu) { Console.WriteLine("Customer Options\n[1] Place order\n[2] View profile information\n[3] View order history\n[4] Exit to start menu"); inputOne = CheckAndReturnCustomerOptionChosen(Console.ReadLine(), 4); if (inputOne == "1") { whileInSecondaryMenu = false; menuSwitch = 9; } else if (inputOne == "2") { Console.WriteLine("\n------------------------------------------"); Console.WriteLine("Name: " + retrievedCustomer.firstName + " " + retrievedCustomer.lastName); Console.WriteLine("ID: " + retrievedCustomer.customerID); Console.WriteLine("\nAddress: \n" + retrievedCustomer.customerAddress.street + "\n" + retrievedCustomer.customerAddress.city + "\n" + retrievedCustomer.customerAddress.state + "\n" + retrievedCustomer.customerAddress.zip); Console.WriteLine("------------------------------------------\n"); } else if (inputOne == "3") { orderList = DBRHandler.GetListOfOrdersByCustomerID(retrievedCustomer.customerID); foreach (BusinessLogic.Objects.Order BLOrder in orderList) { BLOrder.customerProductList = DBRHandler.GetListOrderProductByOrderID(BLOrder); BLOrder.storeLocation = DBRHandler.GetStoreInformationFromOrderNumber(BLOrder.orderID); } if (orderList == null || orderList.Count == 0) { Console.WriteLine("No orders to display under " + retrievedCustomer.firstName + " " + retrievedCustomer.lastName); } else { foreach (BusinessLogic.Objects.Order order in orderList) { Console.WriteLine("-------------------------------"); Console.WriteLine("Store Number: " + order.storeLocation.storeNumber); Console.WriteLine("Order Number: " + order.orderID); foreach (BusinessLogic.Objects.Product product in order.customerProductList) { Console.WriteLine(product.name + ": " + product.amount); } } Console.WriteLine("-------------------------------\n"); } } else if (inputOne == "4") { whileInSecondaryMenu = false; retrievedCustomer = new BusinessLogic.Objects.Customer(); //resets the customer data that was retrieved by this point in the menu menuSwitch = 1; } else { Console.WriteLine("Invalid input, please type one of the following options"); } } whileInSecondaryMenu = true; //resets menu true to go into next menu break; case 7: //manager store view menu while (whileInSecondaryMenu) { Console.WriteLine("Options\n[1] View Store Information\n[2] View Store Inventory\n[3] View all customer order history\n[4] Exit to start menu"); inputOne = CheckAndReturnCustomerOptionChosen(Console.ReadLine(), 4); if (inputOne == "1") //View store info { Console.WriteLine("------------ Information for Store Number " + retrievedStore.storeNumber + " ------------"); Console.WriteLine("Address: \nStreet: " + retrievedStore.address.street + "\nCity: " + retrievedStore.address.city + "\nState: " + retrievedStore.address.state + "\nZip: " + retrievedStore.address.zip + "\n"); } else if (inputOne == "2") //View store inventory { retrievedStore.storeInventory = DBRHandler.GetStoreInventoryByStoreNumber(retrievedStore.storeNumber); Console.WriteLine("------------ Store inventory ------------"); foreach (BusinessLogic.Objects.Product BLProd in retrievedStore.storeInventory.productData) { Console.WriteLine(BLProd.name + ": " + BLProd.amount); } Console.WriteLine("\n"); } else if (inputOne == "3") { orderList = new List <BusinessLogic.Objects.Order>(); orderList = DBRHandler.GetListOfOrdersFromStoreNumber(retrievedStore.storeNumber); foreach (BusinessLogic.Objects.Order BLOrder in orderList) { BLOrder.customerProductList = DBRHandler.GetListOrderProductByOrderID(BLOrder); BLOrder.storeLocation = DBRHandler.GetStoreInformationFromOrderNumber(BLOrder.orderID); } if (orderList == null || orderList.Count == 0) { Console.WriteLine("No orders to display under " + retrievedCustomer.firstName + " " + retrievedCustomer.lastName); } else { foreach (BusinessLogic.Objects.Order order in orderList) { if (order.storeLocation.storeNumber == retrievedStore.storeNumber) { Console.WriteLine("-------------------------------"); Console.WriteLine("Store Number: " + order.storeLocation.storeNumber); Console.WriteLine("Order Number: " + order.orderID); Console.WriteLine("Customer ID: " + order.customer.customerID); foreach (BusinessLogic.Objects.Product product in order.customerProductList) { Console.WriteLine(product.name + ": " + product.amount); } } } Console.WriteLine("-------------------------------\n"); } } else if (inputOne == "4") { retrievedManager = new BusinessLogic.Objects.Manager(); retrievedStore = new BusinessLogic.Objects.Store(); menuSwitch = 1; whileInSecondaryMenu = false; } } whileInSecondaryMenu = true; break; case 8: //Order menu bool decided = false; string temp; while (whileInSecondaryMenu) { while (decided == false) { try { inputOrder = new BusinessLogic.Objects.Order(); BusinessLogic.Objects.Product inputProd = new BusinessLogic.Objects.Product(); retrievedStore.storeInventory = DBRHandler.GetStoreInventoryByStoreNumber(retrievedStore.storeNumber); foreach (BusinessLogic.Objects.Product prod in retrievedStore.storeInventory.productData) { inputProd = prod; inputProd.amount = 0; Console.WriteLine("How many " + prod.name + " would you like to order?\n"); temp = Console.ReadLine(); inputProd.amount = Int32.Parse(temp); inputOrder.customerProductList.Add(inputProd); } Console.WriteLine("---------------------------"); Console.WriteLine("Your order consists of: \n"); foreach (BusinessLogic.Objects.Product prod in inputOrder.customerProductList) { Console.WriteLine(prod.name + ": " + prod.amount + "\n"); } Console.WriteLine("Is this alright?" + "\n[1] Yes\n[2] No"); inputOne = CheckAndReturnCustomerOptionChosen(Console.ReadLine(), 2); if (inputOne == "1") { decided = true; Console.WriteLine("Please wait while your order is created. . .\n"); //uses input handler to input order into DB inputOrder.customer = retrievedCustomer; inputOrder.storeLocation = retrievedStore; bool goodOrder = inputOrder.CheckOrderIsValid(); //goodOrder = retrievedStore.storeInventory.CheckOrderAgainstInventory(inputOrder.customerProductList); if (goodOrder == true) { try { InputWholeOrderAndUpdateInventory(inputOrder, retrievedStore, context); menuSwitch = 6; whileInSecondaryMenu = false; Console.WriteLine("Order successfully created! Thank you for your business!\nReturning back to customer menu. . . \n"); } catch (Exception e) { Console.WriteLine("Unable to perform the operation: \n" + e.Message); } } else { Console.WriteLine("Order was invalid! Please try again with acceptable values!"); inputOrder = new Order(); decided = false; } } else if (inputOne == "2") { Console.WriteLine("Please type in your order once more with the desired values."); } else { Console.WriteLine("Invalid input, please type one of the following options."); } } catch (Exception e) { Console.WriteLine(e.Message + "\nPlease enter correct numerical values for your order."); } } } whileInSecondaryMenu = true; break; case 9: //Select order store menu while (whileInSecondaryMenu) { Console.WriteLine("What store number are you ordering from?"); inputOne = Console.ReadLine(); isNumeric = int.TryParse(inputOne, out n); if (isNumeric == false) { Console.WriteLine("Invalid characters. Please try again with a numerical value"); break; } else //if the input only has numbers in it { storeNum = Int32.Parse(inputOne); try { retrievedStore = DBRHandler.GetStoreFromStoreNumber(storeNum); menuSwitch = 8; whileInSecondaryMenu = false; } catch (Exception e) { Console.WriteLine("Error finding store with input ID: " + e.Message + "\n"); } } } whileInSecondaryMenu = true; break; default: Console.WriteLine("Default case"); break; } } }