Some checks failed
Deploy to GitHub Pages / build-and-deploy (push) Has been cancelled
45 lines
2.1 KiB
Markdown
45 lines
2.1 KiB
Markdown
# Data Model: Geek Calculator
|
||
|
||
## Entities
|
||
|
||
### Calculation Expression
|
||
- **Representation**: String containing numbers, operators (+, -, ×, ÷), parentheses, percentage, +/- signs
|
||
- **Validation**: Must follow valid mathematical expression syntax rules
|
||
- **State transitions**: In-progress expression → evaluated expression → stored in history
|
||
|
||
### Calculation Result
|
||
- **Representation**: Number (JavaScript number type, may be Infinity or finite value)
|
||
- **Validation**: Must be a numeric result from evaluation
|
||
- **State transitions**: Calculated from expression → displayed → stored in history
|
||
|
||
### RPN Stack
|
||
- **Representation**: Array of numbers representing operands in Reverse Polish Notation
|
||
- **Operations**: Push, pop, peek, clear, size
|
||
- **Validation**: Elements must be valid numbers
|
||
- **State transitions**: Empty → populated with operands → modified through RPN operations
|
||
|
||
### Calculation History Entry
|
||
- **Fields**:
|
||
- expression (string): The original input expression
|
||
- result (number): The calculated result
|
||
- timestamp (Date): When the calculation was completed
|
||
- id (string): Unique identifier for recall
|
||
- **Validation**: Expression and result must be valid
|
||
- **State transitions**: New entry → stored → accessed → potentially deleted when limit reached
|
||
|
||
### Application Settings
|
||
- **Fields**:
|
||
- theme (string): 'dark' or other theme options
|
||
- mode (string): 'standard' or 'rpn' for calculation mode
|
||
- historyLimit (number): Maximum number of history entries to store
|
||
- **Validation**: Values must be from predefined sets
|
||
- **State transitions**: Default settings → user modified → saved to localStorage
|
||
|
||
### User Input State
|
||
- **Fields**:
|
||
- currentValue (string): The current value being entered
|
||
- operator (string): The current operator in use
|
||
- previousValue (number): The previous operand
|
||
- calculationPending (boolean): Whether a calculation is ready to execute
|
||
- **Validation**: Values must be consistent with calculator state
|
||
- **State transitions**: Initial state → value entry → operator selection → result calculation |