diff --git a/22_Change/csharp/Change.csproj b/22_Change/csharp/Change.csproj new file mode 100644 index 00000000..1d2d39a9 --- /dev/null +++ b/22_Change/csharp/Change.csproj @@ -0,0 +1,8 @@ + + + + Exe + net5.0 + + + diff --git a/22_Change/csharp/Change.sln b/22_Change/csharp/Change.sln new file mode 100644 index 00000000..c0f2e5e8 --- /dev/null +++ b/22_Change/csharp/Change.sln @@ -0,0 +1,25 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.810.16 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Change", "Change.csproj", "{AE094667-8496-4ECF-8B42-B1648EE26073}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {AE094667-8496-4ECF-8B42-B1648EE26073}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {AE094667-8496-4ECF-8B42-B1648EE26073}.Debug|Any CPU.Build.0 = Debug|Any CPU + {AE094667-8496-4ECF-8B42-B1648EE26073}.Release|Any CPU.ActiveCfg = Release|Any CPU + {AE094667-8496-4ECF-8B42-B1648EE26073}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {65684CBD-CD74-46AF-8E9E-0F69DCF72697} + EndGlobalSection +EndGlobal diff --git a/22_Change/csharp/Program.cs b/22_Change/csharp/Program.cs new file mode 100644 index 00000000..12804731 --- /dev/null +++ b/22_Change/csharp/Program.cs @@ -0,0 +1,129 @@ +using System; + +namespace Change +{ + class Program + { + /// + /// Prints header. + /// + static void Header() + { + Console.WriteLine("Change".PadLeft(33)); + Console.WriteLine("Creative Computing Morristown, New Jersey".PadLeft(15)); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine(); + Console.WriteLine("I, your friendly microcomputer, will determine\n" + + "the correct change for items costing up to $100."); + Console.WriteLine(); + Console.WriteLine(); + } + + /// + /// Gets user input for price and payment. + /// + /// + /// False if any input can't be parsed to double. Price and payment returned would be 0. + /// True if it was possible to parse inputs into doubles. Price and payment returned + /// would be as provided by the user. + /// + static (bool status, double price, double payment) GetInput() + { + Console.Write("Cost of item? "); + var priceString = Console.ReadLine(); + if (!double.TryParse(priceString, out double price)) + { + Console.WriteLine($"{priceString} isn't a number!"); + return (false, 0, 0); + } + + Console.Write("Amount of payment? "); + var paymentString = Console.ReadLine(); + if (!double.TryParse(paymentString, out double payment)) + { + Console.WriteLine($"{paymentString} isn't a number!"); + return (false, 0, 0); + } + + return (true, price, payment); + } + + /// + /// Prints bills and coins for given change. + /// + /// + static void PrintChange(double change) + { + var tens = (int)(change / 10); + if (tens > 0) + Console.WriteLine($"{tens} ten dollar bill(s)"); + + var temp = change - (tens * 10); + var fives = (int)(temp / 5); + if (fives > 0) + Console.WriteLine($"{fives} five dollar bill(s)"); + + temp -= fives * 5; + var ones = (int)temp; + if (ones > 0) + Console.WriteLine($"{ones} one dollar bill(s)"); + + temp -= ones; + var cents = temp * 100; + var half = (int)(cents / 50); + if (half > 0) + Console.WriteLine($"{half} one half dollar(s)"); + + temp = cents - (half * 50); + var quarters = (int)(temp / 25); + if (quarters > 0) + Console.WriteLine($"{quarters} quarter(s)"); + + temp -= quarters * 25; + var dimes = (int)(temp / 10); + if (dimes > 0) + Console.WriteLine($"{dimes} dime(s)"); + + temp -= dimes * 10; + var nickels = (int)(temp / 5); + if (nickels > 0) + Console.WriteLine($"{nickels} nickel(s)"); + + temp -= nickels * 5; + var pennies = (int)(temp + 0.5); + if (pennies > 0) + Console.WriteLine($"{pennies} penny(s)"); + } + + static void Main(string[] args) + { + Header(); + + while (true) + { + (bool result, double price, double payment) = GetInput(); + if (!result) + continue; + + var change = payment - price; + if (change == 0) + { + Console.WriteLine("Correct amount, thank you!"); + continue; + } + + if (change < 0) + { + Console.WriteLine($"Sorry, you have short-changed me ${price - payment:N2}!"); + continue; + } + + Console.WriteLine($"Your change ${change:N2}"); + PrintChange(change); + Console.WriteLine("Thank you, come again!"); + Console.WriteLine(); + } + } + } +}