Make a fork of this repo and create a branch in the fork with the following name: [firstname]_[lastname_initial]
Example: vivek_m , soumya_j
Hello Y25s!
If you are new to version control, definitely start with this video: Complete Git and GitHub Tutorial for Beginners
For those of you who are already familiar with Git and GitHub, check out this game: Learn Git Branching
Please go through these resources. If you have any doubts or get stuck at any point, feel free to reach out to any of the Y24s.
Form link: Submission Form
Complete the GitHub game by 7th April EOD and fill out the form. Make sure you do this, as you all will be assessed based on these tasks moving forward.
Hey Y25s! Hope you all did well in the GitHub assignment. Next up: getting comfortable with the command line. Your next task is to solve the Bandit wargames: Bandit Wargame Linux is very important in our work, so please take this seriously and work through it honestly.
- Solve 30 levels from this game.
- Create notes for each level describing what you did and how you arrived at the solution/command (we may ask you about it as well!!).
Please open your Pull Requests (PRs) by the 14th April EOD.(Hope you have done the GitHub well !!)
Hey Y25s ! Hope you all did well in the OvertheWire assignment . Next Up : Working with real life applications of OOPS(Object Oriented Programming)
The goal of this project is to build a modular banking system where:
1.Customers can manage accounts 2.Transactions can be performed securely 3.Loans and ATM services can be handled 4.Banking operations are modeled using proper class relationship
- Multi-Level Hierarchy: Manage multiple branches under a single Bank entity.
- Diverse Account Types: Supports Savings, Current, and Fixed Deposit accounts with specific business logic (interest rates, overdrafts, maturity).
- Transaction Engine: Securely handle deposits, withdrawals, and transfers between accounts with history tracking.
- Loan Management: Process various loan types (Home, Car, Personal) with EMI calculations.
- ATM Services: Integrated ATM card management with status tracking and PIN security.
- Notification System: Polymorphic notification implementation supporting both SMS and Email alerts.
The system is designed with a strong focus on class relationships:
- Inheritance:
Accountis an abstract base class forSavingsAccount,CurrentAccount, andFixedDepositAccount. - Interfaces:
Notificationis implemented bySMSNotificationandEmailNotification. - Associations:
- A
Customercan own multipleAccounts. - A
Branchmanages multipleEmployeesandAccounts. Transactionslink a sender and a receiverAccount.
- A
| Class | Responsibility |
|---|---|
| Bank | Root entity managing branches, customers, and overall organization. |
| Branch | Local office handling specific accounts and staff. |
| Customer | Stores personal details and linked financial products. |
| Employee | Represents staff members with specific designations (Manager, Cashier). |
- Savings Account: Features daily withdrawal limits and minimum balance requirements.
- Current Account: Supports overdraft limits and business-specific charges.
- Fixed Deposit: Tracks tenure, interest rates, and maturity amounts.
- Loan: Manages principal, interest, and EMI status.
- ATM Card: Handles card security, expiry, and status (Active/Blocked).
Main Classes and Attributes
Represents the complete banking organization.
| Attribute | Type | Description |
|---|---|---|
| bankId | int | Unique bank ID |
| bankName | String | Name of bank |
| branches | List | All branches |
| customers | List | Registered customers |
| employees | List | Bank staff |
Represents a bank branch.
| Attribute | Type | Description |
|---|---|---|
| branchId | int | Unique branch ID |
| branchName | String | Branch name |
| IFSCCode | String | Branch IFSC |
| address | String | Branch address |
| accounts | List | Accounts handled |
| employees | List | Staff members |
Stores customer information.
| Attribute | Type | Description |
|---|---|---|
| customerId | int | Unique customer ID |
| fullName | String | Customer name |
| dob | Date | Date of birth |
| gender | String | Gender |
| mobileNumber | String | Contact number |
| String | ||
| address | String | Residential address |
| aadhaarNumber | String | National ID |
| PANNumber | String | Tax ID |
| accounts | List | Customer accounts |
| loans | List | Customer loans |
Base class for all account types.
| Attribute | Type | Description |
|---|---|---|
| accountNumber | long | Unique account number |
| accountType | String | Savings/current |
| balance | double | Current balance |
| dateOpened | Date | Opening date |
| status | String | Active/blocked |
| branch | Branch | Linked branch |
| customer | Customer | Owner |
| transactions | List | Transaction history |
Inherits from Account.
| Attribute | Type | Description |
|---|---|---|
| interestRate | double | Interest percentage |
| minimumBalance | double | Minimum balance required |
Inherits from Account.
| Attribute | Type | Description |
|---|---|---|
| overdraftLimit | double | Allowed overdraft |
| businessName | String | Business holder name |
Inherits from Account.
| Attribute | Type | Description |
|---|---|---|
| FDAmount | double | Deposit amount |
| maturityDate | Date | Maturity date |
| FDInterestRate | double | FD interest |
| tenureMonths | int | Deposit duration |
Represents all banking transactions.
| Attribute | Type | Description |
|---|---|---|
| transactionId | int | Unique transaction ID |
| transactionType | String | Deposit/withdraw |
| amount | double | Transaction amount |
| transactionDate | Date | Date/time |
| senderAccount | Account | Sender |
| receiverAccount | Account | Receiver |
| status | String | Success/pending |
Represents customer loans.
| Attribute | Type | Description |
|---|---|---|
| loanId | int | Unique loan ID |
| loanType | String | Home/car/personal |
| loanAmount | double | Principal amount |
| interestRate | double | Loan interest |
| tenureYears | int | Duration |
| EMIAmount | double | Monthly EMI |
| loanStatus | String | Approved/pending |
| customer | Customer | Loan owner |
Represents ATM/debit cards.
| Attribute | Type | Description |
|---|---|---|
| cardNumber | long | ATM card number |
| CVV | int | Security code |
| expiryDate | Date | Card expiry |
| PIN | int | ATM PIN |
| cardType | String | Debit/Credit |
| cardStatus | String | Active/blocked |
| linkedAccount | Account | Associated account |
Represents bank employees.
| Attribute | Type | Description |
|---|---|---|
| employeeId | int | Employee ID |
| employeeName | String | Employee name |
| designation | String | Manager/cashier |
| salary | double | Monthly salary |
| branch | Branch | Assigned branch |
Used for polymorphism.
| Attribute | Type | Description |
|---|---|---|
| message | String | Notification content |
Implements Notification interface.
| Attribute | Type | Description |
|---|---|---|
| phoneNumber | String | Recipient number |
| message | String | SMS content |
| deliveryStatus | String | Sent/pending |
Implements Notification interface.
| Attribute | Type | Description |
|---|---|---|
| emailAddress | String | Recipient email |
| subject | String | Email subject |
| message | String | Email body |
| deliveryStatus | String | Delivery status |
The system includes custom exceptions to ensure data integrity and security:
InsufficientBalanceExceptionInvalidPINExceptionAccountBlockedExceptionLoanRejectedException
- Language: C++
- Design Pattern: Strategy Pattern (for Notifications), Factory Pattern (for Account Creation).
Fork the repository and submit your PR(Pull Requests by 19th May, EOD) .