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
60 changes: 60 additions & 0 deletions src/main/java/com/booleanuk/core/Account.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.booleanuk.core;


import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public abstract class Account {
protected List<Transaction> transactions = new ArrayList<>();
protected float balance = 0;
protected String name;
protected long accountNumber;

public List<Transaction> getTransactions() {
return transactions;
}

public float getBalance() {
return balance;
}

public boolean deposit(float amount){
if (amount > 0){
transactions.add(new Transaction(amount));
balance += amount;
return true;
}
return false;
}

public boolean withdraw(float amount){
if (amount > 0 && balance >= amount){
transactions.add(new Transaction(-amount));
balance -= amount;
return true;
}
return false;
}

public String generateStatements(){
StringBuilder str = new StringBuilder();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
str.append(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", "date", "credit", "debit", "balance"));
float balance = 0;
List<String> rows = new ArrayList<>();
for (Transaction trs: transactions){
balance += trs.getDelta();
if(trs.getDelta() > 0){
rows.add(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", trs.getTimeStamp().format(formatter), trs.getDelta(), "", balance));
}
else {
rows.add(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", trs.getTimeStamp().format(formatter), "", Math.abs(trs.getDelta()), balance));
}
}
for (String row: rows.reversed()){
str.append(row);
}
return str.toString();
}
}
5 changes: 5 additions & 0 deletions src/main/java/com/booleanuk/core/CurrentAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package com.booleanuk.core;

public class CurrentAccount extends Account{

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

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

import java.time.LocalDateTime;

public class Transaction {
private final float delta;
private final LocalDateTime timeStamp;

public Transaction(float delta) {
this.delta = delta;
this.timeStamp = LocalDateTime.now();
}

public float getDelta() {
return delta;
}

public LocalDateTime getTimeStamp() {
return timeStamp;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/booleanuk/core/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.booleanuk.core;

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

public class User {
private List<Account> accounts = new ArrayList<>();

public void addAccount(Account account){
accounts.add(account);
}

public List<Account> getAccounts() {
return accounts;
}

public void printBankStatements(Account account){
System.out.println(account.generateStatements());
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions src/main/java/com/booleanuk/core/domain-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
| Class | Member | Method | Scenario | Output |
|------------------|---------------------------------|------------------------------|--------------------------------|--------------------|
| User | List<Account> accounts | addAccount(Account account) | | |
| Abstract Account | List<Transactions> transactions | getBalance() | | float balance |
| | float balance | getTransactions() | | List<Transactions> |
| | int accountNumber | deposit(float amount) | deposit was successfully done | true |
| | | withdraw(float float amount) | withdrawal was successful | true |
| | | generateStatements() | | |
| CurrentAccount | | | | |
| SavingAccount | | | | |
| Transaction | float delta | | | |
| | String timeStamp | | | |
| | | | | |
| | | | | |
| | | | | |
Empty file.
65 changes: 65 additions & 0 deletions src/main/java/com/booleanuk/extension/Account.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
package com.booleanuk.extension;

import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.List;

public abstract class Account {
protected List<Transaction> transactions = new ArrayList<>();
protected String name;
protected long accountNumber;


public Account(String name) {
this.name = name;
}

public List<Transaction> getTransactions() {
return transactions;
}

public float getBalance() {
float balance = 0;
for (Transaction trs : transactions){
balance += trs.getDelta();
}
return balance;
}

public boolean deposit(float amount){
if (amount > 0){
transactions.add(new Transaction(amount));
return true;
}
return false;
}

public boolean withdraw(float amount){
if (amount > 0 && getBalance() >= amount){
transactions.add(new Transaction(-amount));
return true;
}
return false;
}

public String generateStatements(){
StringBuilder str = new StringBuilder();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");
str.append(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", "date", "credit", "debit", "balance"));
float balance = 0;
List<String> rows = new ArrayList<>();
for (Transaction trs: transactions){
balance += trs.getDelta();
if(trs.getDelta() > 0){
rows.add(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", trs.getTimeStamp().format(formatter), trs.getDelta(), "", balance));
}
else {
rows.add(String.format("%1$-10s || %2$-10s || %3$-10s || %4$-10s\n", trs.getTimeStamp().format(formatter), "", Math.abs(trs.getDelta()), balance));
}
}
for (String row: rows.reversed()){
str.append(row);
}
return str.toString();
}
}
31 changes: 31 additions & 0 deletions src/main/java/com/booleanuk/extension/Branch.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.booleanuk.extension;

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

public class Branch {
private final List<OverdraftRequest> requests = new ArrayList<>();
private final List<Account> accounts = new ArrayList<>();

public void approveRequest(OverdraftRequest request){
request.approve();
requests.remove(request);
}

public void denyRequest(OverdraftRequest request){
request.deny();
requests.remove(request);
}

public List<OverdraftRequest> getRequests() {
return requests;
}

public void requestOverDraft(float amount, String reason, CurrentAccount account){
requests.add(new OverdraftRequest(amount, reason, account));
}

public void addAccount(Account account){
accounts.add(account);
}
}
22 changes: 22 additions & 0 deletions src/main/java/com/booleanuk/extension/CurrentAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package com.booleanuk.extension;

public class CurrentAccount extends Account {
protected float approvedOverdraw = 0;

public CurrentAccount(String name) {
super(name);
}

public void setApprovedOverdraw(float approvedOverdraw) {
this.approvedOverdraw = approvedOverdraw;
}

@Override
public boolean withdraw(float amount){
if (amount > 0 && getBalance() + approvedOverdraw >= amount){
transactions.add(new Transaction(-amount));
return true;
}
return false;
}
}
25 changes: 25 additions & 0 deletions src/main/java/com/booleanuk/extension/OverdraftRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package com.booleanuk.extension;

public class OverdraftRequest {
private float amount;
private String reason;
private CurrentAccount account;

public OverdraftRequest(float amount, String reason, CurrentAccount account) {
this.amount = amount;
this.reason = reason;
this.account = account;
}

public void approve(){
account.setApprovedOverdraw(amount);
}

public void deny(){
// probably send a message or notify accountholder someway
}

public String getReason() {
return reason;
}
}
8 changes: 8 additions & 0 deletions src/main/java/com/booleanuk/extension/SavingsAccount.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.booleanuk.extension;

public class SavingsAccount extends Account {
public SavingsAccount(String name) {
super(name);
}
}

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

import java.time.LocalDateTime;

public class Transaction {
private final float delta;
private final LocalDateTime timeStamp;

public Transaction(float delta) {
this.delta = delta;
this.timeStamp = LocalDateTime.now();
}

public float getDelta() {
return delta;
}

public LocalDateTime getTimeStamp() {
return timeStamp;
}
}
20 changes: 20 additions & 0 deletions src/main/java/com/booleanuk/extension/User.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.booleanuk.extension;

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

public class User {
private List<Account> accounts = new ArrayList<>();

public void addAccount(Account account){
accounts.add(account);
}

public List<Account> getAccounts() {
return accounts;
}

public void printBankStatements(Account account){
System.out.println(account.generateStatements());
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 18 additions & 0 deletions src/main/java/com/booleanuk/extension/domain-model.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
| Class | Member | Method | Scenario | Output |
|------------------|---------------------------------|-----------------------------------------------|--------------------------------|--------------------|
| User | List<Account> accounts | addAccount(Account account) | | |
| Abstract Account | List<Transactions> transactions | getBalance() | | float balance |
| | Branch branch | getTransactions() | | List<Transactions> |
| | float ApprovedOverdraw | deposit(float amount) | deposit was successfully done | true |
| | | withdraw(float float amount) | withdrawal was successful | true |
| | | requestOverDraft(float amount, String reason) | | |
| | | generateStatements() | | String |
| CurrentAccount | | | | |
| SavingAccount | | | | |
| Transaction | float delta | | | |
| | String timeStamp | | | |
| Branch | List<OverdraftRequest> requests | approveRequest(request) | | |
| | | denyRequest(request) | | |
| OverdraftRequest | float Amount | | | |
| | String Reason | | | |
| | Account account | | | |
38 changes: 38 additions & 0 deletions src/test/java/com/booleanuk/core/TestBank.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.booleanuk.core;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.text.SimpleDateFormat;

public class TestBank {
@Test
public void testCreatingAccount(){
User user = new User();
user.addAccount(new CurrentAccount());
user.addAccount(new SavingsAccount());
Assertions.assertEquals(2, user.getAccounts().size());
}

@Test
public void testDepositandWithdraw(){
Account account = new CurrentAccount();
Assertions.assertFalse(account.withdraw(700f));
Assertions.assertTrue(account.deposit(500f));
Assertions.assertTrue(account.withdraw(250f));
Assertions.assertEquals(250f, account.getBalance());
}

@Test
public void testPrintBankstatement(){
Account account = new CurrentAccount();
Assertions.assertTrue(account.deposit(500f));
Assertions.assertTrue(account.withdraw(250f));
Assertions.assertEquals(250f, account.getBalance());
System.out.println(account.generateStatements());
String date = new SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date());
Assertions.assertEquals("date || credit || debit || balance \n" +
date + " || || 250.0 || 250.0 \n" +
date + " || 500.0 || || 500.0 \n", account.generateStatements());
}
}
Empty file.
Loading
Loading