Skip to content
Closed
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
22 changes: 22 additions & 0 deletions Calculator.sln
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@

Microsoft Visual Studio Solution File, Format Version 12.00
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Calculator", "TCSA.Calculator\Calculator.csproj", "{8235EA08-A7BE-4654-99D9-F96EB4884C06}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CalculatorLibrary", "CalculatorLibrary\CalculatorLibrary.csproj", "{4639BC5A-00B5-4014-90BE-A04CEF4D0211}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{8235EA08-A7BE-4654-99D9-F96EB4884C06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8235EA08-A7BE-4654-99D9-F96EB4884C06}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8235EA08-A7BE-4654-99D9-F96EB4884C06}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8235EA08-A7BE-4654-99D9-F96EB4884C06}.Release|Any CPU.Build.0 = Release|Any CPU
{4639BC5A-00B5-4014-90BE-A04CEF4D0211}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4639BC5A-00B5-4014-90BE-A04CEF4D0211}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4639BC5A-00B5-4014-90BE-A04CEF4D0211}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4639BC5A-00B5-4014-90BE-A04CEF4D0211}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
EndGlobal
84 changes: 84 additions & 0 deletions CalculatorLibrary/Calculator.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
using CalculatorLibrary.Models;
using Newtonsoft.Json;

namespace CalculatorLibrary;

public class Calculator
{
public double DoOperation(string op, double num1, double num2 = 0)
{
double
result = double.NaN; // Default value is "not-a-number" if an operation, such as division, could result in an error.

// Use a switch statement to do the math.
switch (op)
{
case "a":
result = num1 + num2;
break;
case "s":
result = num1 - num2;
break;
case "m":
result = num1 * num2;
break;
case "d":
if (num2 != 0)
{
result = num1 / num2;
}
break;
case "p":
result = Math.Pow(num1, num2);
break;
case "r":
result = Math.Sqrt(num1);
break;
case "x":
result = num1 * 10;
break;
case "sin":
double radians = num1 * Math.PI / 180;
result = Math.Sin(radians);
break;
case "cos":
radians = num1 * Math.PI / 180;
result = Math.Cos(radians);
break;
case "tan":
radians = num1 * Math.PI / 180;
result = Math.Tan(radians);
break;
}

Calculation calculation = new Calculation();
calculation.Operand1 = num1;
calculation.Operand2 = num2;
calculation.Operation = op;
calculation.Result = result;

var history = GetHistory();
history.Operations.Add(calculation);
string json = JsonConvert.SerializeObject(history);
File.WriteAllText("calculationlog.json", json);

return result;
}

public CalculationHistory GetHistory()
{
var historyObject = new CalculationHistory();
if (File.Exists("calculationlog.json"))
{
using StreamReader streamReader = new StreamReader("calculationlog.json");
var history = streamReader.ReadToEnd();
historyObject = JsonConvert.DeserializeObject<CalculationHistory>(history);
}
return historyObject;
}

public void ClearHistory()
{
File.Delete("calculationlog.json");
}
}
13 changes: 13 additions & 0 deletions CalculatorLibrary/CalculatorLibrary.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="13.0.5-beta1" />
</ItemGroup>

</Project>
9 changes: 9 additions & 0 deletions CalculatorLibrary/Models/Calculation.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
namespace CalculatorLibrary.Models;

public class Calculation
{
public double Operand1 { get; set; }
public double Operand2 { get; set; }
public string Operation { get; set; }
public double Result { get; set; }
}
6 changes: 6 additions & 0 deletions CalculatorLibrary/Models/CalculationHistory.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
namespace CalculatorLibrary.Models;

public class CalculationHistory
{
public List<Calculation> Operations { get; set; } = new List<Calculation>();
}
18 changes: 18 additions & 0 deletions TCSA.Calculator/Calculator.csproj
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<ProjectReference Include="..\CalculatorLibrary\CalculatorLibrary.csproj" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Spectre.Console" Version="0.57.3-alpha.0.13" />
</ItemGroup>

</Project>
Loading
Loading