From a8d70cfc757377913118dafa5f618ecf8938d5db Mon Sep 17 00:00:00 2001 From: jasonunrau Date: Mon, 1 Feb 2016 13:48:32 -0600 Subject: [PATCH] Refactoring Training --- Refactoring/Tusc.cs | 433 +++++++++++++++++++++++++------------------- 1 file changed, 246 insertions(+), 187 deletions(-) diff --git a/Refactoring/Tusc.cs b/Refactoring/Tusc.cs index bd07dce..8ace14f 100644 --- a/Refactoring/Tusc.cs +++ b/Refactoring/Tusc.cs @@ -10,221 +10,280 @@ namespace Refactoring { public class Tusc { - public static void Start(List usrs, List prods) + private static User loggedInUser; + + public static void Start(List users, List products) + { + ShowWelcomeMessage(); + + if (logInUser(users)) + { + DisplayRemainingBalance(); + purchaseGoods(users, products); + } + else + { + DisplayInvalidUserMessage(); + } + + Exit(); + } + + #region Methods + + private static void ShowWelcomeMessage() { - // Write welcome message Console.WriteLine("Welcome to TUSC"); Console.WriteLine("---------------"); + } - // Login - Login: - bool loggedIn = false; // Is logged in? + private static bool logInUser(List users) + { + bool isValidUser = false; + string userName = PromptUser("Enter Username:"); - // Prompt for user input + if ((!string.IsNullOrEmpty(userName)) && ValidUserName(users, userName)) + { + if (ValidPassword(users, userName)) + { + isValidUser = true; + } + } + return isValidUser; + } + + private static string PromptUser(string text) + { Console.WriteLine(); - Console.WriteLine("Enter Username:"); - string name = Console.ReadLine(); + Console.WriteLine(text); + return Console.ReadLine(); + } - // Validate Username - bool valUsr = false; // Is valid user? - if (!string.IsNullOrEmpty(name)) + private static bool ValidUserName(List users, string userName) + { + bool isUserValid = false; + + for (int i = 0; i < users.Count; i++) { - for (int i = 0; i < 5; i++) + User user = users[i]; + // Check that name matches + if (user.Name == userName) { - User user = usrs[i]; - // Check that name matches - if (user.Name == name) - { - valUsr = true; - } + isUserValid = true; } + } + + + return isUserValid; + } + + private static bool ValidPassword(List users, string userName) + { + bool isPasswordValid = false; + string userPassword = PromptUser("Enter Password:"); + + - // if valid user - if (valUsr) + for (int i = 0; i < users.Count; i++) + { + if (users[i].Name == userName && users[i].Pwd == userPassword) { - // Prompt for user input - Console.WriteLine("Enter Password:"); - string pwd = Console.ReadLine(); + loggedInUser = users[i]; + isPasswordValid = true; + } + } - // Validate Password - bool valPwd = false; // Is valid password? - for (int i = 0; i < 5; i++) - { - User user = usrs[i]; + if (isPasswordValid) + { + DisplayLoginSuccessMessage(); + } + else + { + DisplayLoginFailureMessage(); + } - // Check that name and password match - if (user.Name == name && user.Pwd == pwd) - { - valPwd = true; - } - } + return isPasswordValid; + } - // if valid password - if (valPwd == true) - { - loggedIn = true; - - // Show welcome message - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine(); - Console.WriteLine("Login successful! Welcome " + name + "!"); - Console.ResetColor(); - - // Show remaining balance - double bal = 0; - for (int i = 0; i < 5; i++) - { - User usr = usrs[i]; + private static void DisplayLoginSuccessMessage() + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine(); + Console.WriteLine("Login successful! Welcome " + loggedInUser.Name + "!"); + Console.ResetColor(); + } - // Check that name and password match - if (usr.Name == name && usr.Pwd == pwd) - { - bal = usr.Bal; + private static void DisplayLoginFailureMessage() + { - // Show balance - Console.WriteLine(); - Console.WriteLine("Your balance is " + usr.Bal.ToString("C")); - } - } + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(); + Console.WriteLine("You entered an invalid password."); + Console.ResetColor(); + } - // Show product list - while (true) - { - // Prompt for user input - Console.WriteLine(); - Console.WriteLine("What would you like to buy?"); - for (int i = 0; i < 7; i++) - { - Product prod = prods[i]; - Console.WriteLine(i + 1 + ": " + prod.Name + " (" + prod.Price.ToString("C") + ")"); - } - Console.WriteLine(prods.Count + 1 + ": Exit"); - - // Prompt for user input - Console.WriteLine("Enter a number:"); - string answer = Console.ReadLine(); - int num = Convert.ToInt32(answer); - num = num - 1; /* Subtract 1 from number - num = num + 1 // Add 1 to number */ - - // Check if user entered number that equals product count - if (num == 7) - { - // Update balance - foreach (var usr in usrs) - { - // Check that name and password match - if (usr.Name == name && usr.Pwd == pwd) - { - usr.Bal = bal; - } - } - - // Write out new balance - string json = JsonConvert.SerializeObject(usrs, Formatting.Indented); - File.WriteAllText(@"Data/Users.json", json); - - // Write out new quantities - string json2 = JsonConvert.SerializeObject(prods, Formatting.Indented); - File.WriteAllText(@"Data/Products.json", json2); - - - // Prevent console from closing - Console.WriteLine(); - Console.WriteLine("Press Enter key to exit"); - Console.ReadLine(); - return; - } - else - { - Console.WriteLine(); - Console.WriteLine("You want to buy: " + prods[num].Name); - Console.WriteLine("Your balance is " + bal.ToString("C")); - - // Prompt for user input - Console.WriteLine("Enter amount to purchase:"); - answer = Console.ReadLine(); - int qty = Convert.ToInt32(answer); - - // Check if balance - quantity * price is less than 0 - if (bal - prods[num].Price * qty < 0) - { - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(); - Console.WriteLine("You do not have enough money to buy that."); - Console.ResetColor(); - continue; - } - - // Check if quantity is less than quantity - if (prods[num].Qty <= qty) - { - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(); - Console.WriteLine("Sorry, " + prods[num].Name + " is out of stock"); - Console.ResetColor(); - continue; - } - - // Check if quantity is greater than zero - if (qty > 0) - { - // Balance = Balance - Price * Quantity - bal = bal - prods[num].Price * qty; - - // Quanity = Quantity - Quantity - prods[num].Qty = prods[num].Qty - qty; - - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Green; - Console.WriteLine("You bought " + qty + " " + prods[num].Name); - Console.WriteLine("Your new balance is " + bal.ToString("C")); - Console.ResetColor(); - } - else - { - // Quantity is less than zero - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Yellow; - Console.WriteLine(); - Console.WriteLine("Purchase cancelled"); - Console.ResetColor(); - } - } - } + private static void DisplayRemainingBalance() + { + Console.WriteLine(); + Console.WriteLine("Your balance is " + loggedInUser.Bal.ToString("C")); + } + + private static void DisplayProductList(List products) + { + Console.WriteLine(); + Console.WriteLine("What would you like to buy?"); + + for (int i = 0; i < products.Count; i++) + { + Product product = products[i]; + Console.WriteLine(i + 1 + ": " + product.Name + " (" + product.Price.ToString("C") + ")"); + } + + Console.WriteLine(products.Count + 1 + ": Exit"); + } + + private static void purchaseGoods(List users, List products) + { + + while (true) + { + DisplayProductList(products); + string userInput = PromptUser("Enter a number:"); + int productItem = Convert.ToInt32(userInput) - 1; + + if (productItem == products.Count) + { + UpdateUsers(users); + UpdateProducts(products); + return; + } + else + { + DisplayProductSelection(products, productItem); + int productQuantity = PromptForProductQuantity(); + + if (productQuantity <= 0) + { + DisplayProductCancelledMessage(); + break; } else { - // Invalid Password - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(); - Console.WriteLine("You entered an invalid password."); - Console.ResetColor(); - - goto Login; + //Check if they have sufficient funds + if (loggedInUser.Bal - products[productItem].Price * productQuantity < 0) + { + DisplayLowBalanceMessage(); + continue; + } + //check if there is enough stock + if (products[productItem].Qty > productQuantity && productQuantity > 0) + { + PurchaseProduct(products, productItem, productQuantity); + DisplayProductPurchase(products, productItem, productQuantity); + continue; + } + else + { + DisplayLowStockMessage(products, productItem); + continue; + } } } - else - { - // Invalid User - Console.Clear(); - Console.ForegroundColor = ConsoleColor.Red; - Console.WriteLine(); - Console.WriteLine("You entered an invalid user."); - Console.ResetColor(); - - goto Login; - } } - // Prevent console from closing + + } + + private static void UpdateUsers(List users) + { + // Write out new balance + string json = JsonConvert.SerializeObject(users, Formatting.Indented); + File.WriteAllText(@"Data/Users.json", json); + } + + private static void UpdateProducts(List products) + { + // Write out new quantities + string json2 = JsonConvert.SerializeObject(products, Formatting.Indented); + File.WriteAllText(@"Data/Products.json", json2); + } + + private static void DisplayProductSelection(List products, int productItem) + { + Console.WriteLine(); + Console.WriteLine("You want to buy: " + products[productItem].Name); + Console.WriteLine("Your balance is " + loggedInUser.Bal.ToString("C")); + } + + private static int PromptForProductQuantity() + { + string userInput = PromptUser("Enter amount to purchase:"); + return Convert.ToInt32(userInput); + } + + private static void DisplayLowBalanceMessage() + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(); + Console.WriteLine("You do not have enough money to buy that."); + Console.ResetColor(); + } + + private static void DisplayLowStockMessage(List products, int productItem) + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(); + Console.WriteLine("Sorry, " + products[productItem].Name + " is out of stock"); + Console.ResetColor(); + } + + private static void PurchaseProduct(List products, int productItem, int productQuantity) + { + loggedInUser.Bal = loggedInUser.Bal - products[productItem].Price * productQuantity; + products[productItem].Qty = products[productItem].Qty - productQuantity; + } + + private static void DisplayProductPurchase(List products, int productItem, int productQuantity) + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Green; + Console.WriteLine("You bought " + productQuantity + " " + products[productItem].Name); + Console.WriteLine("Your new balance is " + loggedInUser.Bal.ToString("C")); + Console.ResetColor(); + } + + private static void DisplayProductCancelledMessage() + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Yellow; + Console.WriteLine(); + Console.WriteLine("Purchase cancelled"); + Console.ResetColor(); + } + + private static void DisplayInvalidUserMessage() + { + Console.Clear(); + Console.ForegroundColor = ConsoleColor.Red; + Console.WriteLine(); + Console.WriteLine("You entered an invalid user."); + Console.ResetColor(); + } + + private static void Exit() + { Console.WriteLine(); Console.WriteLine("Press Enter key to exit"); Console.ReadLine(); } + + #endregion + } } + +