# pardha55/calculator architecture

> Architecture diagram of the GitHub repository pardha55/calculator, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-14). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pardha55/calculator
- Repository: https://github.com/pardha55/calculator

## Overview

This is a modular, console-based Java calculator. The user-facing loop starts in Main: it gathers input through CalculatorUI, dispatches arithmetic through CalculatorEngine and the selected Operation, displays the result, and records it with HistoryManager; menu choices also view or clear history. The operation classes implement six arithmetic choices, while the UI handles numeric-input validation and Main handles invalid choices. History is held in memory. Relationships are based on the provided excerpts or README; unsampled behavior is not inferred.

Main entry points: [`src/main/java/CalculatorEngine.java`](https://github.com/pardha55/calculator/blob/main/src/main/java/CalculatorEngine.java) (Operation selector), [`src/main/java/Operation.java`](https://github.com/pardha55/calculator/blob/main/src/main/java/Operation.java) (Operation contract), [`src/main/java/Main.java`](https://github.com/pardha55/calculator/blob/main/src/main/java/Main.java) (Application loop), [`src/main/java/Addition.java`](https://github.com/pardha55/calculator/blob/main/src/main/java/Addition.java) (Addition)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interaction["Console interaction"]
  node_main["Application loop<br/>[Main.java]"]
  node_ui["Console UI<br/>[CalculatorUI.java]"]
end

subgraph group_dispatch["Calculation dispatch"]
  node_engine["Operation selector"]
  node_operation["Operation contract<br/>[Operation.java]"]
  node_addition["Addition<br/>[Addition.java]"]
  node_subtraction["Subtraction<br/>[Subtraction.java]"]
  node_multiplication["Multiplication"]
  node_division["Division<br/>[Division.java]"]
  node_modulus["Modulus<br/>[Modulus.java]"]
  node_power["Power<br/>[Power.java]"]
end

subgraph group_history["History management"]
  node_history["History manager"]
end

node_user(("Calculator user"))

node_user -->|"starts"| node_main
node_main -->|"reads and displays"| node_ui
node_main -->|"selects operation"| node_engine
node_main -->|"executes and formats"| node_operation
node_main -->|"records and manages"| node_history
node_engine -->|"dispatches"| node_addition
node_engine -->|"dispatches"| node_subtraction
node_engine -->|"dispatches"| node_multiplication
node_engine -->|"dispatches"| node_division
node_engine -->|"dispatches"| node_modulus
node_engine -->|"dispatches"| node_power
node_addition -->|"extends"| node_operation
node_subtraction -->|"extends"| node_operation
node_multiplication -->|"extends"| node_operation
node_division -->|"extends"| node_operation
node_modulus -->|"extends"| node_operation
node_power -->|"extends"| node_operation

click node_main "https://github.com/pardha55/calculator/blob/main/src/main/java/Main.java"
click node_ui "https://github.com/pardha55/calculator/blob/main/src/main/java/CalculatorUI.java"
click node_engine "https://github.com/pardha55/calculator/blob/main/src/main/java/CalculatorEngine.java"
click node_operation "https://github.com/pardha55/calculator/blob/main/src/main/java/Operation.java"
click node_addition "https://github.com/pardha55/calculator/blob/main/src/main/java/Addition.java"
click node_subtraction "https://github.com/pardha55/calculator/blob/main/src/main/java/Subtraction.java"
click node_multiplication "https://github.com/pardha55/calculator/blob/main/src/main/java/Multiplication.java"
click node_division "https://github.com/pardha55/calculator/blob/main/src/main/java/Division.java"
click node_modulus "https://github.com/pardha55/calculator/blob/main/src/main/java/Modulus.java"
click node_power "https://github.com/pardha55/calculator/blob/main/src/main/java/Power.java"
click node_history "https://github.com/pardha55/calculator/blob/main/src/main/java/HistoryManager.java"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_ui,node_user toneBlue
class node_engine,node_operation,node_addition,node_subtraction,node_multiplication,node_division,node_modulus,node_power toneAmber
class node_history toneMint
```

## Components

### Console interaction

- [Application loop](https://github.com/pardha55/calculator/blob/main/src/main/java/Main.java): `src/main/java/Main.java`
- [Console UI](https://github.com/pardha55/calculator/blob/main/src/main/java/CalculatorUI.java): `src/main/java/CalculatorUI.java`

### Calculation dispatch

- [Operation selector](https://github.com/pardha55/calculator/blob/main/src/main/java/CalculatorEngine.java): `src/main/java/CalculatorEngine.java`
- [Operation contract](https://github.com/pardha55/calculator/blob/main/src/main/java/Operation.java): `src/main/java/Operation.java`
- [Addition](https://github.com/pardha55/calculator/blob/main/src/main/java/Addition.java): `src/main/java/Addition.java`
- [Subtraction](https://github.com/pardha55/calculator/blob/main/src/main/java/Subtraction.java): `src/main/java/Subtraction.java`
- [Multiplication](https://github.com/pardha55/calculator/blob/main/src/main/java/Multiplication.java): `src/main/java/Multiplication.java`
- [Division](https://github.com/pardha55/calculator/blob/main/src/main/java/Division.java): `src/main/java/Division.java`
- [Modulus](https://github.com/pardha55/calculator/blob/main/src/main/java/Modulus.java): `src/main/java/Modulus.java`
- [Power](https://github.com/pardha55/calculator/blob/main/src/main/java/Power.java): `src/main/java/Power.java`

### History management

- [History manager](https://github.com/pardha55/calculator/blob/main/src/main/java/HistoryManager.java): `src/main/java/HistoryManager.java`

### Other components

- **Calculator user**

## Connections

- Calculator user → Application loop: starts (evidence: `README.md`)
- Application loop → Console UI: reads and displays (evidence: `src/main/java/Main.java`)
- Application loop → Operation selector: selects operation (evidence: `src/main/java/Main.java`)
- Application loop → Operation contract: executes and formats (evidence: `src/main/java/Main.java`)
- Application loop → History manager: records and manages (evidence: `src/main/java/Main.java`)
- Operation selector → Addition: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Operation selector → Subtraction: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Operation selector → Multiplication: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Operation selector → Division: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Operation selector → Modulus: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Operation selector → Power: dispatches (evidence: `src/main/java/CalculatorEngine.java`)
- Addition → Operation contract: extends (evidence: `src/main/java/Addition.java`)
- Subtraction → Operation contract: extends (evidence: `src/main/java/Subtraction.java`)
- Multiplication → Operation contract: extends (evidence: `src/main/java/Multiplication.java`)
- Division → Operation contract: extends (evidence: `src/main/java/Division.java`)
- Modulus → Operation contract: extends (evidence: `src/main/java/Modulus.java`)
- Power → Operation contract: extends (evidence: `src/main/java/Power.java`)
