diff --git a/ATM b/ATM
new file mode 100644
index 0000000..626b7c3
--- /dev/null
+++ b/ATM
@@ -0,0 +1 @@
+3VlfT9swEP80ldgDKHFISx9LgQ1pm5DQtPFoEpN4pHFlu027T79z4jSxk5bSJaUaL9jXO/t8v/tnZ+BNZ6vPHM/jbywkyQA54Wrg3QwQci99B/4pyrqgDF1NiDgNNVNFeKR/iCaWbAsaEmEwSsYSSecmMWBpSgJp0DDnLDPZXlhi7jrHEWkQHgOcNKk/aSjjgnpVHkvRvxAaxeXOrqN/ecbBa8TZItX7DZD3kv8VP89wuZbmFzEOWVYjebcDb8oZk8VotpqSRNm2NFshd7fl143enKRyH4FLrYZcl0cnIVhCTxmXMYtYipPbinqdH4+oBRyYxXKWwNCFIVlR+as2flIsFz7MfhMp1xpmvJAMSNXaXxmba6lCG6XC1vNokmALHmgupD0E84hoLn9jS/BRwmZE8jWwcJJgSZfm6lg7S7Th24g+MAr7Ikc7Niph1m7t++YKhQZaqLI6DGpaVKQci3Zc9JGWOFloZX8IwgdomMABr0O6hGEkc4sVpGduU2CLFr4a6VxtNsl13VcixTNQZ/IoOU2j/cXm2ZtClheaPpbFVJLHOc4BzyDlmH6nbUW4JKvdftP0iFLABBY5Gtmsin63jP64FvljZ7sPGfDvwNpvYD15FpLjQHneJAjAFLJb5FtIQYKFgJQLaqUx4VTtDSeJWSjevey+Gp2YDyDfdIIN4G85wSb7/4sXDFsj/syKuCmEEnKK2acWCJTMvQrr+8pnmnAYVr8WkLIA/Izx8OzT+6O7WOE76Lm39IkBbwf/eM/gd90OcN8UtE5LsHOB/FoVdnuvwaN+Cu7IhObSjrQOKy7qB4f/AQavrFFHgMHrB4bRB+BgtqRFr909NldHC5FRo0SdZ1TGNxxneeq/b+1TzkMyZ4LKiuUuZItnAG7v/jGISfB6jROcBkWRee8C0E2l4oVwcbg0tGOUpaoCUCGZMtkEbpp4ncB04N311iQdJHpinRTau5NCHVRUt5dMfuxL7biXbOGP7WzRV7Jw/V4SuYFCkdRT0KlWa9X0SbMeASIryXeB2kTllRrDXMEhtoPqWuE2tN58LPYrfwc3DIrtD8V93CgSLZlsylLB3pGCU6KuPYvaE8ibIuAlQuY3kZ1yH5wpPevK2ZIn3ZY8OewiTQ6PHaCuEZ7FDaXfCHUvTyVExzbQ3s4YtfkhajuN0tIwtTB9gPYob3DuoNVRDU4nL4b6aeCAR8Pas8Spvx7aVRW1hDHq7QGhCSVNl0Qnv4/Ob9tuJzXTXLVYxuvCMONeEpxxo++/yejpU4Z9pffG/X3LaD5wC7w8Ce+0Xv68lpe/8htP3Tvtrvkg72w++ObX3FOwy6Z53xG1o5aoPcAuMK2+dhbOVX1S9m7/Ag==
\ No newline at end of file
diff --git a/src/.DS_Store b/src/.DS_Store
new file mode 100644
index 0000000..fb5ef36
Binary files /dev/null and b/src/.DS_Store differ
diff --git a/src/main/.DS_Store b/src/main/.DS_Store
new file mode 100644
index 0000000..b379886
Binary files /dev/null and b/src/main/.DS_Store differ
diff --git a/src/main/java/Account.java b/src/main/java/Account.java
new file mode 100644
index 0000000..1b5da47
--- /dev/null
+++ b/src/main/java/Account.java
@@ -0,0 +1,39 @@
+import java.util.ArrayList;
+
+abstract class Account {
+ private double balance = 0;
+
+ private ArrayList history = new ArrayList();
+
+ public double checkBalance() {
+ return this.balance;
+ }
+
+ public double addFunds(double n) {
+ this.balance += n;
+ history.add("Deposited: $" + n);
+ return this.balance;
+ }
+
+ public double withDraw(double n) {
+
+ if (balance - n >= 0) {
+ System.out.println("Successful");
+ history.add("Withdrawn: $" + n);
+ balance -= n;
+ } else {
+ System.out.println("Insufficient funds");
+ }
+ return this.balance;
+ }
+
+ public String printHistory() {
+ String a = "";
+ for (String x : history) {
+ System.out.println(x);
+
+ a += x;
+ }
+ return a;
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/CheckingAccount.java b/src/main/java/CheckingAccount.java
new file mode 100644
index 0000000..e55e6a3
--- /dev/null
+++ b/src/main/java/CheckingAccount.java
@@ -0,0 +1,5 @@
+public class CheckingAccount extends Account {
+
+
+}
+
diff --git a/src/main/java/Console.java b/src/main/java/Console.java
new file mode 100644
index 0000000..1d7445a
--- /dev/null
+++ b/src/main/java/Console.java
@@ -0,0 +1,223 @@
+
+import java.util.ArrayList;
+import java.util.Scanner;
+
+public class Console {
+
+
+ public void Start() {
+ mainMenu();
+ }
+
+ User currentUser;
+ int currentAccount;
+
+
+ public void login() {
+ ArrayList users = UserWarehouse.getList();
+
+ Scanner loginInput = new Scanner(System.in);
+ System.out.println("Please enter Username to login: ");
+ String userName = loginInput.nextLine();
+ System.out.println("Please enter a password: ");
+ String userPassword = loginInput.nextLine();
+
+
+ for (User user : users) {
+ if (user.getUserName().contains(userName)) {
+ if (user.getPassword().contains(userPassword)) {
+ currentUser = user;
+ accountMenu();
+ } else {
+ System.out.println("User does not exist.\n");
+ mainMenu();
+ }
+ } else {
+ System.out.println("User does not exist.\n");
+ mainMenu();
+ }
+ }
+ mainMenu();
+ }
+
+ private void mainMenu() {
+ int userinput;
+ boolean continueInput;
+
+ Scanner input = new Scanner(System.in);
+ System.out.println("\n-------Welcome-------\n" +
+ "1: Create Account\n" +
+ "2: Login\n" +
+ "3: Exit");
+ enterInteger();
+ userinput = 0;
+ if (input.hasNextInt()) {
+ userinput = input.nextInt();
+ } else {
+ System.out.println("Please try an integer.");
+ mainMenu();
+ }
+ switch (userinput) {
+ case 1:
+ UserFactory.createUser();
+ login();
+ break;
+ case 2:
+ login();
+ break;
+ case 3:
+ exit();
+ break;
+ default:
+ System.out.println("Not a valid selection");
+ mainMenu();
+ }
+ }
+
+ public void accountMenu() {
+ System.out.println("-----------------\n" +
+ "1: Checking \n" +
+ "2: Savings\n" +
+ "3: Investing\n" +
+ "4: Main Menu");
+ enterInteger();
+
+ Scanner input = new Scanner(System.in);
+ int userInput;
+ userInput = 0;
+ if (input.hasNextInt()) {
+ userInput = input.nextInt();
+ } else {
+ System.out.println("Please try an integer.");
+ accountMenu();
+ }
+ switch (userInput) {
+ case 1:
+ currentAccount = 0;
+ accountActions();
+ break;
+ case 2:
+ currentAccount = 1;
+ accountActions();
+ break;
+ case 3:
+ currentAccount = 2;
+ accountActions();
+ break;
+ case 4:
+ mainMenu();
+ break;
+ default:
+ System.out.println("Not a valid selection.");
+ accountMenu();
+ }
+ }
+
+ public void accountActions() {
+ System.out.println("-----------------\n" +
+ "1: Check Balance\n" +
+ "2: Add Funds\n" +
+ "3: Withdraw\n" +
+ "4: Transaction History\n" +
+ "5: Transfers\n" +
+ "6: Back\n");
+
+ enterInteger();
+ Scanner input = new Scanner(System.in);
+ int userInput;
+ userInput = 0;
+ if (input.hasNextInt()) {
+ userInput = input.nextInt();
+ } else {
+ System.out.println("Please try an integer.");
+ accountActions();
+ }
+ switch (userInput) {
+ case 1:
+ //check balance
+ System.out.println("$" + currentUser.accounts.get(currentAccount).checkBalance());
+ accountActions();
+ break;
+ case 2:
+ //add funds/deposit
+ System.out.println("Amount to be deposited: ");
+ double depoFunds = 0;
+ if (input.hasNextDouble()) {
+ depoFunds = input.nextDouble();
+ } else {
+ System.out.println("Please try an integer.");
+ accountActions();
+ }
+ currentUser.accounts.get(currentAccount).addFunds(depoFunds);
+ accountActions();
+ break;
+ case 3:
+ //withdraw
+ System.out.println("Amount to be withdrawn: ");
+ double withDrawFunds = 0;
+ if (input.hasNextDouble()) {
+ withDrawFunds = input.nextDouble();
+ } else {
+ System.out.println("Please try an integer.");
+ accountActions();
+ }
+ currentUser.accounts.get(currentAccount).withDraw(withDrawFunds);
+ accountActions();
+ break;
+ case 4:
+ System.out.println("Transaction history:");
+ currentUser.accounts.get(currentAccount).printHistory();
+ accountActions();
+ break;
+ case 5:
+ tranfers();
+ break;
+ case 6:
+ accountMenu();
+ break;
+ default:
+ accountActions();
+ }
+ }
+
+ private void tranfers() {
+ int userInput;
+ int toAccount = 0;
+ Scanner input = new Scanner(System.in);
+
+ System.out.println("-----------------\n" +
+ "Transfer to: \n" +
+ "1: Checking\n" +
+ "2: Savings\n" +
+ "3: Investing\n");
+
+ enterInteger();
+
+ if (input.hasNextInt()) {
+ toAccount = input.nextInt();
+ } else {
+ System.out.println("Please try an integer.");
+ tranfers();
+ }
+
+ double funds = 0;
+ System.out.println("Amount to transfer: ");
+ if (input.hasNextDouble()) {
+ funds = input.nextDouble();
+ } else {
+ System.out.println("Please try an integer.");
+ tranfers();
+ }
+ currentUser.accounts.get(currentAccount).withDraw(funds);
+ currentUser.accounts.get(toAccount - 1).addFunds(funds);
+ accountActions();
+ }
+
+ private void enterInteger() {
+ System.out.println("Please enter an integer.");
+ }
+
+ private void exit() {
+ System.exit(0);
+ }
+}
diff --git a/src/main/java/InvestmentAccount.java b/src/main/java/InvestmentAccount.java
new file mode 100644
index 0000000..bc9cf89
--- /dev/null
+++ b/src/main/java/InvestmentAccount.java
@@ -0,0 +1,2 @@
+public class InvestmentAccount extends Account{
+}
diff --git a/src/main/java/Main.java b/src/main/java/Main.java
index 05e41a9..987ddd1 100644
--- a/src/main/java/Main.java
+++ b/src/main/java/Main.java
@@ -1,9 +1,14 @@
-/**
- * Created by iyasuwatts on 10/17/17.
- */
+import org.junit.Test;
+
public class Main {
- public static void main(String[] args){
-
+ public static void main(String[] args) {
+
+
+ Console atm = new Console();
+ atm.Start();
+
+
}
+
}
diff --git a/src/main/java/SavingsAccount.java b/src/main/java/SavingsAccount.java
new file mode 100644
index 0000000..ed227d4
--- /dev/null
+++ b/src/main/java/SavingsAccount.java
@@ -0,0 +1,2 @@
+public class SavingsAccount extends Account {
+}
diff --git a/src/main/java/User.java b/src/main/java/User.java
new file mode 100644
index 0000000..c1db380
--- /dev/null
+++ b/src/main/java/User.java
@@ -0,0 +1,99 @@
+import java.util.ArrayList;
+
+public class User {
+
+ private int id =0;
+ private String userName;
+ private String password;
+ protected static ArrayList accounts = new ArrayList<>();
+
+ {
+ //gives three accounts to user upon creation
+ CheckingAccount checking = new CheckingAccount();
+ accounts.add(0, checking);
+ SavingsAccount saving = new SavingsAccount();
+ accounts.add(1, saving);
+ InvestmentAccount invest = new InvestmentAccount();
+ accounts.add(2, invest);
+ }
+
+ public User(String userName, String password) {
+ this.userName = userName;
+ this.password = password;
+ this.id = id;
+ id++;
+ }
+
+
+// public void addCheckingAccount() {
+// CheckingAccount checking = new CheckingAccount();
+// accounts.add(checking);
+// }
+
+ public void addSavingsAccount() {
+ SavingsAccount savings = new SavingsAccount();
+ accounts.add(1, savings);
+ }
+
+ public void addInvestmentAccount() {
+ InvestmentAccount invest = new InvestmentAccount();
+ accounts.add(2, invest);
+ }
+
+// private void removeCheckingAccount() {
+//
+// accounts.remove(0);
+// }
+//
+// private void removeSavingsAccount() {
+//
+// accounts.remove(1);
+// }
+//
+// private void removeInvestmentAccount() {
+//
+// accounts.remove(2);
+// }
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+
+ }
+
+ public static ArrayList getAccounts() {
+ return accounts;
+ }
+
+ public static void setAccounts(ArrayList accounts) {
+ User.accounts = accounts;
+ }
+
+ @Override
+ public String toString() {
+ return "Username: " + this.getUserName() +
+ "\nPassword: " + this.getPassword() +
+ "\nId: " + this.getId();
+ }
+
+
+}
diff --git a/src/main/java/UserFactory.java b/src/main/java/UserFactory.java
new file mode 100644
index 0000000..d9404cd
--- /dev/null
+++ b/src/main/java/UserFactory.java
@@ -0,0 +1,55 @@
+
+import java.util.Scanner;
+
+public class UserFactory {
+ protected UserFactory() {
+
+ }
+
+
+
+
+ public static User createUser() {
+
+
+ String userName = setUserName();
+ String password = setPassword();
+
+
+ User newUser = new User(userName, password);
+ UserWarehouse.addUser(newUser);
+
+ return newUser;
+ }
+
+ //FOR TESTS
+ public static User createUser(String name, String pass) {
+ String userName = name;
+ String password = pass;
+
+ User newUser = new User(userName, password);
+ UserWarehouse.addUser(newUser);
+
+ return newUser;
+ }
+
+
+ public static String setUserName() {
+ String name;
+ Scanner input = new Scanner(System.in);
+ System.out.println("Create a Username");
+ name = input.next();
+ return name;
+
+ }
+
+ public static String setPassword() {
+ String password;
+ Scanner input = new Scanner(System.in);
+ System.out.println("Create a password");
+ password = input.nextLine();
+ return password;
+ }
+
+
+}
diff --git a/src/main/java/UserWarehouse.java b/src/main/java/UserWarehouse.java
new file mode 100644
index 0000000..e698723
--- /dev/null
+++ b/src/main/java/UserWarehouse.java
@@ -0,0 +1,20 @@
+import java.util.ArrayList;
+
+public class UserWarehouse {
+
+
+ static final ArrayList users = new ArrayList();
+
+ public static void addUser(User newUser) {
+ System.out.println("Registering New User...\n");
+ users.add(newUser);
+
+ }
+
+
+ public static ArrayList getList() {
+ return users;
+ }
+
+
+}
diff --git a/src/test/java/AccountTest.java b/src/test/java/AccountTest.java
new file mode 100644
index 0000000..f4971af
--- /dev/null
+++ b/src/test/java/AccountTest.java
@@ -0,0 +1,71 @@
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class AccountTest {
+
+ protected static ArrayList accounts = new ArrayList();
+ private double balance = 0;
+
+ @Test
+ public void checkBalanceChecking() {
+ CheckingAccount checking = new CheckingAccount();
+ double expected = 0;
+ double actual = checking.checkBalance();
+ Assert.assertEquals(expected, actual, 0);
+ }
+ @Test
+ public void checkBalanceSaving(){
+ SavingsAccount savings = new SavingsAccount();
+ double saveExpected = 0;
+ double saveActual = savings.checkBalance();
+ Assert.assertEquals(saveExpected, saveActual, 0);
+ }
+ @Test
+ public void checkBalanceInvest(){
+ InvestmentAccount investing = new InvestmentAccount();
+ investing.addFunds(50);
+
+ double investExpected = 50;
+ double investActual = investing.checkBalance();
+ Assert.assertEquals(investExpected, investActual, 0);
+ }
+
+ @Test
+ public void addFunds() {
+
+ CheckingAccount checking = new CheckingAccount();
+ double expected = 500;
+ double actual = checking.addFunds(500);
+
+ Assert.assertEquals(expected, actual, 0);
+
+ }
+
+ @Test
+ public void withDraw() {
+
+ CheckingAccount checking = new CheckingAccount();
+ checking.addFunds(500);
+
+ double expected = 250;
+ double actual = checking.withDraw(250);
+
+ Assert.assertEquals(expected, actual, 0);
+ }
+ @Test
+ public void printHistory(){
+
+ CheckingAccount checking = new CheckingAccount();
+ checking.addFunds(5);
+
+ String expected = "Deposited: $5.0";
+ String actual = checking.printHistory();
+
+ Assert.assertEquals(expected,actual);
+ }
+
+}
\ No newline at end of file
diff --git a/src/test/java/UserFactoryTest.java b/src/test/java/UserFactoryTest.java
new file mode 100644
index 0000000..06431ad
--- /dev/null
+++ b/src/test/java/UserFactoryTest.java
@@ -0,0 +1,42 @@
+
+
+
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class UserFactoryTest {
+
+ User testUser = new User("jim", "neat");
+
+
+ @Test
+ public void createUserTest() {
+ User newUser= testUser;
+ String expected = newUser.getUserName();
+ User actualUser = UserFactory.createUser("jim", "neat");
+ String actual = actualUser.getUserName();
+
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setUserNameTest() {
+
+ String expected = testUser.getUserName();
+ testUser.setUserName("jim");
+ String actual = testUser.getUserName();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setPassWord() {
+ String expected = testUser.getPassword();
+ testUser.setPassword("neat");
+ String actual = testUser.getPassword();
+
+ Assert.assertEquals(expected, actual);
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/UserTest.java b/src/test/java/UserTest.java
new file mode 100644
index 0000000..3e569fc
--- /dev/null
+++ b/src/test/java/UserTest.java
@@ -0,0 +1,90 @@
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+
+
+public class UserTest {
+
+ User testUser1 = new User("test", "neat");
+
+ User testUser2 = new User("test", "neat");
+ User testUser3 = new User("test", "neat");
+ private ArrayList accounts = new ArrayList();
+
+ {
+ CheckingAccount checking = new CheckingAccount();
+ SavingsAccount savings = new SavingsAccount();
+ InvestmentAccount invest = new InvestmentAccount();
+ accounts.add(checking);
+ accounts.add(savings);
+ accounts.add(invest);
+ }
+
+
+ @Test
+ public void addCheckingAccount() {
+// int expected = accounts.size();
+ CheckingAccount checking = new CheckingAccount();
+ accounts.add(checking);
+ int expected = accounts.size();
+ int actual = accounts.size();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addSavingsAccount() {
+// int expected = accounts.size();
+ SavingsAccount savings = new SavingsAccount();
+ accounts.add(savings);
+ int expected = accounts.size();
+ int actual = accounts.size();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void addInvestmentAccount() {
+// int expected = accounts.size();
+ InvestmentAccount invest = new InvestmentAccount();
+ accounts.add(invest);
+ int expected = accounts.size();
+ int actual = accounts.size();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void getUserNameTest() {
+ String expected = "test";
+ String actual = testUser1.getUserName();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void getId() {
+ int expected = 1;
+ int actual = testUser1.getId();
+ Assert.assertEquals(expected, actual);
+ }
+ @Test
+ public void getIdTest() {
+ int expected = 2;
+ int actual = testUser2.getId();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void getPassword() {
+ String expected = "neat";
+ String actual = testUser1.getPassword();
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void setPassword() {
+ String expected = testUser1.getPassword();
+ testUser1.setPassword("neat");
+ String actual = testUser1.getPassword();
+ Assert.assertEquals(expected, actual);
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/UserWarehouseTest.java b/src/test/java/UserWarehouseTest.java
new file mode 100644
index 0000000..21a6d5e
--- /dev/null
+++ b/src/test/java/UserWarehouseTest.java
@@ -0,0 +1,21 @@
+import org.junit.jupiter.api.Test;
+
+import java.util.ArrayList;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class UserWarehouseTest {
+
+ static final ArrayList users = new ArrayList();
+ User testUser = new User("", "");
+
+ @Test
+ public void addUserTest() {
+
+ }
+
+ @Test
+ public void getListTest() {
+ }
+
+}
\ No newline at end of file