A command-line ATM simulation built in Python using Object-Oriented Programming, demonstrating secure banking operations across a clean three-file structure.
account.py— Account class, SHA-256 PIN hashing, 3-strike lockout logictransaction.py— Deposit, withdrawal, EFT transfer, balance checksmain.py— CLI entry point, registration and login flow
- User registration and login with 3-strike lockout
- PIN hashing via SHA-256 (hashlib) — never stored or logged in plaintext
- Deposit, withdrawal, EFT transfer, and statement viewing
- Self-transfer prevention and funds validation
- CSV-based account persistence across sessions
- Audit logging to log.txt for all transactions
- Zero pycodestyle violations, full docstring coverage
python main.pyBuilt with a focus on secure-by-design thinking: hashing credentials, handling authentication failure states explicitly, and maintaining an audit trail — all practices directly relevant to GRC and security-aware development.
Ndumiso Mbanjwa