Skip to content

Latest commit

Β 

History

5 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’Έ ExpenseFlow - Expense Sharing & Debt Settlement System

A scalable and extensible expense-sharing platform built using modern C++ and Object-Oriented Design principles.

ExpenseFlow enables users to create groups, add shared expenses, split bills using multiple strategies, track balances, simplify debts, and settle payments efficiently.

The project demonstrates real-world backend system design concepts including Strategy Pattern, Factory Pattern, Observer Pattern, Debt Simplification Algorithms, Validation Layers, and Service-Oriented Architecture.


πŸš€ Features

User Management

  • Create and manage users
  • Track individual balances
  • Maintain peer-to-peer settlements
  • View personal balance sheets

Group Management

  • Create expense groups
  • Add or remove members
  • Prevent members from leaving with pending dues
  • Maintain group-specific ledgers

Expense Management

  • Add shared expenses
  • Support multiple participants
  • Track expense history
  • Maintain group balance sheets

Split Strategies

Equal Split

Distributes the expense equally among all participants.

Example:

Expense = β‚Ή1200

Users = 4

Each User Pays = β‚Ή300


Exact Split

Allows specifying exact contribution amounts.

Example:

Expense = β‚Ή1000

User A β†’ β‚Ή400
User B β†’ β‚Ή300
User C β†’ β‚Ή300

Percentage Split

Allows specifying percentage-based sharing.

Example:

Expense = β‚Ή1000

User A β†’ 50%
User B β†’ 30%
User C β†’ 20%

Balance Management

  • User-to-user balances
  • Group-specific balances
  • Outstanding dues tracking
  • Settlement support

Debt Simplification

  • Reduces unnecessary transactions
  • Uses net balance calculation
  • Greedy settlement optimization
  • Minimizes payment graph complexity

Example:

A owes B β‚Ή100
B owes C β‚Ή100

After Simplification

A owes C β‚Ή100

Notification System

  • Expense creation notifications
  • Settlement notifications
  • Group activity updates
  • Observer-based event propagation

πŸ—οΈ System Architecture

The system follows SOLID principles and separates responsibilities into independent layers.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Main App         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Services         β”‚
β”‚ ExpenseService         β”‚
β”‚ GroupService           β”‚
β”‚ BalanceService         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Validators        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚       Factories        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚      Strategies        β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Models          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“‚ Project Structure

ExpenseFlow
β”‚
β”œβ”€β”€ include
β”‚   β”œβ”€β”€ models
β”‚   β”œβ”€β”€ services
β”‚   β”œβ”€β”€ strategies
β”‚   β”œβ”€β”€ factories
β”‚   β”œβ”€β”€ observer
β”‚   β”œβ”€β”€ algorithms
β”‚   β”œβ”€β”€ exceptions
β”‚   β”œβ”€β”€ enums
β”‚   └── utils
β”‚
β”œβ”€β”€ src
β”‚   β”œβ”€β”€ models
β”‚   β”œβ”€β”€ services
β”‚   β”œβ”€β”€ strategies
β”‚   β”œβ”€β”€ factories
β”‚   β”œβ”€β”€ observer
β”‚   β”œβ”€β”€ algorithms
β”‚   └── utils
β”‚
β”œβ”€β”€ tests
β”œβ”€β”€ docs
└── main.cpp

🎯 Design Patterns Used

Strategy Pattern

Used for implementing multiple expense splitting algorithms.

SplitStrategy
β”œβ”€β”€ EqualSplitStrategy
β”œβ”€β”€ ExactSplitStrategy
└── PercentageSplitStrategy

Benefits:

  • Open for extension
  • Closed for modification
  • Easy addition of new split types

Factory Pattern

Creates appropriate split strategy at runtime.

SplitFactory::createStrategy(splitType);

Benefits:

  • Decouples object creation
  • Cleaner service layer
  • Runtime flexibility

Observer Pattern

Used for notification broadcasting.

Group
   β”‚
   β”œβ”€β”€ User
   β”œβ”€β”€ User
   └── User

Benefits:

  • Loose coupling
  • Event-driven communication
  • Scalable notification system

Singleton Pattern

Used for central application management.

Splitwise::getInstance();

Benefits:

  • Single source of truth
  • Global state management

🧠 Core Components

ExpenseService

Responsible for:

  • Expense creation
  • Validation
  • Strategy execution
  • Balance updates

BalanceService

Responsible for:

  • Balance tracking
  • Settlement calculations
  • Balance sheet generation

GroupService

Responsible for:

  • Group creation
  • Membership management
  • Group operations

DebtSimplifier

Responsible for:

  • Net balance calculation
  • Debt graph optimization
  • Transaction minimization

πŸ›‘οΈ Validation Layer

ExpenseFlow includes a dedicated validation layer.

Exact Split Validation

Checks:

  • Sum of splits equals total expense
  • Participant count matches split values

Percentage Split Validation

Checks:

  • Percentage total equals 100%
  • Invalid distributions are rejected

πŸ§ͺ Unit Testing

The project contains dedicated test modules:

tests/
β”œβ”€β”€ test_balance.cpp
β”œβ”€β”€ test_group.cpp
└── test_split.cpp

Tests cover:

  • Expense creation
  • Split calculations
  • Group operations
  • Balance updates
  • Debt simplification

βš™οΈ Build & Run

Build

mkdir build
cd build

cmake ..
make

Run

./splitwise

πŸ“ˆ Future Enhancements

  • Expense Categories
  • Multi-Currency Support
  • Persistent Database Storage
  • REST API Layer
  • Authentication & Authorization
  • Monthly Expense Reports
  • Email Notifications
  • Mobile Integration
  • Settlement Recommendations
  • Expense Analytics Dashboard

πŸ’‘ Learning Outcomes

This project demonstrates:

  • Object-Oriented Design
  • SOLID Principles
  • Low-Level Design Concepts
  • Design Patterns
  • Service-Oriented Architecture
  • Data Modeling
  • Debt Simplification Algorithms
  • Scalable Backend Development
  • Modern C++ Development

πŸ‘¨β€πŸ’» Resume Highlights

  • Designed and implemented a Splitwise-inspired expense-sharing platform using C++17 and SOLID principles.
  • Implemented Strategy, Factory, Observer, and Singleton design patterns to achieve extensibility and maintainability.
  • Built a debt simplification engine to minimize transaction count and optimize settlements.
  • Developed modular service, model, validation, and algorithm layers following clean architecture practices.
  • Created a scalable group expense management system supporting equal, exact, and percentage-based expense splitting.

About

Production-ready Expense Sharing System built using Object-Oriented Design principles and Low-Level Design patterns in C++.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages