A role-based banking management system developed in C++ that simulates real-world banking operations including account management, transactions, loan processing, authentication, and user administration.
The project applies object-oriented design principles and modern software engineering practices such as repository-based architecture and dependency injection.
Bank Management System is a console-based application designed to model the core functionality of a banking environment.
The system supports multiple user roles with different permissions and provides a structured architecture that separates business logic, data access, and user management responsibilities.
The project was developed as an educational software engineering project with a focus on clean architecture and maintainable code.
This project was collaboratively developed by:
- Seyyedeh Fargol Nazemzadeh
- Mahdi Emami
- Elaheh Ferdowsi
- Create and manage employee accounts
- Create customer profiles
- View all customers and employees
- Manage account status
- Review and approve loan requests
- Monitor banking operations
- Register new customers
- Create bank accounts
- Manage customer information
- Process transactions
- Review loan requests
- Access customer account details
- View personal accounts
- Check account balances
- Deposit funds
- Review transaction history
- Request loans
- View loan status
- Change password
- Update phone number
- Close accounts
- User authentication system
- Password hashing using OpenSSL
- Session management
- Role-based access control (RBAC)
- Protected access to sensitive operations
The project follows a layered architecture to improve maintainability and scalability.
- Entities Layer – Business objects and domain models
- Repository Layer – Data access abstraction
- Database Layer – Persistent storage management
- Service Layer – Business logic implementation
- Session Layer – Authentication and user session handling
- Object-Oriented Programming (OOP)
- Separation of Concerns
- Dependency Injection
- Repository Pattern
- Modular Design
| Technology | Purpose |
|---|---|
| C++ | Core application development |
| OpenSSL | Password hashing and security |
| Boost.DI | Dependency Injection |
| STL | Data structures and utilities |
Bank-Management-System/
│
├──Bank/
│ ├── Header/ # Header files and core interfaces
│ │ ├── Account.h
│ │ ├── AccountRepository.h
│ │ ├── AccountDatabase.h
│ │ ├── Loan.h
│ │ ├── LoanRepository.h
│ │ ├── LoanDatabase.h
│ │ ├── Transaction.h
│ │ ├── TransactionRepository.h
│ │ ├── TransactionDatabase.h
│ │ ├── User.h
│ │ ├── UserRepository.h
│ │ ├── UserDatabase.h
│ │ ├── UserService.h
│ │ ├── UserSession.h
│ │ ├── StringHasher.h
│ │ │
│ │ ├── BaseEntity.h
│ │ ├── BaseRepository.h
│ │ ├── BaseDatabase.h
│ │ └── Enumerations
│ │ ├── RoleEnum.h
│ │ ├── GenderEnum.h
│ │ ├── AccountTypeEnum.h
│ │ ├── AccountStatusEnum.h
│ │ └── LoanStatusEnum.h
│ │
│ ├── Src/ # Source code implementation
│ │ ├── Account.cpp
│ │ ├── AccountRepository.cpp
│ │ ├── AccountDatabase.cpp
│ │ ├── Loan.cpp
│ │ ├── LoanRepository.cpp
│ │ ├── LoanDatabase.cpp
│ │ ├── Transaction.cpp
│ │ ├── TransactionRepository.cpp
│ │ ├── TransactionDatabase.cpp
│ │ ├── User.cpp
│ │ ├── UserRepository.cpp
│ │ ├── UserDatabase.cpp
│ │ ├── UserService.cpp
│ │ ├── UserSession.cpp
│ │ ├── StringHasher.cpp
│ │ └── Bank.cpp
│ │
│ ├── Additional Sources/
│ │ └── di.hpp # Boost.DI dependency injection library
│ │
│ ├── Bank.vcxproj # Visual Studio project
│ ├── Bank.vcxproj.filters
│ └── Bank.vcxproj.user
│
├── x64/
│ └── Debug/
│ ├── Accounts.txt
│ ├── Bank.pdb
│ ├── Loans.txt
│ ├── Transactions.txt
│ └── Users.txt
│
├── BankManagementSystemDiagram.pdf
├── BankManagementSystemUML.pdf
├── Bank.sln # Solution
└── README.md
Employee
↓
Create Customer
↓
Create Account
↓
Customer Login
Customer
↓
Submit Loan Request
↓
Employee Review
↓
Administrator Approval
↓
Loan Activation
- Visual Studio
- C++17 or later
- OpenSSL
Clone the repository:
git clone https://github.com/Fargolnz/Bank-Management-System.gitOpen the solution in Visual Studio and build the project.
This project demonstrates:
- Object-Oriented Design
- Software Architecture
- Dependency Injection
- Repository Pattern
- Authentication & Authorization
- Banking System Workflows
- Secure Password Management
Potential future enhancements include:
- Graphical User Interface (GUI)
- Database Integration (MySQL/PostgreSQL)
- Online Banking Features
- REST API Support
- Transaction Auditing
- Multi-factor Authentication
This project was developed as part of the Advanced Programming course to apply architectural patterns and object-oriented development techniques in a real-world banking scenario.
- Faculty of Farabi, University of Tehran
- Advanced Programming Course
- Academic Year 1401–1402