Skip to content

Fargolnz/Bank-Management-System

Repository files navigation

🏦 Bank Management System

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.


📌 Introduction

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.


🧑‍💻 Developers

This project was collaboratively developed by:

  • Seyyedeh Fargol Nazemzadeh
  • Mahdi Emami
  • Elaheh Ferdowsi

✨ Features

👨‍💼 Administrator

  • Create and manage employee accounts
  • Create customer profiles
  • View all customers and employees
  • Manage account status
  • Review and approve loan requests
  • Monitor banking operations

👨‍💻 Employee

  • Register new customers
  • Create bank accounts
  • Manage customer information
  • Process transactions
  • Review loan requests
  • Access customer account details

👤 Customer

  • View personal accounts
  • Check account balances
  • Deposit funds
  • Review transaction history
  • Request loans
  • View loan status
  • Change password
  • Update phone number
  • Close accounts

🔐 Security Features

  • User authentication system
  • Password hashing using OpenSSL
  • Session management
  • Role-based access control (RBAC)
  • Protected access to sensitive operations

🏗️ Software Architecture

The project follows a layered architecture to improve maintainability and scalability.

Core Layers

  • 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

Design Principles

  • Object-Oriented Programming (OOP)
  • Separation of Concerns
  • Dependency Injection
  • Repository Pattern
  • Modular Design

🛠️ Technologies

Technology Purpose
C++ Core application development
OpenSSL Password hashing and security
Boost.DI Dependency Injection
STL Data structures and utilities

📂 Project Structure

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

💡 Example Workflow

Customer Registration

Employee
   ↓
Create Customer
   ↓
Create Account
   ↓
Customer Login

Loan Processing

Customer
   ↓
Submit Loan Request
   ↓
Employee Review
   ↓
Administrator Approval
   ↓
Loan Activation

🚀 Build & Run

Requirements

  • Visual Studio
  • C++17 or later
  • OpenSSL

Build

Clone the repository:

git clone https://github.com/Fargolnz/Bank-Management-System.git

Open the solution in Visual Studio and build the project.


🎯 Learning Objectives

This project demonstrates:

  • Object-Oriented Design
  • Software Architecture
  • Dependency Injection
  • Repository Pattern
  • Authentication & Authorization
  • Banking System Workflows
  • Secure Password Management

📚 Future Improvements

Potential future enhancements include:

  • Graphical User Interface (GUI)
  • Database Integration (MySQL/PostgreSQL)
  • Online Banking Features
  • REST API Support
  • Transaction Auditing
  • Multi-factor Authentication

🎓 Academic Project

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.


🙏 Acknowledgments

  • Faculty of Farabi, University of Tehran
  • Advanced Programming Course
  • Academic Year 1401–1402

About

A C++ banking management system featuring role-based access control, account management, transactions, loans, and repository-based architecture.

Topics

Resources

Stars

Watchers

Forks

Contributors