Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .nuget/NuGet.exe
Binary file not shown.
11 changes: 8 additions & 3 deletions Refactoring.sln
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2013
VisualStudioVersion = 12.0.40629.0
MinimumVisualStudioVersion = 10.0.40219.1
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Refactoring", "Refactoring\Refactoring.csproj", "{2D3F5D0E-4A6B-44C0-8F63-8E95243AC028}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestProject", "UnitTestProject\UnitTestProject.csproj", "{1FAF99A1-CCBF-435D-B599-4DAE1DAD5105}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nuget", ".nuget", "{C0480162-BAAB-43F6-8BA8-3FE89692DAD8}"
ProjectSection(SolutionItems) = preProject
.nuget\NuGet.Config = .nuget\NuGet.Config
.nuget\NuGet.exe = .nuget\NuGet.exe
.nuget\NuGet.targets = .nuget\NuGet.targets
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down
27 changes: 20 additions & 7 deletions Refactoring/Data/Products.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,49 @@
{
"Name": "Chips",
"Price": 1.49,
"Quantity": 50
"Quantity": 50,
"Id": "1"
},
{
"Name": "Cookies",
"Price": 1.0,
"Quantity": 100
"Quantity": 100,
"Id": "2"
},
{
"Name": "Gum",
"Price": 0.85,
"Quantity": 50
"Quantity": 50,
"Id": "3"
},
{
"Name": "Pop",
"Price": 0.75,
"Quantity": 75
"Quantity": 75,
"Id": "4"
},
{
"Name": "Candy",
"Price": 0.85,
"Quantity": 30
"Quantity": 30,
"Id": "5"
},
{
"Name": "Chocolate Bars",
"Price": 1.25,
"Quantity": 25
"Quantity": 25,
"Id": "6"
},
{
"Name": "Nuts",
"Price": 1.0,
"Quantity": 1
"Quantity": 1,
"Id": "7"
},
{
"Name": "Soup",
"Price": 1.25,
"Quantity": 50,
"Id": "8"
}
]
2 changes: 2 additions & 0 deletions Refactoring/Product.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ namespace Refactoring
[Serializable]
public class Product
{
[JsonProperty("Id")]
public string Id;
[JsonProperty("Name")]
public string Name;
[JsonProperty("Price")]
Expand Down
19 changes: 19 additions & 0 deletions Refactoring/Refactoring.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,25 @@
<HintPath>..\packages\Newtonsoft.Json.8.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="nunit.core">
<HintPath>..\packages\NUnitTestAdapter.WithFramework.2.0.0\lib\nunit.core.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="nunit.core.interfaces">
<HintPath>..\packages\NUnitTestAdapter.WithFramework.2.0.0\lib\nunit.core.interfaces.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="nunit.framework">
<HintPath>..\packages\NUnitTestAdapter.WithFramework.2.0.0\lib\nunit.framework.dll</HintPath>
</Reference>
<Reference Include="nunit.util">
<HintPath>..\packages\NUnitTestAdapter.WithFramework.2.0.0\lib\nunit.util.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="NUnit.VisualStudio.TestAdapter">
<HintPath>..\packages\NUnitTestAdapter.WithFramework.2.0.0\lib\NUnit.VisualStudio.TestAdapter.dll</HintPath>
<Private>False</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
Expand Down
85 changes: 45 additions & 40 deletions Refactoring/Tusc.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ namespace Refactoring
{
public class Tusc
{
private const String EXIT_STRING = "quit";

private static List<User> UserList;
private static List<Product> ProductList;
private static User LoggedInUser;
Expand Down Expand Up @@ -41,30 +43,35 @@ private static void InitializeMemberVariables(List<User> usrs, List<Product> pro
ProductCount = prods.Count;
}

private static Product getProductById(String id)
{
return ProductList.SingleOrDefault(p => p.Id.Equals(id));
}

private static void OrderProducts()
{
int SelectedProductNumber;
String SelectedProductId;
int QuantityOrdered;

while (true)
{
ShowProductList();
SelectedProductNumber = GetValidUserProductSelection();
if (SelectedProductNumber == ProductList.Count + 1)
SelectedProductId = GetValidUserProductSelection();
if (SelectedProductId.Equals(EXIT_STRING))
{
UpdateCurrentUsersBalance();
break;
}
else
{
Console.WriteLine();
Console.WriteLine("You want to buy: " + ProductList[SelectedProductNumber-1].Name);
Console.WriteLine("You want to buy: " + getProductById(SelectedProductId).Name);
Console.WriteLine("Your balance is " + LoggedInUser.Balance.ToString("C"));

QuantityOrdered = GetValidUserProductQuantity();
if (QuantityOrdered > 0 && VerifyUserFundsForSelectedPurchase(SelectedProductNumber, QuantityOrdered) && VerifyStockOnHand(SelectedProductNumber, QuantityOrdered))
if (QuantityOrdered > 0 && VerifyUserFundsForSelectedPurchase(SelectedProductId, QuantityOrdered) && VerifyStockOnHand(SelectedProductId, QuantityOrdered))
{
OrderProduct(SelectedProductNumber, QuantityOrdered);
OrderProduct(SelectedProductId, QuantityOrdered);
}
else
{
Expand All @@ -82,51 +89,53 @@ private static void ShowPurchaseCancelledMessage()
Console.ResetColor();
}

private static void OrderProduct(int SelectedProductNumber, int QuantityOrdered)
private static void OrderProduct(String SelectedProductId, int QuantityOrdered)
{
UpdateBalance(SelectedProductNumber, QuantityOrdered);
RemoveItemsFromInventory(SelectedProductNumber, QuantityOrdered);
ShowOrderConfirmationMessage(SelectedProductNumber, QuantityOrdered);
UpdateBalance(SelectedProductId, QuantityOrdered);
RemoveItemsFromInventory(SelectedProductId, QuantityOrdered);
ShowOrderConfirmationMessage(SelectedProductId, QuantityOrdered);
}

private static void UpdateBalance(int SelectedProductNumber, int QuantityOrdered)
private static void UpdateBalance(String SelectedProductId, int QuantityOrdered)
{
LoggedInUser.Balance = LoggedInUser.Balance - (ProductList[SelectedProductNumber-1].Price * QuantityOrdered);
LoggedInUser.Balance = LoggedInUser.Balance - (getProductById(SelectedProductId).Price * QuantityOrdered);
}

private static void RemoveItemsFromInventory(int SelectedProductNumber, int QuantityOrdered)
private static void RemoveItemsFromInventory(String SelectedProductId, int QuantityOrdered)
{
ProductList[SelectedProductNumber-1].Qty = ProductList[SelectedProductNumber-1].Qty - QuantityOrdered;
Product selectedProduct = getProductById(SelectedProductId);
selectedProduct.Qty = selectedProduct.Qty - QuantityOrdered;
}

private static void ShowOrderConfirmationMessage(int SelectedProductNumber, int QuantityOrdered)
private static void ShowOrderConfirmationMessage(String SelectedProductId, int QuantityOrdered)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Green;
Console.WriteLine("You bought " + QuantityOrdered + " " + ProductList[SelectedProductNumber-1].Name);
Console.WriteLine("You bought " + QuantityOrdered + " " + getProductById(SelectedProductId).Name);
Console.WriteLine("Your new balance is " + LoggedInUser.Balance.ToString("C"));
Console.ResetColor();
}

private static bool VerifyStockOnHand(int SelectedProductNumber, int QuantityOrdered)
private static bool VerifyStockOnHand(String SelectedProductId, int QuantityOrdered)
{
bool stockOnHand = true;
if (ProductList[SelectedProductNumber-1].Qty <= QuantityOrdered)
Product selectedProduct = getProductById(SelectedProductId);
if (selectedProduct.Qty < QuantityOrdered)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine();
Console.WriteLine("Sorry, " + ProductList[SelectedProductNumber-1].Name + " is out of stock");
Console.WriteLine("Sorry, " + selectedProduct.Name + " is out of stock");
Console.ResetColor();
stockOnHand = false;
}
return stockOnHand;
}

private static bool VerifyUserFundsForSelectedPurchase(int SelectedProductNumber, int QuantityOrdered)
private static bool VerifyUserFundsForSelectedPurchase(String SelectedProductId, int QuantityOrdered)
{
bool fundsAvailable = true;
if ((LoggedInUser.Balance - (ProductList[SelectedProductNumber-1].Price * QuantityOrdered)) < 0)
if ((LoggedInUser.Balance - (getProductById(SelectedProductId).Price * QuantityOrdered)) < 0)
{
Console.Clear();
Console.ForegroundColor = ConsoleColor.Red;
Expand Down Expand Up @@ -190,41 +199,38 @@ private static void UpdateCurrentUsersBalance()
File.WriteAllText(@"Data/Products.json", json2);
}

private static int GetValidUserProductSelection()
private static String GetValidUserProductSelection()
{
int productNumber;
while (true)
{
Console.WriteLine("Enter the product number:");
string ProductNumberEntered = Console.ReadLine();
if (validateProduct(ProductNumberEntered, out productNumber))
string ProductIdEntered = Console.ReadLine();
if (ProductIdEntered.Equals(EXIT_STRING) || validateProduct(ProductIdEntered))
{
break;
return ProductIdEntered;
}
}
return productNumber;
}

private static bool validateProduct(string ProductNumberEntered, out int productNumber )
private static bool validateProduct(string ProductIdEntered)
{
bool validProductSelected = false;

if (Int32.TryParse(ProductNumberEntered, out productNumber) && (productNumber <= ProductCount + 1))
Product selectedProduct = getProductById(ProductIdEntered);
if (selectedProduct == null)
{
validProductSelected = true;
ShowProductIdInvalidMessage();
return false;
}
else
{
ShowProductNumberInvalidMessage();
return true;
}
return validProductSelected;
}

private static void ShowProductNumberInvalidMessage()
private static void ShowProductIdInvalidMessage()
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("");
Console.WriteLine("Product numbers must be numeric in the range of 1 - " + (ProductCount + 1).ToString());
Console.WriteLine("That is an invalid product Id");
Console.WriteLine("");
Console.ResetColor();
}
Expand All @@ -233,12 +239,11 @@ private static void ShowProductList()
{
Console.WriteLine();
Console.WriteLine("What would you like to buy?");
for (int i = 0; i < ProductCount; i++)
foreach (Product prod in ProductList)
{
Product prod = ProductList[i];
Console.WriteLine(i + 1 + ": " + prod.Name + " (" + prod.Price.ToString("C") + ")");
Console.WriteLine(prod.Id + ": " + prod.Name + " (" + prod.Price.ToString("C") + ")");
}
Console.WriteLine(ProductList.Count + 1 + ": Exit");
Console.WriteLine("Type quit to exit the application");
}

private static void ShowRemainingBalance()
Expand Down
1 change: 1 addition & 0 deletions Refactoring/packages.config
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="net45" />
<package id="NUnitTestAdapter.WithFramework" version="2.0.0" targetFramework="net45" />
</packages>
Loading