Skip to content

Epic: Evolve CPP ATM Simulator into a Robust Banking Terminal #5

Description

@Aaqibhafeezkhan

Epic Overview

Evolve the CPP ATM Simulator from its original single-user console demonstration into a more robust, maintainable, portable, and testable ATM application while preserving its educational focus on C++ and object-oriented design.

Goals

  • Strengthen the ATM domain model and encapsulation.
  • Improve authentication and sensitive-data handling.
  • Support multiple accounts and persistent data.
  • Make transactions safer and more realistic.
  • Improve input validation and error handling.
  • Reduce platform-specific dependencies where practical.
  • Introduce automated tests for core banking behavior.
  • Keep the project approachable as a C++ learning/reference project.

Phase Status

Planned Workstreams

1. Domain & Architecture

  • Refactor the monolithic atm class into focused components where appropriate.
  • Separate account data, authentication, transactions, and user interaction.
  • Introduce clear interfaces between the presentation and business layers.

2. Authentication & Security

  • Mask PIN input.
  • Avoid exposing PINs through public getters.
  • Add failed-login limits and session handling.
  • Replace hardcoded credentials with safer account storage.

3. Account & Transaction Management

  • Support multiple accounts.
  • Add deposits and transfers.
  • Add transaction history.
  • Validate withdrawal amounts and ATM/account constraints.
  • Prevent invalid or negative monetary operations.

4. Persistence

  • Persist account and transaction data between sessions.
  • Define a simple storage format before considering a database.
  • Handle corrupted or missing data gracefully.

5. Portability

  • Remove or isolate Windows-specific conio.h / _getch() usage.
  • Support modern C++ compilers on Windows, Linux, and macOS where practical.

6. Testing & Quality

  • Add unit tests for authentication, balance updates, withdrawals, deposits, and mobile-number changes.
  • Cover invalid input and insufficient-funds scenarios.
  • Add build instructions for the supported toolchains.

7. Documentation

  • Keep the README aligned with the actual implementation.
  • Document architecture, supported features, build/run instructions, and limitations.
  • Add examples for representative ATM workflows.

Definition of Done

  • Core ATM behavior is separated from console interaction.
  • Sensitive authentication data is not unnecessarily exposed.
  • Multiple accounts and persistent state are supported, or the remaining limitation is explicitly documented.
  • Monetary operations have comprehensive validation.
  • Core business logic has automated test coverage.
  • The application builds using a documented modern C++ toolchain.
  • README documentation accurately reflects the implementation.

Collaboration

This epic is assigned to aaqib-hafeez-khan-in and shruticparmar for shared ownership and implementation.

Workflow

Phase → Issue → implementation PR against main → request shruticparmar → self-review as a normal COMMENT → merge → update Epic.

Scope Principle

Implement these improvements incrementally. Each child issue should remain independently reviewable and should avoid unnecessary changes outside its stated scope.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions