diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..2b63946 --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/me/zacharias/bank/Account.java b/src/main/java/me/zacharias/bank/Account.java new file mode 100644 index 0000000..b73f6c8 --- /dev/null +++ b/src/main/java/me/zacharias/bank/Account.java @@ -0,0 +1,93 @@ +package me.zacharias.bank; + +import me.zacharias.bank.transaction.Transaction; +import me.zacharias.bank.transaction.TransactionType; + +import java.util.ArrayList; +import java.util.UUID; + +public abstract class Account { + ArrayList transactions; + String name; + double balance; + UUID id; + + public Account(String name, int balance) { + this.name = name; + this.balance = balance; + transactions = new ArrayList<>(); + id = UUID.randomUUID(); + } + + public void WithdrawTransaction(double amount, String description, UUID destination) { + if(amount < 0) { + throw new IllegalArgumentException("Amount cannot be negative"); + } + if(balance < amount) { + throw new IllegalArgumentException("Insufficient balance"); + } + Transaction transaction = new Transaction(amount, description, destination, this.id, TransactionType.WITHDRAW); + transactions.add(transaction); + balance -= amount; + } + + public void DepositTransaction(double amount, String description, UUID originator) { + if(amount < 0) { + throw new IllegalArgumentException("Amount cannot be negative"); + } + Transaction transaction = new Transaction(amount, description, this.id, originator, TransactionType.DEPOSIT); + transactions.add(transaction); + balance += amount; + } + + public void TransferTransaction(double amount, String description, UUID originator, UUID destination) { + if(amount < 0 && balance < Math.abs(amount)) { + throw new IllegalArgumentException("Insufficient balance"); + } + Transaction transaction = new Transaction(amount, description, originator, destination, TransactionType.TRANSFER); + transactions.add(transaction); + balance += amount; + } + + public void handleTransaction(Transaction transaction) { + if(transaction.getType() == TransactionType.WITHDRAW) { + if(transaction.getAmount() < 0) { + throw new IllegalArgumentException("Amount cannot be negative"); + } + if(balance < transaction.getAmount()) { + throw new IllegalArgumentException("Insufficient balance"); + } + balance -= transaction.getAmount(); + } else if(transaction.getType() == TransactionType.DEPOSIT) { + if(transaction.getAmount() < 0) { + throw new IllegalArgumentException("Amount cannot be negative"); + } + balance += transaction.getAmount(); + } else if(transaction.getType() == TransactionType.TRANSFER) { + balance += transaction.getAmount(); + } + transactions.add(transaction); + } + + public String getName() { + return name; + } + + public double getBalance() { + return balance; + } + + public UUID getId() { + return id; + } + + public ArrayList getTransactions() { + return transactions; + } + + abstract double getInterestRate(); + + public double getInterest() { + return balance * (1+getInterestRate()); + } +} diff --git a/src/main/java/me/zacharias/bank/BankAccount.java b/src/main/java/me/zacharias/bank/BankAccount.java new file mode 100644 index 0000000..3f4daef --- /dev/null +++ b/src/main/java/me/zacharias/bank/BankAccount.java @@ -0,0 +1,12 @@ +package me.zacharias.bank; + +public class BankAccount extends Account { + public BankAccount(String name, int balance) { + super(name, balance); + } + + @Override + double getInterestRate() { + return 0.001; + } +} diff --git a/src/main/java/me/zacharias/bank/Main.java b/src/main/java/me/zacharias/bank/Main.java new file mode 100644 index 0000000..05f025f --- /dev/null +++ b/src/main/java/me/zacharias/bank/Main.java @@ -0,0 +1,5 @@ +package me.zacharias.bank; + +public class Main { + +} diff --git a/src/main/java/me/zacharias/bank/SavingsAccount.java b/src/main/java/me/zacharias/bank/SavingsAccount.java new file mode 100644 index 0000000..6572a55 --- /dev/null +++ b/src/main/java/me/zacharias/bank/SavingsAccount.java @@ -0,0 +1,13 @@ +package me.zacharias.bank; + +public class SavingsAccount extends Account{ + + public SavingsAccount(String name, int balance) { + super(name, balance); + } + + @Override + double getInterestRate() { + return 0.05; + } +} diff --git a/src/main/java/me/zacharias/bank/User.java b/src/main/java/me/zacharias/bank/User.java new file mode 100644 index 0000000..945aeb2 --- /dev/null +++ b/src/main/java/me/zacharias/bank/User.java @@ -0,0 +1,42 @@ +package me.zacharias.bank; + +import java.util.ArrayList; +import java.util.UUID; + +public class User { + UUID id; + String name; + String password; + ArrayList accounts; + + public User(String name, String password) { + this.name = name; + this.password = password; + id = UUID.randomUUID(); + accounts = new ArrayList<>(); + } + + public void createAccount(String name, int balance) { + Account account = new BankAccount(name, balance); + accounts.add(account); + } + + public void createSavingsAccount(String name, int balance) { + Account account = new SavingsAccount(name, balance); + accounts.add(account); + } + + public void deleteAccount(Account account) { + Account base = null; + for(Account a : accounts) { + if(a instanceof BankAccount) { + base = a; + } + } + if(base == null) { + throw new IllegalArgumentException("No bank accounts found"); + } + base.TransferTransaction(account.getBalance(), "Account closed", account.getId(), base.getId()); + accounts.remove(account); + } +} diff --git a/src/main/java/me/zacharias/bank/transaction/Transaction.java b/src/main/java/me/zacharias/bank/transaction/Transaction.java new file mode 100644 index 0000000..6bcdcd8 --- /dev/null +++ b/src/main/java/me/zacharias/bank/transaction/Transaction.java @@ -0,0 +1,39 @@ +package me.zacharias.bank.transaction; + +import java.util.UUID; + +public class Transaction { + double amount; + String description; + UUID originator; + UUID destination; + TransactionType type; + + public Transaction(double amount, String description, UUID destination, UUID originator, TransactionType type) { + this.amount = amount; + this.description = description; + this.originator = originator; + this.destination = destination; + this.type = type; + } + + public double getAmount() { + return amount; + } + + public String getDescription() { + return description; + } + + public UUID getOriginator() { + return originator; + } + + public UUID getDestination() { + return destination; + } + + public TransactionType getType() { + return type; + } +} diff --git a/src/main/java/me/zacharias/bank/transaction/TransactionType.java b/src/main/java/me/zacharias/bank/transaction/TransactionType.java new file mode 100644 index 0000000..720a58f --- /dev/null +++ b/src/main/java/me/zacharias/bank/transaction/TransactionType.java @@ -0,0 +1,5 @@ +package me.zacharias.bank.transaction; + +public enum TransactionType { + WITHDRAW, DEPOSIT, TRANSFER +}