Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added class-diagram.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
73 changes: 73 additions & 0 deletions src/main/java/com/booleanuk/core/Account.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package com.booleanuk.core;

import java.util.ArrayList;
import java.util.List;

public abstract class Account {
private float balance;
private ArrayList<Transaction> transactions = new ArrayList<>();

Transaction deposit(float amount) {
// amount must be greater than 0
if (amount <= 0) {
return null;
}

balance += amount;
Transaction transaction = new Transaction(amount, balance, true);
transactions.add(transaction);

return transaction;
}

Transaction withdraw(float amount) {
// amount must be greater than 0 and less than balance
if (amount <= 0 || amount > balance) {
return null;
}

balance -= amount;
Transaction transaction = new Transaction(amount, balance, false);
transactions.add(transaction);

return transaction;
}

float getBalance() {
return balance;
}

ArrayList<Transaction> getTransactions() {
return transactions;
}

String statement() {
StringBuilder sb = new StringBuilder();

int cellWidth = 30;
// format String
String format = "| %-" + cellWidth + "s | %-" + cellWidth + "s | %-" + cellWidth + "s | %-" + cellWidth
+ "s |%n";
// add headers
sb.append(String.format(format, "Date", "Credit", "Debit", "Balance"));

List<Transaction> descending = transactions.reversed();

for (Transaction t : descending) {
String time = t.getTime().toString();
String amount = String.format("%.2f", t.getAmount());
String balanceAfter = String.format("%.2f", t.getBalanceAfter());

// if deposit
if (t.getIsDeposit()) {
sb.append(String.format(format, time, amount, "", balanceAfter));
}
// if withdraw
else {
sb.append(String.format(format, time, "", amount, balanceAfter));
}
}

return sb.toString();
}
}
4 changes: 4 additions & 0 deletions src/main/java/com/booleanuk/core/CurrentAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package com.booleanuk.core;

public class CurrentAccount extends Account {
}
5 changes: 5 additions & 0 deletions src/main/java/com/booleanuk/core/SavingsAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.booleanuk.core;

public class SavingsAccount extends Account {

}
33 changes: 33 additions & 0 deletions src/main/java/com/booleanuk/core/Transaction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.booleanuk.core;

import java.time.LocalDateTime;

public class Transaction {
private LocalDateTime time;
private float amount;
private float balanceAfter;
private boolean isDeposit;

public Transaction(float amount, float balanceAfter, boolean isDeposit) {
this.time = LocalDateTime.now();
this.amount = amount;
this.balanceAfter = balanceAfter;
this.isDeposit = isDeposit;
}

LocalDateTime getTime() {
return time;
}

float getAmount() {
return amount;
}

float getBalanceAfter() {
return balanceAfter;
}

boolean getIsDeposit() {
return isDeposit;
}
}
87 changes: 87 additions & 0 deletions src/main/java/com/booleanuk/extension/Account.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
package com.booleanuk.extension;

import java.util.ArrayList;
import java.util.List;

public abstract class Account {
private ArrayList<Transaction> transactions = new ArrayList<>();
private long accountNr;

public Account(long accountNr) {
this.accountNr = accountNr;
}

Transaction deposit(float amount) {
// amount must be greater than 0
if (amount <= 0) {
return null;
}

Transaction transaction = new Transaction(amount, getBalance() + amount, true);
transactions.add(transaction);

return transaction;
}

Transaction withdraw(float amount) {
// amount must be greater than 0 and less than getBalance()
if (amount <= 0 || amount > getBalance()) {
return null;
}

Transaction transaction = new Transaction(amount, getBalance() - amount, false);
transactions.add(transaction);

return transaction;
}

float getBalance() {
float balance = 0f;
for (Transaction t : transactions) {
if (t.getIsDeposit()) {
balance += t.getAmount();
} else {
balance -= t.getAmount();
}
}
return balance;
}

ArrayList<Transaction> getTransactions() {
return transactions;
}

String statement() {
StringBuilder sb = new StringBuilder();

int cellWidth = 30;
// format String
String format = "| %-" + cellWidth + "s | %-" + cellWidth + "s | %-" + cellWidth + "s | %-" + cellWidth
+ "s |%n";
// add headers
sb.append(String.format(format, "Date", "Credit", "Debit", "Balance"));

List<Transaction> descending = transactions.reversed();

for (Transaction t : descending) {
String time = t.getTime().toString();
String amount = String.format("%.2f", t.getAmount());
String balanceAfter = String.format("%.2f", t.getBalanceAfter());

// if deposit
if (t.getIsDeposit()) {
sb.append(String.format(format, time, amount, "", balanceAfter));
}
// if withdraw
else {
sb.append(String.format(format, time, "", amount, balanceAfter));
}
}

return sb.toString();
}

long getAccountNr() {
return accountNr;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/booleanuk/extension/Bank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.booleanuk.extension;

import java.util.HashMap;

public class Bank {
private HashMap<Integer, Branch> branches = new HashMap<>();
private int nextBranchId = 1000;

Branch newBranch() {
Branch branch = new Branch(nextBranchId);
branches.put(nextBranchId, branch);
nextBranchId++;

return branch;
}

HashMap<Integer, Branch> getBranches() {
return branches;
}
}
37 changes: 37 additions & 0 deletions src/main/java/com/booleanuk/extension/Branch.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package com.booleanuk.extension;

import java.util.HashMap;

public class Branch {
private int nextAccountId = 10000000;
private HashMap<Long, Account> accounts = new HashMap<>();
private int branchId;

public Branch(int branchId) {
this.branchId = branchId;
}

int getId() {
return branchId;
}

HashMap<Long, Account> getAccounts() {
return accounts;
}

CurrentAccount newCurrentAccount() {
long accountNr = Long.parseLong(String.valueOf(branchId) + String.valueOf(nextAccountId));
nextAccountId++;
CurrentAccount acc = new CurrentAccount(accountNr);
accounts.put(accountNr, acc);
return acc;
}

SavingsAccount newSavingsAccount() {
long accountNr = Long.parseLong(String.valueOf(branchId) + String.valueOf(nextAccountId));
nextAccountId++;
SavingsAccount acc = new SavingsAccount(accountNr);
accounts.put(accountNr, acc);
return acc;
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/booleanuk/extension/CurrentAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.booleanuk.extension;

public class CurrentAccount extends Account {
public CurrentAccount(long accountNr) {
super(accountNr);
}
}
7 changes: 7 additions & 0 deletions src/main/java/com/booleanuk/extension/SavingsAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package com.booleanuk.extension;

public class SavingsAccount extends Account {
public SavingsAccount(long accountNr) {
super(accountNr);
}
}
33 changes: 33 additions & 0 deletions src/main/java/com/booleanuk/extension/Transaction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.booleanuk.extension;

import java.time.LocalDateTime;

public class Transaction {
private LocalDateTime time;
private float amount;
private float balanceAfter;
private boolean isDeposit;

public Transaction(float amount, float balanceAfter, boolean isDeposit) {
this.time = LocalDateTime.now();
this.amount = amount;
this.balanceAfter = balanceAfter;
this.isDeposit = isDeposit;
}

LocalDateTime getTime() {
return time;
}

float getAmount() {
return amount;
}

float getBalanceAfter() {
return balanceAfter;
}

boolean getIsDeposit() {
return isDeposit;
}
}
Loading
Loading