/// <summary> /// get the menu choice from the user /// </summary> public MenuOption DisplayGetUserMenuChoice() { MenuOption userMenuChoice = MenuOption.None; bool usingMenu = true; while (usingMenu) { // // set up display area // ConsoleUtil.DisplayReset(); Console.CursorVisible = false; // // display the menu // ConsoleUtil.DisplayMessage("Please type the number of your menu choice."); ConsoleUtil.DisplayMessage(""); Console.Write( "\t" + "1. Travel" + Environment.NewLine + "\t" + "2. Buy" + Environment.NewLine + "\t" + "3. Sell" + Environment.NewLine + "\t" + "4. Display Inventory" + Environment.NewLine + "\t" + "5. Display Cities" + Environment.NewLine + "\t" + "6. Display Account Info" + Environment.NewLine + "\t" + "E. Exit" + Environment.NewLine); // // get and process the user's response // note: ReadKey argument set to "true" disables the echoing of the key press // ConsoleKeyInfo userResponse = Console.ReadKey(true); switch (userResponse.KeyChar) { case '1': userMenuChoice = MenuOption.Travel; usingMenu = false; break; case '2': userMenuChoice = MenuOption.Buy; usingMenu = false; break; case '3': userMenuChoice = MenuOption.Sell; usingMenu = false; break; case '4': userMenuChoice = MenuOption.DisplayInventory; usingMenu = false; break; case '5': userMenuChoice = MenuOption.DisplayCities; usingMenu = false; break; case '6': userMenuChoice = MenuOption.DisplayAccountInfo; usingMenu = false; break; case 'E': case 'e': userMenuChoice = MenuOption.Exit; usingMenu = false; break; default: ConsoleUtil.DisplayMessage( "It appears you have selected an incorrect choice." + Environment.NewLine + "Press any key to continue or the ESC key to quit the application."); userResponse = Console.ReadKey(true); if (userResponse.Key == ConsoleKey.Escape) { usingMenu = false; } break; } } Console.CursorVisible = true; return(userMenuChoice); }
/// <summary> /// helper method to get a valid integer from the user within a range /// </summary> /// <param name="minValue">inclusive minimum value</param> /// <param name="maxValue">inclusive maximum value</param> /// <param name="maxAttempts">maximum number of attempts</param> /// <param name="pluralName">plural name of item</param> /// <param name="validInput">indicates valid user input</param> /// <returns></returns> public static bool TryGetIntegerFromUser(int minValue, int maxValue, int maxAttempts, string pluralName, out int userInteger) { bool validInput = false; bool maxAttemptsExceeded = false; string userResponse; string feedbackMessage = ""; int attempts = 1; userInteger = 0; while (!validInput && !maxAttemptsExceeded) { // // more attempts available // if (attempts <= maxAttempts) { ConsoleUtil.DisplayPromptMessage($"Enter the number, between {minValue} and {maxValue}, of {pluralName}:"); userResponse = Console.ReadLine(); ConsoleUtil.DisplayMessage(""); // // input is an Integer // if (int.TryParse(userResponse, out userInteger)) { // // input is in range // if (userInteger >= minValue && userInteger <= maxValue) { validInput = true; } // // input is not in range // else { feedbackMessage = $"The number {userInteger} is not in the specified range."; } } // // input is not an Integer // else { feedbackMessage = $"{userResponse} is not an integer."; } if (!validInput && attempts <= maxAttempts) { ConsoleUtil.DisplayMessage($"You entered: {userResponse}"); ConsoleUtil.DisplayMessage(feedbackMessage); if (attempts < maxAttempts) { ConsoleUtil.DisplayMessage($"Please enter an integer between {minValue} and {maxValue}."); ConsoleUtil.DisplayMessage("Press any key to try again."); Console.ReadKey(); } else { ConsoleUtil.DisplayMessage("It appears you have exceeded the maximum number of attempts allowed."); ConsoleUtil.DisplayMessage("Press any key to continue."); Console.ReadKey(); } Console.Clear(); } else { ConsoleUtil.DisplayMessage(""); } attempts++; } else { maxAttemptsExceeded = true; } } return(validInput); }