Bank Simulation #2
Description
An object-oriented C++ console application that emulates a bank’s back-office workflows. The system provides employee (system user) management, full client lifecycle operations (create/read/update/delete), and an integrated currency exchange and calculator module. Built with modular headers and clear separation between domain models, persistence, and UI screens, this project demonstrates practical engineering: robust state handling, file-based persistence, basic security measures, and an extensible architecture ready for GUI or database upgrades.
Technologies Used
- C++ (Object Oriented Design)
- C++ Standard Libraries:
<string>
,<vector>
, streams - Custom Utility Libraries:
Readers.h
,Dates.h
,Files.h
,Utils.h
,StringHandler
- Flat-file persistence: (text files;
Currencies.txt
for currency rates) - Console-based UI separated into screen modules for maintainability
Functionality / Features
- User (Employee) Management
- Add, update, delete and list system users (bank employees).
SystemUser
class that inherits fromPerson
(shared person model).- Basic validation and file persistence for user records.
- Client Management
- Create, read, update, and delete client records (
BankClient
class derived fromPerson
). - Dedicated screens for adding, deleting, updating, and searching clients.
- Persistent storage of clients to flat files with error reporting via enumerated save results.
- Create, read, update, and delete client records (
-
Audit & Logs: Application writes operational logs/audit entries for transfer and login operations to files — enabling traceability and debugging.
-
Basic Data Security: Passwords are encrypted before being persisted.
- Currency Exchange & Calculator
Currency
model with rate and conversion logic; currency data read fromCurrencies.txt
.- Currency exchange screen and calculator UI for listing, finding, updating, and converting between currencies.
- Screen/State Driven Console UI
- Each major interaction is encapsulated in a screen header (e.g. add/list/delete screens), making the CLI flow modular and straightforward to navigate.
- Separation of presentation (screens) from domain logic (models and persistence).
- Error Handling & Mode Management: Use of enums to declare modes (e.g. add/update/empty) and distinct result codes for save/find operations, improving robustness and clarity in control flow.
Implementation Highlights
- Clear OOP layering: Domain entities (
Person
,BankClient
,SystemUser
,Currency
) are modeled as classes with inheritance where appropriate, showing disciplined object modeling and reuse. - Separation of concerns: The project splits responsibilities across many headers:
- Models (e.g.
BankClient.h
,SystemUser.h
) - UI screens (e.g.
AddNewClientScreen.h
,CurrencyExchangeScreen.h
) - Utilities (e.g.
StringHandler
,Dates.h
) — A professional structure ideal for scale and maintenance.
- Models (e.g.
- File-driven currency subsystem: Currency data is stored in a text file (
Currencies.txt
) and loaded into aCurrency
collection. Conversion is calculated with a simple, correct formula using per-currency rates — easy to update without recompilation. - Explicit modes & enums: Use of
enum
types for object modes (e.g.eEmptyMode
,eUpdateMode
, etc.) and save/result enums (e.g.enSaveResults
) makes state transitions explicit and debuggable. - Practical error reporting: Methods return typed result codes and the code prints clear error messages for file I/O and validation issues — helpful for both developers and testers.
- Password encryption
- The project defines an
ENCRYPTION_KEY
(seeConstants.h
) and applies encryption to user passwords before writing them to storage files. This prevents plain text passwords in the repository or disk. - Practical implication: the app uses reversible encryption keyed by
ENCRYPTION_KEY
. That is good as a learning exercise and better than plain text.
- The project defines an
Conclusion
This Bank System project is a production-style demonstration of software engineering fundamentals: object modeling, modular architecture, persistence, input validation, and attention to security and observability. Its clean separation between domain logic and UI screens makes it an excellent candidate for incremental upgrades, while already serving as a polished console product
Screenshots



Try the Project
- You can download the executable file, along with
Currencies.txt
(as of August 8, 2025) from here. - Please note that the default user is
"User1"
, with the password"1111"
.
Since this application is not digitally signed by a recognized publisher, your system may display a warning before running it. You can safely ignore it and continue.
Source Files
You can find the source files for this project here.