From a059cf3c292ff194f79b1ca3c3c2b0b048ae36f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kurti=C4=87=20D=C5=BEemal?= Date: Sat, 29 Aug 2026 15:32:12 +0200 Subject: [PATCH] Finish apP --- .../Calculator.DzemalKurtic.slnx | 4 + .../Calculator.DzemalKurtic.csproj | 14 ++++ .../Calculator.DzemalKurtic/Program.cs | 84 +++++++++++++++++++ .../CalculatorLibrary/CalculatorLibrary.cs | 71 ++++++++++++++++ .../CalculatorLibrary.csproj | 13 +++ 5 files changed, 186 insertions(+) create mode 100644 Calculator.DzemalKurtic/Calculator.DzemalKurtic.slnx create mode 100644 Calculator.DzemalKurtic/Calculator.DzemalKurtic/Calculator.DzemalKurtic.csproj create mode 100644 Calculator.DzemalKurtic/Calculator.DzemalKurtic/Program.cs create mode 100644 Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.cs create mode 100644 Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.csproj diff --git a/Calculator.DzemalKurtic/Calculator.DzemalKurtic.slnx b/Calculator.DzemalKurtic/Calculator.DzemalKurtic.slnx new file mode 100644 index 00000000..fb6269a6 --- /dev/null +++ b/Calculator.DzemalKurtic/Calculator.DzemalKurtic.slnx @@ -0,0 +1,4 @@ + + + + diff --git a/Calculator.DzemalKurtic/Calculator.DzemalKurtic/Calculator.DzemalKurtic.csproj b/Calculator.DzemalKurtic/Calculator.DzemalKurtic/Calculator.DzemalKurtic.csproj new file mode 100644 index 00000000..8acb7da5 --- /dev/null +++ b/Calculator.DzemalKurtic/Calculator.DzemalKurtic/Calculator.DzemalKurtic.csproj @@ -0,0 +1,14 @@ + + + + Exe + net10.0 + enable + enable + + + + + + + diff --git a/Calculator.DzemalKurtic/Calculator.DzemalKurtic/Program.cs b/Calculator.DzemalKurtic/Calculator.DzemalKurtic/Program.cs new file mode 100644 index 00000000..c2df2167 --- /dev/null +++ b/Calculator.DzemalKurtic/Calculator.DzemalKurtic/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 = 0; + + Console.Write("Type a number, and then press Enter: "); + numInput1 = Console.ReadLine(); + + double cleanNum1 = 0; + while (!double.TryParse(numInput1, out cleanNum1)) + { + Console.Write("This is not valid input. Please enter an integer value: "); + numInput1 = Console.ReadLine(); + } + + Console.Write("Type another number, and then press Enter: "); + numInput2 = Console.ReadLine(); + + double cleanNum2 = 0; + while (!double.TryParse(numInput2, out cleanNum2)) + { + Console.Write("This is not valid input. Please enter an integer 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("Press 'n' and Enter to close the app, or press any other key and Enter to continue: "); + if (Console.ReadLine() == "n") endApp = true; + + Console.WriteLine("\n"); + } + calculator.Finish(); + return; + } + } +} \ No newline at end of file diff --git a/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.cs b/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.cs new file mode 100644 index 00000000..8296567f --- /dev/null +++ b/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.cs @@ -0,0 +1,71 @@ +using Newtonsoft.Json; + +namespace CalculatorLibrary +{ + public class Calculator + { + + JsonWriter writer; + + 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(); + + return result; + } + + public void Finish() + { + writer.WriteEndArray(); + writer.WriteEndObject(); + writer.Close(); + } + } +} \ No newline at end of file diff --git a/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.csproj b/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.csproj new file mode 100644 index 00000000..22badd14 --- /dev/null +++ b/Calculator.DzemalKurtic/CalculatorLibrary/CalculatorLibrary.csproj @@ -0,0 +1,13 @@ + + + + net10.0 + enable + enable + + + + + + +