From abf7e6cd0cfc6c9b607472018912ebbdf994fd5d Mon Sep 17 00:00:00 2001 From: Jackson Cmelak Date: Sat, 28 Feb 2026 16:33:29 -0800 Subject: [PATCH] Add project --- .../CalculatorLibrary/CalculatorLibrary.cs | 81 ++++++++++++++++++ .../CalculatorLibrary.csproj | 13 +++ ConsoleCalculator/ConsoleCalculator.slnx | 5 ++ .../ConsoleCalculator.csproj | 19 +++++ .../ConsoleCalculator/Program.cs | 84 +++++++++++++++++++ 5 files changed, 202 insertions(+) create mode 100644 ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.cs create mode 100644 ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.csproj create mode 100644 ConsoleCalculator/ConsoleCalculator.slnx create mode 100644 ConsoleCalculator/ConsoleCalculator/ConsoleCalculator.csproj create mode 100644 ConsoleCalculator/ConsoleCalculator/Program.cs diff --git a/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.cs b/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.cs new file mode 100644 index 00000000..0b9d473d --- /dev/null +++ b/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.cs @@ -0,0 +1,81 @@ +using Newtonsoft.Json; + +namespace CalculatorLibrary +{ + public class Calculator + { + + JsonWriter writer; + private int uses; + + public Calculator() + { + StreamWriter logFile = File.CreateText("calculatorlog.json"); + logFile.AutoFlush = true; + writer = new JsonTextWriter(logFile); + writer.Formatting = Formatting.Indented; + writer.WriteStartObject(); + writer.WritePropertyName("Operations"); + writer.WriteStartArray(); + } + + public double DoOperation(double num1, double num2, string op) + { + double result = double.NaN; + writer.WriteStartObject(); + writer.WritePropertyName("Operand1"); + writer.WriteValue(num1); + writer.WritePropertyName("Operand2"); + writer.WriteValue(num2); + writer.WritePropertyName("Operation"); + + switch (op) + { + case "a": + result = num1 + num2; + writer.WriteValue("Add"); + break; + case "s": + result = num1 - num2; + writer.WriteValue("Subtract"); + break; + case "m": + result = num1 * num2; + writer.WriteValue("Multiply"); + break; + case "d": + if (num2 != 0) + { + result = num1 / num2; + } + writer.WriteValue("Divide"); + break; + default: + break; + } + writer.WritePropertyName("Result"); + writer.WriteValue(result); + writer.WriteEndObject(); + + uses++; + return result; + } + + public void Finish() + { + writer.WriteEndArray(); + writer.WriteEndObject(); + writer.Close(); + } + + public int getUses() + { + return uses; + } + + public void setUses(int input) + { + uses = input; + } + } +} \ No newline at end of file diff --git a/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.csproj b/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.csproj new file mode 100644 index 00000000..22badd14 --- /dev/null +++ b/ConsoleCalculator/CalculatorLibrary/CalculatorLibrary.csproj @@ -0,0 +1,13 @@ + + + + net10.0 + enable + enable + + + + + + + diff --git a/ConsoleCalculator/ConsoleCalculator.slnx b/ConsoleCalculator/ConsoleCalculator.slnx new file mode 100644 index 00000000..8211b58f --- /dev/null +++ b/ConsoleCalculator/ConsoleCalculator.slnx @@ -0,0 +1,5 @@ + + + + + diff --git a/ConsoleCalculator/ConsoleCalculator/ConsoleCalculator.csproj b/ConsoleCalculator/ConsoleCalculator/ConsoleCalculator.csproj new file mode 100644 index 00000000..fb3af126 --- /dev/null +++ b/ConsoleCalculator/ConsoleCalculator/ConsoleCalculator.csproj @@ -0,0 +1,19 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + + + + + + diff --git a/ConsoleCalculator/ConsoleCalculator/Program.cs b/ConsoleCalculator/ConsoleCalculator/Program.cs new file mode 100644 index 00000000..231b05c8 --- /dev/null +++ b/ConsoleCalculator/ConsoleCalculator/Program.cs @@ -0,0 +1,84 @@ +using CalculatorLibrary; +using System.Text.RegularExpressions; + +namespace CalculatorProgram +{ + class Program + { + static void Main(string[] args) + { + bool endApp = false; + + Console.WriteLine("Console Calculator in C#\r"); + Console.WriteLine("------------------------\n"); + + Calculator calculator = new Calculator(); + while (!endApp) + { + string? numInput1; + string? numInput2; + double result; + + Console.Write("Type a number, then press Enter: "); + numInput1 = Console.ReadLine(); + + double cleanNum1; + while (!double.TryParse(numInput1, out cleanNum1)) + { + Console.Write("This is not valid input. Please enter an numeric value: "); + numInput1 = Console.ReadLine(); + } + + Console.Write("Type another number, then press Enter: "); + numInput2 = Console.ReadLine(); + + double cleanNum2; + while (!double.TryParse(numInput2, out cleanNum2)) + { + Console.Write("This is not valid input. Please enter a numeric value: "); + numInput2 = Console.ReadLine(); + } + + Console.WriteLine("Choose an operator from the following list:"); + Console.WriteLine("\ta - Add"); + Console.WriteLine("\ts - Subtract"); + Console.WriteLine("\tm - Multiply"); + Console.WriteLine("\td - Divide"); + Console.Write("Your option? "); + + string? op = Console.ReadLine(); + + if (op == null || ! Regex.IsMatch(op, "[a|s|m|d]")) + { + Console.WriteLine("Error: Unrecognized input."); + } + else + { + try + { + result = calculator.DoOperation(cleanNum1, cleanNum2, op); + if (double.IsNaN(result)) + { + Console.WriteLine("This operation will result in a mathematical error.\n"); + } + else Console.WriteLine("Your result: {0:0.##}\n", result); + } + catch (Exception e) + { + Console.WriteLine("Oh no! An exception occurred trying to do the math.\n - Details: " + e.Message); + } + } + Console.WriteLine("------------------------\n"); + Console.Write("Type 'q' to close the app, 'n' to display total # of uses, or press any other key and Enter to continue: "); + + string? next = Console.ReadLine(); + if (next == "n") Console.WriteLine($"# of Equations: {calculator.getUses()}"); + if (next == "q") endApp = true; + + Console.WriteLine("\n"); + } + calculator.Finish(); + return; + } + } +} \ No newline at end of file