From b383d982984d711419eb45734043dc01e0d7cf81 Mon Sep 17 00:00:00 2001 From: jy-b Date: Sun, 30 Apr 2023 05:35:23 +0900 Subject: [PATCH 01/79] refactor: Init project [Init project] --- src/Main.java | 2 ++ src/SmartStore.java | 2 ++ src/Util/PrettyTerminal.java | 47 +++++++++++++++++++++++++++++++++ src/Util/Screen.java | 10 +++++++ src/customer/Customer.java | 25 ++++++++++++++++++ src/customer/Customers.java | 19 +++++++++++++ src/grade/Grade.java | 20 ++++++++++++++ src/grade/GradeRequirement.java | 16 +++++++++++ src/grade/GradeType.java | 12 +++++++++ src/grade/Grades.java | 18 +++++++++++++ src/menu/CustomerMenu.java | 4 +++ src/menu/GradeMenu.java | 4 +++ src/menu/MainMenu.java | 4 +++ src/menu/Menu.java | 18 +++++++++++++ 14 files changed, 201 insertions(+) create mode 100644 src/Main.java create mode 100644 src/SmartStore.java create mode 100644 src/Util/PrettyTerminal.java create mode 100644 src/Util/Screen.java create mode 100644 src/customer/Customer.java create mode 100644 src/customer/Customers.java create mode 100644 src/grade/Grade.java create mode 100644 src/grade/GradeRequirement.java create mode 100644 src/grade/GradeType.java create mode 100644 src/grade/Grades.java create mode 100644 src/menu/CustomerMenu.java create mode 100644 src/menu/GradeMenu.java create mode 100644 src/menu/MainMenu.java create mode 100644 src/menu/Menu.java diff --git a/src/Main.java b/src/Main.java new file mode 100644 index 00000000..70464179 --- /dev/null +++ b/src/Main.java @@ -0,0 +1,2 @@ +public class Main { +} diff --git a/src/SmartStore.java b/src/SmartStore.java new file mode 100644 index 00000000..8fca49cc --- /dev/null +++ b/src/SmartStore.java @@ -0,0 +1,2 @@ +public class SmartStore { +} diff --git a/src/Util/PrettyTerminal.java b/src/Util/PrettyTerminal.java new file mode 100644 index 00000000..cca9e9d4 --- /dev/null +++ b/src/Util/PrettyTerminal.java @@ -0,0 +1,47 @@ +package Util; + +public enum PrettyTerminal { + RESET("\u001B[0m"), + BOLD("\u001B[1m"), + UNDERLINE("\u001B[4m"), + RED("\u001B[31m"), + GREEN("\u001B[32m"), + YELLOW("\u001B[33m"), + BLUE("\u001B[34m"), + PURPLE("\u001B[35m"), + CYAN("\u001B[36m"), + WHITE("\u001B[37m"); + + String attribute; + PrettyTerminal(String attribute) { + this.attribute = attribute; + } + static void cls(){ + + String osName = System.getProperty("os.name"); + try{ + if (osName.contains("Windows")) { + String terminal = System.getenv("TERM"); + if (terminal != null && terminal.contains("xterm")) { + System.out.print("\033[H\033[2J"); + System.out.flush(); + } else if (osName.contains("Windows 10")) { + new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); + } else { + new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); + } + } else { + System.out.print("\033[H\033[2J"); + System.out.flush(); + } + } + + catch (Exception e){ + } + } + + public String getAttribute() { + //System.out.println(RED.getAttribute() + BOLD.getAttribute() + "Welcome to my decorated terminal!" + RESET.getAttribute(); + return attribute; + } +} diff --git a/src/Util/Screen.java b/src/Util/Screen.java new file mode 100644 index 00000000..64620f68 --- /dev/null +++ b/src/Util/Screen.java @@ -0,0 +1,10 @@ +package Util; + +public enum Screen { + SPLASH("this is splash screen"); + + String message; + Screen(String message) { + this.message = message; + } +} diff --git a/src/customer/Customer.java b/src/customer/Customer.java new file mode 100644 index 00000000..5695352c --- /dev/null +++ b/src/customer/Customer.java @@ -0,0 +1,25 @@ +package customer; +import grade.Grade; + +public class Customer { + private int customerId; + private String customerName; + private Grade grade; + + + + //TODO: 2023-04-30 constructor to builder + Customer(int customerId, String customerName, Grade grade){ + this.customerId = customerId; + this.customerName = customerName; + this.grade = grade; + } + + public void updateUser(int customerId){ + + } + + public void deleteUser(int customerId){ + + } +} diff --git a/src/customer/Customers.java b/src/customer/Customers.java new file mode 100644 index 00000000..726c310a --- /dev/null +++ b/src/customer/Customers.java @@ -0,0 +1,19 @@ +package customer; + +import java.util.List; + +public class Customers { + private List customerList; + + public Customers getInstance(){ + return null; + } + + public List getCustomerList() { + return customerList; + } + + public void refresh(){ + + } +} diff --git a/src/grade/Grade.java b/src/grade/Grade.java new file mode 100644 index 00000000..b16a3de5 --- /dev/null +++ b/src/grade/Grade.java @@ -0,0 +1,20 @@ +package grade; + +import java.util.Map; + +public class Grade { + private Map gradeInfo; + + + Grade(String gradeName, int minUsageTime, int minPaymentAmount){ + + } + + public Grade getGrade(){ + return null; + } + + public void updateGrade(String gradeName){ + + } +} diff --git a/src/grade/GradeRequirement.java b/src/grade/GradeRequirement.java new file mode 100644 index 00000000..f609f92d --- /dev/null +++ b/src/grade/GradeRequirement.java @@ -0,0 +1,16 @@ +package grade; + +public class GradeRequirement { + private int minUsageTime; + private int minPaymentAmount; + + public GradeRequirement getGradeRequirement() { + + return null; + } + + //TODO: 2023-04-30 constructor to builder + public void setGradeRequirement(int a, int b){ + + } +} diff --git a/src/grade/GradeType.java b/src/grade/GradeType.java new file mode 100644 index 00000000..61a50567 --- /dev/null +++ b/src/grade/GradeType.java @@ -0,0 +1,12 @@ +package grade; + +public enum GradeType { + GENERAL(new String[] {"G", "GENERAL", "일반"}), + VIP(new String[] {"V", "VIP", "우수"}), + VVIP(new String[] {"VV", "VVIP", "최우수"}); + + String[] grade = new String[3]; + GradeType(String[] grade) { + this.grade = grade; + } +} diff --git a/src/grade/Grades.java b/src/grade/Grades.java new file mode 100644 index 00000000..edccb9ca --- /dev/null +++ b/src/grade/Grades.java @@ -0,0 +1,18 @@ +package grade; + +import java.util.ArrayList; +import java.util.List; + +public class Grades { + private List gradeList = new ArrayList<>(); + + + public Grades getInstance(){ + return this; + } + + public void refresh(){ + + } + +} diff --git a/src/menu/CustomerMenu.java b/src/menu/CustomerMenu.java new file mode 100644 index 00000000..c3fd792e --- /dev/null +++ b/src/menu/CustomerMenu.java @@ -0,0 +1,4 @@ +package menu; + +public class CustomerMenu { +} diff --git a/src/menu/GradeMenu.java b/src/menu/GradeMenu.java new file mode 100644 index 00000000..3232934d --- /dev/null +++ b/src/menu/GradeMenu.java @@ -0,0 +1,4 @@ +package menu; + +public class GradeMenu { +} diff --git a/src/menu/MainMenu.java b/src/menu/MainMenu.java new file mode 100644 index 00000000..7a7bb715 --- /dev/null +++ b/src/menu/MainMenu.java @@ -0,0 +1,4 @@ +package menu; + +public class MainMenu { +} diff --git a/src/menu/Menu.java b/src/menu/Menu.java new file mode 100644 index 00000000..b636078d --- /dev/null +++ b/src/menu/Menu.java @@ -0,0 +1,18 @@ +package menu; + +interface Menu { + StringBuilder sb = new StringBuilder(); + //read buffer or scanner + + default String chooseMenu(){ + return ""; + } + + default void displayMenu(){ + + } + + void runMenuSelectionLoop(); + + void handleChoice(String menuNumber); +} From 3aeee9ece08f2a55a410e4a301430c7ecc9badca Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 02:29:08 +0900 Subject: [PATCH 02/79] refactor: Change Package Structure [Change Package Structure] --- src/SmartStore.java | 2 -- src/com/smartstore/Main.java | 7 +++++++ src/com/smartstore/SmartStore.java | 7 +++++++ src/{ => com/smartstore}/customer/Customer.java | 5 +++-- .../smartstore}/customer/Customers.java | 2 +- src/{ => com/smartstore}/grade/Grade.java | 2 +- .../smartstore}/grade/GradeRequirement.java | 2 +- src/{ => com/smartstore}/grade/GradeType.java | 2 +- src/{ => com/smartstore}/grade/Grades.java | 2 +- src/com/smartstore/menu/CustomerMenu.java | 17 +++++++++++++++++ src/com/smartstore/menu/GradeMenu.java | 17 +++++++++++++++++ src/com/smartstore/menu/MainMenu.java | 16 ++++++++++++++++ src/{ => com/smartstore}/menu/Menu.java | 2 +- .../smartstore/util}/PrettyTerminal.java | 2 +- src/{Util => com/smartstore/util}/Screen.java | 2 +- 15 files changed, 75 insertions(+), 12 deletions(-) delete mode 100644 src/SmartStore.java create mode 100644 src/com/smartstore/Main.java create mode 100644 src/com/smartstore/SmartStore.java rename src/{ => com/smartstore}/customer/Customer.java (86%) rename src/{ => com/smartstore}/customer/Customers.java (89%) rename src/{ => com/smartstore}/grade/Grade.java (90%) rename src/{ => com/smartstore}/grade/GradeRequirement.java (90%) rename src/{ => com/smartstore}/grade/GradeType.java (90%) rename src/{ => com/smartstore}/grade/Grades.java (88%) create mode 100644 src/com/smartstore/menu/CustomerMenu.java create mode 100644 src/com/smartstore/menu/GradeMenu.java create mode 100644 src/com/smartstore/menu/MainMenu.java rename src/{ => com/smartstore}/menu/Menu.java (90%) rename src/{Util => com/smartstore/util}/PrettyTerminal.java (97%) rename src/{Util => com/smartstore/util}/Screen.java (83%) diff --git a/src/SmartStore.java b/src/SmartStore.java deleted file mode 100644 index 8fca49cc..00000000 --- a/src/SmartStore.java +++ /dev/null @@ -1,2 +0,0 @@ -public class SmartStore { -} diff --git a/src/com/smartstore/Main.java b/src/com/smartstore/Main.java new file mode 100644 index 00000000..80d6ebe5 --- /dev/null +++ b/src/com/smartstore/Main.java @@ -0,0 +1,7 @@ +package com.smartstore; + +public class Main { + public static void main(String[] args) { + SmartStore.run(); + } +} diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java new file mode 100644 index 00000000..2ed94d4a --- /dev/null +++ b/src/com/smartstore/SmartStore.java @@ -0,0 +1,7 @@ +package com.smartstore; + +public class SmartStore { + public static void run(){ + + } +} diff --git a/src/customer/Customer.java b/src/com/smartstore/customer/Customer.java similarity index 86% rename from src/customer/Customer.java rename to src/com/smartstore/customer/Customer.java index 5695352c..0c6a3119 100644 --- a/src/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -1,5 +1,6 @@ -package customer; -import grade.Grade; +package com.smartstore.customer; + +import com.smartstore.grade.Grade; public class Customer { private int customerId; diff --git a/src/customer/Customers.java b/src/com/smartstore/customer/Customers.java similarity index 89% rename from src/customer/Customers.java rename to src/com/smartstore/customer/Customers.java index 726c310a..339b1486 100644 --- a/src/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -1,4 +1,4 @@ -package customer; +package com.smartstore.customer; import java.util.List; diff --git a/src/grade/Grade.java b/src/com/smartstore/grade/Grade.java similarity index 90% rename from src/grade/Grade.java rename to src/com/smartstore/grade/Grade.java index b16a3de5..94c12676 100644 --- a/src/grade/Grade.java +++ b/src/com/smartstore/grade/Grade.java @@ -1,4 +1,4 @@ -package grade; +package com.smartstore.grade; import java.util.Map; diff --git a/src/grade/GradeRequirement.java b/src/com/smartstore/grade/GradeRequirement.java similarity index 90% rename from src/grade/GradeRequirement.java rename to src/com/smartstore/grade/GradeRequirement.java index f609f92d..0a556a98 100644 --- a/src/grade/GradeRequirement.java +++ b/src/com/smartstore/grade/GradeRequirement.java @@ -1,4 +1,4 @@ -package grade; +package com.smartstore.grade; public class GradeRequirement { private int minUsageTime; diff --git a/src/grade/GradeType.java b/src/com/smartstore/grade/GradeType.java similarity index 90% rename from src/grade/GradeType.java rename to src/com/smartstore/grade/GradeType.java index 61a50567..6fef4c08 100644 --- a/src/grade/GradeType.java +++ b/src/com/smartstore/grade/GradeType.java @@ -1,4 +1,4 @@ -package grade; +package com.smartstore.grade; public enum GradeType { GENERAL(new String[] {"G", "GENERAL", "일반"}), diff --git a/src/grade/Grades.java b/src/com/smartstore/grade/Grades.java similarity index 88% rename from src/grade/Grades.java rename to src/com/smartstore/grade/Grades.java index edccb9ca..10c5faff 100644 --- a/src/grade/Grades.java +++ b/src/com/smartstore/grade/Grades.java @@ -1,4 +1,4 @@ -package grade; +package com.smartstore.grade; import java.util.ArrayList; import java.util.List; diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java new file mode 100644 index 00000000..8304f6ca --- /dev/null +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -0,0 +1,17 @@ +package com.smartstore.menu; + +public class CustomerMenu implements Menu { + + @Override + public void runMenuSelectionLoop() { + boolean isExit = false; + while (isExit){ + + } + } + + @Override + public void handleChoice(String menuNumber) { + + } +} diff --git a/src/com/smartstore/menu/GradeMenu.java b/src/com/smartstore/menu/GradeMenu.java new file mode 100644 index 00000000..28ea7c25 --- /dev/null +++ b/src/com/smartstore/menu/GradeMenu.java @@ -0,0 +1,17 @@ +package com.smartstore.menu; + +public class GradeMenu implements Menu { + @Override + public void runMenuSelectionLoop() { + boolean isExit = false; + while (isExit){ + + } + } + + @Override + public void handleChoice(String menuNumber) { + + } +} + diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java new file mode 100644 index 00000000..7949c3cc --- /dev/null +++ b/src/com/smartstore/menu/MainMenu.java @@ -0,0 +1,16 @@ +package com.smartstore.menu; + +public class MainMenu implements Menu { + @Override + public void runMenuSelectionLoop() { + boolean isExit = false; + while (isExit){ + + } + } + + @Override + public void handleChoice(String menuNumber) { + + } +} diff --git a/src/menu/Menu.java b/src/com/smartstore/menu/Menu.java similarity index 90% rename from src/menu/Menu.java rename to src/com/smartstore/menu/Menu.java index b636078d..1ff7e426 100644 --- a/src/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -1,4 +1,4 @@ -package menu; +package com.smartstore.menu; interface Menu { StringBuilder sb = new StringBuilder(); diff --git a/src/Util/PrettyTerminal.java b/src/com/smartstore/util/PrettyTerminal.java similarity index 97% rename from src/Util/PrettyTerminal.java rename to src/com/smartstore/util/PrettyTerminal.java index cca9e9d4..d457e70a 100644 --- a/src/Util/PrettyTerminal.java +++ b/src/com/smartstore/util/PrettyTerminal.java @@ -1,4 +1,4 @@ -package Util; +package com.smartstore.util; public enum PrettyTerminal { RESET("\u001B[0m"), diff --git a/src/Util/Screen.java b/src/com/smartstore/util/Screen.java similarity index 83% rename from src/Util/Screen.java rename to src/com/smartstore/util/Screen.java index 64620f68..2e1dd988 100644 --- a/src/Util/Screen.java +++ b/src/com/smartstore/util/Screen.java @@ -1,4 +1,4 @@ -package Util; +package com.smartstore.util; public enum Screen { SPLASH("this is splash screen"); From 58fbf2e8d3e72c5c6e65f4d3264f7aa6ca70786d Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 02:32:04 +0900 Subject: [PATCH 03/79] refactor: Add CustomHashMap.java [Add CustomHashMap.java] --- src/com/smartstore/util/CustomHashMap.java | 172 +++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 src/com/smartstore/util/CustomHashMap.java diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java new file mode 100644 index 00000000..bb366f10 --- /dev/null +++ b/src/com/smartstore/util/CustomHashMap.java @@ -0,0 +1,172 @@ +package com.smartstore.util; + +public class CustomHashMap{ + //Entry Class for CustomHashMap + private class Entry{ + private K key; + private V value; + private Entry next; + + public Entry(K key, V value){ + this.key = key; + this.value = value; + } + + //Key is immutable + public K getKey() { + return this.key; + } + + public V getValue() { + return this.value; + } + + public void setValue(V value) { + this.value = value; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + Entry e = this; + while (e != null){ + sb.append("\t").append("[").append(" key : ").append(e.getKey()).append(", value : ").append(e.getValue()).append(" ]\n"); + e = e.next; + } + return sb.toString(); + } + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append("CustomHashMap { \n"); + for(int i = 0 ; i < SIZE ; i++){ + if(entries[i] != null){ + sb.append(entries[i]); + } + } + sb.append("}"); + return sb.toString(); + } + + /* + Entries + +--------------------+--------------------+--------------------+--------------------+--------------------+ + | Head1 | Head2 | Head3 | ... | Head.SIZE | + | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | + +--------------------+--------------------+--------------------+--------------------+--------------------+ + | [key, value] | null | null | [key, value] | [key, value] | + | [key, value] | | | | [key, value] | + | [key, value] | | | | [key, value] | + | | | | | [key, value] | + +--------------------+--------------------+--------------------+--------------------+--------------------+ + Too big SIZE have chance to increase unnecessary indexes + */ + private final int SIZE = 5; + + private Entry[] entries; + + public CustomHashMap(){ + entries = new Entry[SIZE]; + } + + public void put(K key, V value){ + //Get Entries index from hash code 0 to size-1 + int hash = key.hashCode() % SIZE; + Entry e = entries[hash]; + + //if entries[hash] is empty + if(e == null){ + //create new Entry + entries[hash] = new Entry(key, value); + } + else{ + //loop until entries value not exists + while (e.next != null){ + //if key exists, set value as new one + if (e.getKey() == key){ + e.setValue(value); + return; + } + e = e.next; + } + //if key == final entry's key, set value + if(e.getKey() == key){ + e.setValue(value); + return; + } + + //if key doesn't exist + //add new Entry end of the entries[hash] + e.next = new Entry(key, value); + } + + } + + public V get(K key){ + int hash = key.hashCode() % SIZE; + Entry e = entries[hash]; + + //if entries[hash] is empty, return null + if (e == null) { + return null; + } + + //loop until entries value not exists + while (e != null){ + //if key exits, return value + if(e.getKey() == key){ + return e.getValue(); + } + e = e.next; + } + //if key doesn't exist, return null + return null; + } + + public V getOrDefault(K key, V defaultValue){ + V value = get(key); + + if(value == null){ + return defaultValue; + } + return value; + } + + public Entry remove(K key){ + int hash = key.hashCode() % SIZE; + Entry e = entries[hash]; + + //if entries[hash] is empty, return null + if (e == null){ + return null; + } + + //if first Entry's key == key + if(e.getKey() == key){ + //shift second Entry to first(remove) + entries[hash] = e.next; + e.next = null; + return e; + } + + Entry prev = e; + e = e.next; + + while (e != null){ + if (e.getKey() == key) { + //shift next Entry to current(remove) + prev.next = e.next; + e.next = null; + return e; + } + prev = e; + e = e.next; + } + + //if key not exits, return null + return null; + } + +} From 8d6de95a1953d87d4b3d9484efd5be93bdfa14f1 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 03:40:45 +0900 Subject: [PATCH 04/79] refactor: Add Map Interface, modify CustomHashMap Class [ Added : Map interface Modified : make CustomHashMap implements smartstore.util.Map delete CustomHashMap getOrdefault Method : use map.getOrDefault() remove method return type : Entry -> boolean ] --- src/com/smartstore/util/CustomHashMap.java | 31 +++++++++------------- src/com/smartstore/util/Map.java | 22 +++++++++++++++ 2 files changed, 34 insertions(+), 19 deletions(-) create mode 100644 src/com/smartstore/util/Map.java diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index bb366f10..fb890182 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -1,9 +1,9 @@ package com.smartstore.util; -public class CustomHashMap{ +public class CustomHashMap implements Map { //Entry Class for CustomHashMap private class Entry{ - private K key; + private final K key; private V value; private Entry next; @@ -70,7 +70,7 @@ public String toString() { public CustomHashMap(){ entries = new Entry[SIZE]; } - + @Override public void put(K key, V value){ //Get Entries index from hash code 0 to size-1 int hash = key.hashCode() % SIZE; @@ -104,6 +104,7 @@ public void put(K key, V value){ } + @Override public V get(K key){ int hash = key.hashCode() % SIZE; Entry e = entries[hash]; @@ -125,22 +126,14 @@ public V get(K key){ return null; } - public V getOrDefault(K key, V defaultValue){ - V value = get(key); - - if(value == null){ - return defaultValue; - } - return value; - } - - public Entry remove(K key){ + @Override + public boolean remove(K key){ int hash = key.hashCode() % SIZE; Entry e = entries[hash]; - //if entries[hash] is empty, return null + //if entries[hash] is empty, return false if (e == null){ - return null; + return false; } //if first Entry's key == key @@ -148,7 +141,7 @@ public Entry remove(K key){ //shift second Entry to first(remove) entries[hash] = e.next; e.next = null; - return e; + return true; } Entry prev = e; @@ -159,14 +152,14 @@ public Entry remove(K key){ //shift next Entry to current(remove) prev.next = e.next; e.next = null; - return e; + return true; } prev = e; e = e.next; } - //if key not exits, return null - return null; + //if key not exits, return false + return false; } } diff --git a/src/com/smartstore/util/Map.java b/src/com/smartstore/util/Map.java new file mode 100644 index 00000000..31d11804 --- /dev/null +++ b/src/com/smartstore/util/Map.java @@ -0,0 +1,22 @@ +package com.smartstore.util; + +public interface Map { + + void put(K key, V value); + + V get(K key); + + boolean remove(K key); + + default V getOrDefault(K key, V defaultValue){ + V value = get(key); + //if key is not exits, return defaultValue + if(value == null){ + return defaultValue; + } + return value; + } + + + +} From a4514b936157ccab619009c8e5fc9e39ff7c9adc Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 03:46:31 +0900 Subject: [PATCH 05/79] refactor: Add functions [ Modify : size method added in Map Interface, CustomHashMap Class ] --- src/com/smartstore/util/CustomHashMap.java | 17 +++++++++++------ src/com/smartstore/util/Map.java | 2 ++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index fb890182..3b31f406 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -41,7 +41,7 @@ public String toString() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("CustomHashMap { \n"); - for(int i = 0 ; i < SIZE ; i++){ + for(int i = 0; i < CAPACITY_SIZE; i++){ if(entries[i] != null){ sb.append(entries[i]); } @@ -63,17 +63,17 @@ public String toString() { +--------------------+--------------------+--------------------+--------------------+--------------------+ Too big SIZE have chance to increase unnecessary indexes */ - private final int SIZE = 5; + private final int CAPACITY_SIZE = 5; private Entry[] entries; public CustomHashMap(){ - entries = new Entry[SIZE]; + entries = new Entry[CAPACITY_SIZE]; } @Override public void put(K key, V value){ //Get Entries index from hash code 0 to size-1 - int hash = key.hashCode() % SIZE; + int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; //if entries[hash] is empty @@ -106,7 +106,7 @@ public void put(K key, V value){ @Override public V get(K key){ - int hash = key.hashCode() % SIZE; + int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; //if entries[hash] is empty, return null @@ -128,7 +128,7 @@ public V get(K key){ @Override public boolean remove(K key){ - int hash = key.hashCode() % SIZE; + int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; //if entries[hash] is empty, return false @@ -162,4 +162,9 @@ public boolean remove(K key){ return false; } + @Override + public int size() { + return CAPACITY_SIZE; + } + } diff --git a/src/com/smartstore/util/Map.java b/src/com/smartstore/util/Map.java index 31d11804..03e428b9 100644 --- a/src/com/smartstore/util/Map.java +++ b/src/com/smartstore/util/Map.java @@ -17,6 +17,8 @@ default V getOrDefault(K key, V defaultValue){ return value; } + int size(); + } From 227a1adebb0808231bd550fb520b5a6317118004 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 03:49:58 +0900 Subject: [PATCH 06/79] refactor: Add Collections Interface, List Class [ Added : Collections Interface, Class List ] --- src/com/smartstore/util/Collections.java | 13 ++++++ src/com/smartstore/util/List.java | 50 ++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/com/smartstore/util/Collections.java create mode 100644 src/com/smartstore/util/List.java diff --git a/src/com/smartstore/util/Collections.java b/src/com/smartstore/util/Collections.java new file mode 100644 index 00000000..ac587785 --- /dev/null +++ b/src/com/smartstore/util/Collections.java @@ -0,0 +1,13 @@ +package com.smartstore.util; + +public interface Collections { + int size(); + T get(int index); + void set(int index, T object); + int indexOf(T object); + void add(T object); + void add(int index, T object); + T pop(); + T pop(int index); + T pop(T object); +} diff --git a/src/com/smartstore/util/List.java b/src/com/smartstore/util/List.java new file mode 100644 index 00000000..31f170ec --- /dev/null +++ b/src/com/smartstore/util/List.java @@ -0,0 +1,50 @@ +package com.smartstore.util; + +public class List implements Collections{ + @Override + public int size() { + return CAPACITY_SIZE; + } + + @Override + public Object get(int index) { + return null; + } + + @Override + public void set(int index, Object object) { + + } + + @Override + public int indexOf(Object object) { + return 0; + } + + @Override + public void add(Object object) { + + } + + @Override + public void add(int index, Object object) { + + } + + @Override + public Object pop() { + return null; + } + + @Override + public Object pop(int index) { + return null; + } + + @Override + public Object pop(Object object) { + return null; + } + + private final int CAPACITY_SIZE = 20; +} From 3da6fd370fde7d8c7c779f2e4a628e98c2d91995 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 04:28:52 +0900 Subject: [PATCH 07/79] refactor: Delete Already Moved Files [ Deleted(Already Moved) CustomerMenu.java GradeMenu.java MainMenu.java Menu.java ] --- src/Main.java | 2 -- src/menu/CustomerMenu.java | 4 ---- src/menu/GradeMenu.java | 4 ---- src/menu/MainMenu.java | 4 ---- 4 files changed, 14 deletions(-) delete mode 100644 src/Main.java delete mode 100644 src/menu/CustomerMenu.java delete mode 100644 src/menu/GradeMenu.java delete mode 100644 src/menu/MainMenu.java diff --git a/src/Main.java b/src/Main.java deleted file mode 100644 index 70464179..00000000 --- a/src/Main.java +++ /dev/null @@ -1,2 +0,0 @@ -public class Main { -} diff --git a/src/menu/CustomerMenu.java b/src/menu/CustomerMenu.java deleted file mode 100644 index c3fd792e..00000000 --- a/src/menu/CustomerMenu.java +++ /dev/null @@ -1,4 +0,0 @@ -package menu; - -public class CustomerMenu { -} diff --git a/src/menu/GradeMenu.java b/src/menu/GradeMenu.java deleted file mode 100644 index 3232934d..00000000 --- a/src/menu/GradeMenu.java +++ /dev/null @@ -1,4 +0,0 @@ -package menu; - -public class GradeMenu { -} diff --git a/src/menu/MainMenu.java b/src/menu/MainMenu.java deleted file mode 100644 index 7a7bb715..00000000 --- a/src/menu/MainMenu.java +++ /dev/null @@ -1,4 +0,0 @@ -package menu; - -public class MainMenu { -} From 41bb57315d000b9aeca50a0845b7538625ded845 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 04:59:39 +0900 Subject: [PATCH 08/79] style: edit Comments [fix typo, edit comments] --- src/com/smartstore/util/CustomHashMap.java | 25 +++++++++++----------- src/com/smartstore/util/Map.java | 2 +- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 3b31f406..d16797dd 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -3,6 +3,7 @@ public class CustomHashMap implements Map { //Entry Class for CustomHashMap private class Entry{ + //Key is unmodifiable private final K key; private V value; private Entry next; @@ -12,7 +13,6 @@ public Entry(K key, V value){ this.value = value; } - //Key is immutable public K getKey() { return this.key; } @@ -51,7 +51,7 @@ public String toString() { } /* - Entries + entries +--------------------+--------------------+--------------------+--------------------+--------------------+ | Head1 | Head2 | Head3 | ... | Head.SIZE | | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | @@ -63,10 +63,10 @@ public String toString() { +--------------------+--------------------+--------------------+--------------------+--------------------+ Too big SIZE have chance to increase unnecessary indexes */ - private final int CAPACITY_SIZE = 5; - private Entry[] entries; + private final int CAPACITY_SIZE = 5; + public CustomHashMap(){ entries = new Entry[CAPACITY_SIZE]; } @@ -76,13 +76,13 @@ public void put(K key, V value){ int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; - //if entries[hash] is empty + //if entries[hash] is not exists if(e == null){ //create new Entry entries[hash] = new Entry(key, value); } else{ - //loop until entries value not exists + //loop until e.next is not exists while (e.next != null){ //if key exists, set value as new one if (e.getKey() == key){ @@ -91,7 +91,7 @@ public void put(K key, V value){ } e = e.next; } - //if key == final entry's key, set value + //if key == final entry's key, set value, key is Unique if(e.getKey() == key){ e.setValue(value); return; @@ -109,14 +109,14 @@ public V get(K key){ int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; - //if entries[hash] is empty, return null + //if entries[hash] is not exists, return null if (e == null) { return null; } - //loop until entries value not exists + //loop until e.next is not exists while (e != null){ - //if key exits, return value + //if key exists, return value if(e.getKey() == key){ return e.getValue(); } @@ -131,7 +131,7 @@ public boolean remove(K key){ int hash = key.hashCode() % CAPACITY_SIZE; Entry e = entries[hash]; - //if entries[hash] is empty, return false + //if entries[hash] is not exists, return false if (e == null){ return false; } @@ -147,6 +147,7 @@ public boolean remove(K key){ Entry prev = e; e = e.next; + //loop until e.next is not exists while (e != null){ if (e.getKey() == key) { //shift next Entry to current(remove) @@ -158,7 +159,7 @@ public boolean remove(K key){ e = e.next; } - //if key not exits, return false + //if key not exists, return false return false; } diff --git a/src/com/smartstore/util/Map.java b/src/com/smartstore/util/Map.java index 03e428b9..53ecadb0 100644 --- a/src/com/smartstore/util/Map.java +++ b/src/com/smartstore/util/Map.java @@ -10,7 +10,7 @@ public interface Map { default V getOrDefault(K key, V defaultValue){ V value = get(key); - //if key is not exits, return defaultValue + //if key is not exists, return defaultValue if(value == null){ return defaultValue; } From 8019861353d26683395f5ddffc3b083a3ba9e22b Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 05:14:30 +0900 Subject: [PATCH 09/79] refactor: modify CustomHashMap Class [ Modified : == change to equals in if statements ] --- src/com/smartstore/util/CustomHashMap.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index d16797dd..7b12f84c 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -85,14 +85,14 @@ public void put(K key, V value){ //loop until e.next is not exists while (e.next != null){ //if key exists, set value as new one - if (e.getKey() == key){ + if (e.getKey().equals(key)){ e.setValue(value); return; } e = e.next; } //if key == final entry's key, set value, key is Unique - if(e.getKey() == key){ + if(e.getKey().equals(key)){ e.setValue(value); return; } @@ -117,7 +117,7 @@ public V get(K key){ //loop until e.next is not exists while (e != null){ //if key exists, return value - if(e.getKey() == key){ + if(e.getKey().equals(key)){ return e.getValue(); } e = e.next; @@ -136,8 +136,8 @@ public boolean remove(K key){ return false; } - //if first Entry's key == key - if(e.getKey() == key){ + //if first Entry's e.key equals key + if(e.getKey().equals(key)){ //shift second Entry to first(remove) entries[hash] = e.next; e.next = null; @@ -149,7 +149,7 @@ public boolean remove(K key){ //loop until e.next is not exists while (e != null){ - if (e.getKey() == key) { + if (e.getKey().equals(key)) { //shift next Entry to current(remove) prev.next = e.next; e.next = null; From ceead4fa3575542cc504fed1fa5dbccdd08b1d71 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 06:05:13 +0900 Subject: [PATCH 10/79] style: edit Comments [edit comments] --- src/com/smartstore/util/CustomHashMap.java | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 7b12f84c..5398d1e4 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -52,15 +52,15 @@ public String toString() { /* entries - +--------------------+--------------------+--------------------+--------------------+--------------------+ - | Head1 | Head2 | Head3 | ... | Head.SIZE | - | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | key.hash % SIZE | - +--------------------+--------------------+--------------------+--------------------+--------------------+ - | [key, value] | null | null | [key, value] | [key, value] | - | [key, value] | | | | [key, value] | - | [key, value] | | | | [key, value] | - | | | | | [key, value] | - +--------------------+--------------------+--------------------+--------------------+--------------------+ + +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ + | Head1 | Head2 | Head3 | ... | Head.SIZE | + | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | + +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ + | 1: [key, value] | null | null | 1: [key, value] | 1: [key, value] | + | 2: [key, value] (1.next) | | | 2: [key, value] (1.next) | 2: [key, value] (1.next) | + | 3: [key, value] (2.next) | | | 3: [key, value] (2.next) | 3: [key, value] (2.next) | + | | | | | 4: [key, value] (3.next) | + +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ Too big SIZE have chance to increase unnecessary indexes */ private Entry[] entries; @@ -82,9 +82,9 @@ public void put(K key, V value){ entries[hash] = new Entry(key, value); } else{ - //loop until e.next is not exists + //loop until e.next is not null while (e.next != null){ - //if key exists, set value as new one + //if key exists, set value as new value, key is Unique if (e.getKey().equals(key)){ e.setValue(value); return; @@ -114,7 +114,7 @@ public V get(K key){ return null; } - //loop until e.next is not exists + //loop until e.next is not null while (e != null){ //if key exists, return value if(e.getKey().equals(key)){ @@ -147,7 +147,7 @@ public boolean remove(K key){ Entry prev = e; e = e.next; - //loop until e.next is not exists + //loop until e is not null while (e != null){ if (e.getKey().equals(key)) { //shift next Entry to current(remove) From 4090f3e299e3b7744662bf91f540b2bfd15e7c32 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 06:10:59 +0900 Subject: [PATCH 11/79] style: edit Comments [add todo] --- src/com/smartstore/util/CustomHashMap.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 5398d1e4..4a2042c1 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -1,6 +1,7 @@ package com.smartstore.util; public class CustomHashMap implements Map { + // TODO: 2023-05-02 modify Entry Class to interface, implements it in CustomHashMap as different name Like Node //Entry Class for CustomHashMap private class Entry{ //Key is unmodifiable From 29ba7bca7f200dcbfb8df652f687813374b80da3 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 14:05:52 +0900 Subject: [PATCH 12/79] refactor: modify CustomHashMap Class [ Added : Entry Interface Modified : Inner Class "Entry" Name changed to "Node" Inner Class Node implements Entry Interface ] --- src/com/smartstore/util/CustomHashMap.java | 29 +++++++++++----------- src/com/smartstore/util/Entry.java | 7 ++++++ 2 files changed, 22 insertions(+), 14 deletions(-) create mode 100644 src/com/smartstore/util/Entry.java diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 4a2042c1..bf2cdb90 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -1,27 +1,28 @@ package com.smartstore.util; public class CustomHashMap implements Map { - // TODO: 2023-05-02 modify Entry Class to interface, implements it in CustomHashMap as different name Like Node - //Entry Class for CustomHashMap - private class Entry{ + private class Node implements Entry { //Key is unmodifiable private final K key; private V value; - private Entry next; + private Node next; - public Entry(K key, V value){ + public Node(K key, V value){ this.key = key; this.value = value; } + @Override public K getKey() { return this.key; } + @Override public V getValue() { return this.value; } + @Override public void setValue(V value) { this.value = value; } @@ -29,7 +30,7 @@ public void setValue(V value) { @Override public String toString() { StringBuilder sb = new StringBuilder(); - Entry e = this; + Node e = this; while (e != null){ sb.append("\t").append("[").append(" key : ").append(e.getKey()).append(", value : ").append(e.getValue()).append(" ]\n"); e = e.next; @@ -64,23 +65,23 @@ public String toString() { +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ Too big SIZE have chance to increase unnecessary indexes */ - private Entry[] entries; + private Node[] entries; private final int CAPACITY_SIZE = 5; public CustomHashMap(){ - entries = new Entry[CAPACITY_SIZE]; + entries = new Node[CAPACITY_SIZE]; } @Override public void put(K key, V value){ //Get Entries index from hash code 0 to size-1 int hash = key.hashCode() % CAPACITY_SIZE; - Entry e = entries[hash]; + Node e = entries[hash]; //if entries[hash] is not exists if(e == null){ //create new Entry - entries[hash] = new Entry(key, value); + entries[hash] = new Node(key, value); } else{ //loop until e.next is not null @@ -100,7 +101,7 @@ public void put(K key, V value){ //if key doesn't exist //add new Entry end of the entries[hash] - e.next = new Entry(key, value); + e.next = new Node(key, value); } } @@ -108,7 +109,7 @@ public void put(K key, V value){ @Override public V get(K key){ int hash = key.hashCode() % CAPACITY_SIZE; - Entry e = entries[hash]; + Node e = entries[hash]; //if entries[hash] is not exists, return null if (e == null) { @@ -130,7 +131,7 @@ public V get(K key){ @Override public boolean remove(K key){ int hash = key.hashCode() % CAPACITY_SIZE; - Entry e = entries[hash]; + Node e = entries[hash]; //if entries[hash] is not exists, return false if (e == null){ @@ -145,7 +146,7 @@ public boolean remove(K key){ return true; } - Entry prev = e; + Node prev = e; e = e.next; //loop until e is not null diff --git a/src/com/smartstore/util/Entry.java b/src/com/smartstore/util/Entry.java new file mode 100644 index 00000000..92785bcc --- /dev/null +++ b/src/com/smartstore/util/Entry.java @@ -0,0 +1,7 @@ +package com.smartstore.util; + +public interface Entry{ + K getKey(); + V getValue(); + void setValue(V value); +} From b3aac5a45be98cbd8deb6d4ed36386fce1175463 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 15:18:10 +0900 Subject: [PATCH 13/79] refactor: modify CustomHashMap Class [ Added : body of method size() Modified : change default capacity of CustomHashMap 5 -> default_size(16) * loadFactor(0.75f) change some comments ] --- src/com/smartstore/util/CustomHashMap.java | 48 +++++++++++++++------- 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index bf2cdb90..2fef6207 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -1,5 +1,5 @@ package com.smartstore.util; - +// TODO: 2023-05-02 implement resize method public class CustomHashMap implements Map { private class Node implements Entry { //Key is unmodifiable @@ -43,7 +43,7 @@ public String toString() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("CustomHashMap { \n"); - for(int i = 0; i < CAPACITY_SIZE; i++){ + for(int i = 0; i < entries.length; i++){ if(entries[i] != null){ sb.append(entries[i]); } @@ -53,35 +53,49 @@ public String toString() { } /* - entries + entries[] (if size = 5) + +----------+---------+----------+----------+-----------+----------------+ + | | 0 | 1 | 2 | 3 | 4 | + |entries | Entry | Entry2 | Entry3 | Entry... | Entry.size-1 | + | | (Head1) | (Head2) | (Head3) | (Head...) | (Head.size-1) | + +----------+---------+----------+----------+-----------+----------------+ + ⬇️⬇️ +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ - | Head1 | Head2 | Head3 | ... | Head.SIZE | + | Head1 index 0 | Head2 index 1 | Head3 index 2 | ... | Head4 index 4 | | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ | 1: [key, value] | null | null | 1: [key, value] | 1: [key, value] | | 2: [key, value] (1.next) | | | 2: [key, value] (1.next) | 2: [key, value] (1.next) | - | 3: [key, value] (2.next) | | | 3: [key, value] (2.next) | 3: [key, value] (2.next) | - | | | | | 4: [key, value] (3.next) | + | | | | | 3: [key, value] (2.next) | + | 1,2,3... is not index | | | 1,2,3... is not index | 1,2,3... is not index | +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ - Too big SIZE have chance to increase unnecessary indexes + Too big SIZE have chance to increasing wasted memory usage + Too small Size have chance to increasing Hash collisions, negative affect to performance + ideal size is expected entries * 0.75 */ private Node[] entries; - private final int CAPACITY_SIZE = 5; + //The default initial capacity - MUST be a power of two. + //use bitwise to code readability + //1 << 4 = 16 + private static final int CAPACITY = 1 << 4; + private static final float DEFAULT_LOAD_FACTOR = 0.75f; + private int size; public CustomHashMap(){ - entries = new Node[CAPACITY_SIZE]; + entries = new Node[Math.round(CAPACITY*DEFAULT_LOAD_FACTOR)]; } @Override public void put(K key, V value){ //Get Entries index from hash code 0 to size-1 - int hash = key.hashCode() % CAPACITY_SIZE; + int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; //if entries[hash] is not exists if(e == null){ //create new Entry entries[hash] = new Node(key, value); + size++; } else{ //loop until e.next is not null @@ -102,13 +116,14 @@ public void put(K key, V value){ //if key doesn't exist //add new Entry end of the entries[hash] e.next = new Node(key, value); + size++; } } @Override public V get(K key){ - int hash = key.hashCode() % CAPACITY_SIZE; + int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; //if entries[hash] is not exists, return null @@ -130,7 +145,7 @@ public V get(K key){ @Override public boolean remove(K key){ - int hash = key.hashCode() % CAPACITY_SIZE; + int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; //if entries[hash] is not exists, return false @@ -143,6 +158,7 @@ public boolean remove(K key){ //shift second Entry to first(remove) entries[hash] = e.next; e.next = null; + size--; return true; } @@ -155,6 +171,7 @@ public boolean remove(K key){ //shift next Entry to current(remove) prev.next = e.next; e.next = null; + size--; return true; } prev = e; @@ -166,8 +183,11 @@ public boolean remove(K key){ } @Override - public int size() { - return CAPACITY_SIZE; + public int size() {return this.size;} + + public boolean isEmpty() { + return this.size == 0; } + } From 5e1409979c43eb8f596fad5ddd6ab59932e0f87a Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 20:13:22 +0900 Subject: [PATCH 14/79] refactor: modify CustomHashMap Class [ Modified : Add null check change some comments ] --- src/com/smartstore/util/CustomHashMap.java | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 2fef6207..55c2efcc 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -64,7 +64,7 @@ public String toString() { | Head1 index 0 | Head2 index 1 | Head3 index 2 | ... | Head4 index 4 | | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | key.hashcode() % CA_SIZE | +--------------------------+--------------------------+--------------------------+--------------------------+--------------------------+ - | 1: [key, value] | null | null | 1: [key, value] | 1: [key, value] | + | 1: [key, value] | | | 1: [key, value] | 1: [key, value] | | 2: [key, value] (1.next) | | | 2: [key, value] (1.next) | 2: [key, value] (1.next) | | | | | | 3: [key, value] (2.next) | | 1,2,3... is not index | | | 1,2,3... is not index | 1,2,3... is not index | @@ -72,6 +72,7 @@ public String toString() { Too big SIZE have chance to increasing wasted memory usage Too small Size have chance to increasing Hash collisions, negative affect to performance ideal size is expected entries * 0.75 + key Not allowed null, value allowed null */ private Node[] entries; @@ -87,6 +88,10 @@ public CustomHashMap(){ } @Override public void put(K key, V value){ + if(key == null){ + return; + } + //Get Entries index from hash code 0 to size-1 int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; @@ -123,6 +128,9 @@ public void put(K key, V value){ @Override public V get(K key){ + if (key == null){ + return null; + } int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; @@ -145,6 +153,9 @@ public V get(K key){ @Override public boolean remove(K key){ + if(key == null){ + return false; + } int hash = key.hashCode() % CAPACITY; Node e = entries[hash]; From 6080690f639ce117b8c30a3d81bebf066bbd3752 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 2 May 2023 20:16:03 +0900 Subject: [PATCH 15/79] refactor: Add CustomEnumMap Class [ Added : CustomEnumMap Class ] --- src/com/smartstore/util/CustomEnumMap.java | 76 ++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 src/com/smartstore/util/CustomEnumMap.java diff --git a/src/com/smartstore/util/CustomEnumMap.java b/src/com/smartstore/util/CustomEnumMap.java new file mode 100644 index 00000000..c5ccef5f --- /dev/null +++ b/src/com/smartstore/util/CustomEnumMap.java @@ -0,0 +1,76 @@ +package com.smartstore.util; + +import java.util.Arrays; + +public class CustomEnumMap, V> implements Map{ + + //type of key + //keyType must be Enum + private final Class keyType; + + private Object[] values; + + private int size = 0; + + //if key == null, throw nullPointException + public CustomEnumMap(Class keyType) { + this.keyType = keyType; + K[] keys = keyType.getEnumConstants(); + values = new Object[keys.length]; + } + + @Override + public void put(K key, V value) { + if(isValidKey(key)){ + int index = key.ordinal(); + Object oldValue = values[index]; + values[index] = value; + if(oldValue == null){ + size++; + }; + } + } + + @Override + public V get( K key) { + if(isValidKey(key)){ + return (V) values[key.ordinal()]; + } + return null; + } + + @Override + public boolean remove(K key) { + if(isValidKey(key)){ + int index = key.ordinal(); + if(values[index] != null){ + size--; + } + values[index] = null; + return true; + } + return false; + } + + @Override + public int size() { + return this.size; + } + + private boolean isValidKey(K key){ + if(key == null){ + return false; + } + //check is key proper type + return key.getClass() == keyType || key.getClass().getSuperclass() == keyType; + } + + @Override + public String toString() { + return "CustomEnumMap{" + + "keys=" + Arrays.toString(keyType.getEnumConstants()) + + ", values=" + Arrays.toString(values) + + '}'; + } + +} From b842415c4b69c033951ea0008cb28668a4949f7f Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 18:00:38 +0900 Subject: [PATCH 16/79] refactor: Modify CustomEnumMap Class [ Added : @suppressWarnings annotation ] --- src/com/smartstore/util/CustomEnumMap.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/smartstore/util/CustomEnumMap.java b/src/com/smartstore/util/CustomEnumMap.java index c5ccef5f..13738d34 100644 --- a/src/com/smartstore/util/CustomEnumMap.java +++ b/src/com/smartstore/util/CustomEnumMap.java @@ -32,6 +32,7 @@ public void put(K key, V value) { } @Override + @SuppressWarnings("unchecked") public V get( K key) { if(isValidKey(key)){ return (V) values[key.ordinal()]; From ef591330fae71eb7bbce1195cf362238e33519df Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 18:03:52 +0900 Subject: [PATCH 17/79] refactor: Modify Collections Interface [ Modified : return type of remove Methods T -> boolean; Add abstract method toArray ] --- src/com/smartstore/util/Collections.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/smartstore/util/Collections.java b/src/com/smartstore/util/Collections.java index ac587785..5a43bb19 100644 --- a/src/com/smartstore/util/Collections.java +++ b/src/com/smartstore/util/Collections.java @@ -7,7 +7,8 @@ public interface Collections { int indexOf(T object); void add(T object); void add(int index, T object); - T pop(); - T pop(int index); - T pop(T object); + boolean remove(int index); + boolean remove(T object); + + Object[] toArray(); } From 2da57c6152df1aba12680cbd51430a30e0762d83 Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 18:05:09 +0900 Subject: [PATCH 18/79] refactor: Rename List Class [ Deleted : List Class Added : CustomList Class Modified : Implement CustomList ] --- src/com/smartstore/util/CustomList.java | 139 ++++++++++++++++++++++++ src/com/smartstore/util/List.java | 50 --------- 2 files changed, 139 insertions(+), 50 deletions(-) create mode 100644 src/com/smartstore/util/CustomList.java delete mode 100644 src/com/smartstore/util/List.java diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java new file mode 100644 index 00000000..fc59bccc --- /dev/null +++ b/src/com/smartstore/util/CustomList.java @@ -0,0 +1,139 @@ +package com.smartstore.util; + +import java.util.Arrays; + +public class CustomList implements Collections{ + @Override + public int size() { + return this.size; + } + + @Override + @SuppressWarnings("unchecked") + public T get(int index) { + isValidIndex(index); + return (T) elements[index]; + } + + @Override + public void set(int index, T object) { + isValidIndex(index); + + if(elements[index] != null){ + elements[index] = object; + } + } + + @Override + public int indexOf(T object) { + return findIndex(object); + } + + private int findIndex(Object o){ + if(o == null){ + throw new IllegalArgumentException("Null Can't be found"); + } + for(int i = 0 ; i< size ; i++){ + if (o.equals(elements[i])) { + return i; + } + } + return -1; + } + + @Override + public Object[] toArray(){ + return Arrays.copyOf(elements, size); + } + + @Override + public void add(T object) { + if(size == elements.length){ + resize(size+1); + } + elements[size++] = object; + } + + @Override + public void add(int index, T object) { + isValidIndex(index); + if(size == elements.length){ + resize(size+1); + } + fastCopy(index, index + 1, elements.length - index); + elements[index] = object; + } + + @Override + public boolean remove(int index) { + isValidIndex(index); + fastCopy(index + 1, index, elements.length - index - 1); + resize(elements.length - 1); + size--; + return true; + } + + @Override + public boolean remove(T object) { + if(object != null){ + int index = indexOf(object); + if (index < 0){ + return false; + } + remove(index); + } + throw new IllegalArgumentException("Null Can't be found"); + } + + public void addAll(int index, CustomList newElements){ + isValidIndex(index); + Object[] e = newElements.toArray(); + int newSize = e.length; + if(newSize == 0){ + return; + } + + final int currentSize = this.elements.length; + if(newSize > + currentSize - size){ + resize(currentSize + newSize ); + } + + int movedIndex = currentSize - index; + if(movedIndex > 0){ + fastCopy(index, index + newSize, movedIndex); + } + System.arraycopy(e, 0, elements, index, newSize); + size = currentSize + newSize; + } + + private void fastCopy(int index, int desPosition, int movedIndex){ + System.arraycopy(elements, index, elements, desPosition, movedIndex); + } + private void resize(int newLength){ + //if requested size is overflow + if(elements.length + newLength < 0){ + throw new OutOfMemoryError("Can't Resize Array.\n Integer overflow in requested size.\n"); + } + elements = Arrays.copyOf(elements, newLength); + } + + private void isValidIndex(int index){ + if(index < 0 || index >= size){ + throw new ArrayIndexOutOfBoundsException("Invalid Index"); + } + } + + @Override + public String toString() { + return Arrays.toString(elements); + } + + //private static final int CAPACITY_SIZE = 10; + private int size; + + private Object[] elements; + + public CustomList() { + this.elements = new Object[]{}; + } +} diff --git a/src/com/smartstore/util/List.java b/src/com/smartstore/util/List.java deleted file mode 100644 index 31f170ec..00000000 --- a/src/com/smartstore/util/List.java +++ /dev/null @@ -1,50 +0,0 @@ -package com.smartstore.util; - -public class List implements Collections{ - @Override - public int size() { - return CAPACITY_SIZE; - } - - @Override - public Object get(int index) { - return null; - } - - @Override - public void set(int index, Object object) { - - } - - @Override - public int indexOf(Object object) { - return 0; - } - - @Override - public void add(Object object) { - - } - - @Override - public void add(int index, Object object) { - - } - - @Override - public Object pop() { - return null; - } - - @Override - public Object pop(int index) { - return null; - } - - @Override - public Object pop(Object object) { - return null; - } - - private final int CAPACITY_SIZE = 20; -} From 09cc1c6783a5b02342601a1f5cc2c90b38ec60c9 Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 18:11:00 +0900 Subject: [PATCH 19/79] refactor: Modify CustomEnumMap Class [ Modified : remove unnecessary var remove unnecessary semicolon; ] --- src/com/smartstore/util/CustomEnumMap.java | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/com/smartstore/util/CustomEnumMap.java b/src/com/smartstore/util/CustomEnumMap.java index 13738d34..d610aeed 100644 --- a/src/com/smartstore/util/CustomEnumMap.java +++ b/src/com/smartstore/util/CustomEnumMap.java @@ -23,11 +23,10 @@ public CustomEnumMap(Class keyType) { public void put(K key, V value) { if(isValidKey(key)){ int index = key.ordinal(); - Object oldValue = values[index]; - values[index] = value; - if(oldValue == null){ + if(values[index] == null){ size++; - }; + } + values[index] = value; } } From a538aac46797948c68082e23b24f9f83eca3a29b Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 18:12:19 +0900 Subject: [PATCH 20/79] refactor: Modify CustomList Class [ Modified : remove unnecessary Unary operator ] --- src/com/smartstore/util/CustomList.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index fc59bccc..12642091 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -94,7 +94,7 @@ public void addAll(int index, CustomList newElements){ } final int currentSize = this.elements.length; - if(newSize > + currentSize - size){ + if(newSize > currentSize - size){ resize(currentSize + newSize ); } From 7e9a2276aa834f70af656f6132465b6e5d380378 Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 4 May 2023 20:43:19 +0900 Subject: [PATCH 21/79] refactor: Rename Collections Class [ Modified : Rename Collections -> List ] --- src/com/smartstore/util/CustomList.java | 3 ++- src/com/smartstore/util/{Collections.java => List.java} | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) rename src/com/smartstore/util/{Collections.java => List.java} (89%) diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index 12642091..1a4a4cc3 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -2,7 +2,8 @@ import java.util.Arrays; -public class CustomList implements Collections{ + +public class CustomList implements List { @Override public int size() { return this.size; diff --git a/src/com/smartstore/util/Collections.java b/src/com/smartstore/util/List.java similarity index 89% rename from src/com/smartstore/util/Collections.java rename to src/com/smartstore/util/List.java index 5a43bb19..28b1f43c 100644 --- a/src/com/smartstore/util/Collections.java +++ b/src/com/smartstore/util/List.java @@ -1,6 +1,6 @@ package com.smartstore.util; -public interface Collections { +public interface List { int size(); T get(int index); void set(int index, T object); From 1490a325ed8c052c8b71e16331491b2bd7b68bf7 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 16:21:32 +0900 Subject: [PATCH 22/79] refactor: Modify Structure [Modified : Menu Structure] --- src/com/smartstore/menu/CustomerMenu.java | 17 +++++++---- src/com/smartstore/menu/GradeMenu.java | 16 +++++++--- src/com/smartstore/menu/MainMenu.java | 31 +++++++++++++++---- src/com/smartstore/menu/Menu.java | 34 ++++++++++++++++----- src/com/smartstore/menu/MenuController.java | 5 +++ src/com/smartstore/menu/MenuType.java | 33 ++++++++++++++++++++ src/com/smartstore/menu/Quit.java | 17 +++++++++++ src/com/smartstore/menu/ReportMenu.java | 22 +++++++++++++ 8 files changed, 151 insertions(+), 24 deletions(-) create mode 100644 src/com/smartstore/menu/MenuController.java create mode 100644 src/com/smartstore/menu/MenuType.java create mode 100644 src/com/smartstore/menu/Quit.java create mode 100644 src/com/smartstore/menu/ReportMenu.java diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java index 8304f6ca..a4e2bbc9 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -1,17 +1,22 @@ package com.smartstore.menu; -public class CustomerMenu implements Menu { - +public class CustomerMenu implements Menu, MenuController { @Override - public void runMenuSelectionLoop() { - boolean isExit = false; - while (isExit){ + public void handleChoice(int menuNumber) { + + } + public static CustomerMenu getInstance() { + if(instance == null){ + instance = new CustomerMenu(); } + return instance; } + private static CustomerMenu instance; + @Override - public void handleChoice(String menuNumber) { + public void run() { } } diff --git a/src/com/smartstore/menu/GradeMenu.java b/src/com/smartstore/menu/GradeMenu.java index 28ea7c25..a7299c5b 100644 --- a/src/com/smartstore/menu/GradeMenu.java +++ b/src/com/smartstore/menu/GradeMenu.java @@ -1,16 +1,22 @@ package com.smartstore.menu; -public class GradeMenu implements Menu { +public class GradeMenu implements Menu, MenuController{ @Override - public void runMenuSelectionLoop() { - boolean isExit = false; - while (isExit){ + public void handleChoice(int menuNumber) { + } + + public static GradeMenu getInstance() { + if(instance == null){ + instance = new GradeMenu(); } + return instance; } + private static GradeMenu instance; + @Override - public void handleChoice(String menuNumber) { + public void run() { } } diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java index 7949c3cc..c5dbeecc 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/menu/MainMenu.java @@ -1,16 +1,35 @@ package com.smartstore.menu; -public class MainMenu implements Menu { +import java.util.Arrays; + +public class MainMenu implements Menu, MenuController{ + @Override - public void runMenuSelectionLoop() { - boolean isExit = false; - while (isExit){ + public void handleChoice(int menuNumber) { + System.out.println("Handel called"); + } + public static MainMenu getInstance() { + if(instance == null){ + instance = new MainMenu(); } + return instance; } - @Override - public void handleChoice(String menuNumber) { + + // TODO: 2023-05-04 make awesome splash screen + private void printSplashScreen(){ + System.out.println(Arrays.toString(Screen.SPLASH.getMenus())); + } + + public void run(){ + printSplashScreen(); + displayMenu(Screen.MAIN_MENU.getMenus()); + runMenuSelectionLoop(); + } + private static MainMenu instance; + + private MainMenu(){ } } diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 1ff7e426..06bbda33 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -1,18 +1,38 @@ package com.smartstore.menu; -interface Menu { +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +interface Menu { StringBuilder sb = new StringBuilder(); - //read buffer or scanner + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - default String chooseMenu(){ - return ""; + default void displayMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("%d. %s\n",i+1,menus[i]); + } } - default void displayMenu(){ + default void runMenuSelectionLoop(){ + int menu = -1; + while (true){ + try { + System.out.print("Input : "); + menu = Integer.parseInt(br.readLine()); + if (menu <= 0 || menu > Screen.MAIN_MENU.getMenus().length) { + // TODO: 2023-05-08 trow other exception, catch it + throw new NumberFormatException("Invalid Menu"); + } + break; + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Menu"); + } + } + handleChoice(menu); } - void runMenuSelectionLoop(); + void handleChoice(int menuNumber); - void handleChoice(String menuNumber); } diff --git a/src/com/smartstore/menu/MenuController.java b/src/com/smartstore/menu/MenuController.java new file mode 100644 index 00000000..2f375240 --- /dev/null +++ b/src/com/smartstore/menu/MenuController.java @@ -0,0 +1,5 @@ +package com.smartstore.menu; + +public interface MenuController { + void run(); +} diff --git a/src/com/smartstore/menu/MenuType.java b/src/com/smartstore/menu/MenuType.java new file mode 100644 index 00000000..29ba53d7 --- /dev/null +++ b/src/com/smartstore/menu/MenuType.java @@ -0,0 +1,33 @@ +package com.smartstore.menu; + +import java.util.Arrays; + +public enum MenuType { + MAIN_MENU(0, MainMenu.getInstance()), + GRADE_MANAGEMENT(1, GradeMenu.getInstance()), + CUSTOMER_MANAGEMENT(2,CustomerMenu.getInstance()), + REPORT_MANAGEMENT(3,ReportMenu.getInstance()), + QUIT(4,Quit.getInstance()); + + private final int menuNumber; + private final MenuController menuController; + + MenuType(int menuNumber, MenuController menuController) { + this.menuNumber = menuNumber; + this.menuController = menuController; + } + + private boolean isValidNumber(int menuNumber){ + return this.menuNumber == menuNumber; + } + + public static MenuType of(int menuNumber){ + return Arrays.stream(MenuType.values()) + .filter(menuType -> menuType.isValidNumber(menuNumber)) + .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); + } + + public void run() { + menuController.run(); + } +} diff --git a/src/com/smartstore/menu/Quit.java b/src/com/smartstore/menu/Quit.java new file mode 100644 index 00000000..78b4809c --- /dev/null +++ b/src/com/smartstore/menu/Quit.java @@ -0,0 +1,17 @@ +package com.smartstore.menu; + +public class Quit implements MenuController{ + @Override + public void run() { + + } + + public static Quit getInstance() { + if(instance == null){ + instance = new Quit(); + } + return instance; + } + + private static Quit instance; +} diff --git a/src/com/smartstore/menu/ReportMenu.java b/src/com/smartstore/menu/ReportMenu.java new file mode 100644 index 00000000..9fe5b47e --- /dev/null +++ b/src/com/smartstore/menu/ReportMenu.java @@ -0,0 +1,22 @@ +package com.smartstore.menu; + +public class ReportMenu implements Menu, MenuController{ + @Override + public void handleChoice(int menuNumber) { + + } + + public static ReportMenu getInstance() { + if(instance == null){ + instance = new ReportMenu(); + } + return instance; + } + + private static ReportMenu instance; + + @Override + public void run() { + + } +} From c5be8dbe31d4e4b117707fe702b92a1091686fb2 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 17:35:34 +0900 Subject: [PATCH 23/79] refactor: Rename Classes [Renamed : Grade* -> Membership] --- src/com/smartstore/grade/Grade.java | 20 ------------------- src/com/smartstore/grade/Membership.java | 20 +++++++++++++++++++ ...rement.java => MembershipRequirement.java} | 4 ++-- .../{GradeType.java => MembershipType.java} | 4 ++-- .../grade/{Grades.java => Memberships.java} | 6 +++--- 5 files changed, 27 insertions(+), 27 deletions(-) delete mode 100644 src/com/smartstore/grade/Grade.java create mode 100644 src/com/smartstore/grade/Membership.java rename src/com/smartstore/grade/{GradeRequirement.java => MembershipRequirement.java} (71%) rename src/com/smartstore/grade/{GradeType.java => MembershipType.java} (79%) rename src/com/smartstore/grade/{Grades.java => Memberships.java} (53%) diff --git a/src/com/smartstore/grade/Grade.java b/src/com/smartstore/grade/Grade.java deleted file mode 100644 index 94c12676..00000000 --- a/src/com/smartstore/grade/Grade.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.smartstore.grade; - -import java.util.Map; - -public class Grade { - private Map gradeInfo; - - - Grade(String gradeName, int minUsageTime, int minPaymentAmount){ - - } - - public Grade getGrade(){ - return null; - } - - public void updateGrade(String gradeName){ - - } -} diff --git a/src/com/smartstore/grade/Membership.java b/src/com/smartstore/grade/Membership.java new file mode 100644 index 00000000..f948f8e1 --- /dev/null +++ b/src/com/smartstore/grade/Membership.java @@ -0,0 +1,20 @@ +package com.smartstore.grade; + +import java.util.Map; + +public class Membership { + private Map gradeInfo; + + + Membership(String gradeName, int minUsageTime, int minPaymentAmount){ + + } + + public Membership getGrade(){ + return null; + } + + public void updateGrade(String gradeName){ + + } +} diff --git a/src/com/smartstore/grade/GradeRequirement.java b/src/com/smartstore/grade/MembershipRequirement.java similarity index 71% rename from src/com/smartstore/grade/GradeRequirement.java rename to src/com/smartstore/grade/MembershipRequirement.java index 0a556a98..9c29baf6 100644 --- a/src/com/smartstore/grade/GradeRequirement.java +++ b/src/com/smartstore/grade/MembershipRequirement.java @@ -1,10 +1,10 @@ package com.smartstore.grade; -public class GradeRequirement { +public class MembershipRequirement { private int minUsageTime; private int minPaymentAmount; - public GradeRequirement getGradeRequirement() { + public MembershipRequirement getGradeRequirement() { return null; } diff --git a/src/com/smartstore/grade/GradeType.java b/src/com/smartstore/grade/MembershipType.java similarity index 79% rename from src/com/smartstore/grade/GradeType.java rename to src/com/smartstore/grade/MembershipType.java index 6fef4c08..57965b31 100644 --- a/src/com/smartstore/grade/GradeType.java +++ b/src/com/smartstore/grade/MembershipType.java @@ -1,12 +1,12 @@ package com.smartstore.grade; -public enum GradeType { +public enum MembershipType { GENERAL(new String[] {"G", "GENERAL", "일반"}), VIP(new String[] {"V", "VIP", "우수"}), VVIP(new String[] {"VV", "VVIP", "최우수"}); String[] grade = new String[3]; - GradeType(String[] grade) { + MembershipType(String[] grade) { this.grade = grade; } } diff --git a/src/com/smartstore/grade/Grades.java b/src/com/smartstore/grade/Memberships.java similarity index 53% rename from src/com/smartstore/grade/Grades.java rename to src/com/smartstore/grade/Memberships.java index 10c5faff..3798597b 100644 --- a/src/com/smartstore/grade/Grades.java +++ b/src/com/smartstore/grade/Memberships.java @@ -3,11 +3,11 @@ import java.util.ArrayList; import java.util.List; -public class Grades { - private List gradeList = new ArrayList<>(); +public class Memberships { + private List membershipList = new ArrayList<>(); - public Grades getInstance(){ + public Memberships getInstance(){ return this; } From 5f1fa2f6a3764db3a103cce2158fddc12784a2eb Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 17:38:35 +0900 Subject: [PATCH 24/79] refactor: Modify MainMenu [ Modified : simplify duplicated code, ] --- src/com/smartstore/menu/MainMenu.java | 22 +++++++++++-------- .../{MenuType.java => MainMenuFunction.java} | 18 +++++++-------- src/com/smartstore/menu/Menu.java | 14 ++++++++---- src/com/smartstore/menu/MenuController.java | 5 ----- 4 files changed, 32 insertions(+), 27 deletions(-) rename src/com/smartstore/menu/{MenuType.java => MainMenuFunction.java} (55%) delete mode 100644 src/com/smartstore/menu/MenuController.java diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java index c5dbeecc..15f2ba13 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/menu/MainMenu.java @@ -2,11 +2,13 @@ import java.util.Arrays; -public class MainMenu implements Menu, MenuController{ +public class MainMenu implements Menu { @Override public void handleChoice(int menuNumber) { System.out.println("Handel called"); + Screen screen = Screen.of(menuNumber); + System.out.println(Arrays.toString(screen.getMenus())); } public static MainMenu getInstance() { @@ -16,16 +18,18 @@ public static MainMenu getInstance() { return instance; } - - // TODO: 2023-05-04 make awesome splash screen - private void printSplashScreen(){ - System.out.println(Arrays.toString(Screen.SPLASH.getMenus())); + private void printSlashScreen(){ + System.out.println(Arrays.toString(Screen.of(-1).getMenus())); } - public void run(){ - printSplashScreen(); - displayMenu(Screen.MAIN_MENU.getMenus()); - runMenuSelectionLoop(); + public void run(int menuNumber){ + //print splash screen + + printSlashScreen(); + //print menu + displayMenu(Screen.of(menuNumber).getMenus()); + //get menu number from user until valid menu number + runMenuSelectionLoop(Screen.of(menuNumber).getMenus().length); } private static MainMenu instance; diff --git a/src/com/smartstore/menu/MenuType.java b/src/com/smartstore/menu/MainMenuFunction.java similarity index 55% rename from src/com/smartstore/menu/MenuType.java rename to src/com/smartstore/menu/MainMenuFunction.java index 29ba53d7..e94c33eb 100644 --- a/src/com/smartstore/menu/MenuType.java +++ b/src/com/smartstore/menu/MainMenuFunction.java @@ -2,32 +2,32 @@ import java.util.Arrays; -public enum MenuType { +public enum MainMenuFunction { MAIN_MENU(0, MainMenu.getInstance()), GRADE_MANAGEMENT(1, GradeMenu.getInstance()), CUSTOMER_MANAGEMENT(2,CustomerMenu.getInstance()), REPORT_MANAGEMENT(3,ReportMenu.getInstance()), QUIT(4,Quit.getInstance()); - private final int menuNumber; - private final MenuController menuController; + private final int menuNumber; + private final Menu menuController; - MenuType(int menuNumber, MenuController menuController) { + MainMenuFunction(int menuNumber, Menu menuController) { this.menuNumber = menuNumber; this.menuController = menuController; } - private boolean isValidNumber(int menuNumber){ + private boolean isMatchedMenuNumber(int menuNumber){ return this.menuNumber == menuNumber; } - public static MenuType of(int menuNumber){ - return Arrays.stream(MenuType.values()) - .filter(menuType -> menuType.isValidNumber(menuNumber)) + public static MainMenuFunction of(int menuNumber){ + return Arrays.stream(MainMenuFunction.values()) + .filter(mainMenuFunction -> mainMenuFunction.isMatchedMenuNumber(menuNumber)) .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); } public void run() { - menuController.run(); + menuController.run(menuNumber); } } diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 06bbda33..3449062b 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -4,7 +4,7 @@ import java.io.IOException; import java.io.InputStreamReader; -interface Menu { +interface Menu { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); @@ -14,14 +14,14 @@ default void displayMenu(String[] menus){ } } - default void runMenuSelectionLoop(){ + default void runMenuSelectionLoop(int menuSize){ int menu = -1; while (true){ try { System.out.print("Input : "); menu = Integer.parseInt(br.readLine()); - if (menu <= 0 || menu > Screen.MAIN_MENU.getMenus().length) { - // TODO: 2023-05-08 trow other exception, catch it + if (menu <= 0 || menu > menuSize) { + // TODO: 2023-05-08 throw other exception, catch it throw new NumberFormatException("Invalid Menu"); } break; @@ -35,4 +35,10 @@ default void runMenuSelectionLoop(){ void handleChoice(int menuNumber); + default void run(int menuNumber){ + displayMenu(Screen.of(menuNumber).getMenus()); + //get menu number from user until valid menu number + runMenuSelectionLoop(Screen.of(menuNumber).getMenus().length); + }; + } diff --git a/src/com/smartstore/menu/MenuController.java b/src/com/smartstore/menu/MenuController.java deleted file mode 100644 index 2f375240..00000000 --- a/src/com/smartstore/menu/MenuController.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.smartstore.menu; - -public interface MenuController { - void run(); -} From 1eb1f1a9495ddf69b7223509cea1d0ad73fbd074 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 17:43:31 +0900 Subject: [PATCH 25/79] refactor: Modify Screen Enum [ Modified : Add String[] value for print each menu Add method return matched Screen ] --- src/com/smartstore/menu/Screen.java | 52 +++++++++++++++++++++++++++++ src/com/smartstore/util/Screen.java | 10 ------ 2 files changed, 52 insertions(+), 10 deletions(-) create mode 100644 src/com/smartstore/menu/Screen.java delete mode 100644 src/com/smartstore/util/Screen.java diff --git a/src/com/smartstore/menu/Screen.java b/src/com/smartstore/menu/Screen.java new file mode 100644 index 00000000..b1c88af5 --- /dev/null +++ b/src/com/smartstore/menu/Screen.java @@ -0,0 +1,52 @@ +package com.smartstore.menu; + +import java.util.Arrays; + +public enum Screen { + + SPLASH(new String[]{"this is splash screen"}, -1), + + MAIN_MENU(new String[]{ + "Grade Management", + "Customer Management", + "Report", + "Quit"}, 0), + GRADE(new String[]{ + "Set Membership Requirement", + "View Membership Requirement", + "Update Membership Requirement", + "Back"}, 1), + CUSTOMER(new String[]{ + "Add Customer Data", + "View Customer Data", + "Update Customer Data", + "Delete Customer Data", + "Back"}, 2), + REPORT(new String[]{ + "Report Summary", + "Sort", + "Back"}, 3), + QUIT(new String[]{"EXIT PROGRAM"}, 4); + + private final String[] menus; + private final int menuNumber; + + Screen(String[] message, int menuNumber) { + this.menus = message; + this.menuNumber = menuNumber; + } + + private boolean isMatchedMenuNumber(int menuNumber){ + return this.menuNumber == menuNumber; + } + + public static Screen of(int menuNumber){ + return Arrays.stream(Screen.values()) + .filter(screen -> screen.isMatchedMenuNumber(menuNumber)) + .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); + } + + public String[] getMenus() { + return menus; + } +} diff --git a/src/com/smartstore/util/Screen.java b/src/com/smartstore/util/Screen.java deleted file mode 100644 index 2e1dd988..00000000 --- a/src/com/smartstore/util/Screen.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.smartstore.util; - -public enum Screen { - SPLASH("this is splash screen"); - - String message; - Screen(String message) { - this.message = message; - } -} From cc0cd661c054d33dfc7718408038a94a17ad02bc Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 17:49:56 +0900 Subject: [PATCH 26/79] refactor: Modify MainMenu [ Modified : simplify duplicated code, ] --- src/com/smartstore/menu/MainMenu.java | 8 +++----- src/com/smartstore/menu/Screen.java | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java index 15f2ba13..3585251c 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/menu/MainMenu.java @@ -22,14 +22,12 @@ private void printSlashScreen(){ System.out.println(Arrays.toString(Screen.of(-1).getMenus())); } + @Override public void run(int menuNumber){ //print splash screen - printSlashScreen(); - //print menu - displayMenu(Screen.of(menuNumber).getMenus()); - //get menu number from user until valid menu number - runMenuSelectionLoop(Screen.of(menuNumber).getMenus().length); + //call run(super) + Menu.super.run(menuNumber); } private static MainMenu instance; diff --git a/src/com/smartstore/menu/Screen.java b/src/com/smartstore/menu/Screen.java index b1c88af5..5a5627ca 100644 --- a/src/com/smartstore/menu/Screen.java +++ b/src/com/smartstore/menu/Screen.java @@ -43,7 +43,7 @@ private boolean isMatchedMenuNumber(int menuNumber){ public static Screen of(int menuNumber){ return Arrays.stream(Screen.values()) .filter(screen -> screen.isMatchedMenuNumber(menuNumber)) - .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); + .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Menu")); } public String[] getMenus() { From 091880bbbbe0f4ee6a9760d20c08c78e54ea78ba Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 17:56:48 +0900 Subject: [PATCH 27/79] refactor: Rename MainMenu [ Renamed : GradeMenu.java -> MembershipMenu ] --- src/com/smartstore/menu/GradeMenu.java | 23 ------------------- src/com/smartstore/menu/MainMenuFunction.java | 2 +- src/com/smartstore/menu/MembershipMenu.java | 20 ++++++++++++++++ 3 files changed, 21 insertions(+), 24 deletions(-) delete mode 100644 src/com/smartstore/menu/GradeMenu.java create mode 100644 src/com/smartstore/menu/MembershipMenu.java diff --git a/src/com/smartstore/menu/GradeMenu.java b/src/com/smartstore/menu/GradeMenu.java deleted file mode 100644 index a7299c5b..00000000 --- a/src/com/smartstore/menu/GradeMenu.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.smartstore.menu; - -public class GradeMenu implements Menu, MenuController{ - @Override - public void handleChoice(int menuNumber) { - - } - - public static GradeMenu getInstance() { - if(instance == null){ - instance = new GradeMenu(); - } - return instance; - } - - private static GradeMenu instance; - - @Override - public void run() { - - } -} - diff --git a/src/com/smartstore/menu/MainMenuFunction.java b/src/com/smartstore/menu/MainMenuFunction.java index e94c33eb..67ec4275 100644 --- a/src/com/smartstore/menu/MainMenuFunction.java +++ b/src/com/smartstore/menu/MainMenuFunction.java @@ -4,7 +4,7 @@ public enum MainMenuFunction { MAIN_MENU(0, MainMenu.getInstance()), - GRADE_MANAGEMENT(1, GradeMenu.getInstance()), + MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), CUSTOMER_MANAGEMENT(2,CustomerMenu.getInstance()), REPORT_MANAGEMENT(3,ReportMenu.getInstance()), QUIT(4,Quit.getInstance()); diff --git a/src/com/smartstore/menu/MembershipMenu.java b/src/com/smartstore/menu/MembershipMenu.java new file mode 100644 index 00000000..08ab5c74 --- /dev/null +++ b/src/com/smartstore/menu/MembershipMenu.java @@ -0,0 +1,20 @@ +package com.smartstore.menu; + +public class MembershipMenu implements Menu { + @Override + public void handleChoice(int menuNumber) { + + + } + + public static MembershipMenu getInstance() { + if(instance == null){ + instance = new MembershipMenu(); + } + return instance; + } + + private static MembershipMenu instance; + +} + From 8fc68fe948058a8d07670ead89a5450e78ac99e0 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 18:01:57 +0900 Subject: [PATCH 28/79] refactor: Modify Menu Structure [ Moved : Move to Package by ClassName ] --- src/com/smartstore/customer/Customer.java | 8 +++--- src/com/smartstore/menu/Menu.java | 2 +- src/com/smartstore/menu/Quit.java | 17 ----------- .../menu/{ => customer}/CustomerMenu.java | 8 ++++-- .../menu/{ => mainmenu}/MainMenu.java | 10 +++++-- .../menu/{ => mainmenu}/MainMenuFunction.java | 13 ++++++--- src/com/smartstore/menu/mainmenu/Quit.java | 28 +++++++++++++++++++ .../menu/{ => membership}/MembershipMenu.java | 4 ++- .../menu/{ => report}/ReportMenu.java | 9 ++++-- 9 files changed, 63 insertions(+), 36 deletions(-) delete mode 100644 src/com/smartstore/menu/Quit.java rename src/com/smartstore/menu/{ => customer}/CustomerMenu.java (65%) rename src/com/smartstore/menu/{ => mainmenu}/MainMenu.java (74%) rename src/com/smartstore/menu/{ => mainmenu}/MainMenuFunction.java (70%) create mode 100644 src/com/smartstore/menu/mainmenu/Quit.java rename src/com/smartstore/menu/{ => membership}/MembershipMenu.java (81%) rename src/com/smartstore/menu/{ => report}/ReportMenu.java (65%) diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 0c6a3119..06532c66 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -1,19 +1,19 @@ package com.smartstore.customer; -import com.smartstore.grade.Grade; +import com.smartstore.grade.Membership; public class Customer { private int customerId; private String customerName; - private Grade grade; + private Membership membership; //TODO: 2023-04-30 constructor to builder - Customer(int customerId, String customerName, Grade grade){ + Customer(int customerId, String customerName, Membership membership){ this.customerId = customerId; this.customerName = customerName; - this.grade = grade; + this.membership = membership; } public void updateUser(int customerId){ diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 3449062b..0430b677 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -4,7 +4,7 @@ import java.io.IOException; import java.io.InputStreamReader; -interface Menu { +public interface Menu { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); diff --git a/src/com/smartstore/menu/Quit.java b/src/com/smartstore/menu/Quit.java deleted file mode 100644 index 78b4809c..00000000 --- a/src/com/smartstore/menu/Quit.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.smartstore.menu; - -public class Quit implements MenuController{ - @Override - public void run() { - - } - - public static Quit getInstance() { - if(instance == null){ - instance = new Quit(); - } - return instance; - } - - private static Quit instance; -} diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/customer/CustomerMenu.java similarity index 65% rename from src/com/smartstore/menu/CustomerMenu.java rename to src/com/smartstore/menu/customer/CustomerMenu.java index a4e2bbc9..3205e33d 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/menu/customer/CustomerMenu.java @@ -1,6 +1,8 @@ -package com.smartstore.menu; +package com.smartstore.menu.customer; -public class CustomerMenu implements Menu, MenuController { +import com.smartstore.menu.Menu; + +public class CustomerMenu implements Menu { @Override public void handleChoice(int menuNumber) { @@ -16,7 +18,7 @@ public static CustomerMenu getInstance() { private static CustomerMenu instance; @Override - public void run() { + public void run(int menuNumber) { } } diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/mainmenu/MainMenu.java similarity index 74% rename from src/com/smartstore/menu/MainMenu.java rename to src/com/smartstore/menu/mainmenu/MainMenu.java index 3585251c..40441e1c 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/menu/mainmenu/MainMenu.java @@ -1,4 +1,7 @@ -package com.smartstore.menu; +package com.smartstore.menu.mainmenu; + +import com.smartstore.menu.Menu; +import com.smartstore.menu.Screen; import java.util.Arrays; @@ -7,8 +10,9 @@ public class MainMenu implements Menu { @Override public void handleChoice(int menuNumber) { System.out.println("Handel called"); - Screen screen = Screen.of(menuNumber); - System.out.println(Arrays.toString(screen.getMenus())); + //call Menu with menuNumber + MainMenuFunction function = MainMenuFunction.of(menuNumber); + function.run(); } public static MainMenu getInstance() { diff --git a/src/com/smartstore/menu/MainMenuFunction.java b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java similarity index 70% rename from src/com/smartstore/menu/MainMenuFunction.java rename to src/com/smartstore/menu/mainmenu/MainMenuFunction.java index 67ec4275..3495e2a5 100644 --- a/src/com/smartstore/menu/MainMenuFunction.java +++ b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java @@ -1,13 +1,18 @@ -package com.smartstore.menu; +package com.smartstore.menu.mainmenu; + +import com.smartstore.menu.membership.MembershipMenu; +import com.smartstore.menu.Menu; +import com.smartstore.menu.customer.CustomerMenu; +import com.smartstore.menu.report.ReportMenu; import java.util.Arrays; public enum MainMenuFunction { MAIN_MENU(0, MainMenu.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), - CUSTOMER_MANAGEMENT(2,CustomerMenu.getInstance()), - REPORT_MANAGEMENT(3,ReportMenu.getInstance()), - QUIT(4,Quit.getInstance()); + CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), + REPORT_MANAGEMENT(3, ReportMenu.getInstance()), + QUIT(4, Quit.getInstance()); private final int menuNumber; private final Menu menuController; diff --git a/src/com/smartstore/menu/mainmenu/Quit.java b/src/com/smartstore/menu/mainmenu/Quit.java new file mode 100644 index 00000000..3aee3202 --- /dev/null +++ b/src/com/smartstore/menu/mainmenu/Quit.java @@ -0,0 +1,28 @@ +package com.smartstore.menu.mainmenu; + +import com.smartstore.menu.Menu; +import com.smartstore.menu.Screen; + +import java.util.Arrays; + +public class Quit implements Menu { + @Override + public void handleChoice(int menuNumber) { + + } + + @Override + public void run(int menuNumber) { + System.out.println(Arrays.toString(Screen.QUIT.getMenus())); + System.exit(1); + } + + public static Quit getInstance() { + if(instance == null){ + instance = new Quit(); + } + return instance; + } + + private static Quit instance; +} diff --git a/src/com/smartstore/menu/MembershipMenu.java b/src/com/smartstore/menu/membership/MembershipMenu.java similarity index 81% rename from src/com/smartstore/menu/MembershipMenu.java rename to src/com/smartstore/menu/membership/MembershipMenu.java index 08ab5c74..f6a45af6 100644 --- a/src/com/smartstore/menu/MembershipMenu.java +++ b/src/com/smartstore/menu/membership/MembershipMenu.java @@ -1,4 +1,6 @@ -package com.smartstore.menu; +package com.smartstore.menu.membership; + +import com.smartstore.menu.Menu; public class MembershipMenu implements Menu { @Override diff --git a/src/com/smartstore/menu/ReportMenu.java b/src/com/smartstore/menu/report/ReportMenu.java similarity index 65% rename from src/com/smartstore/menu/ReportMenu.java rename to src/com/smartstore/menu/report/ReportMenu.java index 9fe5b47e..4e562c7f 100644 --- a/src/com/smartstore/menu/ReportMenu.java +++ b/src/com/smartstore/menu/report/ReportMenu.java @@ -1,6 +1,8 @@ -package com.smartstore.menu; +package com.smartstore.menu.report; -public class ReportMenu implements Menu, MenuController{ +import com.smartstore.menu.Menu; + +public class ReportMenu implements Menu { @Override public void handleChoice(int menuNumber) { @@ -15,8 +17,9 @@ public static ReportMenu getInstance() { private static ReportMenu instance; + @Override - public void run() { + public void run(int menuNumber) { } } From c003db51c03c9b492dd960e846dd14cbef80d893 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 18:10:38 +0900 Subject: [PATCH 29/79] refactor: Modify smartstore class [ Motified : Add Load initial screen ] --- src/com/smartstore/SmartStore.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index 2ed94d4a..9eb3c9d2 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,7 +1,11 @@ package com.smartstore; +import com.smartstore.menu.mainmenu.MainMenuFunction; + public class SmartStore { public static void run(){ - + //Load Initial Screen + MainMenuFunction mainMenuFunction = MainMenuFunction.of(0); + mainMenuFunction.run(); } } From de43b91524a58872d6c292ed75236a9189699d0b Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 18:18:18 +0900 Subject: [PATCH 30/79] refactor: Rename package [Renamed : grade -> membership] --- src/com/smartstore/customer/Customer.java | 2 +- src/com/smartstore/{grade => membership}/Membership.java | 2 +- .../smartstore/{grade => membership}/MembershipRequirement.java | 2 +- src/com/smartstore/{grade => membership}/MembershipType.java | 2 +- src/com/smartstore/{grade => membership}/Memberships.java | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) rename src/com/smartstore/{grade => membership}/Membership.java (90%) rename src/com/smartstore/{grade => membership}/MembershipRequirement.java (89%) rename src/com/smartstore/{grade => membership}/MembershipType.java (89%) rename src/com/smartstore/{grade => membership}/Memberships.java (87%) diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 06532c66..bddc68d2 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -1,6 +1,6 @@ package com.smartstore.customer; -import com.smartstore.grade.Membership; +import com.smartstore.membership.Membership; public class Customer { private int customerId; diff --git a/src/com/smartstore/grade/Membership.java b/src/com/smartstore/membership/Membership.java similarity index 90% rename from src/com/smartstore/grade/Membership.java rename to src/com/smartstore/membership/Membership.java index f948f8e1..80293f25 100644 --- a/src/com/smartstore/grade/Membership.java +++ b/src/com/smartstore/membership/Membership.java @@ -1,4 +1,4 @@ -package com.smartstore.grade; +package com.smartstore.membership; import java.util.Map; diff --git a/src/com/smartstore/grade/MembershipRequirement.java b/src/com/smartstore/membership/MembershipRequirement.java similarity index 89% rename from src/com/smartstore/grade/MembershipRequirement.java rename to src/com/smartstore/membership/MembershipRequirement.java index 9c29baf6..ba2d84e4 100644 --- a/src/com/smartstore/grade/MembershipRequirement.java +++ b/src/com/smartstore/membership/MembershipRequirement.java @@ -1,4 +1,4 @@ -package com.smartstore.grade; +package com.smartstore.membership; public class MembershipRequirement { private int minUsageTime; diff --git a/src/com/smartstore/grade/MembershipType.java b/src/com/smartstore/membership/MembershipType.java similarity index 89% rename from src/com/smartstore/grade/MembershipType.java rename to src/com/smartstore/membership/MembershipType.java index 57965b31..5dea5b20 100644 --- a/src/com/smartstore/grade/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -1,4 +1,4 @@ -package com.smartstore.grade; +package com.smartstore.membership; public enum MembershipType { GENERAL(new String[] {"G", "GENERAL", "일반"}), diff --git a/src/com/smartstore/grade/Memberships.java b/src/com/smartstore/membership/Memberships.java similarity index 87% rename from src/com/smartstore/grade/Memberships.java rename to src/com/smartstore/membership/Memberships.java index 3798597b..0ed7cc44 100644 --- a/src/com/smartstore/grade/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,4 +1,4 @@ -package com.smartstore.grade; +package com.smartstore.membership; import java.util.ArrayList; import java.util.List; From d105a61d607c17d9b7a116bce03bef3ae00525ca Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 18:21:01 +0900 Subject: [PATCH 31/79] refactor: Rename value [Renamed : grade -> membership] --- src/com/smartstore/menu/Screen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/smartstore/menu/Screen.java b/src/com/smartstore/menu/Screen.java index 5a5627ca..cc1d6437 100644 --- a/src/com/smartstore/menu/Screen.java +++ b/src/com/smartstore/menu/Screen.java @@ -11,7 +11,7 @@ public enum Screen { "Customer Management", "Report", "Quit"}, 0), - GRADE(new String[]{ + MEMBERSHIP(new String[]{ "Set Membership Requirement", "View Membership Requirement", "Update Membership Requirement", From 1f546799346ccd97482adc947929896b8a434ec8 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 20:34:38 +0900 Subject: [PATCH 32/79] refactor: Clean UP code [Modified : Clean up Duplicated code] --- src/com/smartstore/menu/mainmenu/MainMenu.java | 8 +++++--- .../menu/mainmenu/MainMenuFunction.java | 15 ++++----------- src/com/smartstore/util/Function.java | 13 +++++++++++++ src/com/smartstore/util/MenuFunction.java | 8 ++++++++ 4 files changed, 30 insertions(+), 14 deletions(-) create mode 100644 src/com/smartstore/util/Function.java create mode 100644 src/com/smartstore/util/MenuFunction.java diff --git a/src/com/smartstore/menu/mainmenu/MainMenu.java b/src/com/smartstore/menu/mainmenu/MainMenu.java index 40441e1c..65246ebe 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenu.java +++ b/src/com/smartstore/menu/mainmenu/MainMenu.java @@ -1,17 +1,19 @@ package com.smartstore.menu.mainmenu; +import com.smartstore.membership.MembershipFunction; import com.smartstore.menu.Menu; import com.smartstore.menu.Screen; +import com.smartstore.util.Function; import java.util.Arrays; -public class MainMenu implements Menu { - +public class MainMenu implements Menu { @Override public void handleChoice(int menuNumber) { System.out.println("Handel called"); //call Menu with menuNumber - MainMenuFunction function = MainMenuFunction.of(menuNumber); + @SuppressWarnings("unchecked") + T function = (T) Function.of(menuNumber, MembershipFunction.class); function.run(); } diff --git a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java index 3495e2a5..45fc207b 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java @@ -1,13 +1,12 @@ package com.smartstore.menu.mainmenu; -import com.smartstore.menu.membership.MembershipMenu; import com.smartstore.menu.Menu; import com.smartstore.menu.customer.CustomerMenu; +import com.smartstore.menu.membership.MembershipMenu; import com.smartstore.menu.report.ReportMenu; +import com.smartstore.util.Function; -import java.util.Arrays; - -public enum MainMenuFunction { +public enum MainMenuFunction implements Function { MAIN_MENU(0, MainMenu.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), @@ -22,16 +21,10 @@ public enum MainMenuFunction { this.menuController = menuController; } - private boolean isMatchedMenuNumber(int menuNumber){ + public boolean isMatchedMenuNumber(int menuNumber){ return this.menuNumber == menuNumber; } - public static MainMenuFunction of(int menuNumber){ - return Arrays.stream(MainMenuFunction.values()) - .filter(mainMenuFunction -> mainMenuFunction.isMatchedMenuNumber(menuNumber)) - .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); - } - public void run() { menuController.run(menuNumber); } diff --git a/src/com/smartstore/util/Function.java b/src/com/smartstore/util/Function.java new file mode 100644 index 00000000..dfa68f02 --- /dev/null +++ b/src/com/smartstore/util/Function.java @@ -0,0 +1,13 @@ +package com.smartstore.util; + +import java.util.Arrays; + +public interface Function extends MenuFunction { + static & Function> T of(int menuNumber, Class enumClass){ + + return Arrays.stream(enumClass.getEnumConstants()) + .filter(enumValue -> enumValue.isMatchedMenuNumber(menuNumber)) + .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); + } + +} diff --git a/src/com/smartstore/util/MenuFunction.java b/src/com/smartstore/util/MenuFunction.java new file mode 100644 index 00000000..dc3a8628 --- /dev/null +++ b/src/com/smartstore/util/MenuFunction.java @@ -0,0 +1,8 @@ +package com.smartstore.util; + +public interface MenuFunction { + boolean isMatchedMenuNumber(int menuNumber); + + void run(); + +} From 918972ff5eb6fb923932521db79f5fe9883bd976 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 23:22:09 +0900 Subject: [PATCH 33/79] refactor: Clean UP code [Modified : Clean up Unnecessary code] --- .../DeleteMembershipRequirement.java | 19 ++++++++++++ .../smartstore/membership/Memberships.java | 29 ++++++++++++++----- .../membership/SetMembershipRequirement.java | 25 ++++++++++++++++ .../UpdateMembershipRequirement.java | 19 ++++++++++++ .../membership/ViewMembershipRequirement.java | 18 ++++++++++++ src/com/smartstore/menu/Back.java | 18 ++++++++++++ src/com/smartstore/menu/Menu.java | 6 ++-- .../menu/customer/CustomerMenu.java | 10 +++---- .../smartstore/menu/mainmenu/MainMenu.java | 17 +++++------ .../menu/mainmenu/MainMenuFunction.java | 2 +- src/com/smartstore/menu/mainmenu/Quit.java | 14 ++++----- .../menu/membership/MembershipMenu.java | 6 ++++ .../smartstore/menu/report/ReportMenu.java | 10 +++---- 13 files changed, 155 insertions(+), 38 deletions(-) create mode 100644 src/com/smartstore/membership/DeleteMembershipRequirement.java create mode 100644 src/com/smartstore/membership/SetMembershipRequirement.java create mode 100644 src/com/smartstore/membership/UpdateMembershipRequirement.java create mode 100644 src/com/smartstore/membership/ViewMembershipRequirement.java create mode 100644 src/com/smartstore/menu/Back.java diff --git a/src/com/smartstore/membership/DeleteMembershipRequirement.java b/src/com/smartstore/membership/DeleteMembershipRequirement.java new file mode 100644 index 00000000..88cdb86c --- /dev/null +++ b/src/com/smartstore/membership/DeleteMembershipRequirement.java @@ -0,0 +1,19 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Menu; + +public class DeleteMembershipRequirement implements Menu { + @Override + public void handleChoice(int menuNumber) { + + } + + @Override + public void run() { + //Do something + } + + public DeleteMembershipRequirement() { + + } +} diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 0ed7cc44..6eb43b2c 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,18 +1,33 @@ package com.smartstore.membership; -import java.util.ArrayList; -import java.util.List; +import com.smartstore.menu.Menu; +import com.smartstore.util.CustomList; -public class Memberships { - private List membershipList = new ArrayList<>(); +public class Memberships implements Menu { + private CustomList membershipList = new CustomList<>(); + private static Memberships instance; - - public Memberships getInstance(){ - return this; + public static Memberships getInstance(){ + if(instance == null){ + instance = new Memberships(); + } + return instance; } public void refresh(){ + } + Memberships(){ + + } + + @Override + public void handleChoice(int menuNumber) { + } + @Override + public void run() { + + } } diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/membership/SetMembershipRequirement.java new file mode 100644 index 00000000..0e42e3e2 --- /dev/null +++ b/src/com/smartstore/membership/SetMembershipRequirement.java @@ -0,0 +1,25 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Menu; + +public class SetMembershipRequirement implements Menu { + @Override + public void run() { + //Do something + System.out.println("Which one?"); + for(MembershipType key : MembershipType.values()){ + System.out.printf("%s | ",key.name()); + + } + + } + + public SetMembershipRequirement() { + + } + + @Override + public void handleChoice(int menuNumber) { + + } +} diff --git a/src/com/smartstore/membership/UpdateMembershipRequirement.java b/src/com/smartstore/membership/UpdateMembershipRequirement.java new file mode 100644 index 00000000..fa561f91 --- /dev/null +++ b/src/com/smartstore/membership/UpdateMembershipRequirement.java @@ -0,0 +1,19 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Menu; + +public class UpdateMembershipRequirement implements Menu { + + public void run() { + //Do something + } + + public UpdateMembershipRequirement() { + + } + + @Override + public void handleChoice(int menuNumber) { + + } +} diff --git a/src/com/smartstore/membership/ViewMembershipRequirement.java b/src/com/smartstore/membership/ViewMembershipRequirement.java new file mode 100644 index 00000000..6c70db21 --- /dev/null +++ b/src/com/smartstore/membership/ViewMembershipRequirement.java @@ -0,0 +1,18 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Menu; + +public class ViewMembershipRequirement implements Menu { + public void run() { + //Do something + } + + public ViewMembershipRequirement() { + + } + + @Override + public void handleChoice(int menuNumber) { + + } +} diff --git a/src/com/smartstore/menu/Back.java b/src/com/smartstore/menu/Back.java new file mode 100644 index 00000000..3e2994f7 --- /dev/null +++ b/src/com/smartstore/menu/Back.java @@ -0,0 +1,18 @@ +package com.smartstore.menu; + +public class Back implements Menu { + + public boolean isExit(){ + return true; + } + + @Override + public void handleChoice(int menuNumber) { + + } + + @Override + public void run() { + + } +} diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 0430b677..6dee0f9b 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -35,10 +35,12 @@ default void runMenuSelectionLoop(int menuSize){ void handleChoice(int menuNumber); - default void run(int menuNumber){ + void run(); + + default void run(int menuNumber) { displayMenu(Screen.of(menuNumber).getMenus()); //get menu number from user until valid menu number runMenuSelectionLoop(Screen.of(menuNumber).getMenus().length); - }; + } } diff --git a/src/com/smartstore/menu/customer/CustomerMenu.java b/src/com/smartstore/menu/customer/CustomerMenu.java index 3205e33d..ee44dfb4 100644 --- a/src/com/smartstore/menu/customer/CustomerMenu.java +++ b/src/com/smartstore/menu/customer/CustomerMenu.java @@ -8,6 +8,11 @@ public void handleChoice(int menuNumber) { } + @Override + public void run() { + + } + public static CustomerMenu getInstance() { if(instance == null){ instance = new CustomerMenu(); @@ -16,9 +21,4 @@ public static CustomerMenu getInstance() { } private static CustomerMenu instance; - - @Override - public void run(int menuNumber) { - - } } diff --git a/src/com/smartstore/menu/mainmenu/MainMenu.java b/src/com/smartstore/menu/mainmenu/MainMenu.java index 65246ebe..5b865d7c 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenu.java +++ b/src/com/smartstore/menu/mainmenu/MainMenu.java @@ -1,20 +1,21 @@ package com.smartstore.menu.mainmenu; -import com.smartstore.membership.MembershipFunction; import com.smartstore.menu.Menu; import com.smartstore.menu.Screen; import com.smartstore.util.Function; import java.util.Arrays; -public class MainMenu implements Menu { +public class MainMenu implements Menu { @Override public void handleChoice(int menuNumber) { - System.out.println("Handel called"); //call Menu with menuNumber - @SuppressWarnings("unchecked") - T function = (T) Function.of(menuNumber, MembershipFunction.class); - function.run(); + Function.of(menuNumber, MainMenuFunction.class).run(); + } + + @Override + public void run() { + //Do nothing } public static MainMenu getInstance() { @@ -27,14 +28,12 @@ public static MainMenu getInstance() { private void printSlashScreen(){ System.out.println(Arrays.toString(Screen.of(-1).getMenus())); } - - @Override public void run(int menuNumber){ //print splash screen printSlashScreen(); - //call run(super) Menu.super.run(menuNumber); } + private static MainMenu instance; private MainMenu(){ diff --git a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java index 45fc207b..6a68b8b3 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/menu/mainmenu/MainMenuFunction.java @@ -11,7 +11,7 @@ public enum MainMenuFunction implements Function { MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), REPORT_MANAGEMENT(3, ReportMenu.getInstance()), - QUIT(4, Quit.getInstance()); + QUIT(4, new Quit()); private final int menuNumber; private final Menu menuController; diff --git a/src/com/smartstore/menu/mainmenu/Quit.java b/src/com/smartstore/menu/mainmenu/Quit.java index 3aee3202..0ff078a6 100644 --- a/src/com/smartstore/menu/mainmenu/Quit.java +++ b/src/com/smartstore/menu/mainmenu/Quit.java @@ -11,18 +11,14 @@ public void handleChoice(int menuNumber) { } + @Override + public void run() { + + } + @Override public void run(int menuNumber) { System.out.println(Arrays.toString(Screen.QUIT.getMenus())); System.exit(1); } - - public static Quit getInstance() { - if(instance == null){ - instance = new Quit(); - } - return instance; - } - - private static Quit instance; } diff --git a/src/com/smartstore/menu/membership/MembershipMenu.java b/src/com/smartstore/menu/membership/MembershipMenu.java index f6a45af6..c5117978 100644 --- a/src/com/smartstore/menu/membership/MembershipMenu.java +++ b/src/com/smartstore/menu/membership/MembershipMenu.java @@ -1,11 +1,17 @@ package com.smartstore.menu.membership; +import com.smartstore.membership.MembershipFunction; import com.smartstore.menu.Menu; +import com.smartstore.util.Function; public class MembershipMenu implements Menu { @Override public void handleChoice(int menuNumber) { + Function.of(menuNumber, MembershipFunction.class).run(); + } + @Override + public void run() { } diff --git a/src/com/smartstore/menu/report/ReportMenu.java b/src/com/smartstore/menu/report/ReportMenu.java index 4e562c7f..1b1f55ad 100644 --- a/src/com/smartstore/menu/report/ReportMenu.java +++ b/src/com/smartstore/menu/report/ReportMenu.java @@ -8,6 +8,11 @@ public void handleChoice(int menuNumber) { } + @Override + public void run() { + + } + public static ReportMenu getInstance() { if(instance == null){ instance = new ReportMenu(); @@ -17,9 +22,4 @@ public static ReportMenu getInstance() { private static ReportMenu instance; - - @Override - public void run(int menuNumber) { - - } } From aa99df90cb801356abab4ab806f5969d816c35e6 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 8 May 2023 23:24:04 +0900 Subject: [PATCH 34/79] refactor: Add MembershipFunction class [Added : MembershipFunction class, Enum for Functions using inMembership] --- .../membership/MembershipFunction.java | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/com/smartstore/membership/MembershipFunction.java diff --git a/src/com/smartstore/membership/MembershipFunction.java b/src/com/smartstore/membership/MembershipFunction.java new file mode 100644 index 00000000..a64e183a --- /dev/null +++ b/src/com/smartstore/membership/MembershipFunction.java @@ -0,0 +1,34 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Back; +import com.smartstore.menu.Menu; +import com.smartstore.util.Function; + +public enum MembershipFunction implements Function { + SET(1, new SetMembershipRequirement()), + VIEW(2, new ViewMembershipRequirement()), + UPDATE(3,new UpdateMembershipRequirement()), + BACK(4, new Back()); + + + private final int menuNumber; + private final Menu menuController; + MembershipFunction(int menuNumber, Menu menuController) { + this.menuNumber = menuNumber; + this.menuController = menuController; + } + + @Override + public void run() { + if(menuController.getClass().equals(Back.class)){ + //((Back) menuController).isExit(); + }else{ + menuController.run(); + } + } + + @Override + public boolean isMatchedMenuNumber(int menuNumber){ + return this.menuNumber == menuNumber; + } +} From 87d674ae817545e370ec204ca32349b64a366445 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:09:07 +0900 Subject: [PATCH 35/79] refactor: Modify CustomList [Modified : Add toArray Method as parameter type] --- src/com/smartstore/util/CustomList.java | 10 ++++++++-- src/com/smartstore/util/List.java | 1 + 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index 1a4a4cc3..861f1a9a 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -43,10 +43,16 @@ private int findIndex(Object o){ } @Override - public Object[] toArray(){ - return Arrays.copyOf(elements, size); + @SuppressWarnings("unchked") + public T[] toArray(Class type){ + return (T[])Arrays.copyOf(elements, size, type); } + @Override + @SuppressWarnings("unchked") + public T[] toArray(){ + return (T[])Arrays.copyOf(elements, size); + } @Override public void add(T object) { if(size == elements.length){ diff --git a/src/com/smartstore/util/List.java b/src/com/smartstore/util/List.java index 28b1f43c..ab1c9aea 100644 --- a/src/com/smartstore/util/List.java +++ b/src/com/smartstore/util/List.java @@ -11,4 +11,5 @@ public interface List { boolean remove(T object); Object[] toArray(); + Object[] toArray(Class type); } From 9a6ff093c771c44e372bbeeb7941f5f80549d51f Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:17:08 +0900 Subject: [PATCH 36/79] refactor: Modify Menu Interface [Modified :Modify return type of runMenuSelectionLoop int -> String[]] --- src/com/smartstore/menu/Menu.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 6dee0f9b..9b604f76 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -14,13 +14,13 @@ default void displayMenu(String[] menus){ } } - default void runMenuSelectionLoop(int menuSize){ + default void runMenuSelectionLoop(String[] menus){ int menu = -1; while (true){ try { System.out.print("Input : "); menu = Integer.parseInt(br.readLine()); - if (menu <= 0 || menu > menuSize) { + if (menu <= 0 || menu > menus.length) { // TODO: 2023-05-08 throw other exception, catch it throw new NumberFormatException("Invalid Menu"); } @@ -40,7 +40,7 @@ default void runMenuSelectionLoop(int menuSize){ default void run(int menuNumber) { displayMenu(Screen.of(menuNumber).getMenus()); //get menu number from user until valid menu number - runMenuSelectionLoop(Screen.of(menuNumber).getMenus().length); + runMenuSelectionLoop(Screen.of(menuNumber).getMenus()); } } From 1ae1734b52ac464c9f357b01b26522589c556e8c Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:19:34 +0900 Subject: [PATCH 37/79] refactor: Modify MembershipType [Modified : Rename grade -> membershipNames] --- src/com/smartstore/membership/MembershipType.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 5dea5b20..85b3cd5b 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -1,3 +1,4 @@ + package com.smartstore.membership; public enum MembershipType { @@ -5,8 +6,12 @@ public enum MembershipType { VIP(new String[] {"V", "VIP", "우수"}), VVIP(new String[] {"VV", "VVIP", "최우수"}); - String[] grade = new String[3]; + String[] membershipNames = new String[3]; MembershipType(String[] grade) { - this.grade = grade; + this.membershipNames = grade; + } + + public String[] getMembership() { + return membershipNames; } } From ecf680cd8ec5a6963cc311b941b69558f206e4e3 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:42:40 +0900 Subject: [PATCH 38/79] refactor: Modify return type of method [Modified : modify return type of handleChoice method in Menu interface int -> String] --- .../smartstore/membership/DeleteMembershipRequirement.java | 2 +- src/com/smartstore/membership/Memberships.java | 2 +- .../smartstore/membership/UpdateMembershipRequirement.java | 2 +- src/com/smartstore/membership/ViewMembershipRequirement.java | 2 +- src/com/smartstore/menu/Back.java | 2 +- src/com/smartstore/menu/Menu.java | 4 ++-- src/com/smartstore/menu/customer/CustomerMenu.java | 2 +- src/com/smartstore/menu/mainmenu/MainMenu.java | 4 ++-- src/com/smartstore/menu/mainmenu/Quit.java | 2 +- src/com/smartstore/menu/membership/MembershipMenu.java | 4 ++-- src/com/smartstore/menu/report/ReportMenu.java | 2 +- 11 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/com/smartstore/membership/DeleteMembershipRequirement.java b/src/com/smartstore/membership/DeleteMembershipRequirement.java index 88cdb86c..61aa392d 100644 --- a/src/com/smartstore/membership/DeleteMembershipRequirement.java +++ b/src/com/smartstore/membership/DeleteMembershipRequirement.java @@ -4,7 +4,7 @@ public class DeleteMembershipRequirement implements Menu { @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 6eb43b2c..df3f2c4f 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -22,7 +22,7 @@ public void refresh(){ } @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } diff --git a/src/com/smartstore/membership/UpdateMembershipRequirement.java b/src/com/smartstore/membership/UpdateMembershipRequirement.java index fa561f91..a26f6e3b 100644 --- a/src/com/smartstore/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/membership/UpdateMembershipRequirement.java @@ -13,7 +13,7 @@ public UpdateMembershipRequirement() { } @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } } diff --git a/src/com/smartstore/membership/ViewMembershipRequirement.java b/src/com/smartstore/membership/ViewMembershipRequirement.java index 6c70db21..12be83c2 100644 --- a/src/com/smartstore/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/membership/ViewMembershipRequirement.java @@ -12,7 +12,7 @@ public ViewMembershipRequirement() { } @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } } diff --git a/src/com/smartstore/menu/Back.java b/src/com/smartstore/menu/Back.java index 3e2994f7..1a6165b0 100644 --- a/src/com/smartstore/menu/Back.java +++ b/src/com/smartstore/menu/Back.java @@ -7,7 +7,7 @@ public boolean isExit(){ } @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/menu/Menu.java index 9b604f76..76b0ab83 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/menu/Menu.java @@ -30,10 +30,10 @@ default void runMenuSelectionLoop(String[] menus){ System.out.println("Invalid Menu"); } } - handleChoice(menu); + handleChoice(String.valueOf(menu)); } - void handleChoice(int menuNumber); + void handleChoice(String menuNumber); void run(); diff --git a/src/com/smartstore/menu/customer/CustomerMenu.java b/src/com/smartstore/menu/customer/CustomerMenu.java index ee44dfb4..6d4fd198 100644 --- a/src/com/smartstore/menu/customer/CustomerMenu.java +++ b/src/com/smartstore/menu/customer/CustomerMenu.java @@ -4,7 +4,7 @@ public class CustomerMenu implements Menu { @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } diff --git a/src/com/smartstore/menu/mainmenu/MainMenu.java b/src/com/smartstore/menu/mainmenu/MainMenu.java index 5b865d7c..7aec7b03 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenu.java +++ b/src/com/smartstore/menu/mainmenu/MainMenu.java @@ -8,9 +8,9 @@ public class MainMenu implements Menu { @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { //call Menu with menuNumber - Function.of(menuNumber, MainMenuFunction.class).run(); + Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); } @Override diff --git a/src/com/smartstore/menu/mainmenu/Quit.java b/src/com/smartstore/menu/mainmenu/Quit.java index 0ff078a6..9b61357a 100644 --- a/src/com/smartstore/menu/mainmenu/Quit.java +++ b/src/com/smartstore/menu/mainmenu/Quit.java @@ -7,7 +7,7 @@ public class Quit implements Menu { @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } diff --git a/src/com/smartstore/menu/membership/MembershipMenu.java b/src/com/smartstore/menu/membership/MembershipMenu.java index c5117978..bf126b8e 100644 --- a/src/com/smartstore/menu/membership/MembershipMenu.java +++ b/src/com/smartstore/menu/membership/MembershipMenu.java @@ -6,8 +6,8 @@ public class MembershipMenu implements Menu { @Override - public void handleChoice(int menuNumber) { - Function.of(menuNumber, MembershipFunction.class).run(); + public void handleChoice(String menuNumber) { + Function.of(Integer.parseInt(menuNumber), MembershipFunction.class).run(); } @Override diff --git a/src/com/smartstore/menu/report/ReportMenu.java b/src/com/smartstore/menu/report/ReportMenu.java index 1b1f55ad..b85fe3a2 100644 --- a/src/com/smartstore/menu/report/ReportMenu.java +++ b/src/com/smartstore/menu/report/ReportMenu.java @@ -4,7 +4,7 @@ public class ReportMenu implements Menu { @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menuNumber) { } From 9fc04e7cdaf9fdc94a457f949db3c9d5183b58cd Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:44:46 +0900 Subject: [PATCH 39/79] refactor: Add method [Added : add method isMatchedName check MembershipType.membershipNames contains parameter(String) ] --- src/com/smartstore/membership/MembershipType.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 85b3cd5b..a26896a8 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -1,6 +1,9 @@ package com.smartstore.membership; +import java.util.Arrays; +import java.util.NoSuchElementException; + public enum MembershipType { GENERAL(new String[] {"G", "GENERAL", "일반"}), VIP(new String[] {"V", "VIP", "우수"}), @@ -14,4 +17,11 @@ public enum MembershipType { public String[] getMembership() { return membershipNames; } + + public boolean isMatchedName(String membershipName){ + return Arrays.stream(membershipNames) + .filter(name -> name.equals(membershipName)) + .findFirst() + .orElseThrow(() -> new NoSuchElementException("Not found Membership")).length() > 0; + } } From 4c80868b6354324dcdd4e7d11a733c65a8a664ce Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 00:51:10 +0900 Subject: [PATCH 40/79] refactor: Modify method [Modified : modify isMatchedName to catch equals without Case Sensitive] --- .../smartstore/membership/MembershipType.java | 5 +---- .../membership/SetMembershipRequirement.java | 17 ++++++++++------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index a26896a8..0019cfc7 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -2,7 +2,6 @@ package com.smartstore.membership; import java.util.Arrays; -import java.util.NoSuchElementException; public enum MembershipType { GENERAL(new String[] {"G", "GENERAL", "일반"}), @@ -20,8 +19,6 @@ public String[] getMembership() { public boolean isMatchedName(String membershipName){ return Arrays.stream(membershipNames) - .filter(name -> name.equals(membershipName)) - .findFirst() - .orElseThrow(() -> new NoSuchElementException("Not found Membership")).length() > 0; + .anyMatch(name -> name.equalsIgnoreCase(membershipName)); } } diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/membership/SetMembershipRequirement.java index 0e42e3e2..85fb9902 100644 --- a/src/com/smartstore/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/membership/SetMembershipRequirement.java @@ -1,16 +1,19 @@ package com.smartstore.membership; -import com.smartstore.menu.Menu; +import com.smartstore.util.CustomList; -public class SetMembershipRequirement implements Menu { +public class SetMembershipRequirement implements MembershipMenuController { @Override public void run() { //Do something - System.out.println("Which one?"); - for(MembershipType key : MembershipType.values()){ - System.out.printf("%s | ",key.name()); - + CustomList keyList = new CustomList<>(); + for(MembershipType membershipType : MembershipType.values()){ + keyList.add(membershipType.name()); } + String[] keyArray = keyList.toArray(String[].class); + displayMenu(keyArray); + + runMenuSelectionLoop(keyArray); } @@ -19,7 +22,7 @@ public SetMembershipRequirement() { } @Override - public void handleChoice(int menuNumber) { + public void handleChoice(String menu) { } } From 2849423e22baab11f7677b70be4560a466351d21 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 01:04:08 +0900 Subject: [PATCH 41/79] refactor: Modify Access Modifier [Modified : modify Access Modifier of constructor for singleton] --- src/com/smartstore/membership/Memberships.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index df3f2c4f..27f5c10d 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,9 +1,8 @@ package com.smartstore.membership; -import com.smartstore.menu.Menu; import com.smartstore.util.CustomList; -public class Memberships implements Menu { +public class Memberships { private CustomList membershipList = new CustomList<>(); private static Memberships instance; @@ -17,17 +16,8 @@ public static Memberships getInstance(){ public void refresh(){ } - Memberships(){ + private Memberships(){ } - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - - } } From 30869a246ee4bc3dd376d30230e784b2154db04a Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 16:10:04 +0900 Subject: [PATCH 42/79] feat: New Feat CustomList [New feat: get object from list by key] --- src/com/smartstore/util/CustomList.java | 7 +++++++ src/com/smartstore/util/List.java | 1 + 2 files changed, 8 insertions(+) diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index 861f1a9a..aee3535c 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -9,6 +9,13 @@ public int size() { return this.size; } + @Override + @SuppressWarnings("unchecked") + public T get(T object) { + return (T) elements[findIndex(object)]; + } + + @Override @SuppressWarnings("unchecked") public T get(int index) { diff --git a/src/com/smartstore/util/List.java b/src/com/smartstore/util/List.java index ab1c9aea..211fb3de 100644 --- a/src/com/smartstore/util/List.java +++ b/src/com/smartstore/util/List.java @@ -2,6 +2,7 @@ public interface List { int size(); + T get(T object); T get(int index); void set(int index, T object); int indexOf(T object); From 5306bf681b99124120feb6798d37b3dcb53c3768 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 19:06:00 +0900 Subject: [PATCH 43/79] feat: Back to PrevMenu [New feat: back to prevMenu if User Select Back function] --- src/com/smartstore/membership/Membership.java | 20 ------------------- .../membership/MembershipFunction.java | 3 ++- src/com/smartstore/menu/Back.java | 9 +++++++++ 3 files changed, 11 insertions(+), 21 deletions(-) delete mode 100644 src/com/smartstore/membership/Membership.java diff --git a/src/com/smartstore/membership/Membership.java b/src/com/smartstore/membership/Membership.java deleted file mode 100644 index 80293f25..00000000 --- a/src/com/smartstore/membership/Membership.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.smartstore.membership; - -import java.util.Map; - -public class Membership { - private Map gradeInfo; - - - Membership(String gradeName, int minUsageTime, int minPaymentAmount){ - - } - - public Membership getGrade(){ - return null; - } - - public void updateGrade(String gradeName){ - - } -} diff --git a/src/com/smartstore/membership/MembershipFunction.java b/src/com/smartstore/membership/MembershipFunction.java index a64e183a..2adbcd38 100644 --- a/src/com/smartstore/membership/MembershipFunction.java +++ b/src/com/smartstore/membership/MembershipFunction.java @@ -20,8 +20,9 @@ public enum MembershipFunction implements Function { @Override public void run() { + System.out.println(menuController.getClass()); if(menuController.getClass().equals(Back.class)){ - //((Back) menuController).isExit(); + menuController.run(0); }else{ menuController.run(); } diff --git a/src/com/smartstore/menu/Back.java b/src/com/smartstore/menu/Back.java index 1a6165b0..738fd4eb 100644 --- a/src/com/smartstore/menu/Back.java +++ b/src/com/smartstore/menu/Back.java @@ -1,5 +1,8 @@ package com.smartstore.menu; +import com.smartstore.menu.mainmenu.MainMenuFunction; +import com.smartstore.util.Function; + public class Back implements Menu { public boolean isExit(){ @@ -15,4 +18,10 @@ public void handleChoice(String menuNumber) { public void run() { } + + @Override + public void run(int menuNumber) { + MainMenuFunction mainMenuFunction = Function.of(menuNumber, MainMenuFunction.class); + mainMenuFunction.run(); + } } From 85a17301662082be969c9d517114825df6cb237f Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 19:19:55 +0900 Subject: [PATCH 44/79] feat: Set MembershipRequirement [New feat: Set MembershipRequirement from user input] --- .../membership/MembershipRequirement.java | 18 ++++++-- .../smartstore/membership/MembershipType.java | 14 ++++-- .../smartstore/membership/Memberships.java | 45 ++++++++++++++++++- .../membership/SetMembershipRequirement.java | 38 +++++++++++----- 4 files changed, 94 insertions(+), 21 deletions(-) diff --git a/src/com/smartstore/membership/MembershipRequirement.java b/src/com/smartstore/membership/MembershipRequirement.java index ba2d84e4..14b6f735 100644 --- a/src/com/smartstore/membership/MembershipRequirement.java +++ b/src/com/smartstore/membership/MembershipRequirement.java @@ -4,13 +4,23 @@ public class MembershipRequirement { private int minUsageTime; private int minPaymentAmount; - public MembershipRequirement getGradeRequirement() { + public MembershipRequirement(int minUsageTime, int minPaymentAmount) { + this.minUsageTime = minUsageTime; + this.minPaymentAmount = minPaymentAmount; + } - return null; + //for unregister customer + public MembershipRequirement() { + this.minUsageTime = 0; + this.minPaymentAmount = 0; } - //TODO: 2023-04-30 constructor to builder - public void setGradeRequirement(int a, int b){ + public int getMinUsageTime() { + return minUsageTime; + } + public int getMinPaymentAmount() { + return minPaymentAmount; } + } diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 0019cfc7..1ff9da35 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -2,15 +2,16 @@ package com.smartstore.membership; import java.util.Arrays; +import java.util.Optional; public enum MembershipType { GENERAL(new String[] {"G", "GENERAL", "일반"}), VIP(new String[] {"V", "VIP", "우수"}), VVIP(new String[] {"VV", "VVIP", "최우수"}); - String[] membershipNames = new String[3]; - MembershipType(String[] grade) { - this.membershipNames = grade; + private String[] membershipNames={}; + MembershipType(String[] membershipNames) { + this.membershipNames = membershipNames; } public String[] getMembership() { @@ -21,4 +22,11 @@ public boolean isMatchedName(String membershipName){ return Arrays.stream(membershipNames) .anyMatch(name -> name.equalsIgnoreCase(membershipName)); } + + public boolean findByName(String membershipName){ + Optional membershipOpt = Arrays.stream(membershipNames) + .filter(name -> name.equalsIgnoreCase(membershipName)) + .findFirst(); + return (membershipOpt.isPresent()); + } } diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 27f5c10d..4a9bd2d4 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,9 +1,14 @@ package com.smartstore.membership; -import com.smartstore.util.CustomList; +import com.smartstore.util.CustomEnumMap; +import com.smartstore.util.Map; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; public class Memberships { - private CustomList membershipList = new CustomList<>(); + private Map membershipList = new CustomEnumMap<>(MembershipType.class); private static Memberships instance; public static Memberships getInstance(){ @@ -20,4 +25,40 @@ private Memberships(){ } + public MembershipRequirement findByType(MembershipType membershipType){ + if(membershipList.size() == 0 ){ + return null; + } + return membershipList.get(membershipType); + } + + public void setMembershipRequirement(MembershipType membershipType){ + int minUsageTime; + int minPaymentAmount; + + minUsageTime = getInputFromConsole("Input minUsageTime : "); + minPaymentAmount = getInputFromConsole("Input minPaymentAmount : "); + membershipList.put(membershipType, new MembershipRequirement(minUsageTime, minPaymentAmount)); + } + + private int getInputFromConsole(String msg){ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int value; + while (true){ + try { + System.out.print(msg); + value = Integer.parseInt(br.readLine()); + //check value overflowed or negative + if (value < 0) { + // TODO: 2023-05-08 throw other exception, catch it + throw new NumberFormatException("Invalid Menu"); + } + break; + + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Range of Input try 1 ~ Integer.Max"); + } + } + return value; + } } diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/membership/SetMembershipRequirement.java index 85fb9902..0299ff72 100644 --- a/src/com/smartstore/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/membership/SetMembershipRequirement.java @@ -1,28 +1,42 @@ package com.smartstore.membership; -import com.smartstore.util.CustomList; +import com.smartstore.menu.mainmenu.MainMenuFunction; +import com.smartstore.util.Function; public class SetMembershipRequirement implements MembershipMenuController { @Override public void run() { - //Do something - CustomList keyList = new CustomList<>(); - for(MembershipType membershipType : MembershipType.values()){ - keyList.add(membershipType.name()); - } - String[] keyArray = keyList.toArray(String[].class); - displayMenu(keyArray); + //get values from enum by string array + String[] values = getEnumValues(); + displayMenu(values); - runMenuSelectionLoop(keyArray); + runMenuSelectionLoop(values); } - public SetMembershipRequirement() { - + private void setMembershipRequirement(MembershipType membershipType) { + Memberships.getInstance().setMembershipRequirement(membershipType); + System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); } @Override - public void handleChoice(String menu) { + public void handleChoice(String membershipName) { + MembershipType membershipType = getMembershipType(membershipName); + //find requirement using type in enum_map + MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); + //if not found in enum_map + if(requirement == null ){ + setMembershipRequirement(membershipType); + } else{ + System.out.printf("Membership '%s' Already Defined\n", membershipType.name()); + + } + //Back to prev Menu + returnToPrevMenu(); + } + private void returnToPrevMenu(){ + MainMenuFunction mainMenuFunction = Function.of(1, MainMenuFunction.class); + mainMenuFunction.run(); } } From c1ca6b539e02de6195ff2a15346b91dbb161efd2 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 19:21:32 +0900 Subject: [PATCH 45/79] refactor: Add MembershipMenuController [Added : Inter face forMembershipMenu Control implement Menu] --- .../membership/MembershipMenuController.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 src/com/smartstore/membership/MembershipMenuController.java diff --git a/src/com/smartstore/membership/MembershipMenuController.java b/src/com/smartstore/membership/MembershipMenuController.java new file mode 100644 index 00000000..57a99e3d --- /dev/null +++ b/src/com/smartstore/membership/MembershipMenuController.java @@ -0,0 +1,65 @@ +package com.smartstore.membership; + +import com.smartstore.menu.Menu; +import com.smartstore.util.CustomList; + +import java.io.IOException; +import java.util.NoSuchElementException; + +public interface MembershipMenuController extends Menu { + @Override + default void runMenuSelectionLoop(String[] memberships) { + String memberTypeName=""; + boolean isExit = false; + if(memberships.length > 0) { + while (!isExit) { + try { + System.out.print("Input : "); + memberTypeName = br.readLine(); + for (String membershipName : memberships) { + if (MembershipType.valueOf(membershipName).isMatchedName(memberTypeName)) { + isExit = true; + break; + } + } + } catch (IOException | NullPointerException e) { + System.out.println("Invalid Menu"); + } + } + handleChoice(memberTypeName); + } + } + + @Override + default void displayMenu(String[] menus){ + System.out.print("Which One?\n|"); + for(String menu : menus){ + System.out.printf(" %s |",menu); + } + System.out.println(); + } + + default String[] getEnumValues(){ + CustomList keyList = new CustomList<>(); + for(MembershipType membershipType : MembershipType.values()){ + keyList.add(membershipType.name()); + } + return keyList.toArray(String[].class); + } + + default MembershipType getMembershipType(String membershipNames){ + String[] values = getEnumValues(); + for (String membershipName : values) { + try{ + if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { + return MembershipType.valueOf(membershipName); + } + }catch (NoSuchElementException e) { + System.out.println(e.getMessage()); + } + } + return null; + } + + +} From 1c581db8c2fdbeef2650d8bb68bc6ed63b17fe84 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 19:35:40 +0900 Subject: [PATCH 46/79] feat: Update MembershipRequirement [New feat: Update MembershipRequirement from user input] --- .../smartstore/membership/Memberships.java | 2 +- .../membership/SetMembershipRequirement.java | 2 +- .../UpdateMembershipRequirement.java | 29 +++++++++++++------ 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 4a9bd2d4..3591fc85 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -56,7 +56,7 @@ private int getInputFromConsole(String msg){ break; } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Range of Input try 1 ~ Integer.Max"); + System.out.println("Invalid Range of Input try 0 ~ Integer.Max"); } } return value; diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/membership/SetMembershipRequirement.java index 0299ff72..c377e3da 100644 --- a/src/com/smartstore/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/membership/SetMembershipRequirement.java @@ -35,7 +35,7 @@ public void handleChoice(String membershipName) { returnToPrevMenu(); } - private void returnToPrevMenu(){ + public void returnToPrevMenu(){ MainMenuFunction mainMenuFunction = Function.of(1, MainMenuFunction.class); mainMenuFunction.run(); } diff --git a/src/com/smartstore/membership/UpdateMembershipRequirement.java b/src/com/smartstore/membership/UpdateMembershipRequirement.java index a26f6e3b..a0234ef1 100644 --- a/src/com/smartstore/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/membership/UpdateMembershipRequirement.java @@ -2,18 +2,29 @@ import com.smartstore.menu.Menu; -public class UpdateMembershipRequirement implements Menu { +public class UpdateMembershipRequirement extends SetMembershipRequirement implements Menu { - public void run() { - //Do something - } - - public UpdateMembershipRequirement() { - - } @Override - public void handleChoice(String menuNumber) { + public void handleChoice(String membershipName) { + MembershipType membershipType = getMembershipType(membershipName); + //find requirement using type in enum_map + MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); + //if not found in enum_map + if(requirement == null ){ + System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); + } else{ + updateMembershipRequirement(membershipType, requirement); + } + //Back to prev Menu + super.returnToPrevMenu(); + } + private void updateMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement){ + System.out.printf("Current %s Info\n", membershipType.name()); + System.out.printf("Min Usage time : %d\n",requirement.getMinUsageTime()); + System.out.printf("Min Payment Amount: %d\n\n",requirement.getMinPaymentAmount()); + Memberships.getInstance().setMembershipRequirement(membershipType); + System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); } } From 7fa307f549e4a0d92649f21e4b2891d5f781c2b3 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 21:06:34 +0900 Subject: [PATCH 47/79] feat: View MembershipRequirement [New feat: View MembershipRequirement from user input, Clean up Code] --- src/com/smartstore/customer/Customer.java | 6 ++-- .../DeleteMembershipRequirement.java | 19 ------------- .../membership/MembershipMenuController.java | 14 ++++++++++ .../membership/SetMembershipRequirement.java | 17 ----------- .../UpdateMembershipRequirement.java | 8 ++---- .../membership/ViewMembershipRequirement.java | 28 +++++++++++-------- 6 files changed, 36 insertions(+), 56 deletions(-) delete mode 100644 src/com/smartstore/membership/DeleteMembershipRequirement.java diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index bddc68d2..9b21f865 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -1,16 +1,16 @@ package com.smartstore.customer; -import com.smartstore.membership.Membership; +import com.smartstore.membership.MembershipType; public class Customer { private int customerId; private String customerName; - private Membership membership; + private MembershipType membership; //TODO: 2023-04-30 constructor to builder - Customer(int customerId, String customerName, Membership membership){ + Customer(int customerId, String customerName, MembershipType membership){ this.customerId = customerId; this.customerName = customerName; this.membership = membership; diff --git a/src/com/smartstore/membership/DeleteMembershipRequirement.java b/src/com/smartstore/membership/DeleteMembershipRequirement.java deleted file mode 100644 index 61aa392d..00000000 --- a/src/com/smartstore/membership/DeleteMembershipRequirement.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.smartstore.membership; - -import com.smartstore.menu.Menu; - -public class DeleteMembershipRequirement implements Menu { - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - //Do something - } - - public DeleteMembershipRequirement() { - - } -} diff --git a/src/com/smartstore/membership/MembershipMenuController.java b/src/com/smartstore/membership/MembershipMenuController.java index 57a99e3d..b54fb866 100644 --- a/src/com/smartstore/membership/MembershipMenuController.java +++ b/src/com/smartstore/membership/MembershipMenuController.java @@ -1,7 +1,9 @@ package com.smartstore.membership; import com.smartstore.menu.Menu; +import com.smartstore.menu.mainmenu.MainMenuFunction; import com.smartstore.util.CustomList; +import com.smartstore.util.Function; import java.io.IOException; import java.util.NoSuchElementException; @@ -61,5 +63,17 @@ default MembershipType getMembershipType(String membershipNames){ return null; } + default void returnToPrevMenu(){ + MainMenuFunction mainMenuFunction = Function.of(1, MainMenuFunction.class); + mainMenuFunction.run(); + } + + default void run(){ + //get values from enum by string array + String[] values = getEnumValues(); + displayMenu(values); + + runMenuSelectionLoop(values); + } } diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/membership/SetMembershipRequirement.java index c377e3da..448da68d 100644 --- a/src/com/smartstore/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/membership/SetMembershipRequirement.java @@ -1,19 +1,6 @@ package com.smartstore.membership; -import com.smartstore.menu.mainmenu.MainMenuFunction; -import com.smartstore.util.Function; - public class SetMembershipRequirement implements MembershipMenuController { - @Override - public void run() { - //get values from enum by string array - String[] values = getEnumValues(); - displayMenu(values); - - runMenuSelectionLoop(values); - - } - private void setMembershipRequirement(MembershipType membershipType) { Memberships.getInstance().setMembershipRequirement(membershipType); System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); @@ -35,8 +22,4 @@ public void handleChoice(String membershipName) { returnToPrevMenu(); } - public void returnToPrevMenu(){ - MainMenuFunction mainMenuFunction = Function.of(1, MainMenuFunction.class); - mainMenuFunction.run(); - } } diff --git a/src/com/smartstore/membership/UpdateMembershipRequirement.java b/src/com/smartstore/membership/UpdateMembershipRequirement.java index a0234ef1..b0c95eb9 100644 --- a/src/com/smartstore/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/membership/UpdateMembershipRequirement.java @@ -1,10 +1,6 @@ package com.smartstore.membership; -import com.smartstore.menu.Menu; - -public class UpdateMembershipRequirement extends SetMembershipRequirement implements Menu { - - +public class UpdateMembershipRequirement implements MembershipMenuController { @Override public void handleChoice(String membershipName) { MembershipType membershipType = getMembershipType(membershipName); @@ -17,7 +13,7 @@ public void handleChoice(String membershipName) { updateMembershipRequirement(membershipType, requirement); } //Back to prev Menu - super.returnToPrevMenu(); + returnToPrevMenu(); } private void updateMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement){ diff --git a/src/com/smartstore/membership/ViewMembershipRequirement.java b/src/com/smartstore/membership/ViewMembershipRequirement.java index 12be83c2..2da6de5e 100644 --- a/src/com/smartstore/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/membership/ViewMembershipRequirement.java @@ -1,18 +1,24 @@ package com.smartstore.membership; -import com.smartstore.menu.Menu; - -public class ViewMembershipRequirement implements Menu { - public void run() { - //Do something - } - - public ViewMembershipRequirement() { - +public class ViewMembershipRequirement implements MembershipMenuController { + public void viewMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement) { + System.out.printf("%s Info\n", membershipType.name()); + System.out.printf("Min Usage time : %d\n",requirement.getMinUsageTime()); + System.out.printf("Min Payment Amount: %d\n\n",requirement.getMinPaymentAmount()); } @Override - public void handleChoice(String menuNumber) { - + public void handleChoice(String membershipName) { + MembershipType membershipType = getMembershipType(membershipName); + //find requirement using type in enum_map + MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); + //if not found in enum_map + if(requirement == null ){ + System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); + } else{ + viewMembershipRequirement(membershipType, requirement); + } + //Back to prev Menu + returnToPrevMenu(); } } From e745485e29e8b78da13eb8351bbf1bcfbec5b7e1 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 22:02:45 +0900 Subject: [PATCH 48/79] refactor: Change package structure [Added : Change package structure] --- .../{util => function}/Function.java | 2 +- .../MenuController.java} | 6 ++++-- .../{util => function}/MenuFunction.java | 2 +- .../membership/MembershipFunction.java | 12 ++++++------ .../membership/MembershipMenuController.java | 11 ++++++----- .../membership/SetMembershipRequirement.java | 6 +++++- .../UpdateMembershipRequirement.java | 6 +++++- .../membership/ViewMembershipRequirement.java | 6 +++++- .../smartstore/{ => function}/menu/Back.java | 8 ++++---- .../menu}/MainMenuFunction.java | 18 +++++++++--------- .../menu/MenuManager.java} | 19 +++++++++---------- .../mainmenu => function/menu}/Quit.java | 7 +++---- .../{ => function}/menu/Screen.java | 2 +- .../smartstore/membership/Memberships.java | 3 --- .../menu/{customer => }/CustomerMenu.java | 6 +++--- .../menu/{membership => }/MembershipMenu.java | 10 +++++----- .../menu/{report => }/ReportMenu.java | 6 +++--- 17 files changed, 70 insertions(+), 60 deletions(-) rename src/com/smartstore/{util => function}/Function.java (92%) rename src/com/smartstore/{menu/Menu.java => function/MenuController.java} (92%) rename src/com/smartstore/{util => function}/MenuFunction.java (75%) rename src/com/smartstore/{ => function}/membership/MembershipFunction.java (70%) rename src/com/smartstore/{ => function}/membership/MembershipMenuController.java (88%) rename src/com/smartstore/{ => function}/membership/SetMembershipRequirement.java (82%) rename src/com/smartstore/{ => function}/membership/UpdateMembershipRequirement.java (86%) rename src/com/smartstore/{ => function}/membership/ViewMembershipRequirement.java (84%) rename src/com/smartstore/{ => function}/menu/Back.java (67%) rename src/com/smartstore/{menu/mainmenu => function/menu}/MainMenuFunction.java (57%) rename src/com/smartstore/{menu/mainmenu/MainMenu.java => function/menu/MenuManager.java} (60%) rename src/com/smartstore/{menu/mainmenu => function/menu}/Quit.java (67%) rename src/com/smartstore/{ => function}/menu/Screen.java (97%) rename src/com/smartstore/menu/{customer => }/CustomerMenu.java (71%) rename src/com/smartstore/menu/{membership => }/MembershipMenu.java (63%) rename src/com/smartstore/menu/{report => }/ReportMenu.java (71%) diff --git a/src/com/smartstore/util/Function.java b/src/com/smartstore/function/Function.java similarity index 92% rename from src/com/smartstore/util/Function.java rename to src/com/smartstore/function/Function.java index dfa68f02..8069a785 100644 --- a/src/com/smartstore/util/Function.java +++ b/src/com/smartstore/function/Function.java @@ -1,4 +1,4 @@ -package com.smartstore.util; +package com.smartstore.function; import java.util.Arrays; diff --git a/src/com/smartstore/menu/Menu.java b/src/com/smartstore/function/MenuController.java similarity index 92% rename from src/com/smartstore/menu/Menu.java rename to src/com/smartstore/function/MenuController.java index 76b0ab83..57926e9f 100644 --- a/src/com/smartstore/menu/Menu.java +++ b/src/com/smartstore/function/MenuController.java @@ -1,10 +1,12 @@ -package com.smartstore.menu; +package com.smartstore.function; + +import com.smartstore.function.menu.Screen; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -public interface Menu { +public interface MenuController { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); diff --git a/src/com/smartstore/util/MenuFunction.java b/src/com/smartstore/function/MenuFunction.java similarity index 75% rename from src/com/smartstore/util/MenuFunction.java rename to src/com/smartstore/function/MenuFunction.java index dc3a8628..8e89d640 100644 --- a/src/com/smartstore/util/MenuFunction.java +++ b/src/com/smartstore/function/MenuFunction.java @@ -1,4 +1,4 @@ -package com.smartstore.util; +package com.smartstore.function; public interface MenuFunction { boolean isMatchedMenuNumber(int menuNumber); diff --git a/src/com/smartstore/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java similarity index 70% rename from src/com/smartstore/membership/MembershipFunction.java rename to src/com/smartstore/function/membership/MembershipFunction.java index 2adbcd38..a9797338 100644 --- a/src/com/smartstore/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -1,8 +1,8 @@ -package com.smartstore.membership; +package com.smartstore.function.membership; -import com.smartstore.menu.Back; -import com.smartstore.menu.Menu; -import com.smartstore.util.Function; +import com.smartstore.function.menu.Back; +import com.smartstore.function.MenuController; +import com.smartstore.function.Function; public enum MembershipFunction implements Function { SET(1, new SetMembershipRequirement()), @@ -12,8 +12,8 @@ public enum MembershipFunction implements Function { private final int menuNumber; - private final Menu menuController; - MembershipFunction(int menuNumber, Menu menuController) { + private final MenuController menuController; + MembershipFunction(int menuNumber, MenuController menuController) { this.menuNumber = menuNumber; this.menuController = menuController; } diff --git a/src/com/smartstore/membership/MembershipMenuController.java b/src/com/smartstore/function/membership/MembershipMenuController.java similarity index 88% rename from src/com/smartstore/membership/MembershipMenuController.java rename to src/com/smartstore/function/membership/MembershipMenuController.java index b54fb866..6024f44d 100644 --- a/src/com/smartstore/membership/MembershipMenuController.java +++ b/src/com/smartstore/function/membership/MembershipMenuController.java @@ -1,14 +1,15 @@ -package com.smartstore.membership; +package com.smartstore.function.membership; -import com.smartstore.menu.Menu; -import com.smartstore.menu.mainmenu.MainMenuFunction; +import com.smartstore.function.MenuController; +import com.smartstore.membership.MembershipType; +import com.smartstore.function.menu.MainMenuFunction; import com.smartstore.util.CustomList; -import com.smartstore.util.Function; +import com.smartstore.function.Function; import java.io.IOException; import java.util.NoSuchElementException; -public interface MembershipMenuController extends Menu { +public interface MembershipMenuController extends MenuController { @Override default void runMenuSelectionLoop(String[] memberships) { String memberTypeName=""; diff --git a/src/com/smartstore/membership/SetMembershipRequirement.java b/src/com/smartstore/function/membership/SetMembershipRequirement.java similarity index 82% rename from src/com/smartstore/membership/SetMembershipRequirement.java rename to src/com/smartstore/function/membership/SetMembershipRequirement.java index 448da68d..4d3875ae 100644 --- a/src/com/smartstore/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/SetMembershipRequirement.java @@ -1,4 +1,8 @@ -package com.smartstore.membership; +package com.smartstore.function.membership; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; public class SetMembershipRequirement implements MembershipMenuController { private void setMembershipRequirement(MembershipType membershipType) { diff --git a/src/com/smartstore/membership/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java similarity index 86% rename from src/com/smartstore/membership/UpdateMembershipRequirement.java rename to src/com/smartstore/function/membership/UpdateMembershipRequirement.java index b0c95eb9..623031b4 100644 --- a/src/com/smartstore/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java @@ -1,4 +1,8 @@ -package com.smartstore.membership; +package com.smartstore.function.membership; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; public class UpdateMembershipRequirement implements MembershipMenuController { @Override diff --git a/src/com/smartstore/membership/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/ViewMembershipRequirement.java similarity index 84% rename from src/com/smartstore/membership/ViewMembershipRequirement.java rename to src/com/smartstore/function/membership/ViewMembershipRequirement.java index 2da6de5e..60f3a529 100644 --- a/src/com/smartstore/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/ViewMembershipRequirement.java @@ -1,4 +1,8 @@ -package com.smartstore.membership; +package com.smartstore.function.membership; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; public class ViewMembershipRequirement implements MembershipMenuController { public void viewMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement) { diff --git a/src/com/smartstore/menu/Back.java b/src/com/smartstore/function/menu/Back.java similarity index 67% rename from src/com/smartstore/menu/Back.java rename to src/com/smartstore/function/menu/Back.java index 738fd4eb..2935bceb 100644 --- a/src/com/smartstore/menu/Back.java +++ b/src/com/smartstore/function/menu/Back.java @@ -1,9 +1,9 @@ -package com.smartstore.menu; +package com.smartstore.function.menu; -import com.smartstore.menu.mainmenu.MainMenuFunction; -import com.smartstore.util.Function; +import com.smartstore.function.Function; +import com.smartstore.function.MenuController; -public class Back implements Menu { +public class Back implements MenuController { public boolean isExit(){ return true; diff --git a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/menu/MainMenuFunction.java similarity index 57% rename from src/com/smartstore/menu/mainmenu/MainMenuFunction.java rename to src/com/smartstore/function/menu/MainMenuFunction.java index 6a68b8b3..852abbea 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/menu/MainMenuFunction.java @@ -1,22 +1,22 @@ -package com.smartstore.menu.mainmenu; +package com.smartstore.function.menu; -import com.smartstore.menu.Menu; -import com.smartstore.menu.customer.CustomerMenu; -import com.smartstore.menu.membership.MembershipMenu; -import com.smartstore.menu.report.ReportMenu; -import com.smartstore.util.Function; +import com.smartstore.function.MenuController; +import com.smartstore.menu.CustomerMenu; +import com.smartstore.menu.MembershipMenu; +import com.smartstore.menu.ReportMenu; +import com.smartstore.function.Function; public enum MainMenuFunction implements Function { - MAIN_MENU(0, MainMenu.getInstance()), + MAIN_MENU(0, MenuManager.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), REPORT_MANAGEMENT(3, ReportMenu.getInstance()), QUIT(4, new Quit()); private final int menuNumber; - private final Menu menuController; + private final MenuController menuController; - MainMenuFunction(int menuNumber, Menu menuController) { + MainMenuFunction(int menuNumber, MenuController menuController) { this.menuNumber = menuNumber; this.menuController = menuController; } diff --git a/src/com/smartstore/menu/mainmenu/MainMenu.java b/src/com/smartstore/function/menu/MenuManager.java similarity index 60% rename from src/com/smartstore/menu/mainmenu/MainMenu.java rename to src/com/smartstore/function/menu/MenuManager.java index 7aec7b03..28dbf5c8 100644 --- a/src/com/smartstore/menu/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/menu/MenuManager.java @@ -1,12 +1,11 @@ -package com.smartstore.menu.mainmenu; +package com.smartstore.function.menu; -import com.smartstore.menu.Menu; -import com.smartstore.menu.Screen; -import com.smartstore.util.Function; +import com.smartstore.function.Function; +import com.smartstore.function.MenuController; import java.util.Arrays; -public class MainMenu implements Menu { +public class MenuManager implements MenuController { @Override public void handleChoice(String menuNumber) { //call Menu with menuNumber @@ -18,9 +17,9 @@ public void run() { //Do nothing } - public static MainMenu getInstance() { + public static MenuManager getInstance() { if(instance == null){ - instance = new MainMenu(); + instance = new MenuManager(); } return instance; } @@ -31,12 +30,12 @@ private void printSlashScreen(){ public void run(int menuNumber){ //print splash screen printSlashScreen(); - Menu.super.run(menuNumber); + MenuController.super.run(menuNumber); } - private static MainMenu instance; + private static MenuManager instance; - private MainMenu(){ + private MenuManager(){ } } diff --git a/src/com/smartstore/menu/mainmenu/Quit.java b/src/com/smartstore/function/menu/Quit.java similarity index 67% rename from src/com/smartstore/menu/mainmenu/Quit.java rename to src/com/smartstore/function/menu/Quit.java index 9b61357a..449df51e 100644 --- a/src/com/smartstore/menu/mainmenu/Quit.java +++ b/src/com/smartstore/function/menu/Quit.java @@ -1,11 +1,10 @@ -package com.smartstore.menu.mainmenu; +package com.smartstore.function.menu; -import com.smartstore.menu.Menu; -import com.smartstore.menu.Screen; +import com.smartstore.function.MenuController; import java.util.Arrays; -public class Quit implements Menu { +public class Quit implements MenuController { @Override public void handleChoice(String menuNumber) { diff --git a/src/com/smartstore/menu/Screen.java b/src/com/smartstore/function/menu/Screen.java similarity index 97% rename from src/com/smartstore/menu/Screen.java rename to src/com/smartstore/function/menu/Screen.java index cc1d6437..a25ea20d 100644 --- a/src/com/smartstore/menu/Screen.java +++ b/src/com/smartstore/function/menu/Screen.java @@ -1,4 +1,4 @@ -package com.smartstore.menu; +package com.smartstore.function.menu; import java.util.Arrays; diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 3591fc85..ef1aacde 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -18,9 +18,6 @@ public static Memberships getInstance(){ return instance; } - public void refresh(){ - - } private Memberships(){ } diff --git a/src/com/smartstore/menu/customer/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java similarity index 71% rename from src/com/smartstore/menu/customer/CustomerMenu.java rename to src/com/smartstore/menu/CustomerMenu.java index 6d4fd198..b0ac0b9f 100644 --- a/src/com/smartstore/menu/customer/CustomerMenu.java +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -1,8 +1,8 @@ -package com.smartstore.menu.customer; +package com.smartstore.menu; -import com.smartstore.menu.Menu; +import com.smartstore.function.MenuController; -public class CustomerMenu implements Menu { +public class CustomerMenu implements MenuController { @Override public void handleChoice(String menuNumber) { diff --git a/src/com/smartstore/menu/membership/MembershipMenu.java b/src/com/smartstore/menu/MembershipMenu.java similarity index 63% rename from src/com/smartstore/menu/membership/MembershipMenu.java rename to src/com/smartstore/menu/MembershipMenu.java index bf126b8e..1c4c5590 100644 --- a/src/com/smartstore/menu/membership/MembershipMenu.java +++ b/src/com/smartstore/menu/MembershipMenu.java @@ -1,10 +1,10 @@ -package com.smartstore.menu.membership; +package com.smartstore.menu; -import com.smartstore.membership.MembershipFunction; -import com.smartstore.menu.Menu; -import com.smartstore.util.Function; +import com.smartstore.function.membership.MembershipFunction; +import com.smartstore.function.MenuController; +import com.smartstore.function.Function; -public class MembershipMenu implements Menu { +public class MembershipMenu implements MenuController { @Override public void handleChoice(String menuNumber) { Function.of(Integer.parseInt(menuNumber), MembershipFunction.class).run(); diff --git a/src/com/smartstore/menu/report/ReportMenu.java b/src/com/smartstore/menu/ReportMenu.java similarity index 71% rename from src/com/smartstore/menu/report/ReportMenu.java rename to src/com/smartstore/menu/ReportMenu.java index b85fe3a2..1c9a4453 100644 --- a/src/com/smartstore/menu/report/ReportMenu.java +++ b/src/com/smartstore/menu/ReportMenu.java @@ -1,8 +1,8 @@ -package com.smartstore.menu.report; +package com.smartstore.menu; -import com.smartstore.menu.Menu; +import com.smartstore.function.MenuController; -public class ReportMenu implements Menu { +public class ReportMenu implements MenuController { @Override public void handleChoice(String menuNumber) { From df47525c9a2eeb836d40256cd9eda5929e5a1814 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 22:09:08 +0900 Subject: [PATCH 49/79] refactor: Rename [Renamed : Report* -> Summary*] --- src/com/smartstore/function/menu/MainMenuFunction.java | 4 ++-- .../smartstore/menu/{ReportMenu.java => SummaryMenu.java} | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) rename src/com/smartstore/menu/{ReportMenu.java => SummaryMenu.java} (59%) diff --git a/src/com/smartstore/function/menu/MainMenuFunction.java b/src/com/smartstore/function/menu/MainMenuFunction.java index 852abbea..abc5f277 100644 --- a/src/com/smartstore/function/menu/MainMenuFunction.java +++ b/src/com/smartstore/function/menu/MainMenuFunction.java @@ -3,14 +3,14 @@ import com.smartstore.function.MenuController; import com.smartstore.menu.CustomerMenu; import com.smartstore.menu.MembershipMenu; -import com.smartstore.menu.ReportMenu; +import com.smartstore.menu.SummaryMenu; import com.smartstore.function.Function; public enum MainMenuFunction implements Function { MAIN_MENU(0, MenuManager.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), - REPORT_MANAGEMENT(3, ReportMenu.getInstance()), + REPORT_MANAGEMENT(3, SummaryMenu.getInstance()), QUIT(4, new Quit()); private final int menuNumber; diff --git a/src/com/smartstore/menu/ReportMenu.java b/src/com/smartstore/menu/SummaryMenu.java similarity index 59% rename from src/com/smartstore/menu/ReportMenu.java rename to src/com/smartstore/menu/SummaryMenu.java index 1c9a4453..1f8e9ab1 100644 --- a/src/com/smartstore/menu/ReportMenu.java +++ b/src/com/smartstore/menu/SummaryMenu.java @@ -2,7 +2,7 @@ import com.smartstore.function.MenuController; -public class ReportMenu implements MenuController { +public class SummaryMenu implements MenuController { @Override public void handleChoice(String menuNumber) { @@ -13,13 +13,13 @@ public void run() { } - public static ReportMenu getInstance() { + public static SummaryMenu getInstance() { if(instance == null){ - instance = new ReportMenu(); + instance = new SummaryMenu(); } return instance; } - private static ReportMenu instance; + private static SummaryMenu instance; } From 1f9a6b5b0ac7928b74f5b672397eda330516c8ec Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 23:42:16 +0900 Subject: [PATCH 50/79] refactor: Clean up code [modified : Clean up Duplicated Code] --- src/com/smartstore/SmartStore.java | 6 ++-- .../smartstore/function/MenuController.java | 6 ++++ .../membership/MembershipMenuController.java | 30 ++++++++++++++----- .../membership/SetMembershipRequirement.java | 21 ++++--------- .../UpdateMembershipRequirement.java | 23 +++++--------- .../membership/ViewMembershipRequirement.java | 17 +++-------- 6 files changed, 47 insertions(+), 56 deletions(-) diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index 9eb3c9d2..b5571821 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,11 +1,11 @@ package com.smartstore; -import com.smartstore.menu.mainmenu.MainMenuFunction; +import com.smartstore.function.Function; +import com.smartstore.function.menu.MainMenuFunction; public class SmartStore { public static void run(){ //Load Initial Screen - MainMenuFunction mainMenuFunction = MainMenuFunction.of(0); - mainMenuFunction.run(); + Function.of(0, MainMenuFunction.class).run(); } } diff --git a/src/com/smartstore/function/MenuController.java b/src/com/smartstore/function/MenuController.java index 57926e9f..8bcfd5ae 100644 --- a/src/com/smartstore/function/MenuController.java +++ b/src/com/smartstore/function/MenuController.java @@ -1,5 +1,6 @@ package com.smartstore.function; +import com.smartstore.function.menu.MainMenuFunction; import com.smartstore.function.menu.Screen; import java.io.BufferedReader; @@ -9,6 +10,7 @@ public interface MenuController { StringBuilder sb = new StringBuilder(); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + int currentMenuNumber = 0; default void displayMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ @@ -45,4 +47,8 @@ default void run(int menuNumber) { runMenuSelectionLoop(Screen.of(menuNumber).getMenus()); } + default void returnToPrevMenu(int menuNumber){ + Function.of(menuNumber, MainMenuFunction.class).run(); + } + } diff --git a/src/com/smartstore/function/membership/MembershipMenuController.java b/src/com/smartstore/function/membership/MembershipMenuController.java index 6024f44d..354a6ce0 100644 --- a/src/com/smartstore/function/membership/MembershipMenuController.java +++ b/src/com/smartstore/function/membership/MembershipMenuController.java @@ -1,10 +1,10 @@ package com.smartstore.function.membership; import com.smartstore.function.MenuController; +import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import com.smartstore.function.menu.MainMenuFunction; +import com.smartstore.membership.Memberships; import com.smartstore.util.CustomList; -import com.smartstore.function.Function; import java.io.IOException; import java.util.NoSuchElementException; @@ -19,6 +19,10 @@ default void runMenuSelectionLoop(String[] memberships) { try { System.out.print("Input : "); memberTypeName = br.readLine(); + if("end".equals(memberTypeName)){ + isExit = true; + break; + } for (String membershipName : memberships) { if (MembershipType.valueOf(membershipName).isMatchedName(memberTypeName)) { isExit = true; @@ -39,7 +43,7 @@ default void displayMenu(String[] menus){ for(String menu : menus){ System.out.printf(" %s |",menu); } - System.out.println(); + System.out.println(" type 'end' to exit"); } default String[] getEnumValues(){ @@ -64,11 +68,6 @@ default MembershipType getMembershipType(String membershipNames){ return null; } - default void returnToPrevMenu(){ - MainMenuFunction mainMenuFunction = Function.of(1, MainMenuFunction.class); - mainMenuFunction.run(); - } - default void run(){ //get values from enum by string array String[] values = getEnumValues(); @@ -77,4 +76,19 @@ default void run(){ runMenuSelectionLoop(values); } + @Override + default void handleChoice(String membershipName){ + if(!"end".equalsIgnoreCase(membershipName)){ + MembershipType membershipType = getMembershipType(membershipName); + MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); + + //run each function's method + run(membershipType, requirement); + } + //Back to prev Menu + returnToPrevMenu(1); + } + + void run(MembershipType membershipType, MembershipRequirement requirement); + } diff --git a/src/com/smartstore/function/membership/SetMembershipRequirement.java b/src/com/smartstore/function/membership/SetMembershipRequirement.java index 4d3875ae..35ba66af 100644 --- a/src/com/smartstore/function/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/SetMembershipRequirement.java @@ -5,25 +5,14 @@ import com.smartstore.membership.Memberships; public class SetMembershipRequirement implements MembershipMenuController { - private void setMembershipRequirement(MembershipType membershipType) { - Memberships.getInstance().setMembershipRequirement(membershipType); - System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); - } - @Override - public void handleChoice(String membershipName) { - MembershipType membershipType = getMembershipType(membershipName); - //find requirement using type in enum_map - MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); - //if not found in enum_map - if(requirement == null ){ - setMembershipRequirement(membershipType); - } else{ + public void run(MembershipType membershipType, MembershipRequirement requirement) { + if(requirement == null){ + Memberships.getInstance().setMembershipRequirement(membershipType); + System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); + }else { System.out.printf("Membership '%s' Already Defined\n", membershipType.name()); - } - //Back to prev Menu - returnToPrevMenu(); } } diff --git a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java index 623031b4..2e397811 100644 --- a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java @@ -6,25 +6,16 @@ public class UpdateMembershipRequirement implements MembershipMenuController { @Override - public void handleChoice(String membershipName) { - MembershipType membershipType = getMembershipType(membershipName); - //find requirement using type in enum_map - MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); - //if not found in enum_map + public void run(MembershipType membershipType, MembershipRequirement requirement){ if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); } else{ - updateMembershipRequirement(membershipType, requirement); + System.out.printf("Current %s Info\n", membershipType.name()); + System.out.printf("Min Usage time : %d\n", requirement.getMinUsageTime()); + System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); + //set will rewrite value if already exist + Memberships.getInstance().setMembershipRequirement(membershipType); + System.out.printf("Set %s Successfully\n\n\n", membershipType.name()); } - //Back to prev Menu - returnToPrevMenu(); - } - - private void updateMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement){ - System.out.printf("Current %s Info\n", membershipType.name()); - System.out.printf("Min Usage time : %d\n",requirement.getMinUsageTime()); - System.out.printf("Min Payment Amount: %d\n\n",requirement.getMinPaymentAmount()); - Memberships.getInstance().setMembershipRequirement(membershipType); - System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); } } diff --git a/src/com/smartstore/function/membership/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/ViewMembershipRequirement.java index 60f3a529..a7c0afdc 100644 --- a/src/com/smartstore/function/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/ViewMembershipRequirement.java @@ -2,27 +2,18 @@ import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; public class ViewMembershipRequirement implements MembershipMenuController { - public void viewMembershipRequirement(MembershipType membershipType, MembershipRequirement requirement) { - System.out.printf("%s Info\n", membershipType.name()); - System.out.printf("Min Usage time : %d\n",requirement.getMinUsageTime()); - System.out.printf("Min Payment Amount: %d\n\n",requirement.getMinPaymentAmount()); - } - @Override - public void handleChoice(String membershipName) { - MembershipType membershipType = getMembershipType(membershipName); + public void run(MembershipType membershipType, MembershipRequirement requirement) { //find requirement using type in enum_map - MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); //if not found in enum_map if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); } else{ - viewMembershipRequirement(membershipType, requirement); + System.out.printf("%s Info\n", membershipType.name()); + System.out.printf("Min Usage time : %d\n",requirement.getMinUsageTime()); + System.out.printf("Min Payment Amount: %d\n\n",requirement.getMinPaymentAmount()); } - //Back to prev Menu - returnToPrevMenu(); } } From 21364973ef5a9dde877f6026859b7275460463dc Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 9 May 2023 23:44:13 +0900 Subject: [PATCH 51/79] refactor: Rename [Renamed : Grade -> Membership] --- src/com/smartstore/function/menu/Screen.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/smartstore/function/menu/Screen.java b/src/com/smartstore/function/menu/Screen.java index a25ea20d..62d4aaf8 100644 --- a/src/com/smartstore/function/menu/Screen.java +++ b/src/com/smartstore/function/menu/Screen.java @@ -7,7 +7,7 @@ public enum Screen { SPLASH(new String[]{"this is splash screen"}, -1), MAIN_MENU(new String[]{ - "Grade Management", + "Membership Management", "Customer Management", "Report", "Quit"}, 0), From 5d9667edbb11306cf670d0cfcebcb28b3aecf8aa Mon Sep 17 00:00:00 2001 From: jy-b Date: Wed, 10 May 2023 01:41:27 +0900 Subject: [PATCH 52/79] refactor: Clean Up code & Add Classes for Customer function [ Added : Classes for Customer Deleted : Unnecessary interface ] --- src/com/smartstore/function/Function.java | 20 +++- src/com/smartstore/function/MenuFunction.java | 8 -- .../function/customer/AddCustomer.java | 11 +++ .../function/customer/CustomerFunction.java | 32 +++++++ .../customer/CustomerMenuController.java | 94 +++++++++++++++++++ .../function/customer/DeleteCustomer.java | 11 +++ .../function/customer/UpdateCustomer.java | 11 +++ .../function/customer/ViewCustomer.java | 11 +++ .../membership/MembershipFunction.java | 14 +-- .../membership/MembershipMenuController.java | 2 + .../membership/ViewMembershipRequirement.java | 1 - .../function/menu/MainMenuFunction.java | 11 ++- 12 files changed, 205 insertions(+), 21 deletions(-) delete mode 100644 src/com/smartstore/function/MenuFunction.java create mode 100644 src/com/smartstore/function/customer/AddCustomer.java create mode 100644 src/com/smartstore/function/customer/CustomerFunction.java create mode 100644 src/com/smartstore/function/customer/CustomerMenuController.java create mode 100644 src/com/smartstore/function/customer/DeleteCustomer.java create mode 100644 src/com/smartstore/function/customer/UpdateCustomer.java create mode 100644 src/com/smartstore/function/customer/ViewCustomer.java diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index 8069a785..e2d68066 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -1,8 +1,10 @@ package com.smartstore.function; +import com.smartstore.function.menu.Back; + import java.util.Arrays; -public interface Function extends MenuFunction { +public interface Function { static & Function> T of(int menuNumber, Class enumClass){ return Arrays.stream(enumClass.getEnumConstants()) @@ -10,4 +12,20 @@ static & Function> T of(int menuNumber, Class enumClass){ .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Function")); } + int getMenuNumber(); + + MenuController getMenuController(); + + default boolean isMatchedMenuNumber(int menuNumber){ + return getMenuNumber() == menuNumber; + } + + default void run() { + MenuController menuController = getMenuController(); + if(menuController.getClass().equals(Back.class)){ + menuController.run(0); + }else{ + menuController.run(); + } + } } diff --git a/src/com/smartstore/function/MenuFunction.java b/src/com/smartstore/function/MenuFunction.java deleted file mode 100644 index 8e89d640..00000000 --- a/src/com/smartstore/function/MenuFunction.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.smartstore.function; - -public interface MenuFunction { - boolean isMatchedMenuNumber(int menuNumber); - - void run(); - -} diff --git a/src/com/smartstore/function/customer/AddCustomer.java b/src/com/smartstore/function/customer/AddCustomer.java new file mode 100644 index 00000000..2d22e295 --- /dev/null +++ b/src/com/smartstore/function/customer/AddCustomer.java @@ -0,0 +1,11 @@ +package com.smartstore.function.customer; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; + +public class AddCustomer implements CustomerMenuController { + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + + } +} diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java new file mode 100644 index 00000000..ca3785ef --- /dev/null +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -0,0 +1,32 @@ +package com.smartstore.function.customer; + +import com.smartstore.function.Function; +import com.smartstore.function.MenuController; +import com.smartstore.function.menu.Back; + +public enum CustomerFunction implements Function { + ADD(1, new AddCustomer()), + VIEW(2, new ViewCustomer()), + UPDATE(3,new UpdateCustomer()), + DELETE(3,new DeleteCustomer()), + BACK(5, new Back()); + + + private final int menuNumber; + private final MenuController menuController; + CustomerFunction(int menuNumber, MenuController menuController) { + this.menuNumber = menuNumber; + this.menuController = menuController; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public MenuController getMenuController() { + return this.menuController; + } + +} diff --git a/src/com/smartstore/function/customer/CustomerMenuController.java b/src/com/smartstore/function/customer/CustomerMenuController.java new file mode 100644 index 00000000..50873720 --- /dev/null +++ b/src/com/smartstore/function/customer/CustomerMenuController.java @@ -0,0 +1,94 @@ +package com.smartstore.function.customer; + +import com.smartstore.function.MenuController; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; +import com.smartstore.util.CustomList; + +import java.util.NoSuchElementException; + +public interface CustomerMenuController extends MenuController { + @Override + default void runMenuSelectionLoop(String[] memberships) { + //implement for customer function later + /*String memberTypeName=""; + boolean isExit = false; + if(memberships.length > 0) { + while (!isExit) { + try { + System.out.print("Input : "); + memberTypeName = br.readLine(); + if("end".equals(memberTypeName)){ + isExit = true; + break; + } + for (String membershipName : memberships) { + if (MembershipType.valueOf(membershipName).isMatchedName(memberTypeName)) { + isExit = true; + break; + } + } + } catch (IOException | NullPointerException e) { + System.out.println("Invalid Menu"); + } + } + handleChoice(memberTypeName); + }*/ + } + + @Override + default void displayMenu(String[] menus){ + System.out.print("Which One?\n|"); + for(String menu : menus){ + System.out.printf(" %s |",menu); + } + System.out.println(" type 'end' to exit"); + } + + default String[] getEnumValues(){ + CustomList keyList = new CustomList<>(); + for(MembershipType membershipType : MembershipType.values()){ + keyList.add(membershipType.name()); + } + return keyList.toArray(String[].class); + } + + default MembershipType getMembershipType(String membershipNames){ + String[] values = getEnumValues(); + for (String membershipName : values) { + try{ + if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { + return MembershipType.valueOf(membershipName); + } + }catch (NoSuchElementException e) { + System.out.println(e.getMessage()); + } + } + return null; + } + + default void run(){ + //get values from enum by string array + String[] values = getEnumValues(); + displayMenu(values); + + runMenuSelectionLoop(values); + } + + @Override + default void handleChoice(String membershipName){ + if(!"end".equalsIgnoreCase(membershipName)){ + MembershipType membershipType = getMembershipType(membershipName); + MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); + + //run each function's method + run(membershipType, requirement); + } + //Back to prev Menu + returnToPrevMenu(1); + } + + void run(MembershipType membershipType, MembershipRequirement requirement); + +} diff --git a/src/com/smartstore/function/customer/DeleteCustomer.java b/src/com/smartstore/function/customer/DeleteCustomer.java new file mode 100644 index 00000000..a9613484 --- /dev/null +++ b/src/com/smartstore/function/customer/DeleteCustomer.java @@ -0,0 +1,11 @@ +package com.smartstore.function.customer; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; + +public class DeleteCustomer implements CustomerMenuController{ + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + + } +} diff --git a/src/com/smartstore/function/customer/UpdateCustomer.java b/src/com/smartstore/function/customer/UpdateCustomer.java new file mode 100644 index 00000000..1cb242f3 --- /dev/null +++ b/src/com/smartstore/function/customer/UpdateCustomer.java @@ -0,0 +1,11 @@ +package com.smartstore.function.customer; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; + +public class UpdateCustomer implements CustomerMenuController{ + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + + } +} diff --git a/src/com/smartstore/function/customer/ViewCustomer.java b/src/com/smartstore/function/customer/ViewCustomer.java new file mode 100644 index 00000000..852ad40b --- /dev/null +++ b/src/com/smartstore/function/customer/ViewCustomer.java @@ -0,0 +1,11 @@ +package com.smartstore.function.customer; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; + +public class ViewCustomer implements CustomerMenuController{ + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + + } +} diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index a9797338..95fdc758 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -19,17 +19,13 @@ public enum MembershipFunction implements Function { } @Override - public void run() { - System.out.println(menuController.getClass()); - if(menuController.getClass().equals(Back.class)){ - menuController.run(0); - }else{ - menuController.run(); - } + public int getMenuNumber() { + return this.menuNumber; } @Override - public boolean isMatchedMenuNumber(int menuNumber){ - return this.menuNumber == menuNumber; + public MenuController getMenuController() { + return this.menuController; } + } diff --git a/src/com/smartstore/function/membership/MembershipMenuController.java b/src/com/smartstore/function/membership/MembershipMenuController.java index 354a6ce0..3e1225ab 100644 --- a/src/com/smartstore/function/membership/MembershipMenuController.java +++ b/src/com/smartstore/function/membership/MembershipMenuController.java @@ -79,7 +79,9 @@ default void run(){ @Override default void handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ + //get enum_value using string from MembershipType MembershipType membershipType = getMembershipType(membershipName); + //find requirement using type from enum_map MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); //run each function's method diff --git a/src/com/smartstore/function/membership/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/ViewMembershipRequirement.java index a7c0afdc..4befd456 100644 --- a/src/com/smartstore/function/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/ViewMembershipRequirement.java @@ -6,7 +6,6 @@ public class ViewMembershipRequirement implements MembershipMenuController { @Override public void run(MembershipType membershipType, MembershipRequirement requirement) { - //find requirement using type in enum_map //if not found in enum_map if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/function/menu/MainMenuFunction.java b/src/com/smartstore/function/menu/MainMenuFunction.java index abc5f277..c7c1f5df 100644 --- a/src/com/smartstore/function/menu/MainMenuFunction.java +++ b/src/com/smartstore/function/menu/MainMenuFunction.java @@ -21,10 +21,17 @@ public enum MainMenuFunction implements Function { this.menuController = menuController; } - public boolean isMatchedMenuNumber(int menuNumber){ - return this.menuNumber == menuNumber; + @Override + public int getMenuNumber() { + return menuNumber; } + @Override + public MenuController getMenuController() { + return menuController; + } + + @Override public void run() { menuController.run(menuNumber); } From d5a64b913631a8b9655d0d292d0c35af95f2c128 Mon Sep 17 00:00:00 2001 From: jy-b Date: Wed, 10 May 2023 19:03:14 +0900 Subject: [PATCH 53/79] fix: Fix Submenu looping problem [fixed: Fix bug loop problem in Membership function] --- src/com/smartstore/function/Back.java | 32 +++++++ .../function/DisplayMenuByNumber.java | 9 ++ src/com/smartstore/function/Function.java | 12 ++- .../smartstore/function/FunctionHandler.java | 16 ++++ .../{MenuController.java => MenuHandler.java} | 32 +++---- .../function/customer/AddCustomer.java | 17 +++- .../function/customer/CustomerFunction.java | 24 +++--- ...ntroller.java => CustomerMenuHandler.java} | 37 ++++---- .../function/customer/DeleteCustomer.java | 16 +++- .../function/customer/UpdateCustomer.java | 16 +++- .../function/customer/ViewCustomer.java | 16 +++- .../membership/MembershipFunction.java | 22 ++--- ...roller.java => MembershipMenuHandler.java} | 66 +++++++-------- .../membership/SetMembershipRequirement.java | 15 +++- .../membership/SetMinPaymentAmount.java | 30 +++++++ .../function/membership/SetMinUsage.java | 30 +++++++ .../UpdateMembershipRequirement.java | 84 +++++++++++++++++-- .../UpdateMembershipRequirementFunction.java | 30 +++++++ .../membership/ViewMembershipRequirement.java | 14 +++- src/com/smartstore/function/menu/Back.java | 27 ------ .../function/menu/MainMenuFunction.java | 24 +++--- .../smartstore/function/menu/MenuManager.java | 41 --------- src/com/smartstore/function/menu/Quit.java | 23 ----- .../smartstore/membership/Memberships.java | 17 +++- src/com/smartstore/menu/CustomerMenu.java | 15 +--- src/com/smartstore/menu/MainMenu.java | 42 ++++++++++ src/com/smartstore/menu/MembershipMenu.java | 19 +++-- src/com/smartstore/menu/SummaryMenu.java | 13 +-- 28 files changed, 480 insertions(+), 259 deletions(-) create mode 100644 src/com/smartstore/function/Back.java create mode 100644 src/com/smartstore/function/DisplayMenuByNumber.java create mode 100644 src/com/smartstore/function/FunctionHandler.java rename src/com/smartstore/function/{MenuController.java => MenuHandler.java} (56%) rename src/com/smartstore/function/customer/{CustomerMenuController.java => CustomerMenuHandler.java} (74%) rename src/com/smartstore/function/membership/{MembershipMenuController.java => MembershipMenuHandler.java} (65%) create mode 100644 src/com/smartstore/function/membership/SetMinPaymentAmount.java create mode 100644 src/com/smartstore/function/membership/SetMinUsage.java create mode 100644 src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java delete mode 100644 src/com/smartstore/function/menu/Back.java delete mode 100644 src/com/smartstore/function/menu/MenuManager.java delete mode 100644 src/com/smartstore/function/menu/Quit.java create mode 100644 src/com/smartstore/menu/MainMenu.java diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java new file mode 100644 index 00000000..140094d9 --- /dev/null +++ b/src/com/smartstore/function/Back.java @@ -0,0 +1,32 @@ +package com.smartstore.function; + +public class Back implements MenuHandler { + + private static Back instance; + + private Back(){ + + } + + public static Back getInstance() { + if(instance == null){ + return new Back(); + } + return instance; + } + + public boolean isExit(){ + return true; + } + + + @Override + public boolean handleChoice(String menuNumber) { + return false; + } + + @Override + public void run(int menuNumber) { + } + +} diff --git a/src/com/smartstore/function/DisplayMenuByNumber.java b/src/com/smartstore/function/DisplayMenuByNumber.java new file mode 100644 index 00000000..b96e54e9 --- /dev/null +++ b/src/com/smartstore/function/DisplayMenuByNumber.java @@ -0,0 +1,9 @@ +package com.smartstore.function; + +public interface DisplayMenuByNumber { + default void displayMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("%d. %s\n",i+1,menus[i]); + } + } +} diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index e2d68066..f861ed0a 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -1,7 +1,5 @@ package com.smartstore.function; -import com.smartstore.function.menu.Back; - import java.util.Arrays; public interface Function { @@ -14,18 +12,18 @@ static & Function> T of(int menuNumber, Class enumClass){ int getMenuNumber(); - MenuController getMenuController(); + MenuHandler getMenuController(); default boolean isMatchedMenuNumber(int menuNumber){ return getMenuNumber() == menuNumber; } default void run() { - MenuController menuController = getMenuController(); - if(menuController.getClass().equals(Back.class)){ - menuController.run(0); + MenuHandler menuHandler = getMenuController(); + if(menuHandler.getClass().equals(Back.class)){ + menuHandler.run(0); }else{ - menuController.run(); + menuHandler.run(); } } } diff --git a/src/com/smartstore/function/FunctionHandler.java b/src/com/smartstore/function/FunctionHandler.java new file mode 100644 index 00000000..9bdc9e04 --- /dev/null +++ b/src/com/smartstore/function/FunctionHandler.java @@ -0,0 +1,16 @@ +package com.smartstore.function; + +import com.smartstore.function.menu.Screen; +import com.smartstore.util.CustomList; + +public interface FunctionHandler > extends MenuHandler{ + + default String[] getEnumValues(Class type){ + CustomList keyList = new CustomList<>(); + for(T enumKey : type.getEnumConstants()){ + keyList.add(enumKey.name()); + } + return keyList.toArray(String[].class); + } + +} diff --git a/src/com/smartstore/function/MenuController.java b/src/com/smartstore/function/MenuHandler.java similarity index 56% rename from src/com/smartstore/function/MenuController.java rename to src/com/smartstore/function/MenuHandler.java index 8bcfd5ae..eb649cf9 100644 --- a/src/com/smartstore/function/MenuController.java +++ b/src/com/smartstore/function/MenuHandler.java @@ -7,18 +7,10 @@ import java.io.IOException; import java.io.InputStreamReader; -public interface MenuController { - StringBuilder sb = new StringBuilder(); +public interface MenuHandler extends DisplayMenuByNumber{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - int currentMenuNumber = 0; - default void displayMenu(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("%d. %s\n",i+1,menus[i]); - } - } - - default void runMenuSelectionLoop(String[] menus){ + default String runMenuSelectionLoop(String[] menus){ int menu = -1; while (true){ try { @@ -34,21 +26,23 @@ default void runMenuSelectionLoop(String[] menus){ System.out.println("Invalid Menu"); } } - handleChoice(String.valueOf(menu)); + return String.valueOf(menu); } - void handleChoice(String menuNumber); - - void run(); + boolean handleChoice(String menuNumber); default void run(int menuNumber) { - displayMenu(Screen.of(menuNumber).getMenus()); - //get menu number from user until valid menu number - runMenuSelectionLoop(Screen.of(menuNumber).getMenus()); + boolean isExit = false; + while (!isExit){ + displayMenu(Screen.of(menuNumber).getMenus()); + //get menu number from user until valid menu number + isExit = handleChoice(runMenuSelectionLoop(Screen.of(menuNumber).getMenus())); + } + } - default void returnToPrevMenu(int menuNumber){ - Function.of(menuNumber, MainMenuFunction.class).run(); + default void run(){ + } } diff --git a/src/com/smartstore/function/customer/AddCustomer.java b/src/com/smartstore/function/customer/AddCustomer.java index 2d22e295..b3f9af55 100644 --- a/src/com/smartstore/function/customer/AddCustomer.java +++ b/src/com/smartstore/function/customer/AddCustomer.java @@ -1,11 +1,22 @@ package com.smartstore.function.customer; +import com.smartstore.function.membership.SetMembershipRequirement; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class AddCustomer implements CustomerMenuController { - @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { +public class AddCustomer { + + private static AddCustomer instance; + + private AddCustomer(){ } + + public static AddCustomer getInstance() { + if(instance == null){ + return new AddCustomer(); + } + return instance; + } + } diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index ca3785ef..ceb6eb18 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -1,22 +1,22 @@ package com.smartstore.function.customer; import com.smartstore.function.Function; -import com.smartstore.function.MenuController; -import com.smartstore.function.menu.Back; +import com.smartstore.function.MenuHandler; +import com.smartstore.function.Back; public enum CustomerFunction implements Function { - ADD(1, new AddCustomer()), - VIEW(2, new ViewCustomer()), - UPDATE(3,new UpdateCustomer()), - DELETE(3,new DeleteCustomer()), - BACK(5, new Back()); + ADD(1, Back.getInstance()), + VIEW(2, Back.getInstance()), + UPDATE(3, Back.getInstance()), + DELETE(3, Back.getInstance()), + BACK(5, Back.getInstance()); private final int menuNumber; - private final MenuController menuController; - CustomerFunction(int menuNumber, MenuController menuController) { + private final MenuHandler menuHandler; + CustomerFunction(int menuNumber, MenuHandler menuHandler) { this.menuNumber = menuNumber; - this.menuController = menuController; + this.menuHandler = menuHandler; } @Override @@ -25,8 +25,8 @@ public int getMenuNumber() { } @Override - public MenuController getMenuController() { - return this.menuController; + public MenuHandler getMenuController() { + return this.menuHandler; } } diff --git a/src/com/smartstore/function/customer/CustomerMenuController.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java similarity index 74% rename from src/com/smartstore/function/customer/CustomerMenuController.java rename to src/com/smartstore/function/customer/CustomerMenuHandler.java index 50873720..2a2d6f54 100644 --- a/src/com/smartstore/function/customer/CustomerMenuController.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -1,6 +1,7 @@ package com.smartstore.function.customer; -import com.smartstore.function.MenuController; +import com.smartstore.function.FunctionHandler; +import com.smartstore.function.MenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; @@ -8,9 +9,9 @@ import java.util.NoSuchElementException; -public interface CustomerMenuController extends MenuController { +public interface CustomerMenuHandler extends FunctionHandler { @Override - default void runMenuSelectionLoop(String[] memberships) { + default String runMenuSelectionLoop(String[] memberships) { //implement for customer function later /*String memberTypeName=""; boolean isExit = false; @@ -35,6 +36,7 @@ default void runMenuSelectionLoop(String[] memberships) { } handleChoice(memberTypeName); }*/ + return ""; } @Override @@ -46,16 +48,8 @@ default void displayMenu(String[] menus){ System.out.println(" type 'end' to exit"); } - default String[] getEnumValues(){ - CustomList keyList = new CustomList<>(); - for(MembershipType membershipType : MembershipType.values()){ - keyList.add(membershipType.name()); - } - return keyList.toArray(String[].class); - } - - default MembershipType getMembershipType(String membershipNames){ - String[] values = getEnumValues(); + /*default MembershipType getMembershipType(String membershipNames){ + String[] values = getEnumValues(Cu); for (String membershipName : values) { try{ if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { @@ -66,18 +60,18 @@ default MembershipType getMembershipType(String membershipNames){ } } return null; - } + }*/ - default void run(){ + /*default void run(){ //get values from enum by string array String[] values = getEnumValues(); displayMenu(values); runMenuSelectionLoop(values); - } + }*/ - @Override - default void handleChoice(String membershipName){ + /*@Override + default boolean handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ MembershipType membershipType = getMembershipType(membershipName); MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); @@ -85,10 +79,9 @@ default void handleChoice(String membershipName){ //run each function's method run(membershipType, requirement); } - //Back to prev Menu - returnToPrevMenu(1); - } + return true; + }*/ - void run(MembershipType membershipType, MembershipRequirement requirement); + default void run(MembershipType membershipType, MembershipRequirement requirement){}; } diff --git a/src/com/smartstore/function/customer/DeleteCustomer.java b/src/com/smartstore/function/customer/DeleteCustomer.java index a9613484..9c5814ca 100644 --- a/src/com/smartstore/function/customer/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/DeleteCustomer.java @@ -1,11 +1,21 @@ package com.smartstore.function.customer; +import com.smartstore.function.membership.SetMembershipRequirement; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class DeleteCustomer implements CustomerMenuController{ - @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { +public class DeleteCustomer { + private static DeleteCustomer instance; + private DeleteCustomer(){ + + } + + public static DeleteCustomer getInstance() { + if(instance == null){ + return new DeleteCustomer(); + } + return instance; } + } diff --git a/src/com/smartstore/function/customer/UpdateCustomer.java b/src/com/smartstore/function/customer/UpdateCustomer.java index 1cb242f3..007da56e 100644 --- a/src/com/smartstore/function/customer/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/UpdateCustomer.java @@ -1,11 +1,21 @@ package com.smartstore.function.customer; +import com.smartstore.function.membership.SetMembershipRequirement; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class UpdateCustomer implements CustomerMenuController{ - @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { +public class UpdateCustomer { + private static UpdateCustomer instance; + private UpdateCustomer(){ + + } + + public static UpdateCustomer getInstance() { + if(instance == null){ + return new UpdateCustomer(); + } + return instance; } + } diff --git a/src/com/smartstore/function/customer/ViewCustomer.java b/src/com/smartstore/function/customer/ViewCustomer.java index 852ad40b..3811fb8d 100644 --- a/src/com/smartstore/function/customer/ViewCustomer.java +++ b/src/com/smartstore/function/customer/ViewCustomer.java @@ -1,11 +1,21 @@ package com.smartstore.function.customer; +import com.smartstore.function.membership.SetMembershipRequirement; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class ViewCustomer implements CustomerMenuController{ - @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { +public class ViewCustomer { + private static ViewCustomer instance; + private ViewCustomer(){ + + } + + public static ViewCustomer getInstance() { + if(instance == null){ + return new ViewCustomer(); + } + return instance; } + } diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 95fdc758..8070c55d 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -1,21 +1,21 @@ package com.smartstore.function.membership; -import com.smartstore.function.menu.Back; -import com.smartstore.function.MenuController; +import com.smartstore.function.Back; +import com.smartstore.function.MenuHandler; import com.smartstore.function.Function; public enum MembershipFunction implements Function { - SET(1, new SetMembershipRequirement()), - VIEW(2, new ViewMembershipRequirement()), - UPDATE(3,new UpdateMembershipRequirement()), - BACK(4, new Back()); + SET(1, SetMembershipRequirement.getInstance()), + VIEW(2, ViewMembershipRequirement.getInstance()), + UPDATE(3, UpdateMembershipRequirement.getInstance()), + BACK(4, Back.getInstance()); private final int menuNumber; - private final MenuController menuController; - MembershipFunction(int menuNumber, MenuController menuController) { + private final MenuHandler menuHandler; + MembershipFunction(int menuNumber, MenuHandler menuHandler) { this.menuNumber = menuNumber; - this.menuController = menuController; + this.menuHandler = menuHandler; } @Override @@ -24,8 +24,8 @@ public int getMenuNumber() { } @Override - public MenuController getMenuController() { - return this.menuController; + public MenuHandler getMenuController() { + return this.menuHandler; } } diff --git a/src/com/smartstore/function/membership/MembershipMenuController.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java similarity index 65% rename from src/com/smartstore/function/membership/MembershipMenuController.java rename to src/com/smartstore/function/membership/MembershipMenuHandler.java index 3e1225ab..858d63b0 100644 --- a/src/com/smartstore/function/membership/MembershipMenuController.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -1,6 +1,6 @@ package com.smartstore.function.membership; -import com.smartstore.function.MenuController; +import com.smartstore.function.FunctionHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; @@ -9,22 +9,22 @@ import java.io.IOException; import java.util.NoSuchElementException; -public interface MembershipMenuController extends MenuController { +public interface MembershipMenuHandler extends FunctionHandler { @Override - default void runMenuSelectionLoop(String[] memberships) { - String memberTypeName=""; + default String runMenuSelectionLoop(String[] values) { + String valueName=""; boolean isExit = false; - if(memberships.length > 0) { + if(values.length > 0) { while (!isExit) { try { System.out.print("Input : "); - memberTypeName = br.readLine(); - if("end".equals(memberTypeName)){ + valueName = br.readLine(); + if("end".equals(valueName)){ isExit = true; break; } - for (String membershipName : memberships) { - if (MembershipType.valueOf(membershipName).isMatchedName(memberTypeName)) { + for (String membershipName : values) { + if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { isExit = true; break; } @@ -33,29 +33,38 @@ default void runMenuSelectionLoop(String[] memberships) { System.out.println("Invalid Menu"); } } - handleChoice(memberTypeName); } - } - - @Override - default void displayMenu(String[] menus){ - System.out.print("Which One?\n|"); - for(String menu : menus){ - System.out.printf(" %s |",menu); - } - System.out.println(" type 'end' to exit"); + return valueName; } default String[] getEnumValues(){ CustomList keyList = new CustomList<>(); - for(MembershipType membershipType : MembershipType.values()){ - keyList.add(membershipType.name()); + for(MembershipType enumKey : MembershipType.values()){ + keyList.add(enumKey.name()); } return keyList.toArray(String[].class); } + default void run() { + boolean isExit = false; + while (!isExit){ + //get values from enum by string array + displayMenu(getEnumValues(MembershipType.class)); + + isExit = handleChoice(runMenuSelectionLoop(getEnumValues(MembershipType.class))); + } + } + + @Override + default void displayMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("| %s",menus[i]); + } + System.out.println(" | or 'end'"); + } + default MembershipType getMembershipType(String membershipNames){ - String[] values = getEnumValues(); + String[] values = getEnumValues(MembershipType.class); for (String membershipName : values) { try{ if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { @@ -68,16 +77,8 @@ default MembershipType getMembershipType(String membershipNames){ return null; } - default void run(){ - //get values from enum by string array - String[] values = getEnumValues(); - displayMenu(values); - - runMenuSelectionLoop(values); - } - @Override - default void handleChoice(String membershipName){ + default boolean handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ //get enum_value using string from MembershipType MembershipType membershipType = getMembershipType(membershipName); @@ -87,8 +88,7 @@ default void handleChoice(String membershipName){ //run each function's method run(membershipType, requirement); } - //Back to prev Menu - returnToPrevMenu(1); + return true; } void run(MembershipType membershipType, MembershipRequirement requirement); diff --git a/src/com/smartstore/function/membership/SetMembershipRequirement.java b/src/com/smartstore/function/membership/SetMembershipRequirement.java index 35ba66af..6d4127df 100644 --- a/src/com/smartstore/function/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/SetMembershipRequirement.java @@ -4,7 +4,20 @@ import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMembershipRequirement implements MembershipMenuController { +public class SetMembershipRequirement implements MembershipMenuHandler { + private static SetMembershipRequirement instance; + + private SetMembershipRequirement(){ + + } + + public static SetMembershipRequirement getInstance() { + if(instance == null){ + return new SetMembershipRequirement(); + } + return instance; + } + @Override public void run(MembershipType membershipType, MembershipRequirement requirement) { if(requirement == null){ diff --git a/src/com/smartstore/function/membership/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/SetMinPaymentAmount.java new file mode 100644 index 00000000..731c115c --- /dev/null +++ b/src/com/smartstore/function/membership/SetMinPaymentAmount.java @@ -0,0 +1,30 @@ +package com.smartstore.function.membership; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; + +public class SetMinPaymentAmount implements MembershipMenuHandler { + private static SetMinPaymentAmount instance; + + private SetMinPaymentAmount(){ + + } + + public static SetMinPaymentAmount getInstance() { + if(instance == null){ + return new SetMinPaymentAmount(); + } + return instance; + } + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + if(requirement != null){ + Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().setMinPaymentAmount(membershipType)); + System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); + }else { + System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); + } + } + +} diff --git a/src/com/smartstore/function/membership/SetMinUsage.java b/src/com/smartstore/function/membership/SetMinUsage.java new file mode 100644 index 00000000..3edf3ac0 --- /dev/null +++ b/src/com/smartstore/function/membership/SetMinUsage.java @@ -0,0 +1,30 @@ +package com.smartstore.function.membership; + +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; + +public class SetMinUsage implements MembershipMenuHandler { + private static SetMinUsage instance; + + private SetMinUsage(){ + + } + + public static SetMinUsage getInstance() { + if(instance == null){ + return new SetMinUsage(); + } + return instance; + } + @Override + public void run(MembershipType membershipType, MembershipRequirement requirement) { + if(requirement != null){ + Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().setMinUsage(membershipType), requirement.getMinPaymentAmount()); + System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); + }else { + System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); + } + } + +} diff --git a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java index 2e397811..d2ae64a7 100644 --- a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/UpdateMembershipRequirement.java @@ -1,21 +1,93 @@ package com.smartstore.function.membership; +import com.smartstore.function.DisplayMenuByNumber; +import com.smartstore.function.Function; +import com.smartstore.function.FunctionHandler; +import com.smartstore.function.MenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class UpdateMembershipRequirement implements MembershipMenuController { - @Override +import java.io.IOException; +import java.util.Arrays; + +public class UpdateMembershipRequirement implements MembershipMenuHandler, MenuHandler { + private static UpdateMembershipRequirement instance; + + private UpdateMembershipRequirement(){ + + } + + public static UpdateMembershipRequirement getInstance() { + if(instance == null){ + return new UpdateMembershipRequirement(); + } + return instance; + } + public void run(MembershipType membershipType, MembershipRequirement requirement){ + boolean isExit = false; if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); - } else{ + }else{ System.out.printf("Current %s Info\n", membershipType.name()); System.out.printf("Min Usage time : %d\n", requirement.getMinUsageTime()); System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); - //set will rewrite value if already exist - Memberships.getInstance().setMembershipRequirement(membershipType); - System.out.printf("Set %s Successfully\n\n\n", membershipType.name()); + while (!isExit){ + displayMenu(getEnumValues(UpdateMembershipRequirementFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(runMenuSelectionLoop(getEnumValues(UpdateMembershipRequirementFunction.class))); + } + } + } + + @Override + public String runMenuSelectionLoop(String[] values) { + int menu = -1; + while (true){ + try { + System.out.print("Input : "); + menu = Integer.parseInt(br.readLine()); + if (menu <= 0 || menu > values.length) { + // TODO: 2023-05-08 throw other exception, catch it + throw new NumberFormatException("Invalid Menu"); + } + break; + + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Menu"); + } } + return String.valueOf(menu); } + + @Override + public void displayMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("%d. %s\n",i+1,menus[i]); + } + } + + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == UpdateMembershipRequirementFunction.BACK.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(); + return false; + } + + @Override + public void run(){ + boolean isExit = false; + while (!isExit){ + MembershipMenuHandler.super.displayMenu(getEnumValues(MembershipType.class)); + //get menu number from user until valid menu number + //🤮🤮🤮🤮🤮🤮🤮 + isExit = MembershipMenuHandler.super.handleChoice(MembershipMenuHandler.super.runMenuSelectionLoop(getEnumValues(MembershipType.class))); + } + } + + } diff --git a/src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java new file mode 100644 index 00000000..0f172aba --- /dev/null +++ b/src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java @@ -0,0 +1,30 @@ +package com.smartstore.function.membership; + +import com.smartstore.function.Back; +import com.smartstore.function.Function; +import com.smartstore.function.MenuHandler; + +public enum UpdateMembershipRequirementFunction implements Function { + + SET_MIN_USAGE(1, SetMinUsage.getInstance()), + SET_MIN_PAYMENT_AMOUNT(2, SetMinPaymentAmount.getInstance()), + BACK(3, Back.getInstance()); + + private final int menuNumber; + private final MenuHandler menuHandler; + UpdateMembershipRequirementFunction(int menuNumber, MenuHandler menuHandler) { + this.menuNumber = menuNumber; + this.menuHandler = menuHandler; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public MenuHandler getMenuController() { + return this.menuHandler; + } + +} diff --git a/src/com/smartstore/function/membership/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/ViewMembershipRequirement.java index 4befd456..2d86168a 100644 --- a/src/com/smartstore/function/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/ViewMembershipRequirement.java @@ -3,7 +3,19 @@ import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class ViewMembershipRequirement implements MembershipMenuController { +public class ViewMembershipRequirement implements MembershipMenuHandler { + private static ViewMembershipRequirement instance; + + private ViewMembershipRequirement(){ + + } + + public static ViewMembershipRequirement getInstance() { + if(instance == null){ + return new ViewMembershipRequirement(); + } + return instance; + } @Override public void run(MembershipType membershipType, MembershipRequirement requirement) { //if not found in enum_map diff --git a/src/com/smartstore/function/menu/Back.java b/src/com/smartstore/function/menu/Back.java deleted file mode 100644 index 2935bceb..00000000 --- a/src/com/smartstore/function/menu/Back.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.smartstore.function.menu; - -import com.smartstore.function.Function; -import com.smartstore.function.MenuController; - -public class Back implements MenuController { - - public boolean isExit(){ - return true; - } - - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - - } - - @Override - public void run(int menuNumber) { - MainMenuFunction mainMenuFunction = Function.of(menuNumber, MainMenuFunction.class); - mainMenuFunction.run(); - } -} diff --git a/src/com/smartstore/function/menu/MainMenuFunction.java b/src/com/smartstore/function/menu/MainMenuFunction.java index c7c1f5df..9bf06a22 100644 --- a/src/com/smartstore/function/menu/MainMenuFunction.java +++ b/src/com/smartstore/function/menu/MainMenuFunction.java @@ -1,24 +1,26 @@ package com.smartstore.function.menu; -import com.smartstore.function.MenuController; +import com.smartstore.function.Back; +import com.smartstore.function.MenuHandler; import com.smartstore.menu.CustomerMenu; +import com.smartstore.menu.MainMenu; import com.smartstore.menu.MembershipMenu; import com.smartstore.menu.SummaryMenu; import com.smartstore.function.Function; public enum MainMenuFunction implements Function { - MAIN_MENU(0, MenuManager.getInstance()), + MAIN_MENU(0, MainMenu.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), - CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), - REPORT_MANAGEMENT(3, SummaryMenu.getInstance()), - QUIT(4, new Quit()); + CUSTOMER_MANAGEMENT(2, Back.getInstance()), + REPORT_MANAGEMENT(3, Back.getInstance()), + QUIT(4, Back.getInstance()); private final int menuNumber; - private final MenuController menuController; + private final MenuHandler menuHandler; - MainMenuFunction(int menuNumber, MenuController menuController) { + MainMenuFunction(int menuNumber, MenuHandler menuHandler) { this.menuNumber = menuNumber; - this.menuController = menuController; + this.menuHandler = menuHandler; } @Override @@ -27,12 +29,12 @@ public int getMenuNumber() { } @Override - public MenuController getMenuController() { - return menuController; + public MenuHandler getMenuController() { + return menuHandler; } @Override public void run() { - menuController.run(menuNumber); + menuHandler.run(menuNumber); } } diff --git a/src/com/smartstore/function/menu/MenuManager.java b/src/com/smartstore/function/menu/MenuManager.java deleted file mode 100644 index 28dbf5c8..00000000 --- a/src/com/smartstore/function/menu/MenuManager.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.smartstore.function.menu; - -import com.smartstore.function.Function; -import com.smartstore.function.MenuController; - -import java.util.Arrays; - -public class MenuManager implements MenuController { - @Override - public void handleChoice(String menuNumber) { - //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); - } - - @Override - public void run() { - //Do nothing - } - - public static MenuManager getInstance() { - if(instance == null){ - instance = new MenuManager(); - } - return instance; - } - - private void printSlashScreen(){ - System.out.println(Arrays.toString(Screen.of(-1).getMenus())); - } - public void run(int menuNumber){ - //print splash screen - printSlashScreen(); - MenuController.super.run(menuNumber); - } - - private static MenuManager instance; - - private MenuManager(){ - - } -} diff --git a/src/com/smartstore/function/menu/Quit.java b/src/com/smartstore/function/menu/Quit.java deleted file mode 100644 index 449df51e..00000000 --- a/src/com/smartstore/function/menu/Quit.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.smartstore.function.menu; - -import com.smartstore.function.MenuController; - -import java.util.Arrays; - -public class Quit implements MenuController { - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - - } - - @Override - public void run(int menuNumber) { - System.out.println(Arrays.toString(Screen.QUIT.getMenus())); - System.exit(1); - } -} diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index ef1aacde..5c6a9e7a 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -6,6 +6,7 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.lang.reflect.Member; public class Memberships { private Map membershipList = new CustomEnumMap<>(MembershipType.class); @@ -33,11 +34,23 @@ public void setMembershipRequirement(MembershipType membershipType){ int minUsageTime; int minPaymentAmount; - minUsageTime = getInputFromConsole("Input minUsageTime : "); - minPaymentAmount = getInputFromConsole("Input minPaymentAmount : "); + minUsageTime = setMinUsage(membershipType); + minPaymentAmount = setMinPaymentAmount(membershipType); membershipList.put(membershipType, new MembershipRequirement(minUsageTime, minPaymentAmount)); } + public void setMembershipRequirement(MembershipType membershipType, int minUsage, int minPaymentAmount){ + membershipList.put(membershipType, new MembershipRequirement(minUsage, minPaymentAmount)); + } + + public int setMinUsage(MembershipType membershipType){ + return getInputFromConsole("Input minUsageTime : "); + } + + public int setMinPaymentAmount(MembershipType membershipType){ + return getInputFromConsole("Input minPaymentAmount : "); + } + private int getInputFromConsole(String msg){ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int value; diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java index b0ac0b9f..fcc22d8c 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -1,18 +1,9 @@ package com.smartstore.menu; -import com.smartstore.function.MenuController; - -public class CustomerMenu implements MenuController { - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - - } +import com.smartstore.function.MenuHandler; +import com.smartstore.function.customer.CustomerMenuHandler; +public class CustomerMenu { public static CustomerMenu getInstance() { if(instance == null){ instance = new CustomerMenu(); diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java new file mode 100644 index 00000000..c70d3eb2 --- /dev/null +++ b/src/com/smartstore/menu/MainMenu.java @@ -0,0 +1,42 @@ +package com.smartstore.menu; + +import com.smartstore.function.Function; +import com.smartstore.function.MenuHandler; +import com.smartstore.function.menu.MainMenuFunction; +import com.smartstore.function.menu.Screen; + +import java.util.Arrays; + +public class MainMenu implements MenuHandler { + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == MainMenuFunction.QUIT.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); + return false; + } + + public static MainMenu getInstance() { + if(instance == null){ + instance = new MainMenu(); + } + return instance; + } + + private void printSlashScreen(){ + System.out.println(Arrays.toString(Screen.of(-1).getMenus())); + } + /*public void run(int menuNumber){ + //print splash screen + printSlashScreen(); + MenuHandler.super.run(menuNumber); + }*/ + + private static MainMenu instance; + + private MainMenu(){ + + } +} diff --git a/src/com/smartstore/menu/MembershipMenu.java b/src/com/smartstore/menu/MembershipMenu.java index 1c4c5590..04da7205 100644 --- a/src/com/smartstore/menu/MembershipMenu.java +++ b/src/com/smartstore/menu/MembershipMenu.java @@ -1,18 +1,21 @@ package com.smartstore.menu; import com.smartstore.function.membership.MembershipFunction; -import com.smartstore.function.MenuController; +import com.smartstore.function.MenuHandler; import com.smartstore.function.Function; +import com.smartstore.function.membership.MembershipMenuHandler; +import com.smartstore.function.menu.MainMenuFunction; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; -public class MembershipMenu implements MenuController { +public class MembershipMenu implements MenuHandler { @Override - public void handleChoice(String menuNumber) { + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == MembershipFunction.BACK.getMenuNumber()) { + return true; + } Function.of(Integer.parseInt(menuNumber), MembershipFunction.class).run(); - } - - @Override - public void run() { - + return false; } public static MembershipMenu getInstance() { diff --git a/src/com/smartstore/menu/SummaryMenu.java b/src/com/smartstore/menu/SummaryMenu.java index 1f8e9ab1..e6666a53 100644 --- a/src/com/smartstore/menu/SummaryMenu.java +++ b/src/com/smartstore/menu/SummaryMenu.java @@ -1,17 +1,8 @@ package com.smartstore.menu; -import com.smartstore.function.MenuController; +import com.smartstore.function.MenuHandler; -public class SummaryMenu implements MenuController { - @Override - public void handleChoice(String menuNumber) { - - } - - @Override - public void run() { - - } +public class SummaryMenu { public static SummaryMenu getInstance() { if(instance == null){ From 3face8b1fdcc4f13d9935dfa54404241a5670e7f Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 11 May 2023 02:37:53 +0900 Subject: [PATCH 54/79] refactor: ref --- src/com/smartstore/customer/Customer.java | 28 ++++--- src/com/smartstore/function/MenuHandler.java | 4 +- src/com/smartstore/function/Readable.java | 8 ++ .../function/ValidIntegerChecker.java | 22 ++++++ .../function/customer/AddCustomer.java | 22 ------ .../function/customer/CustomerFunction.java | 12 ++- .../customer/CustomerMenuHandler.java | 77 +++++++++---------- .../function/customer/add/AddCustomer.java | 68 ++++++++++++++++ .../customer/add/AddCustomerFunction.java | 35 +++++++++ .../function/customer/add/AddMenuHandler.java | 16 ++++ .../function/customer/add/SetName.java | 36 +++++++++ .../customer/{ => delete}/DeleteCustomer.java | 7 +- .../customer/{ => update}/UpdateCustomer.java | 11 ++- .../customer/{ => view}/ViewCustomer.java | 9 +-- .../membership/MembershipFunction.java | 3 + .../membership/MembershipMenuHandler.java | 7 -- .../{ => set}/SetMembershipRequirement.java | 3 +- .../{ => update}/SetMinPaymentAmount.java | 3 +- .../membership/{ => update}/SetMinUsage.java | 3 +- .../UpdateMembershipRequirement.java | 10 +-- .../UpdateMembershipRequirementFunction.java | 2 +- .../{ => view}/ViewMembershipRequirement.java | 3 +- .../function/menu/MainMenuFunction.java | 2 +- .../smartstore/membership/Memberships.java | 4 + src/com/smartstore/menu/CustomerMenu.java | 15 +++- 25 files changed, 296 insertions(+), 114 deletions(-) create mode 100644 src/com/smartstore/function/Readable.java create mode 100644 src/com/smartstore/function/ValidIntegerChecker.java delete mode 100644 src/com/smartstore/function/customer/AddCustomer.java create mode 100644 src/com/smartstore/function/customer/add/AddCustomer.java create mode 100644 src/com/smartstore/function/customer/add/AddCustomerFunction.java create mode 100644 src/com/smartstore/function/customer/add/AddMenuHandler.java create mode 100644 src/com/smartstore/function/customer/add/SetName.java rename src/com/smartstore/function/customer/{ => delete}/DeleteCustomer.java (67%) rename src/com/smartstore/function/customer/{ => update}/UpdateCustomer.java (55%) rename src/com/smartstore/function/customer/{ => view}/ViewCustomer.java (61%) rename src/com/smartstore/function/membership/{ => set}/SetMembershipRequirement.java (89%) rename src/com/smartstore/function/membership/{ => update}/SetMinPaymentAmount.java (89%) rename src/com/smartstore/function/membership/{ => update}/SetMinUsage.java (89%) rename src/com/smartstore/function/membership/{ => update}/UpdateMembershipRequirement.java (92%) rename src/com/smartstore/function/membership/{ => update}/UpdateMembershipRequirementFunction.java (93%) rename src/com/smartstore/function/membership/{ => view}/ViewMembershipRequirement.java (89%) diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 9b21f865..4fbfb122 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -1,26 +1,36 @@ package com.smartstore.customer; +import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; +import com.smartstore.util.Map; + +import java.util.Arrays; public class Customer { private int customerId; private String customerName; private MembershipType membership; + public void setMembership(int usageTime, int paymentAmount) { + Memberships memberships = Memberships.getInstance(); + Map membershipList = memberships.getMembershipList(); + for(MembershipType membershipType :MembershipType.values()){ + if(membershipList.get(membershipType).getMinUsageTime() > usageTime && membershipList.get(membershipType).getMinPaymentAmount() > paymentAmount){ + this.membership = membershipType; + return; + } + } + this.membership = null; + } - - //TODO: 2023-04-30 constructor to builder - Customer(int customerId, String customerName, MembershipType membership){ + public void setCustomerId(int customerId) { this.customerId = customerId; - this.customerName = customerName; - this.membership = membership; } - public void updateUser(int customerId){ - + public void setCustomerName(String customerName) { + this.customerName = customerName; } - public void deleteUser(int customerId){ - } } diff --git a/src/com/smartstore/function/MenuHandler.java b/src/com/smartstore/function/MenuHandler.java index eb649cf9..c2eeeda4 100644 --- a/src/com/smartstore/function/MenuHandler.java +++ b/src/com/smartstore/function/MenuHandler.java @@ -7,9 +7,7 @@ import java.io.IOException; import java.io.InputStreamReader; -public interface MenuHandler extends DisplayMenuByNumber{ - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - +public interface MenuHandler extends DisplayMenuByNumber, Readable{ default String runMenuSelectionLoop(String[] menus){ int menu = -1; while (true){ diff --git a/src/com/smartstore/function/Readable.java b/src/com/smartstore/function/Readable.java new file mode 100644 index 00000000..4555b769 --- /dev/null +++ b/src/com/smartstore/function/Readable.java @@ -0,0 +1,8 @@ +package com.smartstore.function; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public interface Readable { + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); +} diff --git a/src/com/smartstore/function/ValidIntegerChecker.java b/src/com/smartstore/function/ValidIntegerChecker.java new file mode 100644 index 00000000..c88c3927 --- /dev/null +++ b/src/com/smartstore/function/ValidIntegerChecker.java @@ -0,0 +1,22 @@ +package com.smartstore.function; + +import java.io.IOException; + +public interface ValidIntegerChecker extends Readable{ + default int getIntegerValue(){ + int value; + while (true){ + try { + value = Integer.parseInt(br.readLine()); + if(value < 0){ + throw new IllegalArgumentException(); + }else { + break; + } + } catch (IOException | IllegalArgumentException e) { + System.out.println("Input valid Integer Data 1 ~ Integer.Max"); + } + } + return value; + } +} diff --git a/src/com/smartstore/function/customer/AddCustomer.java b/src/com/smartstore/function/customer/AddCustomer.java deleted file mode 100644 index b3f9af55..00000000 --- a/src/com/smartstore/function/customer/AddCustomer.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.smartstore.function.customer; - -import com.smartstore.function.membership.SetMembershipRequirement; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; - -public class AddCustomer { - - private static AddCustomer instance; - - private AddCustomer(){ - - } - - public static AddCustomer getInstance() { - if(instance == null){ - return new AddCustomer(); - } - return instance; - } - -} diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index ceb6eb18..1b5f4efa 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -3,12 +3,16 @@ import com.smartstore.function.Function; import com.smartstore.function.MenuHandler; import com.smartstore.function.Back; +import com.smartstore.function.customer.add.AddCustomer; +import com.smartstore.function.customer.delete.DeleteCustomer; +import com.smartstore.function.customer.update.UpdateCustomer; +import com.smartstore.function.customer.view.ViewCustomer; public enum CustomerFunction implements Function { - ADD(1, Back.getInstance()), - VIEW(2, Back.getInstance()), - UPDATE(3, Back.getInstance()), - DELETE(3, Back.getInstance()), + ADD(1, AddCustomer.getInstance()), + VIEW(2, ViewCustomer.getInstance()), + UPDATE(3, UpdateCustomer.getInstance()), + DELETE(4, DeleteCustomer.getInstance()), BACK(5, Back.getInstance()); diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 2a2d6f54..b52d3473 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -7,25 +7,25 @@ import com.smartstore.membership.Memberships; import com.smartstore.util.CustomList; +import java.io.IOException; import java.util.NoSuchElementException; public interface CustomerMenuHandler extends FunctionHandler { @Override - default String runMenuSelectionLoop(String[] memberships) { - //implement for customer function later - /*String memberTypeName=""; + default String runMenuSelectionLoop(String[] values) { + String valueName=""; boolean isExit = false; - if(memberships.length > 0) { + if(values.length > 0) { while (!isExit) { try { System.out.print("Input : "); - memberTypeName = br.readLine(); - if("end".equals(memberTypeName)){ + valueName = br.readLine(); + if("end".equals(valueName)){ isExit = true; break; } - for (String membershipName : memberships) { - if (MembershipType.valueOf(membershipName).isMatchedName(memberTypeName)) { + for (String membershipName : values) { + if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { isExit = true; break; } @@ -34,54 +34,49 @@ default String runMenuSelectionLoop(String[] memberships) { System.out.println("Invalid Menu"); } } - handleChoice(memberTypeName); - }*/ - return ""; + } + return valueName; } - @Override - default void displayMenu(String[] menus){ - System.out.print("Which One?\n|"); - for(String menu : menus){ - System.out.printf(" %s |",menu); + default String[] getEnumValues(){ + CustomList keyList = new CustomList<>(); + for(MembershipType enumKey : MembershipType.values()){ + keyList.add(enumKey.name()); } - System.out.println(" type 'end' to exit"); + return keyList.toArray(String[].class); } - /*default MembershipType getMembershipType(String membershipNames){ - String[] values = getEnumValues(Cu); - for (String membershipName : values) { - try{ - if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { - return MembershipType.valueOf(membershipName); - } - }catch (NoSuchElementException e) { - System.out.println(e.getMessage()); - } + default void run() { + boolean isExit = false; + while (!isExit){ + //get values from enum by string array + displayMenu(getEnumValues(MembershipType.class)); + + isExit = handleChoice(runMenuSelectionLoop(new String[]{})); } - return null; - }*/ + } - /*default void run(){ - //get values from enum by string array - String[] values = getEnumValues(); - displayMenu(values); + @Override + default void displayMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("| %s",menus[i]); + } + System.out.println(" | or 'end'"); + } - runMenuSelectionLoop(values); - }*/ - /*@Override + @Override default boolean handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ - MembershipType membershipType = getMembershipType(membershipName); + //get enum_value using string from MembershipType + /* MembershipType membershipType = getMembershipType(membershipName); + //find requirement using type from enum_map MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); //run each function's method run(membershipType, requirement); - } + */ } return true; - }*/ - - default void run(MembershipType membershipType, MembershipRequirement requirement){}; + } } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java new file mode 100644 index 00000000..cd22753d --- /dev/null +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -0,0 +1,68 @@ +package com.smartstore.function.customer.add; + +import com.smartstore.function.Function; +import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.menu.MainMenuFunction; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; + +import java.io.IOException; + +public class AddCustomer implements CustomerMenuHandler { + + private static AddCustomer instance; + + private AddCustomer(){ + + } + + public static AddCustomer getInstance() { + if(instance == null){ + return new AddCustomer(); + } + return instance; + } + + public String runMenuSelectionLoop() { + String value=""; + boolean isExit = false; + while (!isExit){ + try{ + System.out.print("Input : "); + value = br.readLine(); + if("end".equals(value) || Integer.parseInt(value)>0){ + isExit = true; + break; + } + throw new IllegalArgumentException("Invalid Input"); + } catch (IOException | IllegalArgumentException | NullPointerException e) { + System.out.println("Invalid Input"); + } + } + return value; + } + + public void displayMenu() { + System.out.println("How many Customers to Input ? | type 'end' to cancel"); + } + @Override + public boolean handleChoice(String numberOfUser) { + if(!"end".equals(numberOfUser)){ + for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ + Function.of(i, AddCustomerFunction.class); + } + } + return true; + } + + @Override + public void run() { + boolean isExit = false; + while (!isExit){ + //get values from enum by string array + displayMenu(); + + isExit = handleChoice(runMenuSelectionLoop()); + } + } +} diff --git a/src/com/smartstore/function/customer/add/AddCustomerFunction.java b/src/com/smartstore/function/customer/add/AddCustomerFunction.java new file mode 100644 index 00000000..fea58352 --- /dev/null +++ b/src/com/smartstore/function/customer/add/AddCustomerFunction.java @@ -0,0 +1,35 @@ +package com.smartstore.function.customer.add; + +import com.smartstore.function.Back; +import com.smartstore.function.Function; +import com.smartstore.function.MenuHandler; +import com.smartstore.function.membership.update.SetMinPaymentAmount; +import com.smartstore.function.membership.update.SetMinUsage; + +public enum AddCustomerFunction implements Function { + + NAME(1, SetName.getInstance()), + ID(2, SetMinPaymentAmount.getInstance()), + USAGE_TIME(3, Back.getInstance()), + PAYMENT_AMOUNT(4, Back.getInstance()), + BACK(5, Back.getInstance()); + + + private final int menuNumber; + private final MenuHandler menuHandler; + AddCustomerFunction(int menuNumber, MenuHandler menuHandler) { + this.menuNumber = menuNumber; + this.menuHandler = menuHandler; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public MenuHandler getMenuController() { + return this.menuHandler; + } + +} diff --git a/src/com/smartstore/function/customer/add/AddMenuHandler.java b/src/com/smartstore/function/customer/add/AddMenuHandler.java new file mode 100644 index 00000000..339320e1 --- /dev/null +++ b/src/com/smartstore/function/customer/add/AddMenuHandler.java @@ -0,0 +1,16 @@ +package com.smartstore.function.customer.add; + +import com.smartstore.function.FunctionHandler; +import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.util.CustomList; + +import java.io.IOException; + +public interface AddMenuHandler extends CustomerMenuHandler { + void run(T value); + + @Override + void run(); +} diff --git a/src/com/smartstore/function/customer/add/SetName.java b/src/com/smartstore/function/customer/add/SetName.java new file mode 100644 index 00000000..b8ae2586 --- /dev/null +++ b/src/com/smartstore/function/customer/add/SetName.java @@ -0,0 +1,36 @@ +package com.smartstore.function.customer.add; + +import com.smartstore.function.ValidIntegerChecker; +import com.smartstore.function.customer.CustomerMenuHandler; + +public class SetName implements AddMenuHandler, ValidIntegerChecker { + private static SetName instance; + + private SetName(){ + + } + + public static SetName getInstance(){ + if(instance == null){ + return new SetName(); + } + return instance; + } + + + @Override + public void run(T value) { + + } + + @Override + public boolean handleChoice(String menuNumber) { + return false; + } + + @Override + public void run() { + System.out.println(); + + } +} diff --git a/src/com/smartstore/function/customer/DeleteCustomer.java b/src/com/smartstore/function/customer/delete/DeleteCustomer.java similarity index 67% rename from src/com/smartstore/function/customer/DeleteCustomer.java rename to src/com/smartstore/function/customer/delete/DeleteCustomer.java index 9c5814ca..1ff86d87 100644 --- a/src/com/smartstore/function/customer/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/delete/DeleteCustomer.java @@ -1,10 +1,10 @@ -package com.smartstore.function.customer; +package com.smartstore.function.customer.delete; -import com.smartstore.function.membership.SetMembershipRequirement; +import com.smartstore.function.customer.CustomerMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class DeleteCustomer { +public class DeleteCustomer implements CustomerMenuHandler { private static DeleteCustomer instance; private DeleteCustomer(){ @@ -18,4 +18,5 @@ public static DeleteCustomer getInstance() { return instance; } + } diff --git a/src/com/smartstore/function/customer/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java similarity index 55% rename from src/com/smartstore/function/customer/UpdateCustomer.java rename to src/com/smartstore/function/customer/update/UpdateCustomer.java index 007da56e..fa7617bc 100644 --- a/src/com/smartstore/function/customer/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -1,21 +1,20 @@ -package com.smartstore.function.customer; +package com.smartstore.function.customer.update; -import com.smartstore.function.membership.SetMembershipRequirement; +import com.smartstore.function.customer.CustomerMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class UpdateCustomer { +public class UpdateCustomer implements CustomerMenuHandler { private static UpdateCustomer instance; - private UpdateCustomer(){ + private UpdateCustomer() { } public static UpdateCustomer getInstance() { - if(instance == null){ + if (instance == null) { return new UpdateCustomer(); } return instance; } - } diff --git a/src/com/smartstore/function/customer/ViewCustomer.java b/src/com/smartstore/function/customer/view/ViewCustomer.java similarity index 61% rename from src/com/smartstore/function/customer/ViewCustomer.java rename to src/com/smartstore/function/customer/view/ViewCustomer.java index 3811fb8d..8e4a5ea5 100644 --- a/src/com/smartstore/function/customer/ViewCustomer.java +++ b/src/com/smartstore/function/customer/view/ViewCustomer.java @@ -1,10 +1,10 @@ -package com.smartstore.function.customer; +package com.smartstore.function.customer.view; -import com.smartstore.function.membership.SetMembershipRequirement; +import com.smartstore.function.customer.CustomerMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class ViewCustomer { +public class ViewCustomer implements CustomerMenuHandler { private static ViewCustomer instance; private ViewCustomer(){ @@ -12,10 +12,9 @@ private ViewCustomer(){ } public static ViewCustomer getInstance() { - if(instance == null){ + if (instance == null) { return new ViewCustomer(); } return instance; } - } diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 8070c55d..e2ebb901 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -3,6 +3,9 @@ import com.smartstore.function.Back; import com.smartstore.function.MenuHandler; import com.smartstore.function.Function; +import com.smartstore.function.membership.set.SetMembershipRequirement; +import com.smartstore.function.membership.update.UpdateMembershipRequirement; +import com.smartstore.function.membership.view.ViewMembershipRequirement; public enum MembershipFunction implements Function { SET(1, SetMembershipRequirement.getInstance()), diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 858d63b0..21ede48c 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -37,13 +37,6 @@ default String runMenuSelectionLoop(String[] values) { return valueName; } - default String[] getEnumValues(){ - CustomList keyList = new CustomList<>(); - for(MembershipType enumKey : MembershipType.values()){ - keyList.add(enumKey.name()); - } - return keyList.toArray(String[].class); - } default void run() { boolean isExit = false; diff --git a/src/com/smartstore/function/membership/SetMembershipRequirement.java b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java similarity index 89% rename from src/com/smartstore/function/membership/SetMembershipRequirement.java rename to src/com/smartstore/function/membership/set/SetMembershipRequirement.java index 6d4127df..8a8a454c 100644 --- a/src/com/smartstore/function/membership/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java @@ -1,5 +1,6 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.set; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; diff --git a/src/com/smartstore/function/membership/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java similarity index 89% rename from src/com/smartstore/function/membership/SetMinPaymentAmount.java rename to src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 731c115c..46873dbf 100644 --- a/src/com/smartstore/function/membership/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -1,5 +1,6 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.update; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; diff --git a/src/com/smartstore/function/membership/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java similarity index 89% rename from src/com/smartstore/function/membership/SetMinUsage.java rename to src/com/smartstore/function/membership/update/SetMinUsage.java index 3edf3ac0..b6a79612 100644 --- a/src/com/smartstore/function/membership/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -1,5 +1,6 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.update; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; diff --git a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java similarity index 92% rename from src/com/smartstore/function/membership/UpdateMembershipRequirement.java rename to src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index d2ae64a7..49b97f87 100644 --- a/src/com/smartstore/function/membership/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -1,15 +1,12 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.update; -import com.smartstore.function.DisplayMenuByNumber; import com.smartstore.function.Function; -import com.smartstore.function.FunctionHandler; import com.smartstore.function.MenuHandler; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; import java.io.IOException; -import java.util.Arrays; public class UpdateMembershipRequirement implements MembershipMenuHandler, MenuHandler { private static UpdateMembershipRequirement instance; @@ -61,6 +58,8 @@ public String runMenuSelectionLoop(String[] values) { return String.valueOf(menu); } + //make other interface + //🤮🤮🤮🤮🤮🤮🤮 @Override public void displayMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ @@ -84,7 +83,6 @@ public void run(){ while (!isExit){ MembershipMenuHandler.super.displayMenu(getEnumValues(MembershipType.class)); //get menu number from user until valid menu number - //🤮🤮🤮🤮🤮🤮🤮 isExit = MembershipMenuHandler.super.handleChoice(MembershipMenuHandler.super.runMenuSelectionLoop(getEnumValues(MembershipType.class))); } } diff --git a/src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java similarity index 93% rename from src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java rename to src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index 0f172aba..3a44606e 100644 --- a/src/com/smartstore/function/membership/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -1,4 +1,4 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.update; import com.smartstore.function.Back; import com.smartstore.function.Function; diff --git a/src/com/smartstore/function/membership/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java similarity index 89% rename from src/com/smartstore/function/membership/ViewMembershipRequirement.java rename to src/com/smartstore/function/membership/view/ViewMembershipRequirement.java index 2d86168a..b059db44 100644 --- a/src/com/smartstore/function/membership/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java @@ -1,5 +1,6 @@ -package com.smartstore.function.membership; +package com.smartstore.function.membership.view; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; diff --git a/src/com/smartstore/function/menu/MainMenuFunction.java b/src/com/smartstore/function/menu/MainMenuFunction.java index 9bf06a22..8200cf40 100644 --- a/src/com/smartstore/function/menu/MainMenuFunction.java +++ b/src/com/smartstore/function/menu/MainMenuFunction.java @@ -11,7 +11,7 @@ public enum MainMenuFunction implements Function { MAIN_MENU(0, MainMenu.getInstance()), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), - CUSTOMER_MANAGEMENT(2, Back.getInstance()), + CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), REPORT_MANAGEMENT(3, Back.getInstance()), QUIT(4, Back.getInstance()); diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 5c6a9e7a..baee6246 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -23,6 +23,10 @@ private Memberships(){ } + public Map getMembershipList() { + return membershipList; + } + public MembershipRequirement findByType(MembershipType membershipType){ if(membershipList.size() == 0 ){ return null; diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java index fcc22d8c..3ce90a8b 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -1,9 +1,11 @@ package com.smartstore.menu; +import com.smartstore.function.Function; import com.smartstore.function.MenuHandler; -import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.customer.CustomerFunction; +import com.smartstore.function.membership.MembershipFunction; -public class CustomerMenu { +public class CustomerMenu implements MenuHandler { public static CustomerMenu getInstance() { if(instance == null){ instance = new CustomerMenu(); @@ -12,4 +14,13 @@ public static CustomerMenu getInstance() { } private static CustomerMenu instance; + + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == CustomerFunction.BACK.getMenuNumber()) { + return true; + } + Function.of(Integer.parseInt(menuNumber), CustomerFunction.class).run(); + return false; + } } From 3f306338893b799ee6d00fa2c6a285f0d761414f Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 11 May 2023 07:35:37 +0900 Subject: [PATCH 55/79] fix: Change proj Structure, Fix bug [Change proj Structure Fix bug : fix Invalid loop while Membership update] --- .gitignore | 2 + src/com/smartstore/SmartStore.java | 2 +- src/com/smartstore/function/Back.java | 24 +++++-- ...ionHandler.java => EnumValueProvider.java} | 4 +- src/com/smartstore/function/Function.java | 16 ++--- ...egerChecker.java => IntegerValidator.java} | 2 +- src/com/smartstore/function/MenuHandler.java | 46 ++----------- ...ayMenuByNumber.java => MenuPrintable.java} | 4 +- .../smartstore/function/MenuValidator.java | 24 +++++++ .../function/ParameterValidator.java | 33 ++++++++++ .../function/SelectSpecificPrintable.java | 10 +++ .../function/customer/CustomerFunction.java | 9 +-- .../customer/CustomerMenuHandler.java | 12 ++-- .../function/customer/add/AddCustomer.java | 8 ++- .../customer/add/AddCustomerFunction.java | 11 ++-- .../function/customer/add/AddMenuHandler.java | 6 -- .../function/customer/add/SetName.java | 22 ++----- .../{menu => mainmenu}/MainMenuFunction.java | 13 ++-- .../function/{menu => mainmenu}/Screen.java | 6 +- .../membership/MembershipFunction.java | 10 +-- .../membership/MembershipMenuHandler.java | 65 ++++++------------- .../set/SetMembershipRequirement.java | 2 +- .../update/SetMinPaymentAmount.java | 16 ++++- .../membership/update/SetMinUsage.java | 18 ++++- .../update/UpdateMembershipRequirement.java | 63 +++++++----------- .../UpdateMembershipRequirementFunction.java | 9 +-- .../view/ViewMembershipRequirement.java | 2 +- src/com/smartstore/menu/CustomerMenu.java | 5 +- src/com/smartstore/menu/MainMenu.java | 45 ++++++------- src/com/smartstore/menu/MembershipMenu.java | 28 ++++---- src/com/smartstore/menu/SummaryMenu.java | 2 - 31 files changed, 270 insertions(+), 249 deletions(-) create mode 100644 .gitignore rename src/com/smartstore/function/{FunctionHandler.java => EnumValueProvider.java} (71%) rename src/com/smartstore/function/{ValidIntegerChecker.java => IntegerValidator.java} (91%) rename src/com/smartstore/function/{DisplayMenuByNumber.java => MenuPrintable.java} (64%) create mode 100644 src/com/smartstore/function/MenuValidator.java create mode 100644 src/com/smartstore/function/ParameterValidator.java create mode 100644 src/com/smartstore/function/SelectSpecificPrintable.java rename src/com/smartstore/function/{menu => mainmenu}/MainMenuFunction.java (73%) rename src/com/smartstore/function/{menu => mainmenu}/Screen.java (92%) diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..e0d52eb7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +/out/ +/.idea/ diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index b5571821..85ad5c1b 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,7 +1,7 @@ package com.smartstore; import com.smartstore.function.Function; -import com.smartstore.function.menu.MainMenuFunction; +import com.smartstore.function.mainmenu.MainMenuFunction; public class SmartStore { public static void run(){ diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 140094d9..9b75494b 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -1,7 +1,8 @@ package com.smartstore.function; -public class Back implements MenuHandler { +import com.smartstore.function.mainmenu.Screen; +public class Back implements MenuHandler { private static Back instance; private Back(){ @@ -10,23 +11,34 @@ private Back(){ public static Back getInstance() { if(instance == null){ - return new Back(); + instance = new Back(); } return instance; } - public boolean isExit(){ - return true; + @Override + public String runMenuSelectionLoop(String[] menus) { + return null; } - @Override public boolean handleChoice(String menuNumber) { return false; } @Override - public void run(int menuNumber) { + public void run(){ + + } + + @Override + public void run(int menu) { + + } + + @Override + public int getCurrentMenuNumber() { + return Screen.QUIT.getMenuNumber(); } } diff --git a/src/com/smartstore/function/FunctionHandler.java b/src/com/smartstore/function/EnumValueProvider.java similarity index 71% rename from src/com/smartstore/function/FunctionHandler.java rename to src/com/smartstore/function/EnumValueProvider.java index 9bdc9e04..5d56c016 100644 --- a/src/com/smartstore/function/FunctionHandler.java +++ b/src/com/smartstore/function/EnumValueProvider.java @@ -1,9 +1,9 @@ package com.smartstore.function; -import com.smartstore.function.menu.Screen; +import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.util.CustomList; -public interface FunctionHandler > extends MenuHandler{ +public interface EnumValueProvider> extends MainMenuHandler { default String[] getEnumValues(Class type){ CustomList keyList = new CustomList<>(); diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index f861ed0a..6913956f 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -1,9 +1,11 @@ package com.smartstore.function; +import com.smartstore.function.mainmenu.MainMenuHandler; + import java.util.Arrays; public interface Function { - static & Function> T of(int menuNumber, Class enumClass){ + static & Function> E of(int menuNumber, Class enumClass){ return Arrays.stream(enumClass.getEnumConstants()) .filter(enumValue -> enumValue.isMatchedMenuNumber(menuNumber)) @@ -12,18 +14,16 @@ static & Function> T of(int menuNumber, Class enumClass){ int getMenuNumber(); - MenuHandler getMenuController(); + T getMenuController(); default boolean isMatchedMenuNumber(int menuNumber){ return getMenuNumber() == menuNumber; } default void run() { - MenuHandler menuHandler = getMenuController(); - if(menuHandler.getClass().equals(Back.class)){ - menuHandler.run(0); - }else{ - menuHandler.run(); - } + getMenuController().run(); + } + default void run(int value){ + getMenuController().run(value); } } diff --git a/src/com/smartstore/function/ValidIntegerChecker.java b/src/com/smartstore/function/IntegerValidator.java similarity index 91% rename from src/com/smartstore/function/ValidIntegerChecker.java rename to src/com/smartstore/function/IntegerValidator.java index c88c3927..20641a05 100644 --- a/src/com/smartstore/function/ValidIntegerChecker.java +++ b/src/com/smartstore/function/IntegerValidator.java @@ -2,7 +2,7 @@ import java.io.IOException; -public interface ValidIntegerChecker extends Readable{ +public interface IntegerValidator extends Readable{ default int getIntegerValue(){ int value; while (true){ diff --git a/src/com/smartstore/function/MenuHandler.java b/src/com/smartstore/function/MenuHandler.java index c2eeeda4..8e72b0cc 100644 --- a/src/com/smartstore/function/MenuHandler.java +++ b/src/com/smartstore/function/MenuHandler.java @@ -1,46 +1,10 @@ package com.smartstore.function; -import com.smartstore.function.menu.MainMenuFunction; -import com.smartstore.function.menu.Screen; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public interface MenuHandler extends DisplayMenuByNumber, Readable{ - default String runMenuSelectionLoop(String[] menus){ - int menu = -1; - while (true){ - try { - System.out.print("Input : "); - menu = Integer.parseInt(br.readLine()); - if (menu <= 0 || menu > menus.length) { - // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException("Invalid Menu"); - } - break; - - } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Menu"); - } - } - return String.valueOf(menu); - } - +public interface MenuHandler extends Readable{ + String runMenuSelectionLoop(String[] menus); boolean handleChoice(String menuNumber); - - default void run(int menuNumber) { - boolean isExit = false; - while (!isExit){ - displayMenu(Screen.of(menuNumber).getMenus()); - //get menu number from user until valid menu number - isExit = handleChoice(runMenuSelectionLoop(Screen.of(menuNumber).getMenus())); - } - - } - - default void run(){ - - } + void run(); + void run(int menu); + int getCurrentMenuNumber(); } diff --git a/src/com/smartstore/function/DisplayMenuByNumber.java b/src/com/smartstore/function/MenuPrintable.java similarity index 64% rename from src/com/smartstore/function/DisplayMenuByNumber.java rename to src/com/smartstore/function/MenuPrintable.java index b96e54e9..d80a1ef5 100644 --- a/src/com/smartstore/function/DisplayMenuByNumber.java +++ b/src/com/smartstore/function/MenuPrintable.java @@ -1,7 +1,7 @@ package com.smartstore.function; -public interface DisplayMenuByNumber { - default void displayMenu(String[] menus){ +public interface MenuPrintable { + default void printMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ System.out.printf("%d. %s\n",i+1,menus[i]); } diff --git a/src/com/smartstore/function/MenuValidator.java b/src/com/smartstore/function/MenuValidator.java new file mode 100644 index 00000000..b7b49c06 --- /dev/null +++ b/src/com/smartstore/function/MenuValidator.java @@ -0,0 +1,24 @@ +package com.smartstore.function; + +import java.io.IOException; + +public interface MenuValidator extends Readable{ + default String getMenuNumber(String[] values) { + int menu = -1; + while (true){ + try { + System.out.print("Input : "); + menu = Integer.parseInt(br.readLine()); + if (menu <= 0 || menu > values.length) { + // TODO: 2023-05-08 throw other exception, catch it + throw new NumberFormatException("Invalid Menu"); + } + break; + + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Menu"); + } + } + return String.valueOf(menu); + } +} diff --git a/src/com/smartstore/function/ParameterValidator.java b/src/com/smartstore/function/ParameterValidator.java new file mode 100644 index 00000000..a6d613da --- /dev/null +++ b/src/com/smartstore/function/ParameterValidator.java @@ -0,0 +1,33 @@ +package com.smartstore.function; + +import com.smartstore.membership.MembershipType; + +import java.io.IOException; + +public interface ParameterValidator extends Readable{ + default String getParameter(String[] values) { + String valueName=""; + boolean isExit = false; + if(values.length > 0) { + while (!isExit) { + try { + System.out.print("Input : "); + valueName = br.readLine(); + if("end".equals(valueName)){ + isExit = true; + break; + } + for (String membershipName : values) { + if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { + isExit = true; + break; + } + } + } catch (IOException | NullPointerException e) { + System.out.println("Invalid Parameter"); + } + } + } + return valueName; + } +} diff --git a/src/com/smartstore/function/SelectSpecificPrintable.java b/src/com/smartstore/function/SelectSpecificPrintable.java new file mode 100644 index 00000000..ce2e1a55 --- /dev/null +++ b/src/com/smartstore/function/SelectSpecificPrintable.java @@ -0,0 +1,10 @@ +package com.smartstore.function; + +public interface SelectSpecificPrintable { + default void printMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("| %s ",menus[i]); + } + System.out.println("| or 'end'"); + } +} diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index 1b5f4efa..5d323b06 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -2,6 +2,7 @@ import com.smartstore.function.Function; import com.smartstore.function.MenuHandler; +import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.Back; import com.smartstore.function.customer.add.AddCustomer; import com.smartstore.function.customer.delete.DeleteCustomer; @@ -17,10 +18,10 @@ public enum CustomerFunction implements Function { private final int menuNumber; - private final MenuHandler menuHandler; - CustomerFunction(int menuNumber, MenuHandler menuHandler) { + private final MenuHandler mainMenuHandler; + CustomerFunction(int menuNumber, MenuHandler mainMenuHandler) { this.menuNumber = menuNumber; - this.menuHandler = menuHandler; + this.mainMenuHandler = mainMenuHandler; } @Override @@ -30,7 +31,7 @@ public int getMenuNumber() { @Override public MenuHandler getMenuController() { - return this.menuHandler; + return this.mainMenuHandler; } } diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index b52d3473..e546b4c5 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -1,16 +1,12 @@ package com.smartstore.function.customer; -import com.smartstore.function.FunctionHandler; -import com.smartstore.function.MenuHandler; -import com.smartstore.membership.MembershipRequirement; +import com.smartstore.function.EnumValueProvider; import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; import com.smartstore.util.CustomList; import java.io.IOException; -import java.util.NoSuchElementException; -public interface CustomerMenuHandler extends FunctionHandler { +public interface CustomerMenuHandler extends EnumValueProvider { @Override default String runMenuSelectionLoop(String[] values) { String valueName=""; @@ -50,14 +46,14 @@ default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - displayMenu(getEnumValues(MembershipType.class)); + printMenu(getEnumValues(MembershipType.class)); isExit = handleChoice(runMenuSelectionLoop(new String[]{})); } } @Override - default void displayMenu(String[] menus){ + default void printMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ System.out.printf("| %s",menus[i]); } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index cd22753d..b70b6b63 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -2,9 +2,6 @@ import com.smartstore.function.Function; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.menu.MainMenuFunction; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; import java.io.IOException; @@ -65,4 +62,9 @@ public void run() { isExit = handleChoice(runMenuSelectionLoop()); } } + + @Override + public int getCurrentMenuNumber() { + return 0; + } } diff --git a/src/com/smartstore/function/customer/add/AddCustomerFunction.java b/src/com/smartstore/function/customer/add/AddCustomerFunction.java index fea58352..1d04963a 100644 --- a/src/com/smartstore/function/customer/add/AddCustomerFunction.java +++ b/src/com/smartstore/function/customer/add/AddCustomerFunction.java @@ -3,8 +3,9 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; import com.smartstore.function.MenuHandler; +import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.membership.update.SetMinPaymentAmount; -import com.smartstore.function.membership.update.SetMinUsage; public enum AddCustomerFunction implements Function { @@ -16,10 +17,10 @@ public enum AddCustomerFunction implements Function { private final int menuNumber; - private final MenuHandler menuHandler; - AddCustomerFunction(int menuNumber, MenuHandler menuHandler) { + private final MenuHandler mainMenuHandler; + AddCustomerFunction(int menuNumber, MenuHandler mainMenuHandler) { this.menuNumber = menuNumber; - this.menuHandler = menuHandler; + this.mainMenuHandler = mainMenuHandler; } @Override @@ -29,7 +30,7 @@ public int getMenuNumber() { @Override public MenuHandler getMenuController() { - return this.menuHandler; + return this.mainMenuHandler; } } diff --git a/src/com/smartstore/function/customer/add/AddMenuHandler.java b/src/com/smartstore/function/customer/add/AddMenuHandler.java index 339320e1..1750d010 100644 --- a/src/com/smartstore/function/customer/add/AddMenuHandler.java +++ b/src/com/smartstore/function/customer/add/AddMenuHandler.java @@ -1,12 +1,6 @@ package com.smartstore.function.customer.add; -import com.smartstore.function.FunctionHandler; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; -import com.smartstore.util.CustomList; - -import java.io.IOException; public interface AddMenuHandler extends CustomerMenuHandler { void run(T value); diff --git a/src/com/smartstore/function/customer/add/SetName.java b/src/com/smartstore/function/customer/add/SetName.java index b8ae2586..bee67587 100644 --- a/src/com/smartstore/function/customer/add/SetName.java +++ b/src/com/smartstore/function/customer/add/SetName.java @@ -1,9 +1,12 @@ package com.smartstore.function.customer.add; -import com.smartstore.function.ValidIntegerChecker; -import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.membership.MembershipMenuHandler; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; -public class SetName implements AddMenuHandler, ValidIntegerChecker { + +//implement other +public class SetName implements MembershipMenuHandler { private static SetName instance; private SetName(){ @@ -19,18 +22,7 @@ public static SetName getInstance(){ @Override - public void run(T value) { - - } - - @Override - public boolean handleChoice(String menuNumber) { - return false; - } - - @Override - public void run() { - System.out.println(); + public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { } } diff --git a/src/com/smartstore/function/menu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java similarity index 73% rename from src/com/smartstore/function/menu/MainMenuFunction.java rename to src/com/smartstore/function/mainmenu/MainMenuFunction.java index 8200cf40..902b8456 100644 --- a/src/com/smartstore/function/menu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -1,11 +1,10 @@ -package com.smartstore.function.menu; +package com.smartstore.function.mainmenu; import com.smartstore.function.Back; import com.smartstore.function.MenuHandler; import com.smartstore.menu.CustomerMenu; import com.smartstore.menu.MainMenu; import com.smartstore.menu.MembershipMenu; -import com.smartstore.menu.SummaryMenu; import com.smartstore.function.Function; public enum MainMenuFunction implements Function { @@ -16,11 +15,11 @@ public enum MainMenuFunction implements Function { QUIT(4, Back.getInstance()); private final int menuNumber; - private final MenuHandler menuHandler; + private final MenuHandler mainMenuHandler; - MainMenuFunction(int menuNumber, MenuHandler menuHandler) { + MainMenuFunction(int menuNumber, MenuHandler mainMenuHandler) { this.menuNumber = menuNumber; - this.menuHandler = menuHandler; + this.mainMenuHandler = mainMenuHandler; } @Override @@ -30,11 +29,11 @@ public int getMenuNumber() { @Override public MenuHandler getMenuController() { - return menuHandler; + return mainMenuHandler; } @Override public void run() { - menuHandler.run(menuNumber); + mainMenuHandler.run(menuNumber); } } diff --git a/src/com/smartstore/function/menu/Screen.java b/src/com/smartstore/function/mainmenu/Screen.java similarity index 92% rename from src/com/smartstore/function/menu/Screen.java rename to src/com/smartstore/function/mainmenu/Screen.java index 62d4aaf8..4327b45a 100644 --- a/src/com/smartstore/function/menu/Screen.java +++ b/src/com/smartstore/function/mainmenu/Screen.java @@ -1,4 +1,4 @@ -package com.smartstore.function.menu; +package com.smartstore.function.mainmenu; import java.util.Arrays; @@ -49,4 +49,8 @@ public static Screen of(int menuNumber){ public String[] getMenus() { return menus; } + + public int getMenuNumber() { + return menuNumber; + } } diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index e2ebb901..2752d07a 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -1,8 +1,8 @@ package com.smartstore.function.membership; import com.smartstore.function.Back; -import com.smartstore.function.MenuHandler; import com.smartstore.function.Function; +import com.smartstore.function.MenuHandler; import com.smartstore.function.membership.set.SetMembershipRequirement; import com.smartstore.function.membership.update.UpdateMembershipRequirement; import com.smartstore.function.membership.view.ViewMembershipRequirement; @@ -15,10 +15,10 @@ public enum MembershipFunction implements Function { private final int menuNumber; - private final MenuHandler menuHandler; - MembershipFunction(int menuNumber, MenuHandler menuHandler) { + private final MenuHandler membershipMenuHandler; + MembershipFunction(int menuNumber, MenuHandler membershipMenuHandler) { this.menuNumber = menuNumber; - this.menuHandler = menuHandler; + this.membershipMenuHandler = membershipMenuHandler; } @Override @@ -28,7 +28,7 @@ public int getMenuNumber() { @Override public MenuHandler getMenuController() { - return this.menuHandler; + return this.membershipMenuHandler; } } diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 21ede48c..1e57ab27 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -1,61 +1,25 @@ package com.smartstore.function.membership; -import com.smartstore.function.FunctionHandler; +import com.smartstore.function.*; +import com.smartstore.function.mainmenu.Screen; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -import com.smartstore.util.CustomList; -import java.io.IOException; import java.util.NoSuchElementException; -public interface MembershipMenuHandler extends FunctionHandler { - @Override - default String runMenuSelectionLoop(String[] values) { - String valueName=""; - boolean isExit = false; - if(values.length > 0) { - while (!isExit) { - try { - System.out.print("Input : "); - valueName = br.readLine(); - if("end".equals(valueName)){ - isExit = true; - break; - } - for (String membershipName : values) { - if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { - isExit = true; - break; - } - } - } catch (IOException | NullPointerException e) { - System.out.println("Invalid Menu"); - } - } - } - return valueName; - } - +public interface MembershipMenuHandler extends SelectSpecificPrintable, EnumValueProvider, MenuHandler, ParameterValidator, MenuValidator { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - displayMenu(getEnumValues(MembershipType.class)); + printMenu(getEnumValues(MembershipType.class)); - isExit = handleChoice(runMenuSelectionLoop(getEnumValues(MembershipType.class))); + isExit = handleChoice(getParameter(getEnumValues(MembershipType.class))); } } - @Override - default void displayMenu(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("| %s",menus[i]); - } - System.out.println(" | or 'end'"); - } - default MembershipType getMembershipType(String membershipNames){ String[] values = getEnumValues(MembershipType.class); for (String membershipName : values) { @@ -77,13 +41,26 @@ default boolean handleChoice(String membershipName){ MembershipType membershipType = getMembershipType(membershipName); //find requirement using type from enum_map MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); - //run each function's method - run(membershipType, requirement); + processMembership(membershipType, requirement); } return true; } - void run(MembershipType membershipType, MembershipRequirement requirement); + @Override + default int getCurrentMenuNumber(){ + return Screen.MEMBERSHIP.getMenuNumber(); + }; + void processMembership(MembershipType membershipType, MembershipRequirement requirement); + + @Override + default String[] getEnumValues(Class type) { + return EnumValueProvider.super.getEnumValues(type); + } + + @Override + default void printMenu(String[] menus) { + SelectSpecificPrintable.super.printMenu(menus); + } } diff --git a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java index 8a8a454c..891b0eb0 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java @@ -20,7 +20,7 @@ public static SetMembershipRequirement getInstance() { } @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { + public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement == null){ Memberships.getInstance().setMembershipRequirement(membershipType); System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 46873dbf..0ffc5574 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -19,7 +19,7 @@ public static SetMinPaymentAmount getInstance() { return instance; } @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { + public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().setMinPaymentAmount(membershipType)); System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); @@ -28,4 +28,18 @@ public void run(MembershipType membershipType, MembershipRequirement requirement } } + @Override + public void run(int ordinal) { + MembershipType membershipType = null; + for(MembershipType membership :MembershipType.values()){ + if(membership.ordinal() == ordinal){ + membershipType = membership; + break; + } + } + if(membershipType.name() != null){ + processMembership(membershipType, Memberships.getInstance().findByType(membershipType)); + } + } + } diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index b6a79612..83474d21 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -1,11 +1,12 @@ package com.smartstore.function.membership.update; +import com.smartstore.function.IntegerValidator; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMinUsage implements MembershipMenuHandler { +public class SetMinUsage implements MembershipMenuHandler, IntegerValidator { private static SetMinUsage instance; private SetMinUsage(){ @@ -19,7 +20,7 @@ public static SetMinUsage getInstance() { return instance; } @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { + public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().setMinUsage(membershipType), requirement.getMinPaymentAmount()); System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); @@ -28,4 +29,17 @@ public void run(MembershipType membershipType, MembershipRequirement requirement } } + @Override + public void run(int ordinal) { + MembershipType membershipType = null; + for(MembershipType membership :MembershipType.values()){ + if(membership.ordinal() == ordinal){ + membershipType = membership; + break; + } + } + if(membershipType.name() != null){ + processMembership(membershipType, Memberships.getInstance().findByType(membershipType)); + } + } } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index 49b97f87..69af9a30 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -1,15 +1,16 @@ package com.smartstore.function.membership.update; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.MenuPrintable; +import com.smartstore.function.SelectSpecificPrintable; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import java.io.IOException; -public class UpdateMembershipRequirement implements MembershipMenuHandler, MenuHandler { +public class UpdateMembershipRequirement implements MembershipMenuHandler, SelectSpecificPrintable, MenuPrintable { private static UpdateMembershipRequirement instance; + private MembershipType selected; private UpdateMembershipRequirement(){ @@ -22,49 +23,27 @@ public static UpdateMembershipRequirement getInstance() { return instance; } - public void run(MembershipType membershipType, MembershipRequirement requirement){ + public void processMembership(MembershipType membershipType, MembershipRequirement requirement){ boolean isExit = false; + MenuPrintable menuPrintable = new MenuPrintable() { + @Override + public void printMenu(String[] menus) { + MenuPrintable.super.printMenu(menus); + } + }; if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); }else{ System.out.printf("Current %s Info\n", membershipType.name()); System.out.printf("Min Usage time : %d\n", requirement.getMinUsageTime()); System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); + selected = membershipType; while (!isExit){ - displayMenu(getEnumValues(UpdateMembershipRequirementFunction.class)); + menuPrintable.printMenu(getEnumValues(UpdateMembershipRequirementFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(runMenuSelectionLoop(getEnumValues(UpdateMembershipRequirementFunction.class))); - } - } - } - - @Override - public String runMenuSelectionLoop(String[] values) { - int menu = -1; - while (true){ - try { - System.out.print("Input : "); - menu = Integer.parseInt(br.readLine()); - if (menu <= 0 || menu > values.length) { - // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException("Invalid Menu"); - } - break; - - } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Menu"); + isExit = handleChoice(getMenuNumber(getEnumValues(UpdateMembershipRequirementFunction.class))); } } - return String.valueOf(menu); - } - - //make other interface - //🤮🤮🤮🤮🤮🤮🤮 - @Override - public void displayMenu(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("%d. %s\n",i+1,menus[i]); - } } @Override @@ -73,17 +52,23 @@ public boolean handleChoice(String menuNumber) { return true; } //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(); - return false; + Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(selected.ordinal()); + return true; } @Override public void run(){ boolean isExit = false; + SelectSpecificPrintable selectSpecificPrintable = new SelectSpecificPrintable() { + @Override + public void printMenu(String[] menus) { + SelectSpecificPrintable.super.printMenu(menus); + } + }; while (!isExit){ - MembershipMenuHandler.super.displayMenu(getEnumValues(MembershipType.class)); + selectSpecificPrintable.printMenu(getEnumValues(MembershipType.class)); //get menu number from user until valid menu number - isExit = MembershipMenuHandler.super.handleChoice(MembershipMenuHandler.super.runMenuSelectionLoop(getEnumValues(MembershipType.class))); + isExit = MembershipMenuHandler.super.handleChoice(getParameter(getEnumValues(MembershipType.class))); } } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index 3a44606e..374f7149 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -3,6 +3,7 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; import com.smartstore.function.MenuHandler; +import com.smartstore.function.mainmenu.MainMenuHandler; public enum UpdateMembershipRequirementFunction implements Function { @@ -11,10 +12,10 @@ public enum UpdateMembershipRequirementFunction implements Function { BACK(3, Back.getInstance()); private final int menuNumber; - private final MenuHandler menuHandler; - UpdateMembershipRequirementFunction(int menuNumber, MenuHandler menuHandler) { + private final MenuHandler mainMenuHandler; + UpdateMembershipRequirementFunction(int menuNumber, MenuHandler mainMenuHandler) { this.menuNumber = menuNumber; - this.menuHandler = menuHandler; + this.mainMenuHandler = mainMenuHandler; } @Override @@ -24,7 +25,7 @@ public int getMenuNumber() { @Override public MenuHandler getMenuController() { - return this.menuHandler; + return this.mainMenuHandler; } } diff --git a/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java index b059db44..229df5e6 100644 --- a/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java @@ -18,7 +18,7 @@ public static ViewMembershipRequirement getInstance() { return instance; } @Override - public void run(MembershipType membershipType, MembershipRequirement requirement) { + public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { //if not found in enum_map if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/menu/CustomerMenu.java index 3ce90a8b..95202fa8 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/menu/CustomerMenu.java @@ -1,11 +1,10 @@ package com.smartstore.menu; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.customer.CustomerFunction; -import com.smartstore.function.membership.MembershipFunction; -public class CustomerMenu implements MenuHandler { +public class CustomerMenu implements MainMenuHandler { public static CustomerMenu getInstance() { if(instance == null){ instance = new CustomerMenu(); diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/menu/MainMenu.java index c70d3eb2..df1499e0 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/menu/MainMenu.java @@ -1,23 +1,14 @@ package com.smartstore.menu; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; -import com.smartstore.function.menu.MainMenuFunction; -import com.smartstore.function.menu.Screen; +import com.smartstore.function.mainmenu.MainMenuHandler; +import com.smartstore.function.mainmenu.MainMenuFunction; +import com.smartstore.function.mainmenu.Screen; import java.util.Arrays; -public class MainMenu implements MenuHandler { - @Override - public boolean handleChoice(String menuNumber) { - if(Integer.parseInt(menuNumber) == MainMenuFunction.QUIT.getMenuNumber()) { - return true; - } - //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); - return false; - } - +public class MainMenu implements MainMenuHandler { + private static MainMenu instance; public static MainMenu getInstance() { if(instance == null){ instance = new MainMenu(); @@ -25,18 +16,28 @@ public static MainMenu getInstance() { return instance; } + private MainMenu(){ + + } + private void printSlashScreen(){ System.out.println(Arrays.toString(Screen.of(-1).getMenus())); } - /*public void run(int menuNumber){ - //print splash screen - printSlashScreen(); - MenuHandler.super.run(menuNumber); - }*/ - private static MainMenu instance; - - private MainMenu(){ + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == MainMenuFunction.QUIT.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); + return false; + } + @Override + public void run() { + printSlashScreen(); + MainMenuHandler.super.run(); } + } diff --git a/src/com/smartstore/menu/MembershipMenu.java b/src/com/smartstore/menu/MembershipMenu.java index 04da7205..0229e558 100644 --- a/src/com/smartstore/menu/MembershipMenu.java +++ b/src/com/smartstore/menu/MembershipMenu.java @@ -1,14 +1,21 @@ package com.smartstore.menu; import com.smartstore.function.membership.MembershipFunction; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.Function; -import com.smartstore.function.membership.MembershipMenuHandler; -import com.smartstore.function.menu.MainMenuFunction; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; -public class MembershipMenu implements MenuHandler { +public class MembershipMenu implements MainMenuHandler { + private static MembershipMenu instance; + public static MembershipMenu getInstance() { + if(instance == null){ + instance = new MembershipMenu(); + } + return instance; + } + private MembershipMenu(){ + + } + @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == MembershipFunction.BACK.getMenuNumber()) { @@ -18,14 +25,5 @@ public boolean handleChoice(String menuNumber) { return false; } - public static MembershipMenu getInstance() { - if(instance == null){ - instance = new MembershipMenu(); - } - return instance; - } - - private static MembershipMenu instance; - } diff --git a/src/com/smartstore/menu/SummaryMenu.java b/src/com/smartstore/menu/SummaryMenu.java index e6666a53..1c932e0e 100644 --- a/src/com/smartstore/menu/SummaryMenu.java +++ b/src/com/smartstore/menu/SummaryMenu.java @@ -1,7 +1,5 @@ package com.smartstore.menu; -import com.smartstore.function.MenuHandler; - public class SummaryMenu { public static SummaryMenu getInstance() { From 0bdac5782982c3c4dcc9c43088f99edcdfc2b137 Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 11 May 2023 07:54:04 +0900 Subject: [PATCH 56/79] fix: Change proj Structure, Fix bug [Change proj Structure Fix bug : fix Invalid loop while Membership update] --- src/com/smartstore/function/Back.java | 5 --- src/com/smartstore/function/MenuHandler.java | 1 - .../customer/CustomerMenuHandler.java | 28 +-------------- .../function/mainmenu/MainMenuHandler.java | 36 +++++++++++++++++++ 4 files changed, 37 insertions(+), 33 deletions(-) create mode 100644 src/com/smartstore/function/mainmenu/MainMenuHandler.java diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 9b75494b..7e36fd45 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -16,11 +16,6 @@ public static Back getInstance() { return instance; } - @Override - public String runMenuSelectionLoop(String[] menus) { - return null; - } - @Override public boolean handleChoice(String menuNumber) { return false; diff --git a/src/com/smartstore/function/MenuHandler.java b/src/com/smartstore/function/MenuHandler.java index 8e72b0cc..756b09c4 100644 --- a/src/com/smartstore/function/MenuHandler.java +++ b/src/com/smartstore/function/MenuHandler.java @@ -1,7 +1,6 @@ package com.smartstore.function; public interface MenuHandler extends Readable{ - String runMenuSelectionLoop(String[] menus); boolean handleChoice(String menuNumber); void run(); void run(int menu); diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index e546b4c5..a13be056 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -7,32 +7,6 @@ import java.io.IOException; public interface CustomerMenuHandler extends EnumValueProvider { - @Override - default String runMenuSelectionLoop(String[] values) { - String valueName=""; - boolean isExit = false; - if(values.length > 0) { - while (!isExit) { - try { - System.out.print("Input : "); - valueName = br.readLine(); - if("end".equals(valueName)){ - isExit = true; - break; - } - for (String membershipName : values) { - if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { - isExit = true; - break; - } - } - } catch (IOException | NullPointerException e) { - System.out.println("Invalid Menu"); - } - } - } - return valueName; - } default String[] getEnumValues(){ CustomList keyList = new CustomList<>(); @@ -48,7 +22,7 @@ default void run() { //get values from enum by string array printMenu(getEnumValues(MembershipType.class)); - isExit = handleChoice(runMenuSelectionLoop(new String[]{})); + isExit = handleChoice(getMenuNumber(new String[]{})); } } diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java new file mode 100644 index 00000000..81fd343e --- /dev/null +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -0,0 +1,36 @@ +package com.smartstore.function.mainmenu; + +import com.smartstore.function.MenuHandler; +import com.smartstore.function.MenuPrintable; +import com.smartstore.function.MenuValidator; + +import java.io.IOException; + +public interface MainMenuHandler extends MenuPrintable, MenuHandler, MenuValidator { + + default void run() { + boolean isExit = false; + while (!isExit){ + printMenu(Screen.of(getCurrentMenuNumber()).getMenus()); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(Screen.of(getCurrentMenuNumber()).getMenus())); + } + } + + @Override + default void run(int menuNumber) { + boolean isExit = false; + while (!isExit){ + printMenu(Screen.of(menuNumber).getMenus()); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(Screen.of(menuNumber).getMenus())); + } + } + + + @Override + default int getCurrentMenuNumber(){ + return Screen.MAIN_MENU.getMenuNumber(); + }; + +} From ec3dca4d9dadab61e8c574b6152964eeb8d95b3b Mon Sep 17 00:00:00 2001 From: jy-b Date: Thu, 11 May 2023 08:37:40 +0900 Subject: [PATCH 57/79] refactor: ref --- .../customer/CustomerMenuHandler.java | 21 ++------------ .../function/customer/add/AddCustomer.java | 29 ++++--------------- ...nuHandler.java => AddCustomerHandler.java} | 2 +- .../mainmenu}/CustomerMenu.java | 3 +- .../{menu => function/mainmenu}/MainMenu.java | 5 +--- .../function/mainmenu/MainMenuFunction.java | 3 -- .../mainmenu}/MembershipMenu.java | 3 +- .../mainmenu}/SummaryMenu.java | 2 +- .../update/SetMinPaymentAmount.java | 2 +- .../membership/update/SetMinUsage.java | 2 +- .../smartstore/membership/Memberships.java | 10 +++---- 11 files changed, 21 insertions(+), 61 deletions(-) rename src/com/smartstore/function/customer/add/{AddMenuHandler.java => AddCustomerHandler.java} (71%) rename src/com/smartstore/{menu => function/mainmenu}/CustomerMenu.java (88%) rename src/com/smartstore/{menu => function/mainmenu}/MainMenu.java (82%) rename src/com/smartstore/{menu => function/mainmenu}/MembershipMenu.java (89%) rename src/com/smartstore/{menu => function/mainmenu}/SummaryMenu.java (84%) diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index a13be056..5fe3095e 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -1,20 +1,14 @@ package com.smartstore.function.customer; import com.smartstore.function.EnumValueProvider; +import com.smartstore.function.MenuPrintable; +import com.smartstore.function.MenuValidator; import com.smartstore.membership.MembershipType; import com.smartstore.util.CustomList; import java.io.IOException; -public interface CustomerMenuHandler extends EnumValueProvider { - - default String[] getEnumValues(){ - CustomList keyList = new CustomList<>(); - for(MembershipType enumKey : MembershipType.values()){ - keyList.add(enumKey.name()); - } - return keyList.toArray(String[].class); - } +public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator { default void run() { boolean isExit = false; @@ -26,15 +20,6 @@ default void run() { } } - @Override - default void printMenu(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("| %s",menus[i]); - } - System.out.println(" | or 'end'"); - } - - @Override default boolean handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index b70b6b63..851c841f 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -1,11 +1,12 @@ package com.smartstore.function.customer.add; import com.smartstore.function.Function; +import com.smartstore.function.IntegerValidator; import com.smartstore.function.customer.CustomerMenuHandler; import java.io.IOException; -public class AddCustomer implements CustomerMenuHandler { +public class AddCustomer implements CustomerMenuHandler, IntegerValidator { private static AddCustomer instance; @@ -20,33 +21,16 @@ public static AddCustomer getInstance() { return instance; } - public String runMenuSelectionLoop() { - String value=""; - boolean isExit = false; - while (!isExit){ - try{ - System.out.print("Input : "); - value = br.readLine(); - if("end".equals(value) || Integer.parseInt(value)>0){ - isExit = true; - break; - } - throw new IllegalArgumentException("Invalid Input"); - } catch (IOException | IllegalArgumentException | NullPointerException e) { - System.out.println("Invalid Input"); - } - } - return value; - } - public void displayMenu() { System.out.println("How many Customers to Input ? | type 'end' to cancel"); } @Override public boolean handleChoice(String numberOfUser) { if(!"end".equals(numberOfUser)){ + int count = 1; for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ - Function.of(i, AddCustomerFunction.class); + + //Function.of(count, AddCustomerFunction.class); } } return true; @@ -56,10 +40,9 @@ public boolean handleChoice(String numberOfUser) { public void run() { boolean isExit = false; while (!isExit){ - //get values from enum by string array displayMenu(); - isExit = handleChoice(runMenuSelectionLoop()); + isExit = handleChoice(String.valueOf(getIntegerValue())); } } diff --git a/src/com/smartstore/function/customer/add/AddMenuHandler.java b/src/com/smartstore/function/customer/add/AddCustomerHandler.java similarity index 71% rename from src/com/smartstore/function/customer/add/AddMenuHandler.java rename to src/com/smartstore/function/customer/add/AddCustomerHandler.java index 1750d010..6ec80a76 100644 --- a/src/com/smartstore/function/customer/add/AddMenuHandler.java +++ b/src/com/smartstore/function/customer/add/AddCustomerHandler.java @@ -2,7 +2,7 @@ import com.smartstore.function.customer.CustomerMenuHandler; -public interface AddMenuHandler extends CustomerMenuHandler { +public interface AddCustomerHandler extends CustomerMenuHandler { void run(T value); @Override diff --git a/src/com/smartstore/menu/CustomerMenu.java b/src/com/smartstore/function/mainmenu/CustomerMenu.java similarity index 88% rename from src/com/smartstore/menu/CustomerMenu.java rename to src/com/smartstore/function/mainmenu/CustomerMenu.java index 95202fa8..05cee11b 100644 --- a/src/com/smartstore/menu/CustomerMenu.java +++ b/src/com/smartstore/function/mainmenu/CustomerMenu.java @@ -1,7 +1,6 @@ -package com.smartstore.menu; +package com.smartstore.function.mainmenu; import com.smartstore.function.Function; -import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.customer.CustomerFunction; public class CustomerMenu implements MainMenuHandler { diff --git a/src/com/smartstore/menu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java similarity index 82% rename from src/com/smartstore/menu/MainMenu.java rename to src/com/smartstore/function/mainmenu/MainMenu.java index df1499e0..7f9aa608 100644 --- a/src/com/smartstore/menu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -1,9 +1,6 @@ -package com.smartstore.menu; +package com.smartstore.function.mainmenu; import com.smartstore.function.Function; -import com.smartstore.function.mainmenu.MainMenuHandler; -import com.smartstore.function.mainmenu.MainMenuFunction; -import com.smartstore.function.mainmenu.Screen; import java.util.Arrays; diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 902b8456..11fe6a29 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -2,9 +2,6 @@ import com.smartstore.function.Back; import com.smartstore.function.MenuHandler; -import com.smartstore.menu.CustomerMenu; -import com.smartstore.menu.MainMenu; -import com.smartstore.menu.MembershipMenu; import com.smartstore.function.Function; public enum MainMenuFunction implements Function { diff --git a/src/com/smartstore/menu/MembershipMenu.java b/src/com/smartstore/function/mainmenu/MembershipMenu.java similarity index 89% rename from src/com/smartstore/menu/MembershipMenu.java rename to src/com/smartstore/function/mainmenu/MembershipMenu.java index 0229e558..d1e65a54 100644 --- a/src/com/smartstore/menu/MembershipMenu.java +++ b/src/com/smartstore/function/mainmenu/MembershipMenu.java @@ -1,7 +1,6 @@ -package com.smartstore.menu; +package com.smartstore.function.mainmenu; import com.smartstore.function.membership.MembershipFunction; -import com.smartstore.function.mainmenu.MainMenuHandler; import com.smartstore.function.Function; public class MembershipMenu implements MainMenuHandler { diff --git a/src/com/smartstore/menu/SummaryMenu.java b/src/com/smartstore/function/mainmenu/SummaryMenu.java similarity index 84% rename from src/com/smartstore/menu/SummaryMenu.java rename to src/com/smartstore/function/mainmenu/SummaryMenu.java index 1c932e0e..1830c73c 100644 --- a/src/com/smartstore/menu/SummaryMenu.java +++ b/src/com/smartstore/function/mainmenu/SummaryMenu.java @@ -1,4 +1,4 @@ -package com.smartstore.menu; +package com.smartstore.function.mainmenu; public class SummaryMenu { diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 0ffc5574..bef2efd0 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -21,7 +21,7 @@ public static SetMinPaymentAmount getInstance() { @Override public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().setMinPaymentAmount(membershipType)); + Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().setMinPaymentAmount()); System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); }else { System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index 83474d21..48f86a22 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -22,7 +22,7 @@ public static SetMinUsage getInstance() { @Override public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().setMinUsage(membershipType), requirement.getMinPaymentAmount()); + Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().setMinUsage(), requirement.getMinPaymentAmount()); System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); }else { System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index baee6246..2e1ed201 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -38,8 +38,8 @@ public void setMembershipRequirement(MembershipType membershipType){ int minUsageTime; int minPaymentAmount; - minUsageTime = setMinUsage(membershipType); - minPaymentAmount = setMinPaymentAmount(membershipType); + minUsageTime = setMinUsage(); + minPaymentAmount = setMinPaymentAmount(); membershipList.put(membershipType, new MembershipRequirement(minUsageTime, minPaymentAmount)); } @@ -47,11 +47,11 @@ public void setMembershipRequirement(MembershipType membershipType, int minUsage membershipList.put(membershipType, new MembershipRequirement(minUsage, minPaymentAmount)); } - public int setMinUsage(MembershipType membershipType){ + public int setMinUsage(){ return getInputFromConsole("Input minUsageTime : "); } - public int setMinPaymentAmount(MembershipType membershipType){ + public int setMinPaymentAmount(){ return getInputFromConsole("Input minPaymentAmount : "); } @@ -65,7 +65,7 @@ private int getInputFromConsole(String msg){ //check value overflowed or negative if (value < 0) { // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException("Invalid Menu"); + throw new NumberFormatException(""); } break; From 80c046514571ecc7ea6d65e4f6c62423c605eccb Mon Sep 17 00:00:00 2001 From: jy-b Date: Sat, 13 May 2023 18:14:59 +0900 Subject: [PATCH 58/79] feat: Feat : Add Customer [New Feat : Add Customer from user input] --- src/com/smartstore/customer/Customer.java | 29 ++++++--- src/com/smartstore/function/Back.java | 3 +- .../function/EnumValueProvider.java | 2 +- src/com/smartstore/function/Function.java | 10 +-- src/com/smartstore/function/Handleable.java | 5 ++ .../{MenuHandler.java => Handler.java} | 3 +- .../smartstore/function/IntegerValidator.java | 3 +- .../function/IntegerWithEndValidator.java | 28 +++++++++ .../smartstore/function/MenuValidator.java | 2 +- .../function/UserDataValidator.java | 30 +++++++++ .../function/customer/CustomerFunction.java | 13 ++-- .../customer/CustomerMenuHandler.java | 10 +-- .../function/customer/add/AddCustomer.java | 62 ++++++++++++++----- .../customer/add/AddCustomerFunction.java | 27 ++++---- .../customer/add/AddCustomerHandler.java | 10 --- .../function/customer/add/SetName.java | 28 --------- .../customer/add/UpdateCustomerHandler.java | 16 +++++ .../customer/delete/DeleteCustomer.java | 2 - .../function/customer/update/SetId.java | 25 ++++++++ .../function/customer/update/SetName.java | 24 +++++++ .../customer/update/UpdateCustomer.java | 35 +++++++++-- .../update/UpdateCustomerFunction.java | 36 +++++++++++ .../function/customer/view/ViewCustomer.java | 2 - .../function/mainmenu/MainMenuFunction.java | 8 +-- .../function/mainmenu/MainMenuHandler.java | 8 +-- .../smartstore/function/mainmenu/Screen.java | 1 + .../membership/MembershipFunction.java | 12 ++-- .../membership/MembershipMenuHandler.java | 14 ++--- .../set/SetMembershipRequirement.java | 1 + .../update/UpdateMembershipRequirement.java | 9 ++- .../UpdateMembershipRequirementFunction.java | 13 ++-- .../smartstore/membership/Memberships.java | 1 - 32 files changed, 328 insertions(+), 144 deletions(-) create mode 100644 src/com/smartstore/function/Handleable.java rename src/com/smartstore/function/{MenuHandler.java => Handler.java} (68%) create mode 100644 src/com/smartstore/function/IntegerWithEndValidator.java create mode 100644 src/com/smartstore/function/UserDataValidator.java delete mode 100644 src/com/smartstore/function/customer/add/AddCustomerHandler.java delete mode 100644 src/com/smartstore/function/customer/add/SetName.java create mode 100644 src/com/smartstore/function/customer/add/UpdateCustomerHandler.java create mode 100644 src/com/smartstore/function/customer/update/SetId.java create mode 100644 src/com/smartstore/function/customer/update/SetName.java create mode 100644 src/com/smartstore/function/customer/update/UpdateCustomerFunction.java diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 4fbfb122..9a163295 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -5,26 +5,37 @@ import com.smartstore.membership.Memberships; import com.smartstore.util.Map; -import java.util.Arrays; - public class Customer { - private int customerId; + private String customerId; private String customerName; private MembershipType membership; - public void setMembership(int usageTime, int paymentAmount) { + public Customer(String customerName, String customerId, int usageTime, int paymentAmount) { + this.customerId = customerId; + this.customerName = customerName; + this.membership = setMembership(usageTime, paymentAmount); + } + + public MembershipType setMembership(int usageTime, int paymentAmount) { Memberships memberships = Memberships.getInstance(); + MembershipType membership = null; Map membershipList = memberships.getMembershipList(); for(MembershipType membershipType :MembershipType.values()){ - if(membershipList.get(membershipType).getMinUsageTime() > usageTime && membershipList.get(membershipType).getMinPaymentAmount() > paymentAmount){ - this.membership = membershipType; - return; + try { + if(membershipList.get(membershipType).getMinUsageTime() > usageTime && membershipList.get(membershipType).getMinPaymentAmount() > paymentAmount){ + membership = membershipType; + } + }catch (NullPointerException e){ + //Set General(lowers Membership) is not Set yet + //Set Membership as null + membership = null; } + } - this.membership = null; + return membership; } - public void setCustomerId(int customerId) { + public void setCustomerId(String customerId) { this.customerId = customerId; } diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 7e36fd45..6012a24d 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -2,7 +2,7 @@ import com.smartstore.function.mainmenu.Screen; -public class Back implements MenuHandler { +public class Back implements Handler { private static Back instance; private Back(){ @@ -23,7 +23,6 @@ public boolean handleChoice(String menuNumber) { @Override public void run(){ - } @Override diff --git a/src/com/smartstore/function/EnumValueProvider.java b/src/com/smartstore/function/EnumValueProvider.java index 5d56c016..4dcd9614 100644 --- a/src/com/smartstore/function/EnumValueProvider.java +++ b/src/com/smartstore/function/EnumValueProvider.java @@ -5,7 +5,7 @@ public interface EnumValueProvider> extends MainMenuHandler { - default String[] getEnumValues(Class type){ + default String[] enumValuesToStringArray(Class type){ CustomList keyList = new CustomList<>(); for(T enumKey : type.getEnumConstants()){ keyList.add(enumKey.name()); diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index 6913956f..3b2749ed 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -1,7 +1,5 @@ package com.smartstore.function; -import com.smartstore.function.mainmenu.MainMenuHandler; - import java.util.Arrays; public interface Function { @@ -14,16 +12,14 @@ static & Function> E of(int menuNumber, Class enumClass){ int getMenuNumber(); - T getMenuController(); + T getMenuHandler(); default boolean isMatchedMenuNumber(int menuNumber){ return getMenuNumber() == menuNumber; } default void run() { - getMenuController().run(); - } - default void run(int value){ - getMenuController().run(value); + getMenuHandler().run(); } + } diff --git a/src/com/smartstore/function/Handleable.java b/src/com/smartstore/function/Handleable.java new file mode 100644 index 00000000..0cf4d6e2 --- /dev/null +++ b/src/com/smartstore/function/Handleable.java @@ -0,0 +1,5 @@ +package com.smartstore.function; + +public interface Handleable { + void run(); +} diff --git a/src/com/smartstore/function/MenuHandler.java b/src/com/smartstore/function/Handler.java similarity index 68% rename from src/com/smartstore/function/MenuHandler.java rename to src/com/smartstore/function/Handler.java index 756b09c4..3d9c609f 100644 --- a/src/com/smartstore/function/MenuHandler.java +++ b/src/com/smartstore/function/Handler.java @@ -1,8 +1,7 @@ package com.smartstore.function; -public interface MenuHandler extends Readable{ +public interface Handler extends Readable, Handleable { boolean handleChoice(String menuNumber); - void run(); void run(int menu); int getCurrentMenuNumber(); diff --git a/src/com/smartstore/function/IntegerValidator.java b/src/com/smartstore/function/IntegerValidator.java index 20641a05..71876bea 100644 --- a/src/com/smartstore/function/IntegerValidator.java +++ b/src/com/smartstore/function/IntegerValidator.java @@ -7,6 +7,7 @@ default int getIntegerValue(){ int value; while (true){ try { + System.out.println("Wait for Input : "); value = Integer.parseInt(br.readLine()); if(value < 0){ throw new IllegalArgumentException(); @@ -14,7 +15,7 @@ default int getIntegerValue(){ break; } } catch (IOException | IllegalArgumentException e) { - System.out.println("Input valid Integer Data 1 ~ Integer.Max"); + System.out.print("Input valid Integer Data 1 ~ Integer.Max"); } } return value; diff --git a/src/com/smartstore/function/IntegerWithEndValidator.java b/src/com/smartstore/function/IntegerWithEndValidator.java new file mode 100644 index 00000000..aa8d3807 --- /dev/null +++ b/src/com/smartstore/function/IntegerWithEndValidator.java @@ -0,0 +1,28 @@ +package com.smartstore.function; + +import java.io.IOException; + +public interface IntegerWithEndValidator extends Readable{ + + //change to validate name of user + default String getIntegerValueOrEnd(){ + String value; + while (true){ + try { + System.out.print("Wait for Input : "); + value = br.readLine(); + if("end".equalsIgnoreCase(String.valueOf(value))){ + break; + } + if(Integer.parseInt(value) < 0){ + throw new IllegalArgumentException(); + }else { + break; + } + } catch (IOException | IllegalArgumentException e) { + System.out.println("Input valid Integer Data 1 ~ Integer.Max"); + } + } + return value; + } +} diff --git a/src/com/smartstore/function/MenuValidator.java b/src/com/smartstore/function/MenuValidator.java index b7b49c06..81b6498d 100644 --- a/src/com/smartstore/function/MenuValidator.java +++ b/src/com/smartstore/function/MenuValidator.java @@ -7,7 +7,7 @@ default String getMenuNumber(String[] values) { int menu = -1; while (true){ try { - System.out.print("Input : "); + System.out.print("Wait for Input : "); menu = Integer.parseInt(br.readLine()); if (menu <= 0 || menu > values.length) { // TODO: 2023-05-08 throw other exception, catch it diff --git a/src/com/smartstore/function/UserDataValidator.java b/src/com/smartstore/function/UserDataValidator.java new file mode 100644 index 00000000..f9cd6b77 --- /dev/null +++ b/src/com/smartstore/function/UserDataValidator.java @@ -0,0 +1,30 @@ +package com.smartstore.function; + +import java.io.IOException; + +public interface UserDataValidator extends Readable { + /** + * + * @param type : Type of input data + * isRequired : is Data Required + * @return input value from user + */ + + default String getUserData(Class type, boolean isRequired, String msg){ + String value = null; + while (true){ + try { + System.out.print(msg); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input Validate Data"); + } + + if(isRequired == true && !value.isBlank()){ + break; + } + System.out.println("Please Input Validate Data, This Element Can't be Empty or Black"); + } + return value; + } +} diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index 5d323b06..8ded1b4a 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -1,8 +1,7 @@ package com.smartstore.function.customer; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; -import com.smartstore.function.mainmenu.MainMenuHandler; +import com.smartstore.function.Handleable; import com.smartstore.function.Back; import com.smartstore.function.customer.add.AddCustomer; import com.smartstore.function.customer.delete.DeleteCustomer; @@ -18,10 +17,10 @@ public enum CustomerFunction implements Function { private final int menuNumber; - private final MenuHandler mainMenuHandler; - CustomerFunction(int menuNumber, MenuHandler mainMenuHandler) { + private final Handleable handler; + CustomerFunction(int menuNumber, Handleable handler) { this.menuNumber = menuNumber; - this.mainMenuHandler = mainMenuHandler; + this.handler = handler; } @Override @@ -30,8 +29,8 @@ public int getMenuNumber() { } @Override - public MenuHandler getMenuController() { - return this.mainMenuHandler; + public Handleable getMenuHandler() { + return this.handler; } } diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 5fe3095e..4fbc362c 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -3,10 +3,8 @@ import com.smartstore.function.EnumValueProvider; import com.smartstore.function.MenuPrintable; import com.smartstore.function.MenuValidator; +import com.smartstore.function.mainmenu.MainMenuFunction; import com.smartstore.membership.MembershipType; -import com.smartstore.util.CustomList; - -import java.io.IOException; public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator { @@ -14,7 +12,7 @@ default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printMenu(getEnumValues(MembershipType.class)); + printMenu(enumValuesToStringArray(MembershipType.class)); isExit = handleChoice(getMenuNumber(new String[]{})); } @@ -34,4 +32,8 @@ default boolean handleChoice(String membershipName){ return true; } + @Override + default int getCurrentMenuNumber() { + return MainMenuFunction.CUSTOMER_MANAGEMENT.getMenuNumber(); + } } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 851c841f..2aa90b04 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -1,12 +1,14 @@ package com.smartstore.function.customer.add; -import com.smartstore.function.Function; -import com.smartstore.function.IntegerValidator; +import com.smartstore.customer.Customer; +import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.customer.update.UpdateCustomerFunction; import java.io.IOException; +import java.util.Arrays; -public class AddCustomer implements CustomerMenuHandler, IntegerValidator { +public class AddCustomer implements CustomerMenuHandler, MenuPrintable, IntegerWithEndValidator,UserDataValidator { private static AddCustomer instance; @@ -21,33 +23,59 @@ public static AddCustomer getInstance() { return instance; } - public void displayMenu() { - System.out.println("How many Customers to Input ? | type 'end' to cancel"); - } @Override public boolean handleChoice(String numberOfUser) { - if(!"end".equals(numberOfUser)){ - int count = 1; + if(!"end".equalsIgnoreCase(numberOfUser)){ + String name = ""; + String id = ""; + int usageTime = 0; + int paymentAmount = 0; + + //get name & id from user, usage_time&payment_amount is optional for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ + name = getUserData(name.getClass(),true, "Input User Name : "); + id = getUserData(id.getClass(),true, "Input User ID : "); + if(!isOptionalInfoPassed()){ + usageTime = 0; + paymentAmount = 0; + }else { + System.out.println("Input Usage Time"); + usageTime = ("end".equalsIgnoreCase(String.valueOf(getIntegerValueOrEnd()))) ? Integer.parseInt(getIntegerValueOrEnd()) : 0; + System.out.println("Input Payment Amount"); + paymentAmount = ("end".equalsIgnoreCase(String.valueOf(getIntegerValueOrEnd()))) ? Integer.parseInt(getIntegerValueOrEnd()) : 0; + } - //Function.of(count, AddCustomerFunction.class); + new Customer(name, id, usageTime, paymentAmount); } } return true; } + boolean isOptionalInfoPassed(){ + System.out.println("Do you Want Set Optional Info?"); + String value = ""; + while (true){ + try { + System.out.print("Wait for Input : "); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input Y or N"); + } + if("y".equalsIgnoreCase(value)){ + return true; + } + if("n".equalsIgnoreCase(value)){ + return false; + } + } + } + @Override public void run() { boolean isExit = false; while (!isExit){ - displayMenu(); - - isExit = handleChoice(String.valueOf(getIntegerValue())); + System.out.println("How many Customers to Input ? | type 'end' to cancel"); + isExit = handleChoice(String.valueOf(getIntegerValueOrEnd())); } } - - @Override - public int getCurrentMenuNumber() { - return 0; - } } diff --git a/src/com/smartstore/function/customer/add/AddCustomerFunction.java b/src/com/smartstore/function/customer/add/AddCustomerFunction.java index 1d04963a..e25a0b8f 100644 --- a/src/com/smartstore/function/customer/add/AddCustomerFunction.java +++ b/src/com/smartstore/function/customer/add/AddCustomerFunction.java @@ -2,25 +2,26 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; -import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.mainmenu.MainMenuHandler; +import com.smartstore.function.Handleable; +import com.smartstore.function.customer.update.SetName; import com.smartstore.function.membership.update.SetMinPaymentAmount; public enum AddCustomerFunction implements Function { - NAME(1, SetName.getInstance()), - ID(2, SetMinPaymentAmount.getInstance()), - USAGE_TIME(3, Back.getInstance()), - PAYMENT_AMOUNT(4, Back.getInstance()), - BACK(5, Back.getInstance()); + NAME(1, SetName.getInstance(), "Set Name"), + ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), + USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), + PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), + BACK(5, Back.getInstance(), "Return to prev Menu"); private final int menuNumber; - private final MenuHandler mainMenuHandler; - AddCustomerFunction(int menuNumber, MenuHandler mainMenuHandler) { + private final Handleable handler; + private final String message; + AddCustomerFunction(int menuNumber, Handleable handler, String message) { this.menuNumber = menuNumber; - this.mainMenuHandler = mainMenuHandler; + this.handler = handler; + this.message = message; } @Override @@ -29,8 +30,8 @@ public int getMenuNumber() { } @Override - public MenuHandler getMenuController() { - return this.mainMenuHandler; + public Handleable getMenuHandler() { + return this.handler; } } diff --git a/src/com/smartstore/function/customer/add/AddCustomerHandler.java b/src/com/smartstore/function/customer/add/AddCustomerHandler.java deleted file mode 100644 index 6ec80a76..00000000 --- a/src/com/smartstore/function/customer/add/AddCustomerHandler.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.smartstore.function.customer.add; - -import com.smartstore.function.customer.CustomerMenuHandler; - -public interface AddCustomerHandler extends CustomerMenuHandler { - void run(T value); - - @Override - void run(); -} diff --git a/src/com/smartstore/function/customer/add/SetName.java b/src/com/smartstore/function/customer/add/SetName.java deleted file mode 100644 index bee67587..00000000 --- a/src/com/smartstore/function/customer/add/SetName.java +++ /dev/null @@ -1,28 +0,0 @@ -package com.smartstore.function.customer.add; - -import com.smartstore.function.membership.MembershipMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; - - -//implement other -public class SetName implements MembershipMenuHandler { - private static SetName instance; - - private SetName(){ - - } - - public static SetName getInstance(){ - if(instance == null){ - return new SetName(); - } - return instance; - } - - - @Override - public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { - - } -} diff --git a/src/com/smartstore/function/customer/add/UpdateCustomerHandler.java b/src/com/smartstore/function/customer/add/UpdateCustomerHandler.java new file mode 100644 index 00000000..b000032b --- /dev/null +++ b/src/com/smartstore/function/customer/add/UpdateCustomerHandler.java @@ -0,0 +1,16 @@ +package com.smartstore.function.customer.add; + +import com.smartstore.function.*; + +public interface UpdateCustomerHandler extends Handleable,MenuPrintable, MenuValidator, IntegerValidator, UserDataValidator { + + default String processSetElement(Class type, boolean isRequired, String msg) { + return getUserData(type, isRequired, msg); + } + + + @Override + default int getIntegerValue() { + return IntegerValidator.super.getIntegerValue(); + } +} \ No newline at end of file diff --git a/src/com/smartstore/function/customer/delete/DeleteCustomer.java b/src/com/smartstore/function/customer/delete/DeleteCustomer.java index 1ff86d87..cce2f3a8 100644 --- a/src/com/smartstore/function/customer/delete/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/delete/DeleteCustomer.java @@ -1,8 +1,6 @@ package com.smartstore.function.customer.delete; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; public class DeleteCustomer implements CustomerMenuHandler { private static DeleteCustomer instance; diff --git a/src/com/smartstore/function/customer/update/SetId.java b/src/com/smartstore/function/customer/update/SetId.java new file mode 100644 index 00000000..4cc84cf5 --- /dev/null +++ b/src/com/smartstore/function/customer/update/SetId.java @@ -0,0 +1,25 @@ +package com.smartstore.function.customer.update; + +import com.smartstore.function.Handleable; +import com.smartstore.function.customer.add.UpdateCustomerHandler; + + +//implement other +public class SetId implements UpdateCustomerHandler, Handleable { + private static SetId instance; + + private SetId(){ + + } + + public static SetId getInstance(){ + if(instance == null){ + return new SetId(); + } + return instance; + } + + @Override + public void run() { + } +} diff --git a/src/com/smartstore/function/customer/update/SetName.java b/src/com/smartstore/function/customer/update/SetName.java new file mode 100644 index 00000000..e7424b22 --- /dev/null +++ b/src/com/smartstore/function/customer/update/SetName.java @@ -0,0 +1,24 @@ +package com.smartstore.function.customer.update; + +import com.smartstore.function.customer.add.UpdateCustomerHandler; + + +//implement other +public class SetName implements UpdateCustomerHandler { + private static SetName instance; + + private SetName(){ + + } + + public static SetName getInstance(){ + if(instance == null){ + return new SetName(); + } + return instance; + } + + @Override + public void run() { + } +} diff --git a/src/com/smartstore/function/customer/update/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java index fa7617bc..747d1d0c 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -1,20 +1,45 @@ package com.smartstore.function.customer.update; +import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; -public class UpdateCustomer implements CustomerMenuHandler { +public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, MenuPrintable, EnumValueProvider, IntegerWithEndValidator { + private static UpdateCustomer instance; - private UpdateCustomer() { + private UpdateCustomer(){ } public static UpdateCustomer getInstance() { - if (instance == null) { + if(instance == null){ return new UpdateCustomer(); } return instance; } + + @Override + public boolean handleChoice(String numberOfUser) { + if(!"end".equalsIgnoreCase(numberOfUser)){ + boolean isExit = false; + int value=0; + String[] menus = enumValuesToStringArray(UpdateCustomerFunction.class); + for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ + printMenu(menus); + value = Integer.parseInt(getMenuNumber(menus)); + Function.of(value, UpdateCustomerFunction.class).run(); + + } + } + return true; + } + + @Override + public void run() { + boolean isExit = false; + while (!isExit){ + System.out.println("How many Customers to Input ? | type 'end' to cancel"); + isExit = handleChoice(String.valueOf(getIntegerValueOrEnd())); + } + } } diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java new file mode 100644 index 00000000..7a02f3a9 --- /dev/null +++ b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java @@ -0,0 +1,36 @@ +package com.smartstore.function.customer.update; + +import com.smartstore.function.Back; +import com.smartstore.function.Function; +import com.smartstore.function.Handleable; +import com.smartstore.function.membership.update.SetMinPaymentAmount; + +public enum UpdateCustomerFunction implements Function { + + NAME(1, SetName.getInstance(), "Set Name"), + ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), + USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), + PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), + BACK(5, Back.getInstance(), "Return to prev Menu"); + + + private final int menuNumber; + private final Handleable handler; + private final String message; + UpdateCustomerFunction(int menuNumber, Handleable handler, String message) { + this.menuNumber = menuNumber; + this.handler = handler; + this.message = message; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public Handleable getMenuHandler() { + return this.handler; + } + +} diff --git a/src/com/smartstore/function/customer/view/ViewCustomer.java b/src/com/smartstore/function/customer/view/ViewCustomer.java index 8e4a5ea5..b96bd38b 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomer.java +++ b/src/com/smartstore/function/customer/view/ViewCustomer.java @@ -1,8 +1,6 @@ package com.smartstore.function.customer.view; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; public class ViewCustomer implements CustomerMenuHandler { private static ViewCustomer instance; diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 11fe6a29..2184f920 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -1,7 +1,7 @@ package com.smartstore.function.mainmenu; import com.smartstore.function.Back; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.Handler; import com.smartstore.function.Function; public enum MainMenuFunction implements Function { @@ -12,9 +12,9 @@ public enum MainMenuFunction implements Function { QUIT(4, Back.getInstance()); private final int menuNumber; - private final MenuHandler mainMenuHandler; + private final Handler mainMenuHandler; - MainMenuFunction(int menuNumber, MenuHandler mainMenuHandler) { + MainMenuFunction(int menuNumber, Handler mainMenuHandler) { this.menuNumber = menuNumber; this.mainMenuHandler = mainMenuHandler; } @@ -25,7 +25,7 @@ public int getMenuNumber() { } @Override - public MenuHandler getMenuController() { + public Handler getMenuHandler() { return mainMenuHandler; } diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index 81fd343e..23da214c 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -1,12 +1,10 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.Handler; import com.smartstore.function.MenuPrintable; import com.smartstore.function.MenuValidator; -import java.io.IOException; - -public interface MainMenuHandler extends MenuPrintable, MenuHandler, MenuValidator { +public interface MainMenuHandler extends MenuPrintable, Handler, MenuValidator { default void run() { boolean isExit = false; @@ -31,6 +29,6 @@ default void run(int menuNumber) { @Override default int getCurrentMenuNumber(){ return Screen.MAIN_MENU.getMenuNumber(); - }; + } } diff --git a/src/com/smartstore/function/mainmenu/Screen.java b/src/com/smartstore/function/mainmenu/Screen.java index 4327b45a..c1b4759d 100644 --- a/src/com/smartstore/function/mainmenu/Screen.java +++ b/src/com/smartstore/function/mainmenu/Screen.java @@ -2,6 +2,7 @@ import java.util.Arrays; +// TODO: 2023-05-11 Sceen과 MainMenuFunction은 통합해도 관계없을 듯 public enum Screen { SPLASH(new String[]{"this is splash screen"}, -1), diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 2752d07a..52b10f39 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -2,7 +2,7 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; +import com.smartstore.function.Handler; import com.smartstore.function.membership.set.SetMembershipRequirement; import com.smartstore.function.membership.update.UpdateMembershipRequirement; import com.smartstore.function.membership.view.ViewMembershipRequirement; @@ -15,10 +15,10 @@ public enum MembershipFunction implements Function { private final int menuNumber; - private final MenuHandler membershipMenuHandler; - MembershipFunction(int menuNumber, MenuHandler membershipMenuHandler) { + private final Handler handler; + MembershipFunction(int menuNumber, Handler handler) { this.menuNumber = menuNumber; - this.membershipMenuHandler = membershipMenuHandler; + this.handler = handler; } @Override @@ -27,8 +27,8 @@ public int getMenuNumber() { } @Override - public MenuHandler getMenuController() { - return this.membershipMenuHandler; + public Handler getMenuHandler() { + return this.handler; } } diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 1e57ab27..2d9c008f 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -8,20 +8,20 @@ import java.util.NoSuchElementException; -public interface MembershipMenuHandler extends SelectSpecificPrintable, EnumValueProvider, MenuHandler, ParameterValidator, MenuValidator { +public interface MembershipMenuHandler extends SelectSpecificPrintable, EnumValueProvider, Handler, ParameterValidator, MenuValidator { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printMenu(getEnumValues(MembershipType.class)); + printMenu(enumValuesToStringArray(MembershipType.class)); - isExit = handleChoice(getParameter(getEnumValues(MembershipType.class))); + isExit = handleChoice(getParameter(enumValuesToStringArray(MembershipType.class))); } } default MembershipType getMembershipType(String membershipNames){ - String[] values = getEnumValues(MembershipType.class); + String[] values = enumValuesToStringArray(MembershipType.class); for (String membershipName : values) { try{ if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { @@ -50,13 +50,13 @@ default boolean handleChoice(String membershipName){ @Override default int getCurrentMenuNumber(){ return Screen.MEMBERSHIP.getMenuNumber(); - }; + } void processMembership(MembershipType membershipType, MembershipRequirement requirement); @Override - default String[] getEnumValues(Class type) { - return EnumValueProvider.super.getEnumValues(type); + default String[] enumValuesToStringArray(Class type) { + return EnumValueProvider.super.enumValuesToStringArray(type); } @Override diff --git a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java index 891b0eb0..4bc88269 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java @@ -19,6 +19,7 @@ public static SetMembershipRequirement getInstance() { return instance; } + //requirement null check before call method @Override public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement == null){ diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index 69af9a30..5805f3d9 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -39,9 +39,9 @@ public void printMenu(String[] menus) { System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); selected = membershipType; while (!isExit){ - menuPrintable.printMenu(getEnumValues(UpdateMembershipRequirementFunction.class)); + menuPrintable.printMenu(enumValuesToStringArray(UpdateMembershipRequirementFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getEnumValues(UpdateMembershipRequirementFunction.class))); + isExit = handleChoice(getMenuNumber(enumValuesToStringArray(UpdateMembershipRequirementFunction.class))); } } } @@ -66,11 +66,10 @@ public void printMenu(String[] menus) { } }; while (!isExit){ - selectSpecificPrintable.printMenu(getEnumValues(MembershipType.class)); + selectSpecificPrintable.printMenu(enumValuesToStringArray(MembershipType.class)); //get menu number from user until valid menu number - isExit = MembershipMenuHandler.super.handleChoice(getParameter(getEnumValues(MembershipType.class))); + isExit = MembershipMenuHandler.super.handleChoice(getParameter(enumValuesToStringArray(MembershipType.class))); } } - } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index 374f7149..c1db1e75 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -2,8 +2,7 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; -import com.smartstore.function.MenuHandler; -import com.smartstore.function.mainmenu.MainMenuHandler; +import com.smartstore.function.Handler; public enum UpdateMembershipRequirementFunction implements Function { @@ -12,8 +11,8 @@ public enum UpdateMembershipRequirementFunction implements Function { BACK(3, Back.getInstance()); private final int menuNumber; - private final MenuHandler mainMenuHandler; - UpdateMembershipRequirementFunction(int menuNumber, MenuHandler mainMenuHandler) { + private final Handler mainMenuHandler; + UpdateMembershipRequirementFunction(int menuNumber, Handler mainMenuHandler) { this.menuNumber = menuNumber; this.mainMenuHandler = mainMenuHandler; } @@ -23,8 +22,12 @@ public int getMenuNumber() { return this.menuNumber; } + public void run(int ordinal){ + getMenuHandler().run(ordinal); + } + @Override - public MenuHandler getMenuController() { + public Handler getMenuHandler() { return this.mainMenuHandler; } diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 2e1ed201..37621486 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -6,7 +6,6 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -import java.lang.reflect.Member; public class Memberships { private Map membershipList = new CustomEnumMap<>(MembershipType.class); From 0d8d1212a3205a01828e70d41680e9324ad08aa2 Mon Sep 17 00:00:00 2001 From: jy-b Date: Sat, 13 May 2023 18:26:26 +0900 Subject: [PATCH 59/79] feat: Feat : Add Customer [New Feat : Add Customer from user input] --- src/com/smartstore/customer/Customer.java | 5 +++++ src/com/smartstore/customer/Customers.java | 18 ++++++++++++++---- .../function/customer/add/AddCustomer.java | 7 +++---- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 9a163295..a5188d4c 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -8,11 +8,16 @@ public class Customer { private String customerId; private String customerName; + + private int usageTime; + private int paymentAmount; private MembershipType membership; public Customer(String customerName, String customerId, int usageTime, int paymentAmount) { this.customerId = customerId; this.customerName = customerName; + this.usageTime = usageTime; + this.paymentAmount = paymentAmount; this.membership = setMembership(usageTime, paymentAmount); } diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 339b1486..4c786e28 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -1,15 +1,25 @@ package com.smartstore.customer; +import com.smartstore.util.CustomList; + import java.util.List; public class Customers { - private List customerList; + private static Customers instance; + + private Customers() { + + } - public Customers getInstance(){ - return null; + public static Customers getInstance(){ + if(instance == null){ + instance = new Customers(); + } + return instance; } + private CustomList customerList = new CustomList(); - public List getCustomerList() { + public CustomList getCustomerList() { return customerList; } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 2aa90b04..76f5e5a2 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -1,9 +1,9 @@ package com.smartstore.function.customer.add; import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.customer.update.UpdateCustomerFunction; import java.io.IOException; import java.util.Arrays; @@ -30,7 +30,7 @@ public boolean handleChoice(String numberOfUser) { String id = ""; int usageTime = 0; int paymentAmount = 0; - + Customers customers = Customers.getInstance(); //get name & id from user, usage_time&payment_amount is optional for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ name = getUserData(name.getClass(),true, "Input User Name : "); @@ -44,8 +44,7 @@ public boolean handleChoice(String numberOfUser) { System.out.println("Input Payment Amount"); paymentAmount = ("end".equalsIgnoreCase(String.valueOf(getIntegerValueOrEnd()))) ? Integer.parseInt(getIntegerValueOrEnd()) : 0; } - - new Customer(name, id, usageTime, paymentAmount); + customers.getCustomerList().add(new Customer(name, id, usageTime, paymentAmount)); } } return true; From 1a7d32a7ca534833169f676205649322ac87f1ff Mon Sep 17 00:00:00 2001 From: jy-b Date: Sat, 13 May 2023 20:32:20 +0900 Subject: [PATCH 60/79] refactor: ref [fix comment] --- src/com/smartstore/function/customer/add/AddCustomer.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 76f5e5a2..9f1fe10a 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -55,7 +55,7 @@ boolean isOptionalInfoPassed(){ String value = ""; while (true){ try { - System.out.print("Wait for Input : "); + System.out.print("Wait for Input Y or N: "); value = br.readLine(); } catch (IOException e) { System.out.println("Please Input Y or N"); @@ -66,6 +66,7 @@ boolean isOptionalInfoPassed(){ if("n".equalsIgnoreCase(value)){ return false; } + System.out.println("Please Input Y or N"); } } From c3a6925e184b6d57842444e350fb493c4fb9975d Mon Sep 17 00:00:00 2001 From: jy-b Date: Sat, 13 May 2023 20:41:38 +0900 Subject: [PATCH 61/79] refactor: ref --- .../customer/CustomerMenuHandler.java | 15 +------- .../customer/delete/DeleteCustomer.java | 4 ++ .../function/customer/update/SetId.java | 3 -- .../function/customer/update/SetName.java | 4 -- .../UpdateCustomerHandler.java | 2 +- .../customer/view/ViewCustomerFunction.java | 37 +++++++++++++++++++ 6 files changed, 43 insertions(+), 22 deletions(-) rename src/com/smartstore/function/customer/{add => update}/UpdateCustomerHandler.java (89%) create mode 100644 src/com/smartstore/function/customer/view/ViewCustomerFunction.java diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 4fbc362c..823bec65 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -17,20 +17,7 @@ default void run() { isExit = handleChoice(getMenuNumber(new String[]{})); } } - - @Override - default boolean handleChoice(String membershipName){ - if(!"end".equalsIgnoreCase(membershipName)){ - //get enum_value using string from MembershipType - /* MembershipType membershipType = getMembershipType(membershipName); - //find requirement using type from enum_map - MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); - - //run each function's method - run(membershipType, requirement); - */ } - return true; - } + boolean handleChoice(String membershipName); @Override default int getCurrentMenuNumber() { diff --git a/src/com/smartstore/function/customer/delete/DeleteCustomer.java b/src/com/smartstore/function/customer/delete/DeleteCustomer.java index cce2f3a8..85579ffa 100644 --- a/src/com/smartstore/function/customer/delete/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/delete/DeleteCustomer.java @@ -17,4 +17,8 @@ public static DeleteCustomer getInstance() { } + @Override + public boolean handleChoice(String membershipName) { + return false; + } } diff --git a/src/com/smartstore/function/customer/update/SetId.java b/src/com/smartstore/function/customer/update/SetId.java index 4cc84cf5..266d79d2 100644 --- a/src/com/smartstore/function/customer/update/SetId.java +++ b/src/com/smartstore/function/customer/update/SetId.java @@ -1,10 +1,7 @@ package com.smartstore.function.customer.update; import com.smartstore.function.Handleable; -import com.smartstore.function.customer.add.UpdateCustomerHandler; - -//implement other public class SetId implements UpdateCustomerHandler, Handleable { private static SetId instance; diff --git a/src/com/smartstore/function/customer/update/SetName.java b/src/com/smartstore/function/customer/update/SetName.java index e7424b22..71faf808 100644 --- a/src/com/smartstore/function/customer/update/SetName.java +++ b/src/com/smartstore/function/customer/update/SetName.java @@ -1,9 +1,5 @@ package com.smartstore.function.customer.update; -import com.smartstore.function.customer.add.UpdateCustomerHandler; - - -//implement other public class SetName implements UpdateCustomerHandler { private static SetName instance; diff --git a/src/com/smartstore/function/customer/add/UpdateCustomerHandler.java b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java similarity index 89% rename from src/com/smartstore/function/customer/add/UpdateCustomerHandler.java rename to src/com/smartstore/function/customer/update/UpdateCustomerHandler.java index b000032b..9c624b2d 100644 --- a/src/com/smartstore/function/customer/add/UpdateCustomerHandler.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java @@ -1,4 +1,4 @@ -package com.smartstore.function.customer.add; +package com.smartstore.function.customer.update; import com.smartstore.function.*; diff --git a/src/com/smartstore/function/customer/view/ViewCustomerFunction.java b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java new file mode 100644 index 00000000..9b47fed9 --- /dev/null +++ b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java @@ -0,0 +1,37 @@ +package com.smartstore.function.customer.view; + +import com.smartstore.function.Back; +import com.smartstore.function.Function; +import com.smartstore.function.Handleable; +import com.smartstore.function.customer.update.SetName; +import com.smartstore.function.membership.update.SetMinPaymentAmount; + +public enum ViewCustomerFunction implements Function { + + NAME(1, SetName.getInstance(), "Set Name"), + ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), + USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), + PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), + BACK(5, Back.getInstance(), "Return to prev Menu"); + + + private final int menuNumber; + private final Handleable handler; + private final String message; + ViewCustomerFunction(int menuNumber, Handleable handler, String message) { + this.menuNumber = menuNumber; + this.handler = handler; + this.message = message; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public Handleable getMenuHandler() { + return this.handler; + } + +} From 6b4219c15b6b2846b14f2d299555db8ac422da5e Mon Sep 17 00:00:00 2001 From: jy-b Date: Sat, 13 May 2023 20:54:24 +0900 Subject: [PATCH 62/79] feat: Feat : get subList [New Feat : Get sub list from CustomList] --- src/com/smartstore/util/CustomList.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index aee3535c..0ecb7990 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -1,5 +1,6 @@ package com.smartstore.util; +import java.util.ArrayList; import java.util.Arrays; @@ -120,6 +121,14 @@ public void addAll(int index, CustomList newElements){ size = currentSize + newSize; } + public CustomList subList(int fromIndex, int toIndex){ + CustomList subList = new CustomList<>(); + for(int i = fromIndex ; i <= toIndex ; i++){ + subList.add((T)elements[i]); + } + return subList; + } + private void fastCopy(int index, int desPosition, int movedIndex){ System.arraycopy(elements, index, elements, desPosition, movedIndex); } From aa9584df713bd893b12c82e49e633606c2159825 Mon Sep 17 00:00:00 2001 From: jy-b Date: Sun, 14 May 2023 09:45:45 +0900 Subject: [PATCH 63/79] feat: Feat : View Customer List [ New Feat : View Customer List All, By Paging, By Id ] --- src/com/smartstore/customer/Customer.java | 19 ++++-- src/com/smartstore/customer/Customers.java | 14 +++- .../smartstore/function/AnswerValidator.java | 25 ++++++++ src/com/smartstore/function/Back.java | 13 +--- .../function/EnumValueProvider.java | 31 ++++++--- src/com/smartstore/function/Function.java | 11 +++- .../smartstore/function/HandleableParam.java | 5 ++ src/com/smartstore/function/Handler.java | 1 - .../smartstore/function/MenuPrintable.java | 2 +- src/com/smartstore/function/MenuProvider.java | 5 ++ .../function/ParameterValidator.java | 4 +- ...rintable.java => SelectablePrintable.java} | 4 +- .../function/SubMenuHandleable.java | 5 ++ ...idator.java => ValueWithEndValidator.java} | 10 +-- .../function/customer/CustomerFunction.java | 23 ++++--- .../customer/CustomerMenuHandler.java | 11 ++-- .../function/customer/add/AddCustomer.java | 38 ++--------- .../customer/add/AddCustomerFunction.java | 37 ----------- .../customer/update/UpdateCustomer.java | 8 +-- .../update/UpdateCustomerFunction.java | 11 +++- .../function/customer/view/ViewCustomer.java | 28 +++++++- .../customer/view/ViewCustomerAll.java | 36 +++++++++++ .../customer/view/ViewCustomerById.java | 39 +++++++++++ .../customer/view/ViewCustomerByPaging.java | 64 +++++++++++++++++++ .../customer/view/ViewCustomerFunction.java | 20 +++--- .../function/mainmenu/CustomerMenu.java | 11 ++++ .../function/mainmenu/MainMenu.java | 10 +-- .../function/mainmenu/MainMenuFunction.java | 39 ++++++----- .../function/mainmenu/MainMenuHandler.java | 16 ++--- .../function/mainmenu/MembershipMenu.java | 10 +++ .../membership/MembershipFunction.java | 22 +++++-- .../membership/MembershipMenuHandler.java | 21 ++---- .../update/SetMinPaymentAmount.java | 3 +- .../membership/update/SetMinUsage.java | 3 +- .../update/UpdateMembershipRequirement.java | 20 +++--- .../UpdateMembershipRequirementFunction.java | 24 ++++--- .../smartstore/membership/MembershipType.java | 20 ++++-- src/com/smartstore/util/CustomList.java | 22 +++++-- src/com/smartstore/util/Define.java | 5 ++ src/com/smartstore/util/List.java | 5 +- 40 files changed, 464 insertions(+), 231 deletions(-) create mode 100644 src/com/smartstore/function/AnswerValidator.java create mode 100644 src/com/smartstore/function/HandleableParam.java create mode 100644 src/com/smartstore/function/MenuProvider.java rename src/com/smartstore/function/{SelectSpecificPrintable.java => SelectablePrintable.java} (68%) create mode 100644 src/com/smartstore/function/SubMenuHandleable.java rename src/com/smartstore/function/{IntegerWithEndValidator.java => ValueWithEndValidator.java} (65%) delete mode 100644 src/com/smartstore/function/customer/add/AddCustomerFunction.java create mode 100644 src/com/smartstore/function/customer/view/ViewCustomerAll.java create mode 100644 src/com/smartstore/function/customer/view/ViewCustomerById.java create mode 100644 src/com/smartstore/function/customer/view/ViewCustomerByPaging.java create mode 100644 src/com/smartstore/util/Define.java diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index a5188d4c..93caf3c4 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -13,6 +13,9 @@ public class Customer { private int paymentAmount; private MembershipType membership; + public Customer() { + } + public Customer(String customerName, String customerId, int usageTime, int paymentAmount) { this.customerId = customerId; this.customerName = customerName; @@ -40,13 +43,17 @@ public MembershipType setMembership(int usageTime, int paymentAmount) { return membership; } - public void setCustomerId(String customerId) { - this.customerId = customerId; + public String getCustomerId() { + return customerId; } - public void setCustomerName(String customerName) { - this.customerName = customerName; + @Override + public String toString() { + return "customerId='" + customerId + '\'' + + ", customerName='" + customerName + '\'' + + ", usageTime=" + usageTime + + ", paymentAmount=" + paymentAmount + + ", membership=" + membership + + "\n"; } - - } diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 4c786e28..36950e34 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -2,7 +2,10 @@ import com.smartstore.util.CustomList; +import java.util.Arrays; import java.util.List; +import java.util.Optional; +import java.util.stream.Stream; public class Customers { private static Customers instance; @@ -23,7 +26,14 @@ public CustomList getCustomerList() { return customerList; } - public void refresh(){ - + public Customer getCustomerById(String id){ + if(customerList.size() == 0){ + return null; + } + Optional customerOptional = Arrays.stream(customerList.toArray(new Customer[customerList.size()])) + .filter(customer -> id.equals(customer.getCustomerId())) + .findFirst(); + return customerOptional.orElse(null); } + } diff --git a/src/com/smartstore/function/AnswerValidator.java b/src/com/smartstore/function/AnswerValidator.java new file mode 100644 index 00000000..3b2459cc --- /dev/null +++ b/src/com/smartstore/function/AnswerValidator.java @@ -0,0 +1,25 @@ +package com.smartstore.function; + +import java.io.IOException; + +public interface AnswerValidator extends Readable{ + default boolean isAnswerYes(String msg){ + System.out.println(msg); + String value = ""; + while (true){ + try { + System.out.print("Wait for Input Y or N: "); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input Y or N"); + } + if("y".equalsIgnoreCase(value)){ + return true; + } + if("n".equalsIgnoreCase(value)){ + return false; + } + System.out.println("Please Input Y or N"); + } + } +} diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 6012a24d..6ffcc2b9 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -1,8 +1,7 @@ package com.smartstore.function; -import com.smartstore.function.mainmenu.Screen; -public class Back implements Handler { +public class Back implements Handleable, HandleableParam { private static Back instance; private Back(){ @@ -16,11 +15,6 @@ public static Back getInstance() { return instance; } - @Override - public boolean handleChoice(String menuNumber) { - return false; - } - @Override public void run(){ } @@ -30,9 +24,4 @@ public void run(int menu) { } - @Override - public int getCurrentMenuNumber() { - return Screen.QUIT.getMenuNumber(); - } - } diff --git a/src/com/smartstore/function/EnumValueProvider.java b/src/com/smartstore/function/EnumValueProvider.java index 4dcd9614..178c48c5 100644 --- a/src/com/smartstore/function/EnumValueProvider.java +++ b/src/com/smartstore/function/EnumValueProvider.java @@ -1,16 +1,29 @@ package com.smartstore.function; -import com.smartstore.function.mainmenu.MainMenuHandler; -import com.smartstore.util.CustomList; +import com.smartstore.function.mainmenu.MainMenuFunction; -public interface EnumValueProvider> extends MainMenuHandler { +import java.util.Arrays; - default String[] enumValuesToStringArray(Class type){ - CustomList keyList = new CustomList<>(); - for(T enumKey : type.getEnumConstants()){ - keyList.add(enumKey.name()); +public interface EnumValueProvider & MenuProvider> { + + default String[] getMenuListFromEnum(Class type){ + T[] enumConstants = type.getEnumConstants(); + String[] menus = new String[enumConstants.length]; + for (int i = 0; i < enumConstants.length; i++) { + menus[i] = enumConstants[i].getMenuText(); + } + return menus; + } + default String[] getMenuListFromEnum(Class type, int fromIndex, int toIndex){ + T[] enumConstants = type.getEnumConstants(); + String[] menus = new String[enumConstants.length]; + int count = 0; + for (int i = fromIndex; i <= toIndex; i++) { + menus[count] = enumConstants[i].getMenuText(); + count++; } - return keyList.toArray(String[].class); + menus = Arrays.copyOf(menus,count); + return menus; } -} +} \ No newline at end of file diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index 3b2749ed..863f7074 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -2,7 +2,7 @@ import java.util.Arrays; -public interface Function { +public interface Function extends MenuProvider, Handleable, HandleableParam { static & Function> E of(int menuNumber, Class enumClass){ return Arrays.stream(enumClass.getEnumConstants()) @@ -12,14 +12,19 @@ static & Function> E of(int menuNumber, Class enumClass){ int getMenuNumber(); - T getMenuHandler(); + T getMenuHandler(); default boolean isMatchedMenuNumber(int menuNumber){ return getMenuNumber() == menuNumber; } + @Override default void run() { - getMenuHandler().run(); + ((Handleable) getMenuHandler()).run(); } + @Override + default void run(int menuNumber) { + ((HandleableParam) getMenuHandler()).run(menuNumber); + } } diff --git a/src/com/smartstore/function/HandleableParam.java b/src/com/smartstore/function/HandleableParam.java new file mode 100644 index 00000000..f7ef1ced --- /dev/null +++ b/src/com/smartstore/function/HandleableParam.java @@ -0,0 +1,5 @@ +package com.smartstore.function; + +public interface HandleableParam { + void run(int menu); +} diff --git a/src/com/smartstore/function/Handler.java b/src/com/smartstore/function/Handler.java index 3d9c609f..2ad403d2 100644 --- a/src/com/smartstore/function/Handler.java +++ b/src/com/smartstore/function/Handler.java @@ -2,7 +2,6 @@ public interface Handler extends Readable, Handleable { boolean handleChoice(String menuNumber); - void run(int menu); int getCurrentMenuNumber(); } diff --git a/src/com/smartstore/function/MenuPrintable.java b/src/com/smartstore/function/MenuPrintable.java index d80a1ef5..f5580c3e 100644 --- a/src/com/smartstore/function/MenuPrintable.java +++ b/src/com/smartstore/function/MenuPrintable.java @@ -3,7 +3,7 @@ public interface MenuPrintable { default void printMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("%d. %s\n",i+1,menus[i]); + System.out.printf("%d. %s\n",i + 1,menus[i]); } } } diff --git a/src/com/smartstore/function/MenuProvider.java b/src/com/smartstore/function/MenuProvider.java new file mode 100644 index 00000000..0bd2c8c0 --- /dev/null +++ b/src/com/smartstore/function/MenuProvider.java @@ -0,0 +1,5 @@ +package com.smartstore.function; + +public interface MenuProvider { + String getMenuText(); +} diff --git a/src/com/smartstore/function/ParameterValidator.java b/src/com/smartstore/function/ParameterValidator.java index a6d613da..bb8bb761 100644 --- a/src/com/smartstore/function/ParameterValidator.java +++ b/src/com/smartstore/function/ParameterValidator.java @@ -18,12 +18,12 @@ default String getParameter(String[] values) { break; } for (String membershipName : values) { - if (MembershipType.valueOf(membershipName).isMatchedName(valueName)) { + if (MembershipType.valueOf(membershipName.toUpperCase()).isMatchedName(valueName)) { isExit = true; break; } } - } catch (IOException | NullPointerException e) { + } catch (IOException | IllegalArgumentException | NullPointerException e) { System.out.println("Invalid Parameter"); } } diff --git a/src/com/smartstore/function/SelectSpecificPrintable.java b/src/com/smartstore/function/SelectablePrintable.java similarity index 68% rename from src/com/smartstore/function/SelectSpecificPrintable.java rename to src/com/smartstore/function/SelectablePrintable.java index ce2e1a55..bbece477 100644 --- a/src/com/smartstore/function/SelectSpecificPrintable.java +++ b/src/com/smartstore/function/SelectablePrintable.java @@ -1,7 +1,7 @@ package com.smartstore.function; -public interface SelectSpecificPrintable { - default void printMenu(String[] menus){ +public interface SelectablePrintable { + default void printSelectable(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ System.out.printf("| %s ",menus[i]); } diff --git a/src/com/smartstore/function/SubMenuHandleable.java b/src/com/smartstore/function/SubMenuHandleable.java new file mode 100644 index 00000000..456ce677 --- /dev/null +++ b/src/com/smartstore/function/SubMenuHandleable.java @@ -0,0 +1,5 @@ +package com.smartstore.function; + +public interface SubMenuHandleable { + void run(int menu); +} diff --git a/src/com/smartstore/function/IntegerWithEndValidator.java b/src/com/smartstore/function/ValueWithEndValidator.java similarity index 65% rename from src/com/smartstore/function/IntegerWithEndValidator.java rename to src/com/smartstore/function/ValueWithEndValidator.java index aa8d3807..0f4b8bd0 100644 --- a/src/com/smartstore/function/IntegerWithEndValidator.java +++ b/src/com/smartstore/function/ValueWithEndValidator.java @@ -2,19 +2,19 @@ import java.io.IOException; -public interface IntegerWithEndValidator extends Readable{ +public interface ValueWithEndValidator extends Readable{ - //change to validate name of user - default String getIntegerValueOrEnd(){ + default String getValueOrEnd(String msg, Class type){ + System.out.println(Number.class.isAssignableFrom(type)); String value; while (true){ try { - System.out.print("Wait for Input : "); + System.out.println(msg); value = br.readLine(); if("end".equalsIgnoreCase(String.valueOf(value))){ break; } - if(Integer.parseInt(value) < 0){ + if(Number.class.isAssignableFrom(type) && Integer.parseInt(value) < 0){ throw new IllegalArgumentException(); }else { break; diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index 8ded1b4a..1e6bd9b2 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -8,19 +8,26 @@ import com.smartstore.function.customer.update.UpdateCustomer; import com.smartstore.function.customer.view.ViewCustomer; -public enum CustomerFunction implements Function { - ADD(1, AddCustomer.getInstance()), - VIEW(2, ViewCustomer.getInstance()), - UPDATE(3, UpdateCustomer.getInstance()), - DELETE(4, DeleteCustomer.getInstance()), - BACK(5, Back.getInstance()); - +public enum CustomerFunction implements Function { + ADD(1, AddCustomer.getInstance(), "Add Customer Data"), + VIEW(2, ViewCustomer.getInstance(), "View Customer Data"), + UPDATE(3, UpdateCustomer.getInstance(), "Update Customer Data"), + DELETE(4, DeleteCustomer.getInstance(), "Delete Customer Data"), + BACK(5, Back.getInstance(), "Return to Prev Menu"); private final int menuNumber; private final Handleable handler; - CustomerFunction(int menuNumber, Handleable handler) { + + private String menuText; + CustomerFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; + this.menuText = menuText; + } + + @Override + public String getMenuText() { + return menuText; } @Override diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 823bec65..085fe178 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -1,26 +1,23 @@ package com.smartstore.function.customer; import com.smartstore.function.EnumValueProvider; +import com.smartstore.function.Handleable; import com.smartstore.function.MenuPrintable; import com.smartstore.function.MenuValidator; -import com.smartstore.function.mainmenu.MainMenuFunction; import com.smartstore.membership.MembershipType; -public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator { +public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator, Handleable { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printMenu(enumValuesToStringArray(MembershipType.class)); + printMenu(getMenuListFromEnum(MembershipType.class)); isExit = handleChoice(getMenuNumber(new String[]{})); } } + boolean handleChoice(String membershipName); - @Override - default int getCurrentMenuNumber() { - return MainMenuFunction.CUSTOMER_MANAGEMENT.getMenuNumber(); - } } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 9f1fe10a..493de9e1 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -5,10 +5,7 @@ import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import java.io.IOException; -import java.util.Arrays; - -public class AddCustomer implements CustomerMenuHandler, MenuPrintable, IntegerWithEndValidator,UserDataValidator { +public class AddCustomer implements CustomerMenuHandler, MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator { private static AddCustomer instance; @@ -35,14 +32,14 @@ public boolean handleChoice(String numberOfUser) { for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ name = getUserData(name.getClass(),true, "Input User Name : "); id = getUserData(id.getClass(),true, "Input User ID : "); - if(!isOptionalInfoPassed()){ + if(!isAnswerYes("Do you Want Set Optional Info?")){ usageTime = 0; paymentAmount = 0; }else { - System.out.println("Input Usage Time"); - usageTime = ("end".equalsIgnoreCase(String.valueOf(getIntegerValueOrEnd()))) ? Integer.parseInt(getIntegerValueOrEnd()) : 0; - System.out.println("Input Payment Amount"); - paymentAmount = ("end".equalsIgnoreCase(String.valueOf(getIntegerValueOrEnd()))) ? Integer.parseInt(getIntegerValueOrEnd()) : 0; + String value = getValueOrEnd("Input Usage Time\nWait for Input Type 'end' to exit : ", Integer.class); + usageTime = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); + value = getValueOrEnd("Input Payment Amount\nWait for Input Type 'end' to exit : ", Integer.class); + paymentAmount = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); } customers.getCustomerList().add(new Customer(name, id, usageTime, paymentAmount)); } @@ -50,32 +47,11 @@ public boolean handleChoice(String numberOfUser) { return true; } - boolean isOptionalInfoPassed(){ - System.out.println("Do you Want Set Optional Info?"); - String value = ""; - while (true){ - try { - System.out.print("Wait for Input Y or N: "); - value = br.readLine(); - } catch (IOException e) { - System.out.println("Please Input Y or N"); - } - if("y".equalsIgnoreCase(value)){ - return true; - } - if("n".equalsIgnoreCase(value)){ - return false; - } - System.out.println("Please Input Y or N"); - } - } - @Override public void run() { boolean isExit = false; while (!isExit){ - System.out.println("How many Customers to Input ? | type 'end' to cancel"); - isExit = handleChoice(String.valueOf(getIntegerValueOrEnd())); + isExit = handleChoice(String.valueOf(getValueOrEnd("How many Customers to Input ? | type 'end' or '0' to cancel ...", Integer.class))); } } } diff --git a/src/com/smartstore/function/customer/add/AddCustomerFunction.java b/src/com/smartstore/function/customer/add/AddCustomerFunction.java deleted file mode 100644 index e25a0b8f..00000000 --- a/src/com/smartstore/function/customer/add/AddCustomerFunction.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.smartstore.function.customer.add; - -import com.smartstore.function.Back; -import com.smartstore.function.Function; -import com.smartstore.function.Handleable; -import com.smartstore.function.customer.update.SetName; -import com.smartstore.function.membership.update.SetMinPaymentAmount; - -public enum AddCustomerFunction implements Function { - - NAME(1, SetName.getInstance(), "Set Name"), - ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), - USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), - PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), - BACK(5, Back.getInstance(), "Return to prev Menu"); - - - private final int menuNumber; - private final Handleable handler; - private final String message; - AddCustomerFunction(int menuNumber, Handleable handler, String message) { - this.menuNumber = menuNumber; - this.handler = handler; - this.message = message; - } - - @Override - public int getMenuNumber() { - return this.menuNumber; - } - - @Override - public Handleable getMenuHandler() { - return this.handler; - } - -} diff --git a/src/com/smartstore/function/customer/update/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java index 747d1d0c..4c66f632 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -3,7 +3,8 @@ import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, MenuPrintable, EnumValueProvider, IntegerWithEndValidator { + +public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, ValueWithEndValidator { private static UpdateCustomer instance; @@ -23,7 +24,7 @@ public boolean handleChoice(String numberOfUser) { if(!"end".equalsIgnoreCase(numberOfUser)){ boolean isExit = false; int value=0; - String[] menus = enumValuesToStringArray(UpdateCustomerFunction.class); + String[] menus = getMenuListFromEnum(UpdateCustomerFunction.class); for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ printMenu(menus); value = Integer.parseInt(getMenuNumber(menus)); @@ -38,8 +39,7 @@ public boolean handleChoice(String numberOfUser) { public void run() { boolean isExit = false; while (!isExit){ - System.out.println("How many Customers to Input ? | type 'end' to cancel"); - isExit = handleChoice(String.valueOf(getIntegerValueOrEnd())); + isExit = handleChoice(String.valueOf(getValueOrEnd("\nHow many Customers to Input ? | type 'end' to cancel ...", Integer.class))); } } } diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java index 7a02f3a9..fa34636f 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java @@ -16,11 +16,16 @@ public enum UpdateCustomerFunction implements Function { private final int menuNumber; private final Handleable handler; - private final String message; - UpdateCustomerFunction(int menuNumber, Handleable handler, String message) { + private final String menuText; + UpdateCustomerFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; - this.message = message; + this.menuText = menuText; + } + + @Override + public String getMenuText() { + return menuText; } @Override diff --git a/src/com/smartstore/function/customer/view/ViewCustomer.java b/src/com/smartstore/function/customer/view/ViewCustomer.java index b96bd38b..d6d78bf7 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomer.java +++ b/src/com/smartstore/function/customer/view/ViewCustomer.java @@ -1,8 +1,11 @@ package com.smartstore.function.customer.view; +import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.membership.update.UpdateMembershipRequirementFunction; + +public class ViewCustomer implements CustomerMenuHandler, MenuValidator, Handleable { -public class ViewCustomer implements CustomerMenuHandler { private static ViewCustomer instance; private ViewCustomer(){ @@ -10,9 +13,30 @@ private ViewCustomer(){ } public static ViewCustomer getInstance() { - if (instance == null) { + if(instance == null){ return new ViewCustomer(); } return instance; } + @Override + public void run() { + boolean isExit = false; + + while (!isExit){ + printMenu(getMenuListFromEnum(ViewCustomerFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(ViewCustomerFunction.class))); + } + } + + + + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == ViewCustomerFunction.BACK.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), ViewCustomerFunction.class).run(); + return true; } } diff --git a/src/com/smartstore/function/customer/view/ViewCustomerAll.java b/src/com/smartstore/function/customer/view/ViewCustomerAll.java new file mode 100644 index 00000000..5918986a --- /dev/null +++ b/src/com/smartstore/function/customer/view/ViewCustomerAll.java @@ -0,0 +1,36 @@ +package com.smartstore.function.customer.view; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.*; +import com.smartstore.util.List; + +public class ViewCustomerAll implements Handleable { + + private static ViewCustomerAll instance; + + private ViewCustomerAll(){ + + } + + public static ViewCustomerAll getInstance() { + if(instance == null){ + return new ViewCustomerAll(); + } + return instance; + } + + @Override + public void run() { + Customers customers = Customers.getInstance(); + List customerList = customers.getCustomerList(); + if (customerList.size() == 0){ + System.out.println("No Customer Data"); + return; + } + System.out.println("List of Customers"); + System.out.println("======================================"); + System.out.println(customerList.toString()); + System.out.println("======================================"); + } +} diff --git a/src/com/smartstore/function/customer/view/ViewCustomerById.java b/src/com/smartstore/function/customer/view/ViewCustomerById.java new file mode 100644 index 00000000..e5af8be7 --- /dev/null +++ b/src/com/smartstore/function/customer/view/ViewCustomerById.java @@ -0,0 +1,39 @@ +package com.smartstore.function.customer.view; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.*; + +public class ViewCustomerById implements ValueWithEndValidator, Handleable { + + private static ViewCustomerById instance; + + private ViewCustomerById(){ + + } + + public static ViewCustomerById getInstance() { + if(instance == null){ + return new ViewCustomerById(); + } + return instance; + } + + @Override + public void run() { + Customers customers = Customers.getInstance(); + Customer customer = null; + String value = getValueOrEnd("Type User Id to Find | 'end' to cancel : ", String.class); + String msg=""; + + if(!"end".equalsIgnoreCase(value)){ + customer = customers.getCustomerById(value); + if(customer == null){ + msg = "There is No User : " + value; + }else { + msg = customer.toString(); + } + } + System.out.println(msg); + } +} diff --git a/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java new file mode 100644 index 00000000..8e760222 --- /dev/null +++ b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java @@ -0,0 +1,64 @@ +package com.smartstore.function.customer.view; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.*; +import com.smartstore.util.Define; +import com.smartstore.util.List; + +public class ViewCustomerByPaging implements MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator, Handleable { + + private static ViewCustomerByPaging instance; + + private ViewCustomerByPaging(){ + + } + + public static ViewCustomerByPaging getInstance() { + if(instance == null){ + return new ViewCustomerByPaging(); + } + return instance; + } + + private boolean indexRangeCheck(int sizeOfList, int index){ + if(index + Define.PAGING > sizeOfList){ + return false; + } + return true; + } + + @Override + public void run() { + Customers customers = Customers.getInstance(); + List customerList = customers.getCustomerList(); + if (customerList.size() == 0){ + System.out.println("No Customer Data"); + return; + } + int listSize = customers.getCustomerList().size(); + int fromIndex=0; + int toIndex; + if(listSize > Define.PAGING){ + while (true){ + toIndex = indexRangeCheck(listSize, fromIndex) ? fromIndex + Define.PAGING -1 : listSize-1; + System.out.println("======================================"); + System.out.printf("List of Customers %d - %d / %d\n",fromIndex+1,toIndex+1 > listSize ? listSize : toIndex +1, listSize); + System.out.print(customerList.subList(fromIndex, toIndex).toString()); + fromIndex = toIndex + 1; + if(fromIndex >= listSize){ + break; + } + if(!isAnswerYes("Continue To See Customer list, Type 'Y'")){ + break; + } + } + }else{ + System.out.printf("List of Customers %d - %d\n",1,listSize); + System.out.println("======================================"); + System.out.print(customerList.toString()); + } + + System.out.println("======================================"); + } +} diff --git a/src/com/smartstore/function/customer/view/ViewCustomerFunction.java b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java index 9b47fed9..b01733d6 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerFunction.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java @@ -3,25 +3,22 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; import com.smartstore.function.Handleable; -import com.smartstore.function.customer.update.SetName; -import com.smartstore.function.membership.update.SetMinPaymentAmount; public enum ViewCustomerFunction implements Function { - NAME(1, SetName.getInstance(), "Set Name"), - ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), - USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), - PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), - BACK(5, Back.getInstance(), "Return to prev Menu"); + ALL(1, ViewCustomerAll.getInstance(), "ALL Customer List"), + PAGING(2, ViewCustomerByPaging.getInstance(), "Customer List By Paging"), + BY_ID(3, ViewCustomerById.getInstance(), "Find Customer by Id"), + BACK(4, Back.getInstance(), "Return to Prev Menu"); private final int menuNumber; private final Handleable handler; - private final String message; - ViewCustomerFunction(int menuNumber, Handleable handler, String message) { + private final String menuText; + ViewCustomerFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; - this.message = message; + this.menuText = menuText; } @Override @@ -29,6 +26,9 @@ public int getMenuNumber() { return this.menuNumber; } + @Override + public String getMenuText() { return this.menuText; } + @Override public Handleable getMenuHandler() { return this.handler; diff --git a/src/com/smartstore/function/mainmenu/CustomerMenu.java b/src/com/smartstore/function/mainmenu/CustomerMenu.java index 05cee11b..9ad21640 100644 --- a/src/com/smartstore/function/mainmenu/CustomerMenu.java +++ b/src/com/smartstore/function/mainmenu/CustomerMenu.java @@ -2,6 +2,7 @@ import com.smartstore.function.Function; import com.smartstore.function.customer.CustomerFunction; +import com.smartstore.function.membership.MembershipFunction; public class CustomerMenu implements MainMenuHandler { public static CustomerMenu getInstance() { @@ -13,6 +14,16 @@ public static CustomerMenu getInstance() { private static CustomerMenu instance; + @Override + public void run() { + boolean isExit = false; + while (!isExit){ + printMenu(getMenuListFromEnum(CustomerFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(CustomerFunction.class))); + } + } + @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == CustomerFunction.BACK.getMenuNumber()) { diff --git a/src/com/smartstore/function/mainmenu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java index 7f9aa608..7d2e623d 100644 --- a/src/com/smartstore/function/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -1,6 +1,8 @@ package com.smartstore.function.mainmenu; +import com.smartstore.function.EnumValueProvider; import com.smartstore.function.Function; +import com.smartstore.function.MenuPrintable; import java.util.Arrays; @@ -17,8 +19,8 @@ private MainMenu(){ } - private void printSlashScreen(){ - System.out.println(Arrays.toString(Screen.of(-1).getMenus())); + private void printSplashScreen(){ + System.out.println(Function.of(0, MainMenuFunction.class).getMenuText()); } @Override @@ -27,13 +29,13 @@ public boolean handleChoice(String menuNumber) { return true; } //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(); + Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(Integer.parseInt(menuNumber)); return false; } @Override public void run() { - printSlashScreen(); + printSplashScreen(); MainMenuHandler.super.run(); } diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 2184f920..6650daa3 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -1,22 +1,28 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.Back; -import com.smartstore.function.Handler; -import com.smartstore.function.Function; +import com.smartstore.function.*; -public enum MainMenuFunction implements Function { - MAIN_MENU(0, MainMenu.getInstance()), - MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance()), - CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance()), - REPORT_MANAGEMENT(3, Back.getInstance()), - QUIT(4, Back.getInstance()); +public enum MainMenuFunction implements Function { + SPLASH_SCREEN(0, MainMenu.getInstance(), "SPLASH_SCREEN"), + MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance(), "Membership Management"), + CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance(), "Customer Management"), + REPORT_MANAGEMENT(3, Back.getInstance(), "Report"), + QUIT(4, Back.getInstance(), "Quit"); private final int menuNumber; - private final Handler mainMenuHandler; + private final Handleable handler; - MainMenuFunction(int menuNumber, Handler mainMenuHandler) { + private String menuText; + + MainMenuFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; - this.mainMenuHandler = mainMenuHandler; + this.handler = handler; + this.menuText = menuText; + } + + @Override + public String getMenuText() { + return menuText; } @Override @@ -24,13 +30,12 @@ public int getMenuNumber() { return menuNumber; } - @Override - public Handler getMenuHandler() { - return mainMenuHandler; + public Handleable getMenuHandler() { + return handler; } @Override - public void run() { - mainMenuHandler.run(menuNumber); + public void run(int menuNumber) { + getMenuHandler().run(); } } diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index 23da214c..e6776f4a 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -1,17 +1,17 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.Handler; -import com.smartstore.function.MenuPrintable; -import com.smartstore.function.MenuValidator; +import com.smartstore.function.*; -public interface MainMenuHandler extends MenuPrintable, Handler, MenuValidator { +public interface MainMenuHandler extends MenuPrintable, EnumValueProvider, Handler, MenuValidator, HandleableParam { default void run() { boolean isExit = false; while (!isExit){ - printMenu(Screen.of(getCurrentMenuNumber()).getMenus()); + printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(Screen.of(getCurrentMenuNumber()).getMenus())); + //isExit = handleChoice(getMenuNumber(Screen.of(getCurrentMenuNumber()).getMenus())); + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber()))); + } } @@ -19,9 +19,9 @@ default void run() { default void run(int menuNumber) { boolean isExit = false; while (!isExit){ - printMenu(Screen.of(menuNumber).getMenus()); + printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(Screen.of(menuNumber).getMenus())); + isExit = handleChoice(String.valueOf(menuNumber)); } } diff --git a/src/com/smartstore/function/mainmenu/MembershipMenu.java b/src/com/smartstore/function/mainmenu/MembershipMenu.java index d1e65a54..8ade1662 100644 --- a/src/com/smartstore/function/mainmenu/MembershipMenu.java +++ b/src/com/smartstore/function/mainmenu/MembershipMenu.java @@ -15,6 +15,16 @@ private MembershipMenu(){ } + @Override + public void run() { + boolean isExit = false; + while (!isExit){ + printMenu(getMenuListFromEnum(MembershipFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(MembershipFunction.class))); + } + } + @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == MembershipFunction.BACK.getMenuNumber()) { diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 52b10f39..606cd807 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -2,33 +2,41 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; +import com.smartstore.function.Handleable; import com.smartstore.function.Handler; import com.smartstore.function.membership.set.SetMembershipRequirement; import com.smartstore.function.membership.update.UpdateMembershipRequirement; import com.smartstore.function.membership.view.ViewMembershipRequirement; public enum MembershipFunction implements Function { - SET(1, SetMembershipRequirement.getInstance()), - VIEW(2, ViewMembershipRequirement.getInstance()), - UPDATE(3, UpdateMembershipRequirement.getInstance()), - BACK(4, Back.getInstance()); + SET(1, SetMembershipRequirement.getInstance(), "Set Membership Requirement"), + VIEW(2, ViewMembershipRequirement.getInstance(), "View Membership Requirement"), + UPDATE(3, UpdateMembershipRequirement.getInstance(), "Update Membership Requirement"), + BACK(4, Back.getInstance(), "Return to Prev Menu"); private final int menuNumber; - private final Handler handler; - MembershipFunction(int menuNumber, Handler handler) { + private final Handleable handler; + private String menuText; + MembershipFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; + this.menuText = menuText; } + @Override public int getMenuNumber() { return this.menuNumber; } @Override - public Handler getMenuHandler() { + public Handleable getMenuHandler() { return this.handler; } + @Override + public String getMenuText() { + return this.menuText; + } } diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 2d9c008f..ae3c312f 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -8,24 +8,24 @@ import java.util.NoSuchElementException; -public interface MembershipMenuHandler extends SelectSpecificPrintable, EnumValueProvider, Handler, ParameterValidator, MenuValidator { +public interface MembershipMenuHandler extends SelectablePrintable, EnumValueProvider, Handler, ParameterValidator, MenuValidator { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printMenu(enumValuesToStringArray(MembershipType.class)); + printSelectable(getMenuListFromEnum(MembershipType.class)); - isExit = handleChoice(getParameter(enumValuesToStringArray(MembershipType.class))); + isExit = handleChoice(getParameter(getMenuListFromEnum(MembershipType.class))); } } default MembershipType getMembershipType(String membershipNames){ - String[] values = enumValuesToStringArray(MembershipType.class); + String[] values = getMenuListFromEnum(MembershipType.class); for (String membershipName : values) { try{ - if (MembershipType.valueOf(membershipName).findByName(membershipNames)) { - return MembershipType.valueOf(membershipName); + if (MembershipType.valueOf(membershipName.toUpperCase()).findByName(membershipNames)) { + return MembershipType.valueOf(membershipName.toUpperCase()); } }catch (NoSuchElementException e) { System.out.println(e.getMessage()); @@ -54,13 +54,4 @@ default int getCurrentMenuNumber(){ void processMembership(MembershipType membershipType, MembershipRequirement requirement); - @Override - default String[] enumValuesToStringArray(Class type) { - return EnumValueProvider.super.enumValuesToStringArray(type); - } - - @Override - default void printMenu(String[] menus) { - SelectSpecificPrintable.super.printMenu(menus); - } } diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index bef2efd0..9e2e1f6d 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -1,11 +1,12 @@ package com.smartstore.function.membership.update; +import com.smartstore.function.HandleableParam; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMinPaymentAmount implements MembershipMenuHandler { +public class SetMinPaymentAmount implements MembershipMenuHandler, HandleableParam { private static SetMinPaymentAmount instance; private SetMinPaymentAmount(){ diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index 48f86a22..be8b94a1 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -1,12 +1,13 @@ package com.smartstore.function.membership.update; +import com.smartstore.function.HandleableParam; import com.smartstore.function.IntegerValidator; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMinUsage implements MembershipMenuHandler, IntegerValidator { +public class SetMinUsage implements MembershipMenuHandler, HandleableParam { private static SetMinUsage instance; private SetMinUsage(){ diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index 5805f3d9..45639231 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -2,13 +2,13 @@ import com.smartstore.function.Function; import com.smartstore.function.MenuPrintable; -import com.smartstore.function.SelectSpecificPrintable; +import com.smartstore.function.SelectablePrintable; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -public class UpdateMembershipRequirement implements MembershipMenuHandler, SelectSpecificPrintable, MenuPrintable { +public class UpdateMembershipRequirement implements MembershipMenuHandler, SelectablePrintable, MenuPrintable { private static UpdateMembershipRequirement instance; private MembershipType selected; @@ -39,9 +39,9 @@ public void printMenu(String[] menus) { System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); selected = membershipType; while (!isExit){ - menuPrintable.printMenu(enumValuesToStringArray(UpdateMembershipRequirementFunction.class)); + menuPrintable.printMenu(getMenuListFromEnum(UpdateMembershipRequirementFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(enumValuesToStringArray(UpdateMembershipRequirementFunction.class))); + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateMembershipRequirementFunction.class))); } } } @@ -59,17 +59,13 @@ public boolean handleChoice(String menuNumber) { @Override public void run(){ boolean isExit = false; - SelectSpecificPrintable selectSpecificPrintable = new SelectSpecificPrintable() { - @Override - public void printMenu(String[] menus) { - SelectSpecificPrintable.super.printMenu(menus); - } - }; + while (!isExit){ - selectSpecificPrintable.printMenu(enumValuesToStringArray(MembershipType.class)); + printSelectable(getMenuListFromEnum(MembershipType.class)); //get menu number from user until valid menu number - isExit = MembershipMenuHandler.super.handleChoice(getParameter(enumValuesToStringArray(MembershipType.class))); + isExit = MembershipMenuHandler.super.handleChoice(getParameter(getMenuListFromEnum(MembershipType.class))); } } + } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index c1db1e75..31a01275 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -2,19 +2,27 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; +import com.smartstore.function.HandleableParam; import com.smartstore.function.Handler; public enum UpdateMembershipRequirementFunction implements Function { - SET_MIN_USAGE(1, SetMinUsage.getInstance()), - SET_MIN_PAYMENT_AMOUNT(2, SetMinPaymentAmount.getInstance()), - BACK(3, Back.getInstance()); + SET_MIN_USAGE(1, SetMinUsage.getInstance(), "Set Min Usage"), + SET_MIN_PAYMENT_AMOUNT(2, SetMinPaymentAmount.getInstance(), "Set Min Payment Amount"), + BACK(3, Back.getInstance(), "Return to Prev Menu"); private final int menuNumber; - private final Handler mainMenuHandler; - UpdateMembershipRequirementFunction(int menuNumber, Handler mainMenuHandler) { + private final HandleableParam handler; + private String menuText; + UpdateMembershipRequirementFunction(int menuNumber, HandleableParam handler, String menuText) { this.menuNumber = menuNumber; - this.mainMenuHandler = mainMenuHandler; + this.handler = handler; + this.menuText = menuText; + } + + @Override + public String getMenuText() { + return menuText; } @Override @@ -27,8 +35,8 @@ public void run(int ordinal){ } @Override - public Handler getMenuHandler() { - return this.mainMenuHandler; + public HandleableParam getMenuHandler() { + return this.handler; } } diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 1ff9da35..46275710 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -1,17 +1,25 @@ package com.smartstore.membership; +import com.smartstore.function.MenuProvider; + import java.util.Arrays; import java.util.Optional; -public enum MembershipType { - GENERAL(new String[] {"G", "GENERAL", "일반"}), - VIP(new String[] {"V", "VIP", "우수"}), - VVIP(new String[] {"VV", "VVIP", "최우수"}); +public enum MembershipType implements MenuProvider { + GENERAL(new String[] {"G", "GENERAL", "일반"}, "General"), + VIP(new String[] {"V", "VIP", "우수"}, "VIP"), + VVIP(new String[] {"VV", "VVIP", "최우수"}, "VVIP"); - private String[] membershipNames={}; - MembershipType(String[] membershipNames) { + private String[] membershipNames; + private String menuText; + MembershipType(String[] membershipNames, String menuText) { this.membershipNames = membershipNames; + this.menuText = menuText; + } + + public String getMenuText() { + return menuText; } public String[] getMembership() { diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index 0ecb7990..8ba574cc 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -1,6 +1,5 @@ package com.smartstore.util; -import java.util.ArrayList; import java.util.Arrays; @@ -52,14 +51,14 @@ private int findIndex(Object o){ @Override @SuppressWarnings("unchked") - public T[] toArray(Class type){ - return (T[])Arrays.copyOf(elements, size, type); + public T[] toArray(T[] type){ + return (T[]) Arrays.copyOf(elements, size, type.getClass()); } @Override @SuppressWarnings("unchked") public T[] toArray(){ - return (T[])Arrays.copyOf(elements, size); + return (T[]) Arrays.copyOf(elements, size); } @Override public void add(T object) { @@ -148,10 +147,21 @@ private void isValidIndex(int index){ @Override public String toString() { - return Arrays.toString(elements); + if (elements == null) + return ""; + + int iMax = elements.length - 1; + if (iMax == -1) + return ""; + + StringBuilder b = new StringBuilder(); + for (int i = 0; ; i++) { + b.append(elements[i]); + if (i == iMax) + return b.toString(); + } } - //private static final int CAPACITY_SIZE = 10; private int size; private Object[] elements; diff --git a/src/com/smartstore/util/Define.java b/src/com/smartstore/util/Define.java new file mode 100644 index 00000000..f5d93233 --- /dev/null +++ b/src/com/smartstore/util/Define.java @@ -0,0 +1,5 @@ +package com.smartstore.util; + +public class Define { + public static final int PAGING = 5; +} diff --git a/src/com/smartstore/util/List.java b/src/com/smartstore/util/List.java index 211fb3de..bac99a9d 100644 --- a/src/com/smartstore/util/List.java +++ b/src/com/smartstore/util/List.java @@ -10,7 +10,10 @@ public interface List { void add(int index, T object); boolean remove(int index); boolean remove(T object); + CustomList subList(int fromIndex, int toIndex); + + @SuppressWarnings("unchked") + T[] toArray(T[] type); Object[] toArray(); - Object[] toArray(Class type); } From 567b7c7e443b55de97bc15df6f1e1e47552850e1 Mon Sep 17 00:00:00 2001 From: jy-b Date: Sun, 14 May 2023 22:05:14 +0900 Subject: [PATCH 64/79] feat: Feat : Update Customer [ New Feat : Update CustomerInfo - ID, Name, Usage Time, Payment Amount Modified : Duplicated User(Check by Id) not Allow to add ] --- src/com/smartstore/customer/Customer.java | 32 ++++++++++++++ src/com/smartstore/customer/Customers.java | 7 +++ src/com/smartstore/function/Back.java | 2 +- .../function/EnumValueProvider.java | 2 - src/com/smartstore/function/Function.java | 4 +- .../smartstore/function/HandleableParam.java | 2 +- .../function/IdDuplicateChecker.java | 18 ++++++++ .../function/ValueWithEndValidator.java | 1 - .../customer/CustomerMenuHandler.java | 38 +++++++++++++--- .../function/customer/add/AddCustomer.java | 20 +++++++-- .../function/customer/update/SetId.java | 26 +++++++++-- .../function/customer/update/SetName.java | 15 ++++++- .../customer/update/SetPaymentAmount.java | 30 +++++++++++++ .../customer/update/SetUsageTime.java | 30 +++++++++++++ .../customer/update/UpdateCustomer.java | 44 ++++++++++++------- .../update/UpdateCustomerFunction.java | 13 +++--- .../update/UpdateCustomerHandler.java | 11 +---- .../function/customer/view/ViewCustomer.java | 4 +- .../function/mainmenu/MainMenuFunction.java | 2 +- .../function/mainmenu/MainMenuHandler.java | 4 +- .../membership/MembershipMenuHandler.java | 4 +- .../update/SetMinPaymentAmount.java | 14 ++---- .../membership/update/SetMinUsage.java | 13 ++---- .../update/UpdateMembershipRequirement.java | 4 +- .../UpdateMembershipRequirementFunction.java | 4 -- 25 files changed, 260 insertions(+), 84 deletions(-) create mode 100644 src/com/smartstore/function/IdDuplicateChecker.java create mode 100644 src/com/smartstore/function/customer/update/SetPaymentAmount.java create mode 100644 src/com/smartstore/function/customer/update/SetUsageTime.java diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 93caf3c4..9ce45a6a 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -47,6 +47,38 @@ public String getCustomerId() { return customerId; } + public String getCustomerName() { + return customerName; + } + + public int getUsageTime() { + return usageTime; + } + + public int getPaymentAmount() { + return paymentAmount; + } + + public MembershipType getMembership() { + return membership; + } + + public void setCustomerId(String customerId) { + this.customerId = customerId; + } + + public void setCustomerName(String customerName) { + this.customerName = customerName; + } + + public void setUsageTime(int usageTime) { + this.usageTime = usageTime; + } + + public void setPaymentAmount(int paymentAmount) { + this.paymentAmount = paymentAmount; + } + @Override public String toString() { return "customerId='" + customerId + '\'' + diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 36950e34..20fa5a9a 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -36,4 +36,11 @@ public Customer getCustomerById(String id){ return customerOptional.orElse(null); } + public int getIndexOfCustomer(Customer customer){ + if(customerList.size() == 0){ + return -1; + } + return customerList.indexOf(customer); + } + } diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 6ffcc2b9..a7bf581d 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -20,7 +20,7 @@ public void run(){ } @Override - public void run(int menu) { + public void run(T value) { } diff --git a/src/com/smartstore/function/EnumValueProvider.java b/src/com/smartstore/function/EnumValueProvider.java index 178c48c5..9da3ff8c 100644 --- a/src/com/smartstore/function/EnumValueProvider.java +++ b/src/com/smartstore/function/EnumValueProvider.java @@ -1,7 +1,5 @@ package com.smartstore.function; -import com.smartstore.function.mainmenu.MainMenuFunction; - import java.util.Arrays; public interface EnumValueProvider & MenuProvider> { diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/function/Function.java index 863f7074..ed32ca1b 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/function/Function.java @@ -24,7 +24,7 @@ default void run() { } @Override - default void run(int menuNumber) { - ((HandleableParam) getMenuHandler()).run(menuNumber); + default void run(T value) { + ((HandleableParam) getMenuHandler()).run(value); } } diff --git a/src/com/smartstore/function/HandleableParam.java b/src/com/smartstore/function/HandleableParam.java index f7ef1ced..8bfa7ab6 100644 --- a/src/com/smartstore/function/HandleableParam.java +++ b/src/com/smartstore/function/HandleableParam.java @@ -1,5 +1,5 @@ package com.smartstore.function; public interface HandleableParam { - void run(int menu); + void run(T value); } diff --git a/src/com/smartstore/function/IdDuplicateChecker.java b/src/com/smartstore/function/IdDuplicateChecker.java new file mode 100644 index 00000000..0590bbd1 --- /dev/null +++ b/src/com/smartstore/function/IdDuplicateChecker.java @@ -0,0 +1,18 @@ +package com.smartstore.function; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.util.CustomList; + +import java.util.Arrays; +import java.util.Optional; + +public interface IdDuplicateChecker { + default boolean isIdDuplicated(String id){ + CustomList customerList = Customers.getInstance().getCustomerList(); + Optional customerOptional = Arrays.stream(customerList.toArray(new Customer[customerList.size()])) + .filter(customer -> id.equalsIgnoreCase(customer.getCustomerName())) + .findFirst(); + return customerOptional.isPresent(); + } +} diff --git a/src/com/smartstore/function/ValueWithEndValidator.java b/src/com/smartstore/function/ValueWithEndValidator.java index 0f4b8bd0..2cb137de 100644 --- a/src/com/smartstore/function/ValueWithEndValidator.java +++ b/src/com/smartstore/function/ValueWithEndValidator.java @@ -5,7 +5,6 @@ public interface ValueWithEndValidator extends Readable{ default String getValueOrEnd(String msg, Class type){ - System.out.println(Number.class.isAssignableFrom(type)); String value; while (true){ try { diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 085fe178..0dfe547c 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -1,12 +1,15 @@ package com.smartstore.function.customer; -import com.smartstore.function.EnumValueProvider; -import com.smartstore.function.Handleable; -import com.smartstore.function.MenuPrintable; -import com.smartstore.function.MenuValidator; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.*; +import com.smartstore.function.customer.update.UpdateCustomerFunction; +import com.smartstore.function.mainmenu.MainMenuFunction; +import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; -public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator, Handleable { +public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator, Handler { default void run() { boolean isExit = false; @@ -18,6 +21,29 @@ default void run() { } } - boolean handleChoice(String membershipName); + @Override + default boolean handleChoice(String id){ + if(!"end".equalsIgnoreCase(id)){ + //run each function's method + boolean isExit = false; + Customer selected; + selected = Customers.getInstance().getCustomerById(id); + if(selected == null){ + System.out.printf("There is No User : %s\n", id); + return false; + } + System.out.printf("Current Customer Info\n%s", selected); + while (!isExit){ + printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); + } + } + return true; + } + @Override + default int getCurrentMenuNumber(){ + return MainMenuFunction.CUSTOMER_MANAGEMENT.getMenuNumber(); + }; } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 493de9e1..d079c4f3 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -4,8 +4,12 @@ import com.smartstore.customer.Customers; import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.util.CustomList; -public class AddCustomer implements CustomerMenuHandler, MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator { +import java.util.Arrays; +import java.util.Optional; + +public class AddCustomer implements CustomerMenuHandler, MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator, IdDuplicateChecker { private static AddCustomer instance; @@ -30,15 +34,23 @@ public boolean handleChoice(String numberOfUser) { Customers customers = Customers.getInstance(); //get name & id from user, usage_time&payment_amount is optional for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ + while (true){ + id = getUserData(id.getClass(),true, "Input User ID : "); + //id duplication Check + if(!isIdDuplicated(id)){ + break; + } + System.out.printf("User id %s already Exist Try Other id\n", id); + } + name = getUserData(name.getClass(),true, "Input User Name : "); - id = getUserData(id.getClass(),true, "Input User ID : "); if(!isAnswerYes("Do you Want Set Optional Info?")){ usageTime = 0; paymentAmount = 0; }else { - String value = getValueOrEnd("Input Usage Time\nWait for Input Type 'end' to exit : ", Integer.class); + String value = getValueOrEnd("Input Usage Time\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); usageTime = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); - value = getValueOrEnd("Input Payment Amount\nWait for Input Type 'end' to exit : ", Integer.class); + value = getValueOrEnd("Input Payment Amount\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); paymentAmount = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); } customers.getCustomerList().add(new Customer(name, id, usageTime, paymentAmount)); diff --git a/src/com/smartstore/function/customer/update/SetId.java b/src/com/smartstore/function/customer/update/SetId.java index 266d79d2..8dff79fb 100644 --- a/src/com/smartstore/function/customer/update/SetId.java +++ b/src/com/smartstore/function/customer/update/SetId.java @@ -1,8 +1,13 @@ package com.smartstore.function.customer.update; -import com.smartstore.function.Handleable; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.HandleableParam; +import com.smartstore.function.IdDuplicateChecker; +import com.smartstore.function.ValueWithEndValidator; +import com.smartstore.util.CustomList; -public class SetId implements UpdateCustomerHandler, Handleable { +public class SetId implements UpdateCustomerHandler { private static SetId instance; private SetId(){ @@ -16,7 +21,22 @@ public static SetId getInstance(){ return instance; } + @Override - public void run() { + public void run(T value) { + String id; + while (true){ + id = getValueOrEnd("Input New Id\n Wait for input... 'end' to exit", String.class); + if(id.isBlank() || "end".equals(id)){ + System.out.println("Change not saved"); + break; + } + if(!isIdDuplicated(id)){ + System.out.println("Change Successfully Saved"); + ((Customer) value).setCustomerId(id); + break; + } + System.out.printf("User Id %s already Exist Try Other Id\n", id); + } } } diff --git a/src/com/smartstore/function/customer/update/SetName.java b/src/com/smartstore/function/customer/update/SetName.java index 71faf808..075e5f0d 100644 --- a/src/com/smartstore/function/customer/update/SetName.java +++ b/src/com/smartstore/function/customer/update/SetName.java @@ -1,5 +1,9 @@ package com.smartstore.function.customer.update; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.util.CustomList; + public class SetName implements UpdateCustomerHandler { private static SetName instance; @@ -15,6 +19,15 @@ public static SetName getInstance(){ } @Override - public void run() { + public void run(T value) { + String name = ""; + Customer customer = (Customer) value; + name = getValueOrEnd("Input New Name\n Wait for input... 'end' to exit", String.class); + if(name.isBlank() || "end".equals(name)){ + System.out.println("Change not saved"); + return; + } + customer.setCustomerName(name); + System.out.println("Change Successfully Saved"); } } diff --git a/src/com/smartstore/function/customer/update/SetPaymentAmount.java b/src/com/smartstore/function/customer/update/SetPaymentAmount.java new file mode 100644 index 00000000..dff546ca --- /dev/null +++ b/src/com/smartstore/function/customer/update/SetPaymentAmount.java @@ -0,0 +1,30 @@ +package com.smartstore.function.customer.update; + +import com.smartstore.customer.Customer; + +public class SetPaymentAmount implements UpdateCustomerHandler { + private static SetPaymentAmount instance; + + private SetPaymentAmount(){ + + } + + public static SetPaymentAmount getInstance(){ + if(instance == null){ + return new SetPaymentAmount(); + } + return instance; + } + + @Override + public void run(T value) { + String paymentAmount; + paymentAmount = getValueOrEnd("Input New PaymentAmount\n Wait for input... 'end' to exit", Integer.class); + if(paymentAmount.isBlank() || "end".equals(paymentAmount)){ + System.out.println("Change not saved"); + return; + } + ((Customer) value).setPaymentAmount(Integer.parseInt(paymentAmount)); + System.out.println("Change Successfully Saved"); + } +} diff --git a/src/com/smartstore/function/customer/update/SetUsageTime.java b/src/com/smartstore/function/customer/update/SetUsageTime.java new file mode 100644 index 00000000..81248c60 --- /dev/null +++ b/src/com/smartstore/function/customer/update/SetUsageTime.java @@ -0,0 +1,30 @@ +package com.smartstore.function.customer.update; + +import com.smartstore.customer.Customer; + +public class SetUsageTime implements UpdateCustomerHandler { + private static SetUsageTime instance; + + private SetUsageTime(){ + + } + + public static SetUsageTime getInstance(){ + if(instance == null){ + return new SetUsageTime(); + } + return instance; + } + + @Override + public void run(T value) { + String usageTime; + usageTime = getValueOrEnd("Input New UsageTime\n Wait for input... 'end' to exit", Integer.class); + if(usageTime.isBlank() || "end".equals(usageTime)){ + System.out.println("Change not saved"); + return; + } + ((Customer) value).setUsageTime(Integer.parseInt(usageTime)); + System.out.println("Change Successfully Saved"); + } +} diff --git a/src/com/smartstore/function/customer/update/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java index 4c66f632..9f07d045 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -1,10 +1,13 @@ package com.smartstore.function.customer.update; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.customer.view.ViewCustomerFunction; -public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, ValueWithEndValidator { +public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, ValueWithEndValidator, MenuPrintable { private static UpdateCustomer instance; @@ -12,6 +15,8 @@ private UpdateCustomer(){ } + private Customer selected; + public static UpdateCustomer getInstance() { if(instance == null){ return new UpdateCustomer(); @@ -20,26 +25,35 @@ public static UpdateCustomer getInstance() { } @Override - public boolean handleChoice(String numberOfUser) { - if(!"end".equalsIgnoreCase(numberOfUser)){ - boolean isExit = false; - int value=0; - String[] menus = getMenuListFromEnum(UpdateCustomerFunction.class); - for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ - printMenu(menus); - value = Integer.parseInt(getMenuNumber(menus)); - Function.of(value, UpdateCustomerFunction.class).run(); - - } + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == UpdateCustomerFunction.BACK.getMenuNumber()) { + return true; } - return true; + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), UpdateCustomerFunction.class).run(selected); + return false; } @Override - public void run() { + public void run(){ + String id=""; boolean isExit = false; + id = getValueOrEnd("Type User Id to Update : ", String.class); + if("end".equalsIgnoreCase(id)){ + return; + } + selected = Customers.getInstance().getCustomerById(id); + if(selected == null){ + System.out.printf("There is no User %s\n", id); + return; + } + System.out.println("Selected Customer's Info"); + System.out.println(selected.toString()); + System.out.println(); while (!isExit){ - isExit = handleChoice(String.valueOf(getValueOrEnd("\nHow many Customers to Input ? | type 'end' to cancel ...", Integer.class))); + printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); + isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); } + } } diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java index fa34636f..c2acd33c 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java @@ -3,21 +3,22 @@ import com.smartstore.function.Back; import com.smartstore.function.Function; import com.smartstore.function.Handleable; +import com.smartstore.function.HandleableParam; import com.smartstore.function.membership.update.SetMinPaymentAmount; public enum UpdateCustomerFunction implements Function { NAME(1, SetName.getInstance(), "Set Name"), - ID(2, SetMinPaymentAmount.getInstance(), "Set ID"), - USAGE_TIME(3, Back.getInstance(), "Set Usage Time"), - PAYMENT_AMOUNT(4, Back.getInstance(), "Set Payment Amount"), + ID(2, SetId.getInstance(), "Set ID"), + USAGE_TIME(3, SetUsageTime.getInstance(), "Set Usage Time"), + PAYMENT_AMOUNT(4, SetPaymentAmount.getInstance(), "Set Payment Amount"), BACK(5, Back.getInstance(), "Return to prev Menu"); private final int menuNumber; - private final Handleable handler; + private final HandleableParam handler; private final String menuText; - UpdateCustomerFunction(int menuNumber, Handleable handler, String menuText) { + UpdateCustomerFunction(int menuNumber, HandleableParam handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; this.menuText = menuText; @@ -34,7 +35,7 @@ public int getMenuNumber() { } @Override - public Handleable getMenuHandler() { + public HandleableParam getMenuHandler() { return this.handler; } diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java index 9c624b2d..9f16a958 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java @@ -2,15 +2,6 @@ import com.smartstore.function.*; -public interface UpdateCustomerHandler extends Handleable,MenuPrintable, MenuValidator, IntegerValidator, UserDataValidator { +public interface UpdateCustomerHandler extends HandleableParam, ValueWithEndValidator, IdDuplicateChecker { - default String processSetElement(Class type, boolean isRequired, String msg) { - return getUserData(type, isRequired, msg); - } - - - @Override - default int getIntegerValue() { - return IntegerValidator.super.getIntegerValue(); - } } \ No newline at end of file diff --git a/src/com/smartstore/function/customer/view/ViewCustomer.java b/src/com/smartstore/function/customer/view/ViewCustomer.java index d6d78bf7..2bb263e7 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomer.java +++ b/src/com/smartstore/function/customer/view/ViewCustomer.java @@ -38,5 +38,7 @@ public boolean handleChoice(String menuNumber) { } //call Menu with menuNumber Function.of(Integer.parseInt(menuNumber), ViewCustomerFunction.class).run(); - return true; } + return true; + } + } diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 6650daa3..292b737b 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -35,7 +35,7 @@ public Handleable getMenuHandler() { } @Override - public void run(int menuNumber) { + public void run(T value) { getMenuHandler().run(); } } diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index e6776f4a..98647ab0 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -16,12 +16,12 @@ default void run() { } @Override - default void run(int menuNumber) { + default void run(T value) { boolean isExit = false; while (!isExit){ printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number - isExit = handleChoice(String.valueOf(menuNumber)); + isExit = handleChoice(String.valueOf(value)); } } diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index ae3c312f..50965328 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -1,7 +1,7 @@ package com.smartstore.function.membership; import com.smartstore.function.*; -import com.smartstore.function.mainmenu.Screen; +import com.smartstore.function.mainmenu.MainMenuFunction; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; @@ -49,7 +49,7 @@ default boolean handleChoice(String membershipName){ @Override default int getCurrentMenuNumber(){ - return Screen.MEMBERSHIP.getMenuNumber(); + return MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(); } void processMembership(MembershipType membershipType, MembershipRequirement requirement); diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 9e2e1f6d..21b45b6f 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -1,5 +1,6 @@ package com.smartstore.function.membership.update; +import com.smartstore.function.Handleable; import com.smartstore.function.HandleableParam; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; @@ -30,16 +31,9 @@ public void processMembership(MembershipType membershipType, MembershipRequireme } @Override - public void run(int ordinal) { - MembershipType membershipType = null; - for(MembershipType membership :MembershipType.values()){ - if(membership.ordinal() == ordinal){ - membershipType = membership; - break; - } - } - if(membershipType.name() != null){ - processMembership(membershipType, Memberships.getInstance().findByType(membershipType)); + public void run(T value) { + if(value.getClass().getName() != null){ + processMembership((MembershipType) value, Memberships.getInstance().findByType((MembershipType) value)); } } diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index be8b94a1..4be8976e 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -31,16 +31,9 @@ public void processMembership(MembershipType membershipType, MembershipRequireme } @Override - public void run(int ordinal) { - MembershipType membershipType = null; - for(MembershipType membership :MembershipType.values()){ - if(membership.ordinal() == ordinal){ - membershipType = membership; - break; - } - } - if(membershipType.name() != null){ - processMembership(membershipType, Memberships.getInstance().findByType(membershipType)); + public void run(T value) { + if(value.getClass().getName() != null){ + processMembership((MembershipType) value, Memberships.getInstance().findByType((MembershipType) value)); } } } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index 45639231..ad66e97c 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -51,8 +51,8 @@ public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == UpdateMembershipRequirementFunction.BACK.getMenuNumber()) { return true; } - //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(selected.ordinal()); + //call Menu with MembershipType + Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(selected); return true; } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index 31a01275..45066577 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -30,10 +30,6 @@ public int getMenuNumber() { return this.menuNumber; } - public void run(int ordinal){ - getMenuHandler().run(ordinal); - } - @Override public HandleableParam getMenuHandler() { return this.handler; From 6f12cf920b955ceb4edb37afd5b55c32dcff3765 Mon Sep 17 00:00:00 2001 From: jy-b Date: Sun, 14 May 2023 22:41:18 +0900 Subject: [PATCH 65/79] feat: Feat : Delete Customer [ New Feat : Delete Customer By user id Modified : remove Method of CustomList always throw Exception problem ] --- .../customer/delete/DeleteCustomer.java | 33 ++++++++++++++++--- src/com/smartstore/util/CustomList.java | 4 ++- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/src/com/smartstore/function/customer/delete/DeleteCustomer.java b/src/com/smartstore/function/customer/delete/DeleteCustomer.java index 85579ffa..b327094d 100644 --- a/src/com/smartstore/function/customer/delete/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/delete/DeleteCustomer.java @@ -1,10 +1,19 @@ package com.smartstore.function.customer.delete; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.AnswerValidator; +import com.smartstore.function.Function; +import com.smartstore.function.ValueWithEndValidator; +import com.smartstore.function.customer.CustomerFunction; import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.customer.update.UpdateCustomerFunction; -public class DeleteCustomer implements CustomerMenuHandler { +public class DeleteCustomer implements CustomerMenuHandler, ValueWithEndValidator, AnswerValidator { private static DeleteCustomer instance; + private Customer selected; + private DeleteCustomer(){ } @@ -15,10 +24,24 @@ public static DeleteCustomer getInstance() { } return instance; } - - @Override - public boolean handleChoice(String membershipName) { - return false; + public void run(){ + String id; + boolean isExit = false; + id = getValueOrEnd("Type User Id to Delete : ", String.class); + if("end".equalsIgnoreCase(id)){ + return; + } + selected = Customers.getInstance().getCustomerById(id); + if(selected == null){ + System.out.printf("There is no User %s\n", id); + return; + } + System.out.println("Selected Customer's Info"); + System.out.println(selected.toString()); + if(isAnswerYes("Did you Really Want to Delete This User? | y or n")){ + Customers.getInstance().getCustomerList().remove(selected); + System.out.printf("User %s Successfully Deleted\n", id); + } } } diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index 8ba574cc..df8a60d5 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -94,7 +94,9 @@ public boolean remove(T object) { if (index < 0){ return false; } - remove(index); + if(remove(index)){ + return true; + }; } throw new IllegalArgumentException("Null Can't be found"); } From 8f05049d24b6cc02c6ec159eb5d536bd3bdc5711 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 03:24:48 +0900 Subject: [PATCH 66/79] feat: refresh [ New Feat : Refresh Memberships of User function ] --- src/com/smartstore/customer/Customer.java | 19 +++++++++++++------ src/com/smartstore/customer/Customers.java | 10 ++++++++++ .../customer/update/SetPaymentAmount.java | 2 ++ .../customer/update/SetUsageTime.java | 2 ++ .../smartstore/membership/Memberships.java | 8 ++++++-- 5 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 9ce45a6a..9e6fe181 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -3,8 +3,11 @@ import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; +import com.smartstore.util.CustomEnumMap; import com.smartstore.util.Map; +import java.util.Arrays; + public class Customer { private String customerId; private String customerName; @@ -21,16 +24,17 @@ public Customer(String customerName, String customerId, int usageTime, int paym this.customerName = customerName; this.usageTime = usageTime; this.paymentAmount = paymentAmount; - this.membership = setMembership(usageTime, paymentAmount); + setMembership(usageTime, paymentAmount); } - public MembershipType setMembership(int usageTime, int paymentAmount) { + public void setMembership(int usageTime, int paymentAmount) { Memberships memberships = Memberships.getInstance(); MembershipType membership = null; - Map membershipList = memberships.getMembershipList(); + //Map is CustomMap + CustomEnumMap membershipList = memberships.getMembershipList(); for(MembershipType membershipType :MembershipType.values()){ try { - if(membershipList.get(membershipType).getMinUsageTime() > usageTime && membershipList.get(membershipType).getMinPaymentAmount() > paymentAmount){ + if(usageTime >= membershipList.get(membershipType).getMinUsageTime() && paymentAmount >= membershipList.get(membershipType).getMinPaymentAmount()){ membership = membershipType; } }catch (NullPointerException e){ @@ -40,7 +44,11 @@ public MembershipType setMembership(int usageTime, int paymentAmount) { } } - return membership; + this.membership = membership; + } + + public void updateMembership(){ + setMembership(usageTime, paymentAmount); } public String getCustomerId() { @@ -78,7 +86,6 @@ public void setUsageTime(int usageTime) { public void setPaymentAmount(int paymentAmount) { this.paymentAmount = paymentAmount; } - @Override public String toString() { return "customerId='" + customerId + '\'' + diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 20fa5a9a..782da248 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -36,6 +36,16 @@ public Customer getCustomerById(String id){ return customerOptional.orElse(null); } + public void updateMembership(){ + if(customerList.size() == 0){ + return; + } + Customer[] customerArray = customerList.toArray(new Customer[customerList.size()]); + for(Customer customer : customerArray){ + customer.setMembership(customer.getUsageTime(), customer.getPaymentAmount()); + } + } + public int getIndexOfCustomer(Customer customer){ if(customerList.size() == 0){ return -1; diff --git a/src/com/smartstore/function/customer/update/SetPaymentAmount.java b/src/com/smartstore/function/customer/update/SetPaymentAmount.java index dff546ca..61341d03 100644 --- a/src/com/smartstore/function/customer/update/SetPaymentAmount.java +++ b/src/com/smartstore/function/customer/update/SetPaymentAmount.java @@ -25,6 +25,8 @@ public void run(T value) { return; } ((Customer) value).setPaymentAmount(Integer.parseInt(paymentAmount)); + //update membership + ((Customer) value).updateMembership(); System.out.println("Change Successfully Saved"); } } diff --git a/src/com/smartstore/function/customer/update/SetUsageTime.java b/src/com/smartstore/function/customer/update/SetUsageTime.java index 81248c60..9e5a2c7b 100644 --- a/src/com/smartstore/function/customer/update/SetUsageTime.java +++ b/src/com/smartstore/function/customer/update/SetUsageTime.java @@ -25,6 +25,8 @@ public void run(T value) { return; } ((Customer) value).setUsageTime(Integer.parseInt(usageTime)); + //update membership + ((Customer) value).updateMembership(); System.out.println("Change Successfully Saved"); } } diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 37621486..1059380d 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,5 +1,7 @@ package com.smartstore.membership; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; import com.smartstore.util.CustomEnumMap; import com.smartstore.util.Map; @@ -8,7 +10,7 @@ import java.io.InputStreamReader; public class Memberships { - private Map membershipList = new CustomEnumMap<>(MembershipType.class); + private CustomEnumMap membershipList = new CustomEnumMap<>(MembershipType.class); private static Memberships instance; public static Memberships getInstance(){ @@ -22,7 +24,7 @@ private Memberships(){ } - public Map getMembershipList() { + public CustomEnumMap getMembershipList() { return membershipList; } @@ -44,6 +46,8 @@ public void setMembershipRequirement(MembershipType membershipType){ public void setMembershipRequirement(MembershipType membershipType, int minUsage, int minPaymentAmount){ membershipList.put(membershipType, new MembershipRequirement(minUsage, minPaymentAmount)); + //update membership + Customers.getInstance().updateMembership(); } public int setMinUsage(){ From aa196086e26d1fd1c7ffe26e7ac2d72740690718 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 08:07:48 +0900 Subject: [PATCH 67/79] refactor: ref [ref] --- src/com/smartstore/SmartStore.java | 2 +- src/com/smartstore/customer/Customer.java | 3 - src/com/smartstore/customer/Customers.java | 4 +- .../smartstore/function/AnswerValidator.java | 25 ---- src/com/smartstore/function/Back.java | 3 + .../smartstore/function/IntegerValidator.java | 23 --- .../smartstore/function/MenuPrintable.java | 9 -- .../smartstore/function/MenuValidator.java | 24 ---- .../function/ParameterValidator.java | 33 ----- .../function/SelectablePrintable.java | 10 -- .../function/UserDataValidator.java | 30 ---- .../function/ValueWithEndValidator.java | 27 ---- .../function/customer/CustomerFunction.java | 6 +- .../customer/CustomerMenuHandler.java | 19 +-- .../function/customer/add/AddCustomer.java | 23 ++- .../customer/delete/DeleteCustomer.java | 12 +- .../function/customer/update/SetId.java | 11 +- .../function/customer/update/SetName.java | 5 +- .../customer/update/SetPaymentAmount.java | 3 +- .../customer/update/SetUsageTime.java | 3 +- .../customer/update/UpdateCustomer.java | 13 +- .../update/UpdateCustomerFunction.java | 6 +- .../update/UpdateCustomerHandler.java | 4 +- .../function/customer/view/ViewCustomer.java | 12 +- .../customer/view/ViewCustomerAll.java | 4 +- .../customer/view/ViewCustomerById.java | 7 +- .../customer/view/ViewCustomerByPaging.java | 14 +- .../customer/view/ViewCustomerFunction.java | 4 +- .../function/mainmenu/CustomerMenu.java | 9 +- .../function/mainmenu/MainMenu.java | 6 +- .../function/mainmenu/MainMenuFunction.java | 4 +- .../function/mainmenu/MainMenuHandler.java | 10 +- .../function/mainmenu/MembershipMenu.java | 8 +- .../membership/MembershipFunction.java | 7 +- .../membership/MembershipMenuHandler.java | 11 +- .../update/SetMinPaymentAmount.java | 3 +- .../membership/update/SetMinUsage.java | 3 +- .../update/UpdateMembershipRequirement.java | 23 ++- .../UpdateMembershipRequirementFunction.java | 7 +- src/com/smartstore/function/sorting/Sort.java | 60 ++++++++ .../function/sorting/SortByName.java | 28 ++++ .../function/sorting/SortFunction.java | 40 ++++++ .../function/sorting/SortHandler.java | 6 + .../membership/MembershipRequirement.java | 4 +- .../smartstore/membership/MembershipType.java | 6 +- .../smartstore/membership/Memberships.java | 4 +- src/com/smartstore/util/CustomEnumMap.java | 2 +- src/com/smartstore/util/CustomHashMap.java | 2 +- src/com/smartstore/util/CustomList.java | 2 +- .../DuplicateChecker.java} | 6 +- .../{function => util}/EnumValueProvider.java | 2 +- .../{function => util}/Function.java | 2 +- .../{function => util}/Handleable.java | 2 +- .../{function => util}/HandleableParam.java | 2 +- .../{function => util}/Handler.java | 2 +- .../{function => util}/MenuProvider.java | 2 +- src/com/smartstore/util/MergeSort.java | 65 +++++++++ src/com/smartstore/util/Printer.java | 16 +++ .../{function => util}/Readable.java | 2 +- .../{function => util}/SubMenuHandleable.java | 2 +- src/com/smartstore/util/Validator.java | 136 ++++++++++++++++++ 61 files changed, 488 insertions(+), 335 deletions(-) delete mode 100644 src/com/smartstore/function/AnswerValidator.java delete mode 100644 src/com/smartstore/function/IntegerValidator.java delete mode 100644 src/com/smartstore/function/MenuPrintable.java delete mode 100644 src/com/smartstore/function/MenuValidator.java delete mode 100644 src/com/smartstore/function/ParameterValidator.java delete mode 100644 src/com/smartstore/function/SelectablePrintable.java delete mode 100644 src/com/smartstore/function/UserDataValidator.java delete mode 100644 src/com/smartstore/function/ValueWithEndValidator.java create mode 100644 src/com/smartstore/function/sorting/Sort.java create mode 100644 src/com/smartstore/function/sorting/SortByName.java create mode 100644 src/com/smartstore/function/sorting/SortFunction.java create mode 100644 src/com/smartstore/function/sorting/SortHandler.java rename src/com/smartstore/{function/IdDuplicateChecker.java => util/DuplicateChecker.java} (82%) rename src/com/smartstore/{function => util}/EnumValueProvider.java (96%) rename src/com/smartstore/{function => util}/Function.java (96%) rename src/com/smartstore/{function => util}/Handleable.java (59%) rename src/com/smartstore/{function => util}/HandleableParam.java (66%) rename src/com/smartstore/{function => util}/Handler.java (80%) rename src/com/smartstore/{function => util}/MenuProvider.java (64%) create mode 100644 src/com/smartstore/util/MergeSort.java create mode 100644 src/com/smartstore/util/Printer.java rename src/com/smartstore/{function => util}/Readable.java (84%) rename src/com/smartstore/{function => util}/SubMenuHandleable.java (65%) create mode 100644 src/com/smartstore/util/Validator.java diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index 85ad5c1b..62513a3e 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,6 +1,6 @@ package com.smartstore; -import com.smartstore.function.Function; +import com.smartstore.util.Function; import com.smartstore.function.mainmenu.MainMenuFunction; public class SmartStore { diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 9e6fe181..0db9f09f 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -4,9 +4,6 @@ import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; import com.smartstore.util.CustomEnumMap; -import com.smartstore.util.Map; - -import java.util.Arrays; public class Customer { private String customerId; diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 782da248..7d411826 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -3,9 +3,7 @@ import com.smartstore.util.CustomList; import java.util.Arrays; -import java.util.List; import java.util.Optional; -import java.util.stream.Stream; public class Customers { private static Customers instance; @@ -20,7 +18,7 @@ public static Customers getInstance(){ } return instance; } - private CustomList customerList = new CustomList(); + private final CustomList customerList = new CustomList(); public CustomList getCustomerList() { return customerList; diff --git a/src/com/smartstore/function/AnswerValidator.java b/src/com/smartstore/function/AnswerValidator.java deleted file mode 100644 index 3b2459cc..00000000 --- a/src/com/smartstore/function/AnswerValidator.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.smartstore.function; - -import java.io.IOException; - -public interface AnswerValidator extends Readable{ - default boolean isAnswerYes(String msg){ - System.out.println(msg); - String value = ""; - while (true){ - try { - System.out.print("Wait for Input Y or N: "); - value = br.readLine(); - } catch (IOException e) { - System.out.println("Please Input Y or N"); - } - if("y".equalsIgnoreCase(value)){ - return true; - } - if("n".equalsIgnoreCase(value)){ - return false; - } - System.out.println("Please Input Y or N"); - } - } -} diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index a7bf581d..5a8095bf 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -1,6 +1,9 @@ package com.smartstore.function; +import com.smartstore.util.Handleable; +import com.smartstore.util.HandleableParam; + public class Back implements Handleable, HandleableParam { private static Back instance; diff --git a/src/com/smartstore/function/IntegerValidator.java b/src/com/smartstore/function/IntegerValidator.java deleted file mode 100644 index 71876bea..00000000 --- a/src/com/smartstore/function/IntegerValidator.java +++ /dev/null @@ -1,23 +0,0 @@ -package com.smartstore.function; - -import java.io.IOException; - -public interface IntegerValidator extends Readable{ - default int getIntegerValue(){ - int value; - while (true){ - try { - System.out.println("Wait for Input : "); - value = Integer.parseInt(br.readLine()); - if(value < 0){ - throw new IllegalArgumentException(); - }else { - break; - } - } catch (IOException | IllegalArgumentException e) { - System.out.print("Input valid Integer Data 1 ~ Integer.Max"); - } - } - return value; - } -} diff --git a/src/com/smartstore/function/MenuPrintable.java b/src/com/smartstore/function/MenuPrintable.java deleted file mode 100644 index f5580c3e..00000000 --- a/src/com/smartstore/function/MenuPrintable.java +++ /dev/null @@ -1,9 +0,0 @@ -package com.smartstore.function; - -public interface MenuPrintable { - default void printMenu(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("%d. %s\n",i + 1,menus[i]); - } - } -} diff --git a/src/com/smartstore/function/MenuValidator.java b/src/com/smartstore/function/MenuValidator.java deleted file mode 100644 index 81b6498d..00000000 --- a/src/com/smartstore/function/MenuValidator.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.smartstore.function; - -import java.io.IOException; - -public interface MenuValidator extends Readable{ - default String getMenuNumber(String[] values) { - int menu = -1; - while (true){ - try { - System.out.print("Wait for Input : "); - menu = Integer.parseInt(br.readLine()); - if (menu <= 0 || menu > values.length) { - // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException("Invalid Menu"); - } - break; - - } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Menu"); - } - } - return String.valueOf(menu); - } -} diff --git a/src/com/smartstore/function/ParameterValidator.java b/src/com/smartstore/function/ParameterValidator.java deleted file mode 100644 index bb8bb761..00000000 --- a/src/com/smartstore/function/ParameterValidator.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.smartstore.function; - -import com.smartstore.membership.MembershipType; - -import java.io.IOException; - -public interface ParameterValidator extends Readable{ - default String getParameter(String[] values) { - String valueName=""; - boolean isExit = false; - if(values.length > 0) { - while (!isExit) { - try { - System.out.print("Input : "); - valueName = br.readLine(); - if("end".equals(valueName)){ - isExit = true; - break; - } - for (String membershipName : values) { - if (MembershipType.valueOf(membershipName.toUpperCase()).isMatchedName(valueName)) { - isExit = true; - break; - } - } - } catch (IOException | IllegalArgumentException | NullPointerException e) { - System.out.println("Invalid Parameter"); - } - } - } - return valueName; - } -} diff --git a/src/com/smartstore/function/SelectablePrintable.java b/src/com/smartstore/function/SelectablePrintable.java deleted file mode 100644 index bbece477..00000000 --- a/src/com/smartstore/function/SelectablePrintable.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.smartstore.function; - -public interface SelectablePrintable { - default void printSelectable(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("| %s ",menus[i]); - } - System.out.println("| or 'end'"); - } -} diff --git a/src/com/smartstore/function/UserDataValidator.java b/src/com/smartstore/function/UserDataValidator.java deleted file mode 100644 index f9cd6b77..00000000 --- a/src/com/smartstore/function/UserDataValidator.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.smartstore.function; - -import java.io.IOException; - -public interface UserDataValidator extends Readable { - /** - * - * @param type : Type of input data - * isRequired : is Data Required - * @return input value from user - */ - - default String getUserData(Class type, boolean isRequired, String msg){ - String value = null; - while (true){ - try { - System.out.print(msg); - value = br.readLine(); - } catch (IOException e) { - System.out.println("Please Input Validate Data"); - } - - if(isRequired == true && !value.isBlank()){ - break; - } - System.out.println("Please Input Validate Data, This Element Can't be Empty or Black"); - } - return value; - } -} diff --git a/src/com/smartstore/function/ValueWithEndValidator.java b/src/com/smartstore/function/ValueWithEndValidator.java deleted file mode 100644 index 2cb137de..00000000 --- a/src/com/smartstore/function/ValueWithEndValidator.java +++ /dev/null @@ -1,27 +0,0 @@ -package com.smartstore.function; - -import java.io.IOException; - -public interface ValueWithEndValidator extends Readable{ - - default String getValueOrEnd(String msg, Class type){ - String value; - while (true){ - try { - System.out.println(msg); - value = br.readLine(); - if("end".equalsIgnoreCase(String.valueOf(value))){ - break; - } - if(Number.class.isAssignableFrom(type) && Integer.parseInt(value) < 0){ - throw new IllegalArgumentException(); - }else { - break; - } - } catch (IOException | IllegalArgumentException e) { - System.out.println("Input valid Integer Data 1 ~ Integer.Max"); - } - } - return value; - } -} diff --git a/src/com/smartstore/function/customer/CustomerFunction.java b/src/com/smartstore/function/customer/CustomerFunction.java index 1e6bd9b2..36384114 100644 --- a/src/com/smartstore/function/customer/CustomerFunction.java +++ b/src/com/smartstore/function/customer/CustomerFunction.java @@ -1,7 +1,7 @@ package com.smartstore.function.customer; -import com.smartstore.function.Function; -import com.smartstore.function.Handleable; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; import com.smartstore.function.Back; import com.smartstore.function.customer.add.AddCustomer; import com.smartstore.function.customer.delete.DeleteCustomer; @@ -18,7 +18,7 @@ public enum CustomerFunction implements Function { private final int menuNumber; private final Handleable handler; - private String menuText; + private final String menuText; CustomerFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; diff --git a/src/com/smartstore/function/customer/CustomerMenuHandler.java b/src/com/smartstore/function/customer/CustomerMenuHandler.java index 0dfe547c..3dd993a2 100644 --- a/src/com/smartstore/function/customer/CustomerMenuHandler.java +++ b/src/com/smartstore/function/customer/CustomerMenuHandler.java @@ -2,22 +2,23 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; import com.smartstore.function.customer.update.UpdateCustomerFunction; import com.smartstore.function.mainmenu.MainMenuFunction; -import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; +import com.smartstore.util.EnumValueProvider; +import com.smartstore.util.Handler; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; -public interface CustomerMenuHandler extends EnumValueProvider, MenuPrintable, MenuValidator, Handler { +public interface CustomerMenuHandler extends EnumValueProvider, Handler { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printMenu(getMenuListFromEnum(MembershipType.class)); + Printer.printMenu(getMenuListFromEnum(MembershipType.class)); - isExit = handleChoice(getMenuNumber(new String[]{})); + isExit = handleChoice(Validator.getMenuNumber(new String[]{})); } } @@ -34,9 +35,9 @@ default boolean handleChoice(String id){ } System.out.printf("Current Customer Info\n%s", selected); while (!isExit){ - printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); + Printer.printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); } } return true; @@ -45,5 +46,5 @@ default boolean handleChoice(String id){ @Override default int getCurrentMenuNumber(){ return MainMenuFunction.CUSTOMER_MANAGEMENT.getMenuNumber(); - }; + } } diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index d079c4f3..9f757c3f 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -2,14 +2,11 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.util.CustomList; +import com.smartstore.util.DuplicateChecker; +import com.smartstore.util.Validator; -import java.util.Arrays; -import java.util.Optional; - -public class AddCustomer implements CustomerMenuHandler, MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator, IdDuplicateChecker { +public class AddCustomer implements CustomerMenuHandler { private static AddCustomer instance; @@ -35,22 +32,22 @@ public boolean handleChoice(String numberOfUser) { //get name & id from user, usage_time&payment_amount is optional for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ while (true){ - id = getUserData(id.getClass(),true, "Input User ID : "); + id = Validator.getUserData(true, "Input User ID : "); //id duplication Check - if(!isIdDuplicated(id)){ + if(!DuplicateChecker.isIdDuplicated(id)){ break; } System.out.printf("User id %s already Exist Try Other id\n", id); } - name = getUserData(name.getClass(),true, "Input User Name : "); - if(!isAnswerYes("Do you Want Set Optional Info?")){ + name = Validator.getUserData(true, "Input User Name : "); + if(!Validator.isAnswerYes("Do you Want Set Optional Info?")){ usageTime = 0; paymentAmount = 0; }else { - String value = getValueOrEnd("Input Usage Time\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); + String value = Validator.getValueOrEnd("Input Usage Time\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); usageTime = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); - value = getValueOrEnd("Input Payment Amount\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); + value = Validator.getValueOrEnd("Input Payment Amount\nWait for Input Type 'end' or '0' will set as 0 : ", Integer.class); paymentAmount = ("end".equalsIgnoreCase(String.valueOf(value))) ? 0 : Integer.parseInt(value); } customers.getCustomerList().add(new Customer(name, id, usageTime, paymentAmount)); @@ -63,7 +60,7 @@ public boolean handleChoice(String numberOfUser) { public void run() { boolean isExit = false; while (!isExit){ - isExit = handleChoice(String.valueOf(getValueOrEnd("How many Customers to Input ? | type 'end' or '0' to cancel ...", Integer.class))); + isExit = handleChoice(String.valueOf(Validator.getValueOrEnd("How many Customers to Input ? | type 'end' or '0' to cancel ...", Integer.class))); } } } diff --git a/src/com/smartstore/function/customer/delete/DeleteCustomer.java b/src/com/smartstore/function/customer/delete/DeleteCustomer.java index b327094d..6b8ad740 100644 --- a/src/com/smartstore/function/customer/delete/DeleteCustomer.java +++ b/src/com/smartstore/function/customer/delete/DeleteCustomer.java @@ -2,14 +2,10 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.AnswerValidator; -import com.smartstore.function.Function; -import com.smartstore.function.ValueWithEndValidator; -import com.smartstore.function.customer.CustomerFunction; +import com.smartstore.util.Validator; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.customer.update.UpdateCustomerFunction; -public class DeleteCustomer implements CustomerMenuHandler, ValueWithEndValidator, AnswerValidator { +public class DeleteCustomer implements CustomerMenuHandler { private static DeleteCustomer instance; private Customer selected; @@ -28,7 +24,7 @@ public static DeleteCustomer getInstance() { public void run(){ String id; boolean isExit = false; - id = getValueOrEnd("Type User Id to Delete : ", String.class); + id = Validator.getValueOrEnd("Type User Id to Delete : ", String.class); if("end".equalsIgnoreCase(id)){ return; } @@ -39,7 +35,7 @@ public void run(){ } System.out.println("Selected Customer's Info"); System.out.println(selected.toString()); - if(isAnswerYes("Did you Really Want to Delete This User? | y or n")){ + if(Validator.isAnswerYes("Did you Really Want to Delete This User? | y or n")){ Customers.getInstance().getCustomerList().remove(selected); System.out.printf("User %s Successfully Deleted\n", id); } diff --git a/src/com/smartstore/function/customer/update/SetId.java b/src/com/smartstore/function/customer/update/SetId.java index 8dff79fb..a9d3d815 100644 --- a/src/com/smartstore/function/customer/update/SetId.java +++ b/src/com/smartstore/function/customer/update/SetId.java @@ -1,11 +1,8 @@ package com.smartstore.function.customer.update; import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.function.HandleableParam; -import com.smartstore.function.IdDuplicateChecker; -import com.smartstore.function.ValueWithEndValidator; -import com.smartstore.util.CustomList; +import com.smartstore.util.DuplicateChecker; +import com.smartstore.util.Validator; public class SetId implements UpdateCustomerHandler { private static SetId instance; @@ -26,12 +23,12 @@ public static SetId getInstance(){ public void run(T value) { String id; while (true){ - id = getValueOrEnd("Input New Id\n Wait for input... 'end' to exit", String.class); + id = Validator.getValueOrEnd("Input New Id\n Wait for input... 'end' to exit", String.class); if(id.isBlank() || "end".equals(id)){ System.out.println("Change not saved"); break; } - if(!isIdDuplicated(id)){ + if(!DuplicateChecker.isIdDuplicated(id)){ System.out.println("Change Successfully Saved"); ((Customer) value).setCustomerId(id); break; diff --git a/src/com/smartstore/function/customer/update/SetName.java b/src/com/smartstore/function/customer/update/SetName.java index 075e5f0d..1e6478d4 100644 --- a/src/com/smartstore/function/customer/update/SetName.java +++ b/src/com/smartstore/function/customer/update/SetName.java @@ -1,8 +1,7 @@ package com.smartstore.function.customer.update; import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.util.CustomList; +import com.smartstore.util.Validator; public class SetName implements UpdateCustomerHandler { private static SetName instance; @@ -22,7 +21,7 @@ public static SetName getInstance(){ public void run(T value) { String name = ""; Customer customer = (Customer) value; - name = getValueOrEnd("Input New Name\n Wait for input... 'end' to exit", String.class); + name = Validator.getValueOrEnd("Input New Name\n Wait for input... 'end' to exit", String.class); if(name.isBlank() || "end".equals(name)){ System.out.println("Change not saved"); return; diff --git a/src/com/smartstore/function/customer/update/SetPaymentAmount.java b/src/com/smartstore/function/customer/update/SetPaymentAmount.java index 61341d03..3d7ec95e 100644 --- a/src/com/smartstore/function/customer/update/SetPaymentAmount.java +++ b/src/com/smartstore/function/customer/update/SetPaymentAmount.java @@ -1,6 +1,7 @@ package com.smartstore.function.customer.update; import com.smartstore.customer.Customer; +import com.smartstore.util.Validator; public class SetPaymentAmount implements UpdateCustomerHandler { private static SetPaymentAmount instance; @@ -19,7 +20,7 @@ public static SetPaymentAmount getInstance(){ @Override public void run(T value) { String paymentAmount; - paymentAmount = getValueOrEnd("Input New PaymentAmount\n Wait for input... 'end' to exit", Integer.class); + paymentAmount = Validator.getValueOrEnd("Input New PaymentAmount\n Wait for input... 'end' to exit", Integer.class); if(paymentAmount.isBlank() || "end".equals(paymentAmount)){ System.out.println("Change not saved"); return; diff --git a/src/com/smartstore/function/customer/update/SetUsageTime.java b/src/com/smartstore/function/customer/update/SetUsageTime.java index 9e5a2c7b..b6d070c2 100644 --- a/src/com/smartstore/function/customer/update/SetUsageTime.java +++ b/src/com/smartstore/function/customer/update/SetUsageTime.java @@ -1,6 +1,7 @@ package com.smartstore.function.customer.update; import com.smartstore.customer.Customer; +import com.smartstore.util.Validator; public class SetUsageTime implements UpdateCustomerHandler { private static SetUsageTime instance; @@ -19,7 +20,7 @@ public static SetUsageTime getInstance(){ @Override public void run(T value) { String usageTime; - usageTime = getValueOrEnd("Input New UsageTime\n Wait for input... 'end' to exit", Integer.class); + usageTime = Validator.getValueOrEnd("Input New UsageTime\n Wait for input... 'end' to exit", Integer.class); if(usageTime.isBlank() || "end".equals(usageTime)){ System.out.println("Change not saved"); return; diff --git a/src/com/smartstore/function/customer/update/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java index 9f07d045..c75c269d 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -2,12 +2,13 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.customer.view.ViewCustomerFunction; +import com.smartstore.util.Function; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; -public class UpdateCustomer implements CustomerMenuHandler, IntegerValidator, ValueWithEndValidator, MenuPrintable { +public class UpdateCustomer implements CustomerMenuHandler { private static UpdateCustomer instance; @@ -38,7 +39,7 @@ public boolean handleChoice(String menuNumber) { public void run(){ String id=""; boolean isExit = false; - id = getValueOrEnd("Type User Id to Update : ", String.class); + id = Validator.getValueOrEnd("Type User Id to Update : ", String.class); if("end".equalsIgnoreCase(id)){ return; } @@ -51,8 +52,8 @@ public void run(){ System.out.println(selected.toString()); System.out.println(); while (!isExit){ - printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); + Printer.printMenu(getMenuListFromEnum(UpdateCustomerFunction.class)); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class))); } } diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java index c2acd33c..d604198f 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerFunction.java @@ -1,10 +1,8 @@ package com.smartstore.function.customer.update; import com.smartstore.function.Back; -import com.smartstore.function.Function; -import com.smartstore.function.Handleable; -import com.smartstore.function.HandleableParam; -import com.smartstore.function.membership.update.SetMinPaymentAmount; +import com.smartstore.util.Function; +import com.smartstore.util.HandleableParam; public enum UpdateCustomerFunction implements Function { diff --git a/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java index 9f16a958..18ec12a7 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomerHandler.java @@ -1,7 +1,7 @@ package com.smartstore.function.customer.update; -import com.smartstore.function.*; +import com.smartstore.util.HandleableParam; -public interface UpdateCustomerHandler extends HandleableParam, ValueWithEndValidator, IdDuplicateChecker { +public interface UpdateCustomerHandler extends HandleableParam { } \ No newline at end of file diff --git a/src/com/smartstore/function/customer/view/ViewCustomer.java b/src/com/smartstore/function/customer/view/ViewCustomer.java index 2bb263e7..a0e16063 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomer.java +++ b/src/com/smartstore/function/customer/view/ViewCustomer.java @@ -1,10 +1,12 @@ package com.smartstore.function.customer.view; -import com.smartstore.function.*; import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.function.membership.update.UpdateMembershipRequirementFunction; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; -public class ViewCustomer implements CustomerMenuHandler, MenuValidator, Handleable { +public class ViewCustomer implements CustomerMenuHandler, Handleable { private static ViewCustomer instance; @@ -23,9 +25,9 @@ public void run() { boolean isExit = false; while (!isExit){ - printMenu(getMenuListFromEnum(ViewCustomerFunction.class)); + Printer.printMenu(getMenuListFromEnum(ViewCustomerFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(ViewCustomerFunction.class))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(ViewCustomerFunction.class))); } } diff --git a/src/com/smartstore/function/customer/view/ViewCustomerAll.java b/src/com/smartstore/function/customer/view/ViewCustomerAll.java index 5918986a..1ac897d7 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerAll.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerAll.java @@ -2,7 +2,7 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; +import com.smartstore.util.Handleable; import com.smartstore.util.List; public class ViewCustomerAll implements Handleable { @@ -30,7 +30,7 @@ public void run() { } System.out.println("List of Customers"); System.out.println("======================================"); - System.out.println(customerList.toString()); + System.out.println(customerList); System.out.println("======================================"); } } diff --git a/src/com/smartstore/function/customer/view/ViewCustomerById.java b/src/com/smartstore/function/customer/view/ViewCustomerById.java index e5af8be7..3a397497 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerById.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerById.java @@ -2,9 +2,10 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; +import com.smartstore.util.Handleable; +import com.smartstore.util.Validator; -public class ViewCustomerById implements ValueWithEndValidator, Handleable { +public class ViewCustomerById implements Handleable { private static ViewCustomerById instance; @@ -23,7 +24,7 @@ public static ViewCustomerById getInstance() { public void run() { Customers customers = Customers.getInstance(); Customer customer = null; - String value = getValueOrEnd("Type User Id to Find | 'end' to cancel : ", String.class); + String value = Validator.getValueOrEnd("Type User Id to Find | 'end' to cancel : ", String.class); String msg=""; if(!"end".equalsIgnoreCase(value)){ diff --git a/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java index 8e760222..8c284d5f 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java @@ -2,11 +2,12 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.function.*; import com.smartstore.util.Define; +import com.smartstore.util.Handleable; import com.smartstore.util.List; +import com.smartstore.util.Validator; -public class ViewCustomerByPaging implements MenuPrintable, ValueWithEndValidator,UserDataValidator, AnswerValidator, Handleable { +public class ViewCustomerByPaging implements Handleable { private static ViewCustomerByPaging instance; @@ -22,10 +23,7 @@ public static ViewCustomerByPaging getInstance() { } private boolean indexRangeCheck(int sizeOfList, int index){ - if(index + Define.PAGING > sizeOfList){ - return false; - } - return true; + return index + Define.PAGING <= sizeOfList; } @Override @@ -49,14 +47,14 @@ public void run() { if(fromIndex >= listSize){ break; } - if(!isAnswerYes("Continue To See Customer list, Type 'Y'")){ + if(!Validator.isAnswerYes("Continue To See Customer list, Type 'Y'")){ break; } } }else{ System.out.printf("List of Customers %d - %d\n",1,listSize); System.out.println("======================================"); - System.out.print(customerList.toString()); + System.out.print(customerList); } System.out.println("======================================"); diff --git a/src/com/smartstore/function/customer/view/ViewCustomerFunction.java b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java index b01733d6..50443407 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerFunction.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerFunction.java @@ -1,8 +1,8 @@ package com.smartstore.function.customer.view; import com.smartstore.function.Back; -import com.smartstore.function.Function; -import com.smartstore.function.Handleable; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; public enum ViewCustomerFunction implements Function { diff --git a/src/com/smartstore/function/mainmenu/CustomerMenu.java b/src/com/smartstore/function/mainmenu/CustomerMenu.java index 9ad21640..ff955d21 100644 --- a/src/com/smartstore/function/mainmenu/CustomerMenu.java +++ b/src/com/smartstore/function/mainmenu/CustomerMenu.java @@ -1,8 +1,9 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.Function; +import com.smartstore.util.Function; import com.smartstore.function.customer.CustomerFunction; -import com.smartstore.function.membership.MembershipFunction; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; public class CustomerMenu implements MainMenuHandler { public static CustomerMenu getInstance() { @@ -18,9 +19,9 @@ public static CustomerMenu getInstance() { public void run() { boolean isExit = false; while (!isExit){ - printMenu(getMenuListFromEnum(CustomerFunction.class)); + Printer.printMenu(getMenuListFromEnum(CustomerFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(CustomerFunction.class))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(CustomerFunction.class))); } } diff --git a/src/com/smartstore/function/mainmenu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java index 7d2e623d..b2a00bd7 100644 --- a/src/com/smartstore/function/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -1,10 +1,6 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.EnumValueProvider; -import com.smartstore.function.Function; -import com.smartstore.function.MenuPrintable; - -import java.util.Arrays; +import com.smartstore.util.Function; public class MainMenu implements MainMenuHandler { private static MainMenu instance; diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 292b737b..a3def712 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -1,6 +1,8 @@ package com.smartstore.function.mainmenu; import com.smartstore.function.*; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; public enum MainMenuFunction implements Function { SPLASH_SCREEN(0, MainMenu.getInstance(), "SPLASH_SCREEN"), @@ -12,7 +14,7 @@ public enum MainMenuFunction implements Function { private final int menuNumber; private final Handleable handler; - private String menuText; + private final String menuText; MainMenuFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index 98647ab0..1623fb29 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -1,16 +1,16 @@ package com.smartstore.function.mainmenu; -import com.smartstore.function.*; +import com.smartstore.util.*; -public interface MainMenuHandler extends MenuPrintable, EnumValueProvider, Handler, MenuValidator, HandleableParam { +public interface MainMenuHandler extends EnumValueProvider, Handler, HandleableParam { default void run() { boolean isExit = false; while (!isExit){ - printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); + Printer.printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number //isExit = handleChoice(getMenuNumber(Screen.of(getCurrentMenuNumber()).getMenus())); - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber()))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber()))); } } @@ -19,7 +19,7 @@ default void run() { default void run(T value) { boolean isExit = false; while (!isExit){ - printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); + Printer.printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number isExit = handleChoice(String.valueOf(value)); } diff --git a/src/com/smartstore/function/mainmenu/MembershipMenu.java b/src/com/smartstore/function/mainmenu/MembershipMenu.java index 8ade1662..7e953930 100644 --- a/src/com/smartstore/function/mainmenu/MembershipMenu.java +++ b/src/com/smartstore/function/mainmenu/MembershipMenu.java @@ -1,7 +1,9 @@ package com.smartstore.function.mainmenu; import com.smartstore.function.membership.MembershipFunction; -import com.smartstore.function.Function; +import com.smartstore.util.Function; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; public class MembershipMenu implements MainMenuHandler { private static MembershipMenu instance; @@ -19,9 +21,9 @@ private MembershipMenu(){ public void run() { boolean isExit = false; while (!isExit){ - printMenu(getMenuListFromEnum(MembershipFunction.class)); + Printer.printMenu(getMenuListFromEnum(MembershipFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(MembershipFunction.class))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(MembershipFunction.class))); } } diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 606cd807..3b2ecb0a 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -1,9 +1,8 @@ package com.smartstore.function.membership; import com.smartstore.function.Back; -import com.smartstore.function.Function; -import com.smartstore.function.Handleable; -import com.smartstore.function.Handler; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; import com.smartstore.function.membership.set.SetMembershipRequirement; import com.smartstore.function.membership.update.UpdateMembershipRequirement; import com.smartstore.function.membership.view.ViewMembershipRequirement; @@ -17,7 +16,7 @@ public enum MembershipFunction implements Function { private final int menuNumber; private final Handleable handler; - private String menuText; + private final String menuText; MembershipFunction(int menuNumber, Handleable handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 50965328..394a6afe 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -1,22 +1,25 @@ package com.smartstore.function.membership; -import com.smartstore.function.*; import com.smartstore.function.mainmenu.MainMenuFunction; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; +import com.smartstore.util.EnumValueProvider; +import com.smartstore.util.Handler; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; import java.util.NoSuchElementException; -public interface MembershipMenuHandler extends SelectablePrintable, EnumValueProvider, Handler, ParameterValidator, MenuValidator { +public interface MembershipMenuHandler extends EnumValueProvider, Handler { default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - printSelectable(getMenuListFromEnum(MembershipType.class)); + Printer.printSelectable(getMenuListFromEnum(MembershipType.class)); - isExit = handleChoice(getParameter(getMenuListFromEnum(MembershipType.class))); + isExit = handleChoice(Validator.getParameter(getMenuListFromEnum(MembershipType.class))); } } diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 21b45b6f..3b00168a 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -1,7 +1,6 @@ package com.smartstore.function.membership.update; -import com.smartstore.function.Handleable; -import com.smartstore.function.HandleableParam; +import com.smartstore.util.HandleableParam; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index 4be8976e..22a29597 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -1,7 +1,6 @@ package com.smartstore.function.membership.update; -import com.smartstore.function.HandleableParam; -import com.smartstore.function.IntegerValidator; +import com.smartstore.util.HandleableParam; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index ad66e97c..bbd0be27 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -1,14 +1,14 @@ package com.smartstore.function.membership.update; -import com.smartstore.function.Function; -import com.smartstore.function.MenuPrintable; -import com.smartstore.function.SelectablePrintable; import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.util.Function; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; -public class UpdateMembershipRequirement implements MembershipMenuHandler, SelectablePrintable, MenuPrintable { +public class UpdateMembershipRequirement implements MembershipMenuHandler { private static UpdateMembershipRequirement instance; private MembershipType selected; @@ -25,12 +25,7 @@ public static UpdateMembershipRequirement getInstance() { public void processMembership(MembershipType membershipType, MembershipRequirement requirement){ boolean isExit = false; - MenuPrintable menuPrintable = new MenuPrintable() { - @Override - public void printMenu(String[] menus) { - MenuPrintable.super.printMenu(menus); - } - }; + if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); }else{ @@ -39,9 +34,9 @@ public void printMenu(String[] menus) { System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); selected = membershipType; while (!isExit){ - menuPrintable.printMenu(getMenuListFromEnum(UpdateMembershipRequirementFunction.class)); + Printer.printMenu(getMenuListFromEnum(UpdateMembershipRequirementFunction.class)); //get menu number from user until valid menu number - isExit = handleChoice(getMenuNumber(getMenuListFromEnum(UpdateMembershipRequirementFunction.class))); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateMembershipRequirementFunction.class))); } } } @@ -61,9 +56,9 @@ public void run(){ boolean isExit = false; while (!isExit){ - printSelectable(getMenuListFromEnum(MembershipType.class)); + Printer.printSelectable(getMenuListFromEnum(MembershipType.class)); //get menu number from user until valid menu number - isExit = MembershipMenuHandler.super.handleChoice(getParameter(getMenuListFromEnum(MembershipType.class))); + isExit = MembershipMenuHandler.super.handleChoice(Validator.getParameter(getMenuListFromEnum(MembershipType.class))); } } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index 45066577..e439b932 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -1,9 +1,8 @@ package com.smartstore.function.membership.update; import com.smartstore.function.Back; -import com.smartstore.function.Function; -import com.smartstore.function.HandleableParam; -import com.smartstore.function.Handler; +import com.smartstore.util.Function; +import com.smartstore.util.HandleableParam; public enum UpdateMembershipRequirementFunction implements Function { @@ -13,7 +12,7 @@ public enum UpdateMembershipRequirementFunction implements Function { private final int menuNumber; private final HandleableParam handler; - private String menuText; + private final String menuText; UpdateMembershipRequirementFunction(int menuNumber, HandleableParam handler, String menuText) { this.menuNumber = menuNumber; this.handler = handler; diff --git a/src/com/smartstore/function/sorting/Sort.java b/src/com/smartstore/function/sorting/Sort.java new file mode 100644 index 00000000..b72a8d37 --- /dev/null +++ b/src/com/smartstore/function/sorting/Sort.java @@ -0,0 +1,60 @@ +package com.smartstore.function.sorting; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.util.Function; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; + + +public class Sort implements CustomerMenuHandler { + + private static Sort instance; + + private Sort(){ + + } + + private Customer selected; + + public static Sort getInstance() { + if(instance == null){ + return new Sort(); + } + return instance; + } + + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == SortFunction.BACK.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), SortFunction.class).run(selected); + return false; + } + + @Override + public void run(){ + String id=""; + boolean isExit = false; + id = Validator.getValueOrEnd("Type User Id to Update : ", String.class); + if("end".equalsIgnoreCase(id)){ + return; + } + selected = Customers.getInstance().getCustomerById(id); + if(selected == null){ + System.out.printf("There is no User %s\n", id); + return; + } + System.out.println("Selected Customer's Info"); + System.out.println(selected.toString()); + System.out.println(); + while (!isExit){ + Printer.printMenu(getMenuListFromEnum(SortFunction.class)); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(SortFunction.class))); + } + + } +} diff --git a/src/com/smartstore/function/sorting/SortByName.java b/src/com/smartstore/function/sorting/SortByName.java new file mode 100644 index 00000000..4fd8ec6c --- /dev/null +++ b/src/com/smartstore/function/sorting/SortByName.java @@ -0,0 +1,28 @@ +package com.smartstore.function.sorting; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.util.CustomList; + +public class SortByName implements SortHandler { + private static SortByName instance; + + private SortByName(){ + + } + + public static SortByName getInstance(){ + if(instance == null){ + return new SortByName(); + } + return instance; + } + + @Override + public void run() { + CustomList customerList = Customers.getInstance().getCustomerList(); + Customer[] customerArr = customerList.toArray(new Customer[customerList.size()]); + + + } +} diff --git a/src/com/smartstore/function/sorting/SortFunction.java b/src/com/smartstore/function/sorting/SortFunction.java new file mode 100644 index 00000000..d40b7029 --- /dev/null +++ b/src/com/smartstore/function/sorting/SortFunction.java @@ -0,0 +1,40 @@ +package com.smartstore.function.sorting; + +import com.smartstore.function.Back; +import com.smartstore.util.Function; +import com.smartstore.util.Handleable; + +public enum SortFunction implements Function { + + BY_MEMBERSHIP(1, SortByName.getInstance(), "Summary GroupBy Membership"), + BY_NAME(2, SortByName.getInstance(), "Summary GroupBy Membership[Name]"), + BY_USAGE_TIME(3, SortByName.getInstance(), "Summary GroupBy Membership[Usage Time]"), + BY_PAYMENT_AMOUNT(4, SortByName.getInstance(), "Summary GroupBy Membership[Payment Amount]"), + BACK(5, Back.getInstance(), "Return to prev Menu"); + + + private final int menuNumber; + private final Handleable handler; + private final String menuText; + SortFunction(int menuNumber, Handleable handler, String menuText) { + this.menuNumber = menuNumber; + this.handler = handler; + this.menuText = menuText; + } + + @Override + public String getMenuText() { + return menuText; + } + + @Override + public int getMenuNumber() { + return this.menuNumber; + } + + @Override + public Handleable getMenuHandler() { + return this.handler; + } + +} diff --git a/src/com/smartstore/function/sorting/SortHandler.java b/src/com/smartstore/function/sorting/SortHandler.java new file mode 100644 index 00000000..7d3f47d3 --- /dev/null +++ b/src/com/smartstore/function/sorting/SortHandler.java @@ -0,0 +1,6 @@ +package com.smartstore.function.sorting; + +import com.smartstore.util.Handleable; + +public interface SortHandler extends Handleable { +} \ No newline at end of file diff --git a/src/com/smartstore/membership/MembershipRequirement.java b/src/com/smartstore/membership/MembershipRequirement.java index 14b6f735..9d09c4ba 100644 --- a/src/com/smartstore/membership/MembershipRequirement.java +++ b/src/com/smartstore/membership/MembershipRequirement.java @@ -1,8 +1,8 @@ package com.smartstore.membership; public class MembershipRequirement { - private int minUsageTime; - private int minPaymentAmount; + private final int minUsageTime; + private final int minPaymentAmount; public MembershipRequirement(int minUsageTime, int minPaymentAmount) { this.minUsageTime = minUsageTime; diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 46275710..0e902455 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -1,7 +1,7 @@ package com.smartstore.membership; -import com.smartstore.function.MenuProvider; +import com.smartstore.util.MenuProvider; import java.util.Arrays; import java.util.Optional; @@ -11,8 +11,8 @@ public enum MembershipType implements MenuProvider { VIP(new String[] {"V", "VIP", "우수"}, "VIP"), VVIP(new String[] {"VV", "VVIP", "최우수"}, "VVIP"); - private String[] membershipNames; - private String menuText; + private final String[] membershipNames; + private final String menuText; MembershipType(String[] membershipNames, String menuText) { this.membershipNames = membershipNames; this.menuText = menuText; diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 1059380d..39169165 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,16 +1,14 @@ package com.smartstore.membership; -import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; import com.smartstore.util.CustomEnumMap; -import com.smartstore.util.Map; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Memberships { - private CustomEnumMap membershipList = new CustomEnumMap<>(MembershipType.class); + private final CustomEnumMap membershipList = new CustomEnumMap<>(MembershipType.class); private static Memberships instance; public static Memberships getInstance(){ diff --git a/src/com/smartstore/util/CustomEnumMap.java b/src/com/smartstore/util/CustomEnumMap.java index d610aeed..d1b0e108 100644 --- a/src/com/smartstore/util/CustomEnumMap.java +++ b/src/com/smartstore/util/CustomEnumMap.java @@ -8,7 +8,7 @@ public class CustomEnumMap, V> implements Map{ //keyType must be Enum private final Class keyType; - private Object[] values; + private final Object[] values; private int size = 0; diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 55c2efcc..92154286 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -74,7 +74,7 @@ public String toString() { ideal size is expected entries * 0.75 key Not allowed null, value allowed null */ - private Node[] entries; + private final Node[] entries; //The default initial capacity - MUST be a power of two. //use bitwise to code readability diff --git a/src/com/smartstore/util/CustomList.java b/src/com/smartstore/util/CustomList.java index df8a60d5..584df6fa 100644 --- a/src/com/smartstore/util/CustomList.java +++ b/src/com/smartstore/util/CustomList.java @@ -96,7 +96,7 @@ public boolean remove(T object) { } if(remove(index)){ return true; - }; + } } throw new IllegalArgumentException("Null Can't be found"); } diff --git a/src/com/smartstore/function/IdDuplicateChecker.java b/src/com/smartstore/util/DuplicateChecker.java similarity index 82% rename from src/com/smartstore/function/IdDuplicateChecker.java rename to src/com/smartstore/util/DuplicateChecker.java index 0590bbd1..f362f05f 100644 --- a/src/com/smartstore/function/IdDuplicateChecker.java +++ b/src/com/smartstore/util/DuplicateChecker.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; @@ -7,8 +7,8 @@ import java.util.Arrays; import java.util.Optional; -public interface IdDuplicateChecker { - default boolean isIdDuplicated(String id){ +public class DuplicateChecker { + public static boolean isIdDuplicated(String id){ CustomList customerList = Customers.getInstance().getCustomerList(); Optional customerOptional = Arrays.stream(customerList.toArray(new Customer[customerList.size()])) .filter(customer -> id.equalsIgnoreCase(customer.getCustomerName())) diff --git a/src/com/smartstore/function/EnumValueProvider.java b/src/com/smartstore/util/EnumValueProvider.java similarity index 96% rename from src/com/smartstore/function/EnumValueProvider.java rename to src/com/smartstore/util/EnumValueProvider.java index 9da3ff8c..005c6a2f 100644 --- a/src/com/smartstore/function/EnumValueProvider.java +++ b/src/com/smartstore/util/EnumValueProvider.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; import java.util.Arrays; diff --git a/src/com/smartstore/function/Function.java b/src/com/smartstore/util/Function.java similarity index 96% rename from src/com/smartstore/function/Function.java rename to src/com/smartstore/util/Function.java index ed32ca1b..05164dba 100644 --- a/src/com/smartstore/function/Function.java +++ b/src/com/smartstore/util/Function.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; import java.util.Arrays; diff --git a/src/com/smartstore/function/Handleable.java b/src/com/smartstore/util/Handleable.java similarity index 59% rename from src/com/smartstore/function/Handleable.java rename to src/com/smartstore/util/Handleable.java index 0cf4d6e2..660e73e6 100644 --- a/src/com/smartstore/function/Handleable.java +++ b/src/com/smartstore/util/Handleable.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; public interface Handleable { void run(); diff --git a/src/com/smartstore/function/HandleableParam.java b/src/com/smartstore/util/HandleableParam.java similarity index 66% rename from src/com/smartstore/function/HandleableParam.java rename to src/com/smartstore/util/HandleableParam.java index 8bfa7ab6..0bcd841e 100644 --- a/src/com/smartstore/function/HandleableParam.java +++ b/src/com/smartstore/util/HandleableParam.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; public interface HandleableParam { void run(T value); diff --git a/src/com/smartstore/function/Handler.java b/src/com/smartstore/util/Handler.java similarity index 80% rename from src/com/smartstore/function/Handler.java rename to src/com/smartstore/util/Handler.java index 2ad403d2..0b5258d9 100644 --- a/src/com/smartstore/function/Handler.java +++ b/src/com/smartstore/util/Handler.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; public interface Handler extends Readable, Handleable { boolean handleChoice(String menuNumber); diff --git a/src/com/smartstore/function/MenuProvider.java b/src/com/smartstore/util/MenuProvider.java similarity index 64% rename from src/com/smartstore/function/MenuProvider.java rename to src/com/smartstore/util/MenuProvider.java index 0bd2c8c0..fa86a769 100644 --- a/src/com/smartstore/function/MenuProvider.java +++ b/src/com/smartstore/util/MenuProvider.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; public interface MenuProvider { String getMenuText(); diff --git a/src/com/smartstore/util/MergeSort.java b/src/com/smartstore/util/MergeSort.java new file mode 100644 index 00000000..fdad67f3 --- /dev/null +++ b/src/com/smartstore/util/MergeSort.java @@ -0,0 +1,65 @@ +package com.smartstore.util; + +import com.smartstore.customer.Customer; + +import java.util.Arrays; + +public class MergeSort { + + //default -> ascending + public static Customer[] mergeSort(Customer[] arr){ + return mergeSort(arr, true); + } + + + public static Customer[] mergeSort(Customer[] arr, boolean ascending){ + //Already Sorted + if(arr == null || arr.length <= 1){ + return arr; + } + return mergeSort(arr, 0, arr.length -1, ascending); + } + + private static Customer[] mergeSort(Customer[] arr, int left, int right, boolean ascending){ + if (left = 0)) { + mergedArr[k] = leftArr[i]; + i++; + } else { + mergedArr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < leftLen) { + mergedArr[k] = leftArr[i]; + i++; + k++; + } + + while (j < rightLen) { + mergedArr[k] = rightArr[j]; + j++; + k++; + } + + return mergedArr; + } +} diff --git a/src/com/smartstore/util/Printer.java b/src/com/smartstore/util/Printer.java new file mode 100644 index 00000000..8756af46 --- /dev/null +++ b/src/com/smartstore/util/Printer.java @@ -0,0 +1,16 @@ +package com.smartstore.util; + +public class Printer { + + public static void printMenu(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("%d. %s\n",i + 1,menus[i]); + } + } + public static void printSelectable(String[] menus){ + for(int i = 0 ; i < menus.length ; i++){ + System.out.printf("| %s ",menus[i]); + } + System.out.println("| or 'end'"); + } +} diff --git a/src/com/smartstore/function/Readable.java b/src/com/smartstore/util/Readable.java similarity index 84% rename from src/com/smartstore/function/Readable.java rename to src/com/smartstore/util/Readable.java index 4555b769..4ec9e52f 100644 --- a/src/com/smartstore/function/Readable.java +++ b/src/com/smartstore/util/Readable.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; import java.io.BufferedReader; import java.io.InputStreamReader; diff --git a/src/com/smartstore/function/SubMenuHandleable.java b/src/com/smartstore/util/SubMenuHandleable.java similarity index 65% rename from src/com/smartstore/function/SubMenuHandleable.java rename to src/com/smartstore/util/SubMenuHandleable.java index 456ce677..72439fed 100644 --- a/src/com/smartstore/function/SubMenuHandleable.java +++ b/src/com/smartstore/util/SubMenuHandleable.java @@ -1,4 +1,4 @@ -package com.smartstore.function; +package com.smartstore.util; public interface SubMenuHandleable { void run(int menu); diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java new file mode 100644 index 00000000..b6c265b2 --- /dev/null +++ b/src/com/smartstore/util/Validator.java @@ -0,0 +1,136 @@ +package com.smartstore.util; + +import com.smartstore.membership.MembershipType; + +import java.io.IOException; + +public class Validator implements Readable { + public static String getValueOrEnd(String msg, Class type){ + String value; + while (true){ + try { + System.out.println(msg); + value = br.readLine(); + if("end".equalsIgnoreCase(java.lang.String.valueOf(value))){ + break; + } + if(Number.class.isAssignableFrom(type) && Integer.parseInt(value) < 0){ + throw new IllegalArgumentException(); + }else { + break; + } + } catch (IOException | IllegalArgumentException e) { + System.out.println("Input valid Integer Data 1 ~ Integer.Max"); + } + } + return value; + } + + + /** + * + * @param isRequired : is Data Required + * @return input value from user + */ + public static String getUserData(boolean isRequired, String msg){ + String value = null; + while (true){ + try { + System.out.print(msg); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input Validate Data"); + } + + if(isRequired && !value.isBlank()){ + break; + } + System.out.println("Please Input Validate Data, This Element Can't be Empty or Black"); + } + return value; + } + + public static String getParameter(String[] values) { + String valueName=""; + boolean isExit = false; + if(values.length > 0) { + while (!isExit) { + try { + System.out.print("Input : "); + valueName = br.readLine(); + if("end".equals(valueName)){ + isExit = true; + break; + } + for (String membershipName : values) { + if (MembershipType.valueOf(membershipName.toUpperCase()).isMatchedName(valueName)) { + isExit = true; + break; + } + } + } catch (IOException | IllegalArgumentException | NullPointerException e) { + System.out.println("Invalid Parameter"); + } + } + } + return valueName; + } + + public static String getMenuNumber(String[] values) { + int menu = -1; + while (true){ + try { + System.out.print("Wait for Input : "); + menu = Integer.parseInt(br.readLine()); + if (menu <= 0 || menu > values.length) { + // TODO: 2023-05-08 throw other exception, catch it + throw new NumberFormatException("Invalid Menu"); + } + break; + + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Menu"); + } + } + return String.valueOf(menu); + } + + public static int getIntegerValue(){ + int value; + while (true){ + try { + System.out.println("Wait for Input : "); + value = Integer.parseInt(br.readLine()); + if(value < 0){ + throw new IllegalArgumentException(); + }else { + break; + } + } catch (IOException | IllegalArgumentException e) { + System.out.print("Input valid Integer Data 1 ~ Integer.Max"); + } + } + return value; + } + + public static boolean isAnswerYes(String msg){ + System.out.println(msg); + String value = ""; + while (true){ + try { + System.out.print("Wait for Input Y or N: "); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input Y or N"); + } + if("y".equalsIgnoreCase(value)){ + return true; + } + if("n".equalsIgnoreCase(value)){ + return false; + } + System.out.println("Please Input Y or N"); + } + } + +} From deacce703132508059fe5f5e9744e03103347ba2 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 09:51:05 +0900 Subject: [PATCH 68/79] refactor: fix bug, delete unnecessary file [ modified : conditions of set membership, update membership return to prev menu after update deleted : unnecessary file ] --- src/com/smartstore/Main.java | 36 ++++++++++++ src/com/smartstore/customer/Customer.java | 26 +++++++-- src/com/smartstore/customer/Customers.java | 7 --- .../function/mainmenu/MainMenuFunction.java | 2 +- .../function/mainmenu/MainMenuHandler.java | 2 +- .../smartstore/function/mainmenu/Screen.java | 57 ------------------- .../membership/MembershipMenuHandler.java | 2 +- .../update/UpdateMembershipRequirement.java | 4 +- .../smartstore/membership/MembershipType.java | 1 + .../smartstore/util/SubMenuHandleable.java | 5 -- src/com/smartstore/util/Validator.java | 24 +------- 11 files changed, 66 insertions(+), 100 deletions(-) delete mode 100644 src/com/smartstore/function/mainmenu/Screen.java delete mode 100644 src/com/smartstore/util/SubMenuHandleable.java diff --git a/src/com/smartstore/Main.java b/src/com/smartstore/Main.java index 80d6ebe5..712d4060 100644 --- a/src/com/smartstore/Main.java +++ b/src/com/smartstore/Main.java @@ -1,7 +1,43 @@ package com.smartstore; +import com.smartstore.customer.Customer; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; +import com.smartstore.util.CustomList; + public class Main { public static void main(String[] args) { + //SmartStore.run(); + CustomList test = new CustomList<>(); + //Added before Membership Setting (Will update when Membership requirement set) + test.add(new Customer("b1","b1ID",1,1)); + test.add(new Customer("b2","b2ID",3,1)); + test.add(new Customer("b3","b3ID",4,3)); + test.add(new Customer("b4","b4ID",6,3)); + test.add(new Customer("b5","b5ID",9,3)); + test.add(new Customer("b6","b6ID",9,6)); + + Memberships.getInstance().setMembershipRequirement(MembershipType.GENERAL,3,3); + Memberships.getInstance().setMembershipRequirement(MembershipType.VIP,6,6); + Memberships.getInstance().setMembershipRequirement(MembershipType.VVIP,9,9); + + //Added after Membership Setting (update when added) + test.add(new Customer("a1","a1ID",1,1)); + test.add(new Customer("a2","a2ID",3,3)); + test.add(new Customer("a3","a3ID",4,4)); + test.add(new Customer("a4","a4ID",5,5)); + test.add(new Customer("a5","a5ID",6,6)); + test.add(new Customer("a6","a6ID",7,7)); + test.add(new Customer("a7","a7ID",8,8)); + test.add(new Customer("a8","a8ID",9,9)); + test.add(new Customer("a9","a9ID",10,10)); + test.add(new Customer("c1","c1ID",6,3)); + test.add(new Customer("c2","c2ID",9,3)); + test.add(new Customer("c3","c3ID",9,6)); + + + System.out.println(test.toString()); SmartStore.run(); + } } diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index 0db9f09f..bad33c3a 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -26,18 +26,34 @@ public Customer(String customerName, String customerId, int usageTime, int paym public void setMembership(int usageTime, int paymentAmount) { Memberships memberships = Memberships.getInstance(); - MembershipType membership = null; + MembershipType membership = MembershipType.NONE; //Map is CustomMap CustomEnumMap membershipList = memberships.getMembershipList(); - for(MembershipType membershipType :MembershipType.values()){ + int currentUsageTime = 0; + int currentPaymentTime = 0; + boolean isUsageLowerThenCurrent = false; + boolean isPaymentLowerThenCurrent = false; + for(MembershipType membershipType : MembershipType.values()){ try { - if(usageTime >= membershipList.get(membershipType).getMinUsageTime() && paymentAmount >= membershipList.get(membershipType).getMinPaymentAmount()){ - membership = membershipType; + currentUsageTime = membershipType == MembershipType.NONE ? 0 : membershipList.get(membershipType).getMinUsageTime(); + currentPaymentTime = membershipType == MembershipType.NONE ? 0 : membershipList.get(membershipType).getMinPaymentAmount(); + + isUsageLowerThenCurrent = usageTime >= currentUsageTime ? false : true; + isPaymentLowerThenCurrent = paymentAmount >= currentPaymentTime ? false : true; + + if(!isUsageLowerThenCurrent){ + if (!isPaymentLowerThenCurrent){ + membership = membershipType; + } else{ + break; + } + } else { + break; } }catch (NullPointerException e){ //Set General(lowers Membership) is not Set yet //Set Membership as null - membership = null; + membership = MembershipType.NONE; } } diff --git a/src/com/smartstore/customer/Customers.java b/src/com/smartstore/customer/Customers.java index 7d411826..437fbf60 100644 --- a/src/com/smartstore/customer/Customers.java +++ b/src/com/smartstore/customer/Customers.java @@ -44,11 +44,4 @@ public void updateMembership(){ } } - public int getIndexOfCustomer(Customer customer){ - if(customerList.size() == 0){ - return -1; - } - return customerList.indexOf(customer); - } - } diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index a3def712..05f6bec8 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -5,7 +5,7 @@ import com.smartstore.util.Handleable; public enum MainMenuFunction implements Function { - SPLASH_SCREEN(0, MainMenu.getInstance(), "SPLASH_SCREEN"), + MAIN_MENU(0, MainMenu.getInstance(), "Main Menu"), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance(), "Membership Management"), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance(), "Customer Management"), REPORT_MANAGEMENT(3, Back.getInstance(), "Report"), diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index 1623fb29..5ae27d5a 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -28,7 +28,7 @@ default void run(T value) { @Override default int getCurrentMenuNumber(){ - return Screen.MAIN_MENU.getMenuNumber(); + return MainMenuFunction.MAIN_MENU.getMenuNumber(); } } diff --git a/src/com/smartstore/function/mainmenu/Screen.java b/src/com/smartstore/function/mainmenu/Screen.java deleted file mode 100644 index c1b4759d..00000000 --- a/src/com/smartstore/function/mainmenu/Screen.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.smartstore.function.mainmenu; - -import java.util.Arrays; - -// TODO: 2023-05-11 Sceen과 MainMenuFunction은 통합해도 관계없을 듯 -public enum Screen { - - SPLASH(new String[]{"this is splash screen"}, -1), - - MAIN_MENU(new String[]{ - "Membership Management", - "Customer Management", - "Report", - "Quit"}, 0), - MEMBERSHIP(new String[]{ - "Set Membership Requirement", - "View Membership Requirement", - "Update Membership Requirement", - "Back"}, 1), - CUSTOMER(new String[]{ - "Add Customer Data", - "View Customer Data", - "Update Customer Data", - "Delete Customer Data", - "Back"}, 2), - REPORT(new String[]{ - "Report Summary", - "Sort", - "Back"}, 3), - QUIT(new String[]{"EXIT PROGRAM"}, 4); - - private final String[] menus; - private final int menuNumber; - - Screen(String[] message, int menuNumber) { - this.menus = message; - this.menuNumber = menuNumber; - } - - private boolean isMatchedMenuNumber(int menuNumber){ - return this.menuNumber == menuNumber; - } - - public static Screen of(int menuNumber){ - return Arrays.stream(Screen.values()) - .filter(screen -> screen.isMatchedMenuNumber(menuNumber)) - .findFirst().orElseThrow(() -> new IllegalArgumentException("Can't Find Menu")); - } - - public String[] getMenus() { - return menus; - } - - public int getMenuNumber() { - return menuNumber; - } -} diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 394a6afe..67910993 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -17,7 +17,7 @@ default void run() { boolean isExit = false; while (!isExit){ //get values from enum by string array - Printer.printSelectable(getMenuListFromEnum(MembershipType.class)); + Printer.printSelectable(getMenuListFromEnum(MembershipType.class, MembershipType.GENERAL.ordinal(), MembershipType.VVIP.ordinal())); isExit = handleChoice(Validator.getParameter(getMenuListFromEnum(MembershipType.class))); } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index bbd0be27..94650cd5 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -48,7 +48,7 @@ public boolean handleChoice(String menuNumber) { } //call Menu with MembershipType Function.of(Integer.parseInt(menuNumber), UpdateMembershipRequirementFunction.class).run(selected); - return true; + return false; } @Override @@ -56,7 +56,7 @@ public void run(){ boolean isExit = false; while (!isExit){ - Printer.printSelectable(getMenuListFromEnum(MembershipType.class)); + Printer.printSelectable(getMenuListFromEnum(MembershipType.class, MembershipType.GENERAL.ordinal(), MembershipType.VVIP.ordinal())); //get menu number from user until valid menu number isExit = MembershipMenuHandler.super.handleChoice(Validator.getParameter(getMenuListFromEnum(MembershipType.class))); } diff --git a/src/com/smartstore/membership/MembershipType.java b/src/com/smartstore/membership/MembershipType.java index 0e902455..f69695f2 100644 --- a/src/com/smartstore/membership/MembershipType.java +++ b/src/com/smartstore/membership/MembershipType.java @@ -7,6 +7,7 @@ import java.util.Optional; public enum MembershipType implements MenuProvider { + NONE (new String[] {"NONE, N, 비회원"}, "None"), GENERAL(new String[] {"G", "GENERAL", "일반"}, "General"), VIP(new String[] {"V", "VIP", "우수"}, "VIP"), VVIP(new String[] {"VV", "VVIP", "최우수"}, "VVIP"); diff --git a/src/com/smartstore/util/SubMenuHandleable.java b/src/com/smartstore/util/SubMenuHandleable.java deleted file mode 100644 index 72439fed..00000000 --- a/src/com/smartstore/util/SubMenuHandleable.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.smartstore.util; - -public interface SubMenuHandleable { - void run(int menu); -} diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java index b6c265b2..6e3aa4e1 100644 --- a/src/com/smartstore/util/Validator.java +++ b/src/com/smartstore/util/Validator.java @@ -71,6 +71,7 @@ public static String getParameter(String[] values) { } catch (IOException | IllegalArgumentException | NullPointerException e) { System.out.println("Invalid Parameter"); } + System.out.println("Invalid Parameter"); } } return valueName; @@ -83,36 +84,17 @@ public static String getMenuNumber(String[] values) { System.out.print("Wait for Input : "); menu = Integer.parseInt(br.readLine()); if (menu <= 0 || menu > values.length) { - // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException("Invalid Menu"); + throw new NumberFormatException("Input valid Menu Number 1 ~ " + (values.length-1)); } break; } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Menu"); + System.out.println(e.getMessage()); } } return String.valueOf(menu); } - public static int getIntegerValue(){ - int value; - while (true){ - try { - System.out.println("Wait for Input : "); - value = Integer.parseInt(br.readLine()); - if(value < 0){ - throw new IllegalArgumentException(); - }else { - break; - } - } catch (IOException | IllegalArgumentException e) { - System.out.print("Input valid Integer Data 1 ~ Integer.Max"); - } - } - return value; - } - public static boolean isAnswerYes(String msg){ System.out.println(msg); String value = ""; From 7de77dccc3ad71e1058880a9ee38a208d70aafe0 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 09:56:11 +0900 Subject: [PATCH 69/79] refactor: add @todo [ add @todo ] --- .../function/membership/update/SetMinPaymentAmount.java | 2 +- .../function/membership/update/SetMinUsage.java | 2 +- src/com/smartstore/membership/Memberships.java | 9 +++++---- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java index 3b00168a..adacd084 100644 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java @@ -22,7 +22,7 @@ public static SetMinPaymentAmount getInstance() { @Override public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().setMinPaymentAmount()); + Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().getMinPaymentAmountFromInput()); System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); }else { System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java index 22a29597..bb56811a 100644 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ b/src/com/smartstore/function/membership/update/SetMinUsage.java @@ -22,7 +22,7 @@ public static SetMinUsage getInstance() { @Override public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().setMinUsage(), requirement.getMinPaymentAmount()); + Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().getMinUsageFromInput(), requirement.getMinPaymentAmount()); System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); }else { System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 39169165..294a6e9b 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -37,8 +37,9 @@ public void setMembershipRequirement(MembershipType membershipType){ int minUsageTime; int minPaymentAmount; - minUsageTime = setMinUsage(); - minPaymentAmount = setMinPaymentAmount(); + minUsageTime = getMinUsageFromInput(); + minPaymentAmount = getMinPaymentAmountFromInput(); + // TODO: 2023-05-15 check minUsage, minPayment Bigger than prev Membership membershipList.put(membershipType, new MembershipRequirement(minUsageTime, minPaymentAmount)); } @@ -48,11 +49,11 @@ public void setMembershipRequirement(MembershipType membershipType, int minUsage Customers.getInstance().updateMembership(); } - public int setMinUsage(){ + public int getMinUsageFromInput(){ return getInputFromConsole("Input minUsageTime : "); } - public int setMinPaymentAmount(){ + public int getMinPaymentAmountFromInput(){ return getInputFromConsole("Input minPaymentAmount : "); } From 8957c4f5750fd3a54003641de55e4e7e3d1ad7c0 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 19:19:37 +0900 Subject: [PATCH 70/79] feat: Feat : Sort Customers [ New Feat : Sort Customers Name, Usage Time, Payment Amount Group By Membership. ] --- src/com/smartstore/Main.java | 37 +----------- src/com/smartstore/SmartStore.java | 30 ++++++++++ .../function/mainmenu/MainMenuFunction.java | 2 +- .../function/mainmenu/MainMenuHandler.java | 4 +- .../function/mainmenu/SummaryMenu.java | 46 +++++++++++++- .../membership/MembershipFunction.java | 1 + src/com/smartstore/function/sorting/Sort.java | 60 ------------------- .../function/sorting/SortByMembership.java | 54 +++++++++++++++++ .../function/sorting/SortByName.java | 35 +++++++++-- .../function/sorting/SortByPaymentAmount.java | 56 +++++++++++++++++ .../function/sorting/SortByUsageTime.java | 55 +++++++++++++++++ .../function/sorting/SortFunction.java | 6 +- .../function/sorting/SortHandler.java | 56 ++++++++++++++++- src/com/smartstore/util/MergeSort.java | 42 ++----------- src/com/smartstore/util/Validator.java | 2 +- 15 files changed, 338 insertions(+), 148 deletions(-) delete mode 100644 src/com/smartstore/function/sorting/Sort.java create mode 100644 src/com/smartstore/function/sorting/SortByMembership.java create mode 100644 src/com/smartstore/function/sorting/SortByPaymentAmount.java create mode 100644 src/com/smartstore/function/sorting/SortByUsageTime.java diff --git a/src/com/smartstore/Main.java b/src/com/smartstore/Main.java index 712d4060..515fb856 100644 --- a/src/com/smartstore/Main.java +++ b/src/com/smartstore/Main.java @@ -1,43 +1,8 @@ package com.smartstore; -import com.smartstore.customer.Customer; -import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; -import com.smartstore.util.CustomList; - public class Main { public static void main(String[] args) { //SmartStore.run(); - CustomList test = new CustomList<>(); - //Added before Membership Setting (Will update when Membership requirement set) - test.add(new Customer("b1","b1ID",1,1)); - test.add(new Customer("b2","b2ID",3,1)); - test.add(new Customer("b3","b3ID",4,3)); - test.add(new Customer("b4","b4ID",6,3)); - test.add(new Customer("b5","b5ID",9,3)); - test.add(new Customer("b6","b6ID",9,6)); - - Memberships.getInstance().setMembershipRequirement(MembershipType.GENERAL,3,3); - Memberships.getInstance().setMembershipRequirement(MembershipType.VIP,6,6); - Memberships.getInstance().setMembershipRequirement(MembershipType.VVIP,9,9); - - //Added after Membership Setting (update when added) - test.add(new Customer("a1","a1ID",1,1)); - test.add(new Customer("a2","a2ID",3,3)); - test.add(new Customer("a3","a3ID",4,4)); - test.add(new Customer("a4","a4ID",5,5)); - test.add(new Customer("a5","a5ID",6,6)); - test.add(new Customer("a6","a6ID",7,7)); - test.add(new Customer("a7","a7ID",8,8)); - test.add(new Customer("a8","a8ID",9,9)); - test.add(new Customer("a9","a9ID",10,10)); - test.add(new Customer("c1","c1ID",6,3)); - test.add(new Customer("c2","c2ID",9,3)); - test.add(new Customer("c3","c3ID",9,6)); - - - System.out.println(test.toString()); - SmartStore.run(); - + SmartStore.test(); } } diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index 62513a3e..fdd1281b 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,11 +1,41 @@ package com.smartstore; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; +import com.smartstore.util.CustomList; import com.smartstore.util.Function; import com.smartstore.function.mainmenu.MainMenuFunction; +import java.util.Arrays; +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + public class SmartStore { public static void run(){ //Load Initial Screen Function.of(0, MainMenuFunction.class).run(); } + + public static void test(){ + + Memberships.getInstance().setMembershipRequirement(MembershipType.GENERAL,3,3); + Memberships.getInstance().setMembershipRequirement(MembershipType.VIP,6,6); + Memberships.getInstance().setMembershipRequirement(MembershipType.VVIP,9,9); + + CustomList customerList = Customers.getInstance().getCustomerList(); + Random random = new Random(); + int temp = ThreadLocalRandom.current().nextInt(97, 122+1); + System.out.println(temp); + System.out.println(((char) temp)); + for(int i = 0 ; i < 28 ; i++ ){ + String name = String.valueOf(((char)(ThreadLocalRandom.current().nextInt(97, 122+1)))); + String id = "id"+random.nextInt(100)+1; + customerList.add(new Customer(name, id, random.nextInt(28)+1, random.nextInt(28)+1)); + } + System.out.println(customerList); + + run(); + } } diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 05f6bec8..1cc2a531 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -8,7 +8,7 @@ public enum MainMenuFunction implements Function { MAIN_MENU(0, MainMenu.getInstance(), "Main Menu"), MEMBERSHIP_MANAGEMENT(1, MembershipMenu.getInstance(), "Membership Management"), CUSTOMER_MANAGEMENT(2, CustomerMenu.getInstance(), "Customer Management"), - REPORT_MANAGEMENT(3, Back.getInstance(), "Report"), + REPORT_MANAGEMENT(3, SummaryMenu.getInstance(), "Report"), QUIT(4, Back.getInstance(), "Quit"); private final int menuNumber; diff --git a/src/com/smartstore/function/mainmenu/MainMenuHandler.java b/src/com/smartstore/function/mainmenu/MainMenuHandler.java index 5ae27d5a..514147a1 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuHandler.java +++ b/src/com/smartstore/function/mainmenu/MainMenuHandler.java @@ -6,13 +6,13 @@ public interface MainMenuHandler extends EnumValueProvider, Handler, HandleableP default void run() { boolean isExit = false; - while (!isExit){ + while (!isExit) { Printer.printMenu(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber())); //get menu number from user until valid menu number - //isExit = handleChoice(getMenuNumber(Screen.of(getCurrentMenuNumber()).getMenus())); isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(MainMenuFunction.class, MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(), MainMenuFunction.QUIT.getMenuNumber()))); } + } @Override diff --git a/src/com/smartstore/function/mainmenu/SummaryMenu.java b/src/com/smartstore/function/mainmenu/SummaryMenu.java index 1830c73c..c05631d9 100644 --- a/src/com/smartstore/function/mainmenu/SummaryMenu.java +++ b/src/com/smartstore/function/mainmenu/SummaryMenu.java @@ -1,14 +1,54 @@ package com.smartstore.function.mainmenu; -public class SummaryMenu { +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.customer.CustomerMenuHandler; +import com.smartstore.function.sorting.SortFunction; +import com.smartstore.function.sorting.SortHandler; +import com.smartstore.util.Function; +import com.smartstore.util.Handler; +import com.smartstore.util.Printer; +import com.smartstore.util.Validator; + + +public class SummaryMenu implements SortHandler, Handler { + + private static SummaryMenu instance; + + private SummaryMenu(){ + + } public static SummaryMenu getInstance() { if(instance == null){ - instance = new SummaryMenu(); + return new SummaryMenu(); } return instance; } - private static SummaryMenu instance; + @Override + public boolean handleChoice(String menuNumber) { + if(Integer.parseInt(menuNumber) == SortFunction.BACK.getMenuNumber()) { + return true; + } + //call Menu with menuNumber + Function.of(Integer.parseInt(menuNumber), SortFunction.class).run(); + return false; + } + + @Override + public int getCurrentMenuNumber() { + return MainMenuFunction.REPORT_MANAGEMENT.getMenuNumber(); + } + + @Override + public void run(){ + boolean isExit = false; + while (!isExit){ + Printer.printMenu(getMenuListFromEnum(SortFunction.class)); + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(SortFunction.class))); + } + + } } diff --git a/src/com/smartstore/function/membership/MembershipFunction.java b/src/com/smartstore/function/membership/MembershipFunction.java index 3b2ecb0a..a9658408 100644 --- a/src/com/smartstore/function/membership/MembershipFunction.java +++ b/src/com/smartstore/function/membership/MembershipFunction.java @@ -11,6 +11,7 @@ public enum MembershipFunction implements Function { SET(1, SetMembershipRequirement.getInstance(), "Set Membership Requirement"), VIEW(2, ViewMembershipRequirement.getInstance(), "View Membership Requirement"), UPDATE(3, UpdateMembershipRequirement.getInstance(), "Update Membership Requirement"), + BACK(4, Back.getInstance(), "Return to Prev Menu"); diff --git a/src/com/smartstore/function/sorting/Sort.java b/src/com/smartstore/function/sorting/Sort.java deleted file mode 100644 index b72a8d37..00000000 --- a/src/com/smartstore/function/sorting/Sort.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.smartstore.function.sorting; - -import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.function.customer.CustomerMenuHandler; -import com.smartstore.util.Function; -import com.smartstore.util.Printer; -import com.smartstore.util.Validator; - - -public class Sort implements CustomerMenuHandler { - - private static Sort instance; - - private Sort(){ - - } - - private Customer selected; - - public static Sort getInstance() { - if(instance == null){ - return new Sort(); - } - return instance; - } - - @Override - public boolean handleChoice(String menuNumber) { - if(Integer.parseInt(menuNumber) == SortFunction.BACK.getMenuNumber()) { - return true; - } - //call Menu with menuNumber - Function.of(Integer.parseInt(menuNumber), SortFunction.class).run(selected); - return false; - } - - @Override - public void run(){ - String id=""; - boolean isExit = false; - id = Validator.getValueOrEnd("Type User Id to Update : ", String.class); - if("end".equalsIgnoreCase(id)){ - return; - } - selected = Customers.getInstance().getCustomerById(id); - if(selected == null){ - System.out.printf("There is no User %s\n", id); - return; - } - System.out.println("Selected Customer's Info"); - System.out.println(selected.toString()); - System.out.println(); - while (!isExit){ - Printer.printMenu(getMenuListFromEnum(SortFunction.class)); - isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(SortFunction.class))); - } - - } -} diff --git a/src/com/smartstore/function/sorting/SortByMembership.java b/src/com/smartstore/function/sorting/SortByMembership.java new file mode 100644 index 00000000..3aaf55a4 --- /dev/null +++ b/src/com/smartstore/function/sorting/SortByMembership.java @@ -0,0 +1,54 @@ +package com.smartstore.function.sorting; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.membership.MembershipType; +import com.smartstore.util.CustomEnumMap; +import com.smartstore.util.CustomList; +import com.smartstore.util.MergeSort; + +import java.util.Arrays; + +public class SortByMembership implements SortHandler, MergeSort { + private static SortByMembership instance; + + private SortByMembership(){ + + } + + public static SortByMembership getInstance(){ + if(instance == null){ + return new SortByMembership(); + } + return instance; + } + + private CustomEnumMap sortedCustomersList = new CustomEnumMap<>(MembershipType.class); + + public CustomEnumMap getSortedCustomersList() { + updateSortedData(); + return sortedCustomersList; + } + + public void updateSortedData() { + CustomList customerList = Customers.getInstance().getCustomerList(); + if(customerList.size() == 0){ + return; + } + Customer[] customersSortByMembership = mergeSort(customerList.toArray(new Customer[customerList.size()])); + int index = 0; + for(MembershipType membershipType : MembershipType.values()){ + for(int j = 0 ; j < customersSortByMembership.length ; j++){ + if(customersSortByMembership[j].getMembership() != membershipType){ + index = j; + break; + } + //copy and add to list of Customers Group by membership + } + sortedCustomersList.put(membershipType, Arrays.copyOfRange(customersSortByMembership,0, index)); + //resize sorted Arr + customersSortByMembership = Arrays.copyOfRange(customersSortByMembership, index+1, customersSortByMembership.length-1); + } + + } +} diff --git a/src/com/smartstore/function/sorting/SortByName.java b/src/com/smartstore/function/sorting/SortByName.java index 4fd8ec6c..dc1d8f5f 100644 --- a/src/com/smartstore/function/sorting/SortByName.java +++ b/src/com/smartstore/function/sorting/SortByName.java @@ -3,8 +3,9 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; import com.smartstore.util.CustomList; +import com.smartstore.util.MergeSort; -public class SortByName implements SortHandler { +public class SortByName implements SortHandler, MergeSort { private static SortByName instance; private SortByName(){ @@ -19,10 +20,36 @@ public static SortByName getInstance(){ } @Override - public void run() { - CustomList customerList = Customers.getInstance().getCustomerList(); - Customer[] customerArr = customerList.toArray(new Customer[customerList.size()]); + public Customer[] mergeSort(Customer[] leftArr, Customer[] rightArr, boolean ascending) { + int leftLen = leftArr.length; + int rightLen = rightArr.length; + int i = 0, j = 0, k = 0; + Customer[] mergedArr = new Customer[leftLen + rightLen]; + + while (i < leftLen && j < rightLen) { + if ((ascending && leftArr[i].getCustomerName().compareTo(rightArr[j].getCustomerName()) <= 0) || + (!ascending && leftArr[i].getCustomerName().compareTo(rightArr[j].getCustomerName()) >= 0)) { + mergedArr[k] = leftArr[i]; + i++; + } else { + mergedArr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < leftLen) { + mergedArr[k] = leftArr[i]; + i++; + k++; + } + while (j < rightLen) { + mergedArr[k] = rightArr[j]; + j++; + k++; + } + return mergedArr; } } diff --git a/src/com/smartstore/function/sorting/SortByPaymentAmount.java b/src/com/smartstore/function/sorting/SortByPaymentAmount.java new file mode 100644 index 00000000..eb9c6ec4 --- /dev/null +++ b/src/com/smartstore/function/sorting/SortByPaymentAmount.java @@ -0,0 +1,56 @@ +package com.smartstore.function.sorting; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.util.CustomList; +import com.smartstore.util.MergeSort; + +public class SortByPaymentAmount implements SortHandler, MergeSort { + private static SortByPaymentAmount instance; + + private SortByPaymentAmount(){ + + } + + public static SortByPaymentAmount getInstance(){ + if(instance == null){ + return new SortByPaymentAmount(); + } + return instance; + } + + + @Override + public Customer[] mergeSort(Customer[] leftArr, Customer[] rightArr, boolean ascending) { + int leftLen = leftArr.length; + int rightLen = rightArr.length; + int i = 0, j = 0, k = 0; + Customer[] mergedArr = new Customer[leftLen + rightLen]; + + while (i < leftLen && j < rightLen) { + if ((ascending && leftArr[i].getPaymentAmount() <= rightArr[j].getPaymentAmount()) || + (!ascending && leftArr[i].getPaymentAmount() >= rightArr[j].getPaymentAmount())) { + mergedArr[k] = leftArr[i]; + i++; + } else { + mergedArr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < leftLen) { + mergedArr[k] = leftArr[i]; + i++; + k++; + } + + while (j < rightLen) { + mergedArr[k] = rightArr[j]; + j++; + k++; + } + + return mergedArr; + } +} diff --git a/src/com/smartstore/function/sorting/SortByUsageTime.java b/src/com/smartstore/function/sorting/SortByUsageTime.java new file mode 100644 index 00000000..87540e2e --- /dev/null +++ b/src/com/smartstore/function/sorting/SortByUsageTime.java @@ -0,0 +1,55 @@ +package com.smartstore.function.sorting; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.util.CustomList; +import com.smartstore.util.MergeSort; + +public class SortByUsageTime implements SortHandler, MergeSort { + private static SortByUsageTime instance; + + private SortByUsageTime(){ + + } + + public static SortByUsageTime getInstance(){ + if(instance == null){ + return new SortByUsageTime(); + } + return instance; + } + + @Override + public Customer[] mergeSort(Customer[] leftArr, Customer[] rightArr, boolean ascending) { + int leftLen = leftArr.length; + int rightLen = rightArr.length; + int i = 0, j = 0, k = 0; + Customer[] mergedArr = new Customer[leftLen + rightLen]; + + while (i < leftLen && j < rightLen) { + if ((ascending && leftArr[i].getUsageTime() <= rightArr[j].getUsageTime()) || + (!ascending && leftArr[i].getUsageTime() >= rightArr[j].getUsageTime())) { + mergedArr[k] = leftArr[i]; + i++; + } else { + mergedArr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < leftLen) { + mergedArr[k] = leftArr[i]; + i++; + k++; + } + + while (j < rightLen) { + mergedArr[k] = rightArr[j]; + j++; + k++; + } + + return mergedArr; + } +} diff --git a/src/com/smartstore/function/sorting/SortFunction.java b/src/com/smartstore/function/sorting/SortFunction.java index d40b7029..5e0c8706 100644 --- a/src/com/smartstore/function/sorting/SortFunction.java +++ b/src/com/smartstore/function/sorting/SortFunction.java @@ -6,10 +6,10 @@ public enum SortFunction implements Function { - BY_MEMBERSHIP(1, SortByName.getInstance(), "Summary GroupBy Membership"), + BY_MEMBERSHIP(1, SortByMembership.getInstance(), "Summary GroupBy Membership"), BY_NAME(2, SortByName.getInstance(), "Summary GroupBy Membership[Name]"), - BY_USAGE_TIME(3, SortByName.getInstance(), "Summary GroupBy Membership[Usage Time]"), - BY_PAYMENT_AMOUNT(4, SortByName.getInstance(), "Summary GroupBy Membership[Payment Amount]"), + BY_USAGE_TIME(3, SortByUsageTime.getInstance(), "Summary GroupBy Membership[Usage Time]"), + BY_PAYMENT_AMOUNT(4, SortByPaymentAmount.getInstance(), "Summary GroupBy Membership[Payment Amount]"), BACK(5, Back.getInstance(), "Return to prev Menu"); diff --git a/src/com/smartstore/function/sorting/SortHandler.java b/src/com/smartstore/function/sorting/SortHandler.java index 7d3f47d3..3993dae0 100644 --- a/src/com/smartstore/function/sorting/SortHandler.java +++ b/src/com/smartstore/function/sorting/SortHandler.java @@ -1,6 +1,58 @@ package com.smartstore.function.sorting; -import com.smartstore.util.Handleable; +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.membership.MembershipType; +import com.smartstore.util.*; -public interface SortHandler extends Handleable { +import java.util.Arrays; + +public interface SortHandler extends EnumValueProvider, Handleable, MergeSort { + CustomEnumMap sortedCustomerMap = SortByMembership.getInstance().getSortedCustomersList(); + @Override + default void run() { + CustomList customerList = Customers.getInstance().getCustomerList(); + Customer[] customerArr = customerList.toArray(new Customer[customerList.size()]); + for(MembershipType membershipType : MembershipType.values()){ + System.out.println(membershipType.toString()); + System.out.println("=========================="); + System.out.println(Arrays.toString(mergeSort(sortedCustomerMap.get(membershipType)))); + } + + + } + + @Override + default Customer[] mergeSort(Customer[] leftArr, Customer[] rightArr, boolean ascending) { + int leftLen = leftArr.length; + int rightLen = rightArr.length; + int i = 0, j = 0, k = 0; + Customer[] mergedArr = new Customer[leftLen + rightLen]; + + while (i < leftLen && j < rightLen) { + if ((ascending && leftArr[i].getMembership().compareTo(rightArr[j].getMembership()) <= 0) || + (!ascending && leftArr[i].getMembership().compareTo(rightArr[j].getMembership()) >= 0)) { + mergedArr[k] = leftArr[i]; + i++; + } else { + mergedArr[k] = rightArr[j]; + j++; + } + k++; + } + + while (i < leftLen) { + mergedArr[k] = leftArr[i]; + i++; + k++; + } + + while (j < rightLen) { + mergedArr[k] = rightArr[j]; + j++; + k++; + } + + return mergedArr; + } } \ No newline at end of file diff --git a/src/com/smartstore/util/MergeSort.java b/src/com/smartstore/util/MergeSort.java index fdad67f3..658dc325 100644 --- a/src/com/smartstore/util/MergeSort.java +++ b/src/com/smartstore/util/MergeSort.java @@ -4,15 +4,15 @@ import java.util.Arrays; -public class MergeSort { +public interface MergeSort { //default -> ascending - public static Customer[] mergeSort(Customer[] arr){ + default Customer[] mergeSort(Customer[] arr){ return mergeSort(arr, true); } - public static Customer[] mergeSort(Customer[] arr, boolean ascending){ + default Customer[] mergeSort(Customer[] arr, boolean ascending){ //Already Sorted if(arr == null || arr.length <= 1){ return arr; @@ -20,46 +20,16 @@ public static Customer[] mergeSort(Customer[] arr, boolean ascending){ return mergeSort(arr, 0, arr.length -1, ascending); } - private static Customer[] mergeSort(Customer[] arr, int left, int right, boolean ascending){ + default Customer[] mergeSort(Customer[] arr, int left, int right, boolean ascending){ if (left = 0)) { - mergedArr[k] = leftArr[i]; - i++; - } else { - mergedArr[k] = rightArr[j]; - j++; - } - k++; - } - - while (i < leftLen) { - mergedArr[k] = leftArr[i]; - i++; - k++; - } - - while (j < rightLen) { - mergedArr[k] = rightArr[j]; - j++; - k++; - } - - return mergedArr; - } } diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java index 6e3aa4e1..ad4fd048 100644 --- a/src/com/smartstore/util/Validator.java +++ b/src/com/smartstore/util/Validator.java @@ -68,10 +68,10 @@ public static String getParameter(String[] values) { break; } } + System.out.println("Invalid Parameter"); } catch (IOException | IllegalArgumentException | NullPointerException e) { System.out.println("Invalid Parameter"); } - System.out.println("Invalid Parameter"); } } return valueName; From 145731ce81429fedba00a221b9801eb90651a2d1 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 19:27:47 +0900 Subject: [PATCH 71/79] refactor: Clean Up code [Clean Up code] --- src/com/smartstore/SmartStore.java | 1 - src/com/smartstore/customer/Customer.java | 12 ++++++------ .../function/customer/add/AddCustomer.java | 8 ++++---- .../smartstore/function/customer/update/SetName.java | 2 +- .../function/customer/update/UpdateCustomer.java | 2 +- .../function/customer/view/ViewCustomerById.java | 2 +- .../smartstore/function/mainmenu/SummaryMenu.java | 3 --- src/com/smartstore/function/sorting/SortByName.java | 2 -- .../function/sorting/SortByPaymentAmount.java | 2 -- .../smartstore/function/sorting/SortByUsageTime.java | 2 -- src/com/smartstore/util/CustomHashMap.java | 6 +++--- src/com/smartstore/util/Printer.java | 4 ++-- src/com/smartstore/util/Validator.java | 3 +-- 13 files changed, 19 insertions(+), 30 deletions(-) diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index fdd1281b..de9c6ead 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -8,7 +8,6 @@ import com.smartstore.util.Function; import com.smartstore.function.mainmenu.MainMenuFunction; -import java.util.Arrays; import java.util.Random; import java.util.concurrent.ThreadLocalRandom; diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index bad33c3a..e0a6aac6 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -29,17 +29,17 @@ public void setMembership(int usageTime, int paymentAmount) { MembershipType membership = MembershipType.NONE; //Map is CustomMap CustomEnumMap membershipList = memberships.getMembershipList(); - int currentUsageTime = 0; - int currentPaymentTime = 0; - boolean isUsageLowerThenCurrent = false; - boolean isPaymentLowerThenCurrent = false; + int currentUsageTime; + int currentPaymentTime; + boolean isUsageLowerThenCurrent; + boolean isPaymentLowerThenCurrent; for(MembershipType membershipType : MembershipType.values()){ try { currentUsageTime = membershipType == MembershipType.NONE ? 0 : membershipList.get(membershipType).getMinUsageTime(); currentPaymentTime = membershipType == MembershipType.NONE ? 0 : membershipList.get(membershipType).getMinPaymentAmount(); - isUsageLowerThenCurrent = usageTime >= currentUsageTime ? false : true; - isPaymentLowerThenCurrent = paymentAmount >= currentPaymentTime ? false : true; + isUsageLowerThenCurrent = usageTime < currentUsageTime; + isPaymentLowerThenCurrent = paymentAmount < currentPaymentTime; if(!isUsageLowerThenCurrent){ if (!isPaymentLowerThenCurrent){ diff --git a/src/com/smartstore/function/customer/add/AddCustomer.java b/src/com/smartstore/function/customer/add/AddCustomer.java index 9f757c3f..9511091f 100644 --- a/src/com/smartstore/function/customer/add/AddCustomer.java +++ b/src/com/smartstore/function/customer/add/AddCustomer.java @@ -24,10 +24,10 @@ public static AddCustomer getInstance() { @Override public boolean handleChoice(String numberOfUser) { if(!"end".equalsIgnoreCase(numberOfUser)){ - String name = ""; - String id = ""; - int usageTime = 0; - int paymentAmount = 0; + String name; + String id; + int usageTime; + int paymentAmount; Customers customers = Customers.getInstance(); //get name & id from user, usage_time&payment_amount is optional for(int i = 0 ; i < Integer.parseInt(numberOfUser) ; i++){ diff --git a/src/com/smartstore/function/customer/update/SetName.java b/src/com/smartstore/function/customer/update/SetName.java index 1e6478d4..37fc1da7 100644 --- a/src/com/smartstore/function/customer/update/SetName.java +++ b/src/com/smartstore/function/customer/update/SetName.java @@ -19,7 +19,7 @@ public static SetName getInstance(){ @Override public void run(T value) { - String name = ""; + String name; Customer customer = (Customer) value; name = Validator.getValueOrEnd("Input New Name\n Wait for input... 'end' to exit", String.class); if(name.isBlank() || "end".equals(name)){ diff --git a/src/com/smartstore/function/customer/update/UpdateCustomer.java b/src/com/smartstore/function/customer/update/UpdateCustomer.java index c75c269d..279ab4d1 100644 --- a/src/com/smartstore/function/customer/update/UpdateCustomer.java +++ b/src/com/smartstore/function/customer/update/UpdateCustomer.java @@ -37,7 +37,7 @@ public boolean handleChoice(String menuNumber) { @Override public void run(){ - String id=""; + String id; boolean isExit = false; id = Validator.getValueOrEnd("Type User Id to Update : ", String.class); if("end".equalsIgnoreCase(id)){ diff --git a/src/com/smartstore/function/customer/view/ViewCustomerById.java b/src/com/smartstore/function/customer/view/ViewCustomerById.java index 3a397497..dda29c83 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerById.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerById.java @@ -23,7 +23,7 @@ public static ViewCustomerById getInstance() { @Override public void run() { Customers customers = Customers.getInstance(); - Customer customer = null; + Customer customer; String value = Validator.getValueOrEnd("Type User Id to Find | 'end' to cancel : ", String.class); String msg=""; diff --git a/src/com/smartstore/function/mainmenu/SummaryMenu.java b/src/com/smartstore/function/mainmenu/SummaryMenu.java index c05631d9..d45f4062 100644 --- a/src/com/smartstore/function/mainmenu/SummaryMenu.java +++ b/src/com/smartstore/function/mainmenu/SummaryMenu.java @@ -1,8 +1,5 @@ package com.smartstore.function.mainmenu; -import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.function.customer.CustomerMenuHandler; import com.smartstore.function.sorting.SortFunction; import com.smartstore.function.sorting.SortHandler; import com.smartstore.util.Function; diff --git a/src/com/smartstore/function/sorting/SortByName.java b/src/com/smartstore/function/sorting/SortByName.java index dc1d8f5f..8f313256 100644 --- a/src/com/smartstore/function/sorting/SortByName.java +++ b/src/com/smartstore/function/sorting/SortByName.java @@ -1,8 +1,6 @@ package com.smartstore.function.sorting; import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.util.CustomList; import com.smartstore.util.MergeSort; public class SortByName implements SortHandler, MergeSort { diff --git a/src/com/smartstore/function/sorting/SortByPaymentAmount.java b/src/com/smartstore/function/sorting/SortByPaymentAmount.java index eb9c6ec4..021886f3 100644 --- a/src/com/smartstore/function/sorting/SortByPaymentAmount.java +++ b/src/com/smartstore/function/sorting/SortByPaymentAmount.java @@ -1,8 +1,6 @@ package com.smartstore.function.sorting; import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.util.CustomList; import com.smartstore.util.MergeSort; public class SortByPaymentAmount implements SortHandler, MergeSort { diff --git a/src/com/smartstore/function/sorting/SortByUsageTime.java b/src/com/smartstore/function/sorting/SortByUsageTime.java index 87540e2e..1aedb6e6 100644 --- a/src/com/smartstore/function/sorting/SortByUsageTime.java +++ b/src/com/smartstore/function/sorting/SortByUsageTime.java @@ -1,8 +1,6 @@ package com.smartstore.function.sorting; import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.util.CustomList; import com.smartstore.util.MergeSort; public class SortByUsageTime implements SortHandler, MergeSort { diff --git a/src/com/smartstore/util/CustomHashMap.java b/src/com/smartstore/util/CustomHashMap.java index 92154286..e7a338c0 100644 --- a/src/com/smartstore/util/CustomHashMap.java +++ b/src/com/smartstore/util/CustomHashMap.java @@ -43,9 +43,9 @@ public String toString() { public String toString() { StringBuilder sb = new StringBuilder(); sb.append("CustomHashMap { \n"); - for(int i = 0; i < entries.length; i++){ - if(entries[i] != null){ - sb.append(entries[i]); + for (Node entry : entries) { + if (entry != null) { + sb.append(entry); } } sb.append("}"); diff --git a/src/com/smartstore/util/Printer.java b/src/com/smartstore/util/Printer.java index 8756af46..77a59f98 100644 --- a/src/com/smartstore/util/Printer.java +++ b/src/com/smartstore/util/Printer.java @@ -8,8 +8,8 @@ public static void printMenu(String[] menus){ } } public static void printSelectable(String[] menus){ - for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("| %s ",menus[i]); + for (String menu : menus) { + System.out.printf("| %s ", menu); } System.out.println("| or 'end'"); } diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java index ad4fd048..e34dd896 100644 --- a/src/com/smartstore/util/Validator.java +++ b/src/com/smartstore/util/Validator.java @@ -59,7 +59,6 @@ public static String getParameter(String[] values) { System.out.print("Input : "); valueName = br.readLine(); if("end".equals(valueName)){ - isExit = true; break; } for (String membershipName : values) { @@ -78,7 +77,7 @@ public static String getParameter(String[] values) { } public static String getMenuNumber(String[] values) { - int menu = -1; + int menu; while (true){ try { System.out.print("Wait for Input : "); From 57ef5b8bcc6d55d2d6b4bd26867c07329ae445c6 Mon Sep 17 00:00:00 2001 From: jy-b Date: Mon, 15 May 2023 19:43:58 +0900 Subject: [PATCH 72/79] refactor: Clean Up code [Clean Up code] --- src/com/smartstore/SmartStore.java | 29 ----------------------------- 1 file changed, 29 deletions(-) diff --git a/src/com/smartstore/SmartStore.java b/src/com/smartstore/SmartStore.java index de9c6ead..62513a3e 100644 --- a/src/com/smartstore/SmartStore.java +++ b/src/com/smartstore/SmartStore.java @@ -1,40 +1,11 @@ package com.smartstore; -import com.smartstore.customer.Customer; -import com.smartstore.customer.Customers; -import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; -import com.smartstore.util.CustomList; import com.smartstore.util.Function; import com.smartstore.function.mainmenu.MainMenuFunction; -import java.util.Random; -import java.util.concurrent.ThreadLocalRandom; - public class SmartStore { public static void run(){ //Load Initial Screen Function.of(0, MainMenuFunction.class).run(); } - - public static void test(){ - - Memberships.getInstance().setMembershipRequirement(MembershipType.GENERAL,3,3); - Memberships.getInstance().setMembershipRequirement(MembershipType.VIP,6,6); - Memberships.getInstance().setMembershipRequirement(MembershipType.VVIP,9,9); - - CustomList customerList = Customers.getInstance().getCustomerList(); - Random random = new Random(); - int temp = ThreadLocalRandom.current().nextInt(97, 122+1); - System.out.println(temp); - System.out.println(((char) temp)); - for(int i = 0 ; i < 28 ; i++ ){ - String name = String.valueOf(((char)(ThreadLocalRandom.current().nextInt(97, 122+1)))); - String id = "id"+random.nextInt(100)+1; - customerList.add(new Customer(name, id, random.nextInt(28)+1, random.nextInt(28)+1)); - } - System.out.println(customerList); - - run(); - } } From bf0221403a774883ed850d5eb8e82e7739c55693 Mon Sep 17 00:00:00 2001 From: JY-B <61049995+jy-b@users.noreply.github.com> Date: Mon, 15 May 2023 23:50:33 +0900 Subject: [PATCH 73/79] ref Delete test Code --- src/com/smartstore/Main.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/smartstore/Main.java b/src/com/smartstore/Main.java index 515fb856..80d6ebe5 100644 --- a/src/com/smartstore/Main.java +++ b/src/com/smartstore/Main.java @@ -2,7 +2,6 @@ public class Main { public static void main(String[] args) { - //SmartStore.run(); - SmartStore.test(); + SmartStore.run(); } } From a5dedf5040217b2d62ce40fbb8b294128a4c6c59 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 02:34:38 +0900 Subject: [PATCH 74/79] fix: Fix Bug [ Add Condition When update Membership ex) Higher Membership's usageTime can't be lower than Lower Membership Summary Index RangeOut Fix ] --- src/com/smartstore/Main.java | 4 +- src/com/smartstore/customer/Customer.java | 2 +- src/com/smartstore/function/Back.java | 17 +++- .../function/customer/update/SetId.java | 4 +- .../function/mainmenu/CustomerMenu.java | 2 + .../function/mainmenu/MainMenu.java | 3 +- .../membership/MembershipMenuHandler.java | 15 +--- .../membership/set/SetMembershipHandler.java | 71 +++++++++++++++ .../set/SetMembershipRequirement.java | 27 ++++-- .../update/SetMinPaymentAmount.java | 39 --------- .../membership/update/SetMinUsage.java | 38 -------- .../update/UpdateMembershipRequirement.java | 44 ++++++---- .../UpdateMembershipRequirementFunction.java | 4 +- .../update/UpdateMinPaymentAmount.java | 35 ++++++++ .../membership/update/UpdateMinUsage.java | 33 +++++++ .../view/ViewMembershipRequirement.java | 8 +- .../function/sorting/SortByMembership.java | 13 +-- .../function/sorting/SortHandler.java | 3 +- .../membership/MembershipRequirement.java | 14 +++ .../smartstore/membership/Memberships.java | 64 ++------------ src/com/smartstore/util/Define.java | 20 +++++ src/com/smartstore/util/DuplicateChecker.java | 1 - src/com/smartstore/util/PrettyTerminal.java | 2 +- src/com/smartstore/util/Validator.java | 86 ++++++++++++++++++- 24 files changed, 353 insertions(+), 196 deletions(-) create mode 100644 src/com/smartstore/function/membership/set/SetMembershipHandler.java delete mode 100644 src/com/smartstore/function/membership/update/SetMinPaymentAmount.java delete mode 100644 src/com/smartstore/function/membership/update/SetMinUsage.java create mode 100644 src/com/smartstore/function/membership/update/UpdateMinPaymentAmount.java create mode 100644 src/com/smartstore/function/membership/update/UpdateMinUsage.java diff --git a/src/com/smartstore/Main.java b/src/com/smartstore/Main.java index 515fb856..90600886 100644 --- a/src/com/smartstore/Main.java +++ b/src/com/smartstore/Main.java @@ -2,7 +2,7 @@ public class Main { public static void main(String[] args) { - //SmartStore.run(); - SmartStore.test(); + SmartStore.run(); + //Test.run(); } } diff --git a/src/com/smartstore/customer/Customer.java b/src/com/smartstore/customer/Customer.java index e0a6aac6..c939e37e 100644 --- a/src/com/smartstore/customer/Customer.java +++ b/src/com/smartstore/customer/Customer.java @@ -28,7 +28,7 @@ public void setMembership(int usageTime, int paymentAmount) { Memberships memberships = Memberships.getInstance(); MembershipType membership = MembershipType.NONE; //Map is CustomMap - CustomEnumMap membershipList = memberships.getMembershipList(); + CustomEnumMap membershipList = memberships.getMembershipMap(); int currentUsageTime; int currentPaymentTime; boolean isUsageLowerThenCurrent; diff --git a/src/com/smartstore/function/Back.java b/src/com/smartstore/function/Back.java index 5a8095bf..b7cdb0ee 100644 --- a/src/com/smartstore/function/Back.java +++ b/src/com/smartstore/function/Back.java @@ -3,8 +3,9 @@ import com.smartstore.util.Handleable; import com.smartstore.util.HandleableParam; +import com.smartstore.util.Handler; -public class Back implements Handleable, HandleableParam { +public class Back implements Handler, HandleableParam, Handleable { private static Back instance; private Back(){ @@ -19,12 +20,22 @@ public static Back getInstance() { } @Override - public void run(){ + public void run() { + } @Override - public void run(T value) { + public boolean handleChoice(String menuNumber) { + return false; + } + @Override + public int getCurrentMenuNumber() { + return 0; } + @Override + public void run(T value) { + + } } diff --git a/src/com/smartstore/function/customer/update/SetId.java b/src/com/smartstore/function/customer/update/SetId.java index a9d3d815..75fd1ac7 100644 --- a/src/com/smartstore/function/customer/update/SetId.java +++ b/src/com/smartstore/function/customer/update/SetId.java @@ -28,9 +28,9 @@ public void run(T value) { System.out.println("Change not saved"); break; } - if(!DuplicateChecker.isIdDuplicated(id)){ - System.out.println("Change Successfully Saved"); + if(DuplicateChecker.isIdDuplicated(id)){ ((Customer) value).setCustomerId(id); + System.out.println("Change Successfully Saved"); break; } System.out.printf("User Id %s already Exist Try Other Id\n", id); diff --git a/src/com/smartstore/function/mainmenu/CustomerMenu.java b/src/com/smartstore/function/mainmenu/CustomerMenu.java index ff955d21..ed2738c7 100644 --- a/src/com/smartstore/function/mainmenu/CustomerMenu.java +++ b/src/com/smartstore/function/mainmenu/CustomerMenu.java @@ -2,6 +2,7 @@ import com.smartstore.util.Function; import com.smartstore.function.customer.CustomerFunction; +import com.smartstore.util.PrettyTerminal; import com.smartstore.util.Printer; import com.smartstore.util.Validator; @@ -28,6 +29,7 @@ public void run() { @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == CustomerFunction.BACK.getMenuNumber()) { + PrettyTerminal.cls(); return true; } Function.of(Integer.parseInt(menuNumber), CustomerFunction.class).run(); diff --git a/src/com/smartstore/function/mainmenu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java index b2a00bd7..3059f5b8 100644 --- a/src/com/smartstore/function/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -1,5 +1,6 @@ package com.smartstore.function.mainmenu; +import com.smartstore.util.Define; import com.smartstore.util.Function; public class MainMenu implements MainMenuHandler { @@ -16,7 +17,7 @@ private MainMenu(){ } private void printSplashScreen(){ - System.out.println(Function.of(0, MainMenuFunction.class).getMenuText()); + System.out.println(Define.SPLASHSCREEN); } @Override diff --git a/src/com/smartstore/function/membership/MembershipMenuHandler.java b/src/com/smartstore/function/membership/MembershipMenuHandler.java index 67910993..43b934ca 100644 --- a/src/com/smartstore/function/membership/MembershipMenuHandler.java +++ b/src/com/smartstore/function/membership/MembershipMenuHandler.java @@ -1,17 +1,12 @@ package com.smartstore.function.membership; import com.smartstore.function.mainmenu.MainMenuFunction; -import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; -import com.smartstore.util.EnumValueProvider; -import com.smartstore.util.Handler; -import com.smartstore.util.Printer; -import com.smartstore.util.Validator; +import com.smartstore.util.*; import java.util.NoSuchElementException; -public interface MembershipMenuHandler extends EnumValueProvider, Handler { +public interface MembershipMenuHandler extends EnumValueProvider, Handler, HandleableParam { default void run() { boolean isExit = false; @@ -42,10 +37,8 @@ default boolean handleChoice(String membershipName){ if(!"end".equalsIgnoreCase(membershipName)){ //get enum_value using string from MembershipType MembershipType membershipType = getMembershipType(membershipName); - //find requirement using type from enum_map - MembershipRequirement requirement = Memberships.getInstance().findByType(membershipType); //run each function's method - processMembership(membershipType, requirement); + run(membershipType); } return true; } @@ -55,6 +48,4 @@ default int getCurrentMenuNumber(){ return MainMenuFunction.MEMBERSHIP_MANAGEMENT.getMenuNumber(); } - void processMembership(MembershipType membershipType, MembershipRequirement requirement); - } diff --git a/src/com/smartstore/function/membership/set/SetMembershipHandler.java b/src/com/smartstore/function/membership/set/SetMembershipHandler.java new file mode 100644 index 00000000..e8c57f6b --- /dev/null +++ b/src/com/smartstore/function/membership/set/SetMembershipHandler.java @@ -0,0 +1,71 @@ +package com.smartstore.function.membership.set; + +import com.smartstore.customer.Customers; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; +import com.smartstore.util.Handleable; +import com.smartstore.util.HandleableParam; +import com.smartstore.util.Validator; + +public interface SetMembershipHandler extends HandleableParam, Handleable { + @Override + default void run() { + + } + + default void setMembershipRequirement(MembershipType membershipType){ + setMembershipRequirement(membershipType, false, false); + } + + default void setMembershipRequirement(MembershipType membershipType, boolean isUpdateUsageTime, boolean isUpdatePaymentAmount){ + int minUsageTime; + int minPaymentAmount; + boolean isValidUsage; + boolean isValidPaymentAmount; + + while (true) { + minUsageTime = isUpdateUsageTime ? Validator.getInteger("Input minUsageTime : ") : Memberships.getInstance().findByType(membershipType).getMinUsageTime(); + isValidUsage = Validator.isValidMinUsage(membershipType, minUsageTime); + minPaymentAmount = isUpdatePaymentAmount ? Validator.getInteger("Input minPaymentAmount : ") : Memberships.getInstance().findByType(membershipType).getMinPaymentAmount(); + isValidPaymentAmount = Validator.isValidMinPayment(membershipType, minPaymentAmount); + + if(membershipType != MembershipType.values()[0] && membershipType != MembershipType.values()[1]){ + //if current memberShip requirement equals prevMembership requirement -> false + MembershipRequirement prevRequirement = Memberships.getInstance().findByType(MembershipType.values()[membershipType.ordinal()-1]); + if(minUsageTime == prevRequirement.getMinUsageTime() && minPaymentAmount == prevRequirement.getMinPaymentAmount()) { + System.out.println("Usage Time & Payment Amount Can't be Same of Lower Membership"); + isValidUsage = false; + isValidUsage = false; + } + } + /* + isValidUsageTime -> prev Membership's minUsageTime <= minUsageTime + isValidPaymentAmount -> prev Membership's minPaymentAmount <= minPaymentAmount + isValidUsage & isValidPaymentAmount Must Satisfy the AND Operation + + ex) set VIP + General (1,5), VIP(2,9) -> T,T OK + General (1,5), VIP(1,6) -> T,T OK + General (1,3), VIP(1,3) -> T,T but not satisfy condition(equals not allowed) + General (1,3), VIP(1,1) -> T,F Fail + General (1,1), VIP(0,4) -> F,T Fail + General (1,3), VIP(0,0) -> F,F Fail + */ + if (isValidUsage && isValidPaymentAmount) { + break; + } + System.out.println("Check Input Data Again"); + + System.out.printf("isValidUsage & isValidPaymentAmount Must Satisfy the AND Operation. Current Situation : %s, %s\n",isValidUsage, isValidPaymentAmount); + } + setMembershipRequirement(membershipType, minUsageTime, minPaymentAmount); + // TODO: 2023-05-15 check minUsage, minPayment Bigger than prev Membership + } + + default void setMembershipRequirement(MembershipType membershipType, int minUsage, int minPaymentAmount){ + Memberships.getInstance().getMembershipMap().put(membershipType, new MembershipRequirement(minUsage, minPaymentAmount)); + //update membership + Customers.getInstance().updateMembership(); + } +} diff --git a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java index 4bc88269..ad803a43 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java @@ -1,11 +1,10 @@ package com.smartstore.function.membership.set; -import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMembershipRequirement implements MembershipMenuHandler { +public class SetMembershipRequirement implements SetMembershipHandler { private static SetMembershipRequirement instance; private SetMembershipRequirement(){ @@ -19,15 +18,29 @@ public static SetMembershipRequirement getInstance() { return instance; } - //requirement null check before call method + boolean isPrevMembershipExist(MembershipType membershipType){ + if(membershipType == MembershipType.values()[0] || membershipType == MembershipType.values()[1]){ + return true; + } else{ + return Memberships.getInstance().findByType(MembershipType.values()[membershipType.ordinal() - 1]) != null; + } + } + @Override - public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { + public void run(T value) { + MembershipType membershipType = (MembershipType) value; + MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); if(requirement == null){ - Memberships.getInstance().setMembershipRequirement(membershipType); - System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); + if(isPrevMembershipExist(membershipType)){ + setMembershipRequirement(membershipType); + System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); + } + else { + System.out.printf("Define %s first to right Sort\n", MembershipType.values()[membershipType.ordinal()-1]); + } + }else { System.out.printf("Membership '%s' Already Defined\n", membershipType.name()); } } - } diff --git a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java b/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java deleted file mode 100644 index adacd084..00000000 --- a/src/com/smartstore/function/membership/update/SetMinPaymentAmount.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.smartstore.function.membership.update; - -import com.smartstore.util.HandleableParam; -import com.smartstore.function.membership.MembershipMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; - -public class SetMinPaymentAmount implements MembershipMenuHandler, HandleableParam { - private static SetMinPaymentAmount instance; - - private SetMinPaymentAmount(){ - - } - - public static SetMinPaymentAmount getInstance() { - if(instance == null){ - return new SetMinPaymentAmount(); - } - return instance; - } - @Override - public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { - if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, requirement.getMinUsageTime(), Memberships.getInstance().getMinPaymentAmountFromInput()); - System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); - }else { - System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); - } - } - - @Override - public void run(T value) { - if(value.getClass().getName() != null){ - processMembership((MembershipType) value, Memberships.getInstance().findByType((MembershipType) value)); - } - } - -} diff --git a/src/com/smartstore/function/membership/update/SetMinUsage.java b/src/com/smartstore/function/membership/update/SetMinUsage.java deleted file mode 100644 index bb56811a..00000000 --- a/src/com/smartstore/function/membership/update/SetMinUsage.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.smartstore.function.membership.update; - -import com.smartstore.util.HandleableParam; -import com.smartstore.function.membership.MembershipMenuHandler; -import com.smartstore.membership.MembershipRequirement; -import com.smartstore.membership.MembershipType; -import com.smartstore.membership.Memberships; - -public class SetMinUsage implements MembershipMenuHandler, HandleableParam { - private static SetMinUsage instance; - - private SetMinUsage(){ - - } - - public static SetMinUsage getInstance() { - if(instance == null){ - return new SetMinUsage(); - } - return instance; - } - @Override - public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { - if(requirement != null){ - Memberships.getInstance().setMembershipRequirement(membershipType, Memberships.getInstance().getMinUsageFromInput(), requirement.getMinPaymentAmount()); - System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); - }else { - System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); - } - } - - @Override - public void run(T value) { - if(value.getClass().getName() != null){ - processMembership((MembershipType) value, Memberships.getInstance().findByType((MembershipType) value)); - } - } -} diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java index 94650cd5..d4b846ba 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirement.java @@ -3,6 +3,7 @@ import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; import com.smartstore.util.Function; import com.smartstore.util.Printer; import com.smartstore.util.Validator; @@ -23,24 +24,6 @@ public static UpdateMembershipRequirement getInstance() { return instance; } - public void processMembership(MembershipType membershipType, MembershipRequirement requirement){ - boolean isExit = false; - - if(requirement == null ){ - System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); - }else{ - System.out.printf("Current %s Info\n", membershipType.name()); - System.out.printf("Min Usage time : %d\n", requirement.getMinUsageTime()); - System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); - selected = membershipType; - while (!isExit){ - Printer.printMenu(getMenuListFromEnum(UpdateMembershipRequirementFunction.class)); - //get menu number from user until valid menu number - isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateMembershipRequirementFunction.class))); - } - } - } - @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == UpdateMembershipRequirementFunction.BACK.getMenuNumber()) { @@ -56,6 +39,10 @@ public void run(){ boolean isExit = false; while (!isExit){ + if(Memberships.getInstance().getMembershipMap().size() != MembershipType.values().length-1){ + System.out.println("Please Set All Membership Info First"); + break; + } Printer.printSelectable(getMenuListFromEnum(MembershipType.class, MembershipType.GENERAL.ordinal(), MembershipType.VVIP.ordinal())); //get menu number from user until valid menu number isExit = MembershipMenuHandler.super.handleChoice(Validator.getParameter(getMenuListFromEnum(MembershipType.class))); @@ -63,4 +50,25 @@ public void run(){ } + @Override + public void run(T value) { + MembershipType membershipType = (MembershipType) value; + MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); + + boolean isExit = false; + + if(requirement == null ){ + System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); + }else{ + System.out.printf("Current %s Info\n", membershipType.name()); + System.out.printf("Min Usage time : %d\n", requirement.getMinUsageTime()); + System.out.printf("Min Payment Amount: %d\n\n", requirement.getMinPaymentAmount()); + selected = membershipType; + while (!isExit){ + Printer.printMenu(getMenuListFromEnum(UpdateMembershipRequirementFunction.class)); + //get menu number from user until valid menu number + isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateMembershipRequirementFunction.class))); + } + } + } } diff --git a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java index e439b932..bb14d8bb 100644 --- a/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java +++ b/src/com/smartstore/function/membership/update/UpdateMembershipRequirementFunction.java @@ -6,8 +6,8 @@ public enum UpdateMembershipRequirementFunction implements Function { - SET_MIN_USAGE(1, SetMinUsage.getInstance(), "Set Min Usage"), - SET_MIN_PAYMENT_AMOUNT(2, SetMinPaymentAmount.getInstance(), "Set Min Payment Amount"), + SET_MIN_USAGE(1, UpdateMinUsage.getInstance(), "Set Min Usage"), + SET_MIN_PAYMENT_AMOUNT(2, UpdateMinPaymentAmount.getInstance(), "Set Min Payment Amount"), BACK(3, Back.getInstance(), "Return to Prev Menu"); private final int menuNumber; diff --git a/src/com/smartstore/function/membership/update/UpdateMinPaymentAmount.java b/src/com/smartstore/function/membership/update/UpdateMinPaymentAmount.java new file mode 100644 index 00000000..d1f04aa9 --- /dev/null +++ b/src/com/smartstore/function/membership/update/UpdateMinPaymentAmount.java @@ -0,0 +1,35 @@ +package com.smartstore.function.membership.update; + +import com.smartstore.function.membership.set.SetMembershipHandler; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; + +public class UpdateMinPaymentAmount implements SetMembershipHandler { + private static UpdateMinPaymentAmount instance; + + private UpdateMinPaymentAmount(){ + + } + + public static UpdateMinPaymentAmount getInstance() { + if(instance == null){ + return new UpdateMinPaymentAmount(); + } + return instance; + } + + @Override + public void run(T value) { + MembershipType membershipType = (MembershipType) value; + MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); + + if(requirement != null){ + setMembershipRequirement(membershipType, false, true); + System.out.printf("Set %s Minimum Payment Amount Successfully\n\n\n",membershipType.name()); + }else { + System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); + } + } + +} diff --git a/src/com/smartstore/function/membership/update/UpdateMinUsage.java b/src/com/smartstore/function/membership/update/UpdateMinUsage.java new file mode 100644 index 00000000..5c0db7e9 --- /dev/null +++ b/src/com/smartstore/function/membership/update/UpdateMinUsage.java @@ -0,0 +1,33 @@ +package com.smartstore.function.membership.update; + +import com.smartstore.function.membership.set.SetMembershipHandler; +import com.smartstore.membership.MembershipRequirement; +import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; + +public class UpdateMinUsage implements SetMembershipHandler { + private static UpdateMinUsage instance; + + private UpdateMinUsage(){ + + } + + public static UpdateMinUsage getInstance() { + if(instance == null){ + return new UpdateMinUsage(); + } + return instance; + } + @Override + public void run(T value) { + MembershipType membershipType = (MembershipType) value; + MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); + + if(requirement != null){ + setMembershipRequirement(membershipType, true, false); + System.out.printf("Set %s Minimum Usage Successfully\n\n\n",membershipType.name()); + }else { + System.out.printf("Membership '%s' Defined Yet\n", membershipType.name()); + } + } +} diff --git a/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java index 229df5e6..a34f2f94 100644 --- a/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java +++ b/src/com/smartstore/function/membership/view/ViewMembershipRequirement.java @@ -3,6 +3,7 @@ import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; public class ViewMembershipRequirement implements MembershipMenuHandler { private static ViewMembershipRequirement instance; @@ -17,9 +18,12 @@ public static ViewMembershipRequirement getInstance() { } return instance; } + @Override - public void processMembership(MembershipType membershipType, MembershipRequirement requirement) { - //if not found in enum_map + public void run(T value) { + MembershipType membershipType = (MembershipType) value; + MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); + if(requirement == null ){ System.out.printf("Membership '%s' Not Defined Yet\n", membershipType.name()); } else{ diff --git a/src/com/smartstore/function/sorting/SortByMembership.java b/src/com/smartstore/function/sorting/SortByMembership.java index 3aaf55a4..b8abd42c 100644 --- a/src/com/smartstore/function/sorting/SortByMembership.java +++ b/src/com/smartstore/function/sorting/SortByMembership.java @@ -22,12 +22,11 @@ public static SortByMembership getInstance(){ } return instance; } + private CustomEnumMap sortedCustomerMap = new CustomEnumMap<>(MembershipType.class); - private CustomEnumMap sortedCustomersList = new CustomEnumMap<>(MembershipType.class); - - public CustomEnumMap getSortedCustomersList() { + public CustomEnumMap getSortedCustomersMap() { updateSortedData(); - return sortedCustomersList; + return sortedCustomerMap; } public void updateSortedData() { @@ -45,9 +44,11 @@ public void updateSortedData() { } //copy and add to list of Customers Group by membership } - sortedCustomersList.put(membershipType, Arrays.copyOfRange(customersSortByMembership,0, index)); + + sortedCustomerMap.put(membershipType, Arrays.copyOfRange(customersSortByMembership,0, index != 0 ? index-1 : customersSortByMembership.length-1)); //resize sorted Arr - customersSortByMembership = Arrays.copyOfRange(customersSortByMembership, index+1, customersSortByMembership.length-1); + customersSortByMembership = Arrays.copyOfRange(customersSortByMembership, index, customersSortByMembership.length-1); + index=0; } } diff --git a/src/com/smartstore/function/sorting/SortHandler.java b/src/com/smartstore/function/sorting/SortHandler.java index 3993dae0..f5cf4e05 100644 --- a/src/com/smartstore/function/sorting/SortHandler.java +++ b/src/com/smartstore/function/sorting/SortHandler.java @@ -8,7 +8,6 @@ import java.util.Arrays; public interface SortHandler extends EnumValueProvider, Handleable, MergeSort { - CustomEnumMap sortedCustomerMap = SortByMembership.getInstance().getSortedCustomersList(); @Override default void run() { CustomList customerList = Customers.getInstance().getCustomerList(); @@ -16,7 +15,7 @@ default void run() { for(MembershipType membershipType : MembershipType.values()){ System.out.println(membershipType.toString()); System.out.println("=========================="); - System.out.println(Arrays.toString(mergeSort(sortedCustomerMap.get(membershipType)))); + System.out.println(Arrays.toString(mergeSort(SortByMembership.getInstance().getSortedCustomersMap().get(membershipType)))); } diff --git a/src/com/smartstore/membership/MembershipRequirement.java b/src/com/smartstore/membership/MembershipRequirement.java index 9d09c4ba..f601f47c 100644 --- a/src/com/smartstore/membership/MembershipRequirement.java +++ b/src/com/smartstore/membership/MembershipRequirement.java @@ -1,5 +1,7 @@ package com.smartstore.membership; +import java.util.Objects; + public class MembershipRequirement { private final int minUsageTime; private final int minPaymentAmount; @@ -23,4 +25,16 @@ public int getMinPaymentAmount() { return minPaymentAmount; } + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof MembershipRequirement)) return false; + MembershipRequirement that = (MembershipRequirement) o; + return minUsageTime == that.minUsageTime && minPaymentAmount == that.minPaymentAmount; + } + + @Override + public int hashCode() { + return Objects.hash(minUsageTime, minPaymentAmount); + } } diff --git a/src/com/smartstore/membership/Memberships.java b/src/com/smartstore/membership/Memberships.java index 294a6e9b..23602327 100644 --- a/src/com/smartstore/membership/Memberships.java +++ b/src/com/smartstore/membership/Memberships.java @@ -1,14 +1,10 @@ package com.smartstore.membership; -import com.smartstore.customer.Customers; import com.smartstore.util.CustomEnumMap; +import com.smartstore.util.Readable; -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public class Memberships { - private final CustomEnumMap membershipList = new CustomEnumMap<>(MembershipType.class); +public class Memberships implements Readable { + private final CustomEnumMap membershipMap = new CustomEnumMap<>(MembershipType.class); private static Memberships instance; public static Memberships getInstance(){ @@ -22,59 +18,15 @@ private Memberships(){ } - public CustomEnumMap getMembershipList() { - return membershipList; + public CustomEnumMap getMembershipMap() { + return membershipMap; } - public MembershipRequirement findByType(MembershipType membershipType){ - if(membershipList.size() == 0 ){ + public MembershipRequirement findByType(MembershipType membershipType) { + if (membershipMap.size() == 0) { return null; } - return membershipList.get(membershipType); - } - - public void setMembershipRequirement(MembershipType membershipType){ - int minUsageTime; - int minPaymentAmount; - - minUsageTime = getMinUsageFromInput(); - minPaymentAmount = getMinPaymentAmountFromInput(); - // TODO: 2023-05-15 check minUsage, minPayment Bigger than prev Membership - membershipList.put(membershipType, new MembershipRequirement(minUsageTime, minPaymentAmount)); + return membershipMap.get(membershipType); } - public void setMembershipRequirement(MembershipType membershipType, int minUsage, int minPaymentAmount){ - membershipList.put(membershipType, new MembershipRequirement(minUsage, minPaymentAmount)); - //update membership - Customers.getInstance().updateMembership(); - } - - public int getMinUsageFromInput(){ - return getInputFromConsole("Input minUsageTime : "); - } - - public int getMinPaymentAmountFromInput(){ - return getInputFromConsole("Input minPaymentAmount : "); - } - - private int getInputFromConsole(String msg){ - BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); - int value; - while (true){ - try { - System.out.print(msg); - value = Integer.parseInt(br.readLine()); - //check value overflowed or negative - if (value < 0) { - // TODO: 2023-05-08 throw other exception, catch it - throw new NumberFormatException(""); - } - break; - - } catch (IOException | NumberFormatException e) { - System.out.println("Invalid Range of Input try 0 ~ Integer.Max"); - } - } - return value; - } } diff --git a/src/com/smartstore/util/Define.java b/src/com/smartstore/util/Define.java index f5d93233..833a1c24 100644 --- a/src/com/smartstore/util/Define.java +++ b/src/com/smartstore/util/Define.java @@ -2,4 +2,24 @@ public class Define { public static final int PAGING = 5; + public static final String SPLASHSCREEN= + PrettyTerminal.CYAN.getAttribute()+PrettyTerminal.BOLD.getAttribute()+ + "         __   ,. -;z_\n" + + "        __ヽ. `'    `ヽ.\n" + + "         ,> `         l\n" + + "      ∠-    ,.ヘ、、     |   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\\n" + + ".       /イ./ ,4/ュ r_ニゝ、_ |   l 비긴 걸로   l\n" + + "         lイ/l=。ァ f'。 ラ|fr} |  \하지 않을래?!/\n" + + "          l:`/ _、二ノ |レ' ヽ.  ノヘ._____/\n" + + "          ハヾニニフ ,イ |\_ヽ\n" + + "      ,、-‐ '\"7ヽ. ー ./ l /  l `''ー- 、.._\n" + + ".     / l   / トヽイ  レイ l   l       ハ\n" + + "    /  l  / _⊥.|:ヽ.__,ノ:|⊥._ l       l ヽ\n" + + "    〉   !   ̄  o.l::::::::::::::| - ,二..___  !  l、\n" + + ".   / \ l       |::::::::::::::|  l L_o_」 l| | / ヽ\n" + + "   j.\  `|    o|:::::::::::::::l - 「 ̄  ̄l !   /.l\n" + + ".   l   \ |     l:::::::::::::::::l.  \___/ |/   ヽ\n" + + "   L.____ハ   o|::::::::::::::::::ヽ.-      |___,.. イ\n" + + ".   |  _ l }     l:::::::::::::::::::::::\ __    |     |\n"+ +"By JY_B" + PrettyTerminal.RESET.getAttribute(); } diff --git a/src/com/smartstore/util/DuplicateChecker.java b/src/com/smartstore/util/DuplicateChecker.java index f362f05f..7e756045 100644 --- a/src/com/smartstore/util/DuplicateChecker.java +++ b/src/com/smartstore/util/DuplicateChecker.java @@ -2,7 +2,6 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.util.CustomList; import java.util.Arrays; import java.util.Optional; diff --git a/src/com/smartstore/util/PrettyTerminal.java b/src/com/smartstore/util/PrettyTerminal.java index d457e70a..de0bba20 100644 --- a/src/com/smartstore/util/PrettyTerminal.java +++ b/src/com/smartstore/util/PrettyTerminal.java @@ -16,7 +16,7 @@ public enum PrettyTerminal { PrettyTerminal(String attribute) { this.attribute = attribute; } - static void cls(){ + public static void cls(){ String osName = System.getProperty("os.name"); try{ diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java index e34dd896..f41e62f7 100644 --- a/src/com/smartstore/util/Validator.java +++ b/src/com/smartstore/util/Validator.java @@ -1,6 +1,8 @@ package com.smartstore.util; +import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; +import com.smartstore.membership.Memberships; import java.io.IOException; @@ -67,7 +69,9 @@ public static String getParameter(String[] values) { break; } } - System.out.println("Invalid Parameter"); + if(!isExit){ + throw new IllegalArgumentException(); + } } catch (IOException | IllegalArgumentException | NullPointerException e) { System.out.println("Invalid Parameter"); } @@ -83,12 +87,12 @@ public static String getMenuNumber(String[] values) { System.out.print("Wait for Input : "); menu = Integer.parseInt(br.readLine()); if (menu <= 0 || menu > values.length) { - throw new NumberFormatException("Input valid Menu Number 1 ~ " + (values.length-1)); + throw new NumberFormatException(); } break; } catch (IOException | NumberFormatException e) { - System.out.println(e.getMessage()); + System.out.println("Input valid Menu Number 1 ~ " + (values.length)); } } return String.valueOf(menu); @@ -114,4 +118,80 @@ public static boolean isAnswerYes(String msg){ } } + public static int getInteger(String msg){ + int value; + while (true){ + try { + System.out.print(msg); + value = Integer.parseInt(br.readLine()); + //check value overflowed or negative + if (value < 0) { + throw new NumberFormatException(""); + } + break; + + } catch (IOException | NumberFormatException e) { + System.out.println("Invalid Range of Input try 0 ~ Integer.Max"); + } + } + return value; + } + + public static boolean isValidMinUsage(MembershipType membershipType, int value){ + int prevMinUsageTime; + int nextMinUsageTime; + MembershipRequirement requirement; + CustomEnumMap membershipMap = Memberships.getInstance().getMembershipMap(); + + //if current membershipType is The Highest Membership + if(membershipType == MembershipType.values()[MembershipType.values().length-1]){ + nextMinUsageTime = Integer.MAX_VALUE; + } else { + MembershipType nextMembershipType = MembershipType.values()[membershipType.ordinal()+1]; + requirement = membershipMap.get(nextMembershipType); + nextMinUsageTime = (requirement == null) ? Integer.MAX_VALUE : requirement.getMinUsageTime(); + } + + //if current membershipType is The Lowest Membership or Next of Lowest + if(membershipType == MembershipType.values()[0] || membershipType == MembershipType.values()[1]){ + prevMinUsageTime = 0; + } else { + MembershipType prevMembershipType = MembershipType.values()[membershipType.ordinal()-1]; + requirement = membershipMap.get(prevMembershipType); + prevMinUsageTime = (requirement == null) ? 0 : requirement.getMinUsageTime(); + } + + + return value <= nextMinUsageTime && value >= prevMinUsageTime; + } + + public static boolean isValidMinPayment(MembershipType membershipType, int value){ + int prevMinPayment; + int nextMinPayment; + MembershipRequirement requirement; + CustomEnumMap membershipMap = Memberships.getInstance().getMembershipMap(); + + //if current membershipType is The Highest Membership + if(membershipType == MembershipType.values()[MembershipType.values().length-1]){ + nextMinPayment = Integer.MAX_VALUE; + } else { + MembershipType nextMembershipType = MembershipType.values()[membershipType.ordinal()+1]; + requirement = membershipMap.get(nextMembershipType); + //if next is not exist, 0 + nextMinPayment = (requirement == null) ? Integer.MAX_VALUE : requirement.getMinPaymentAmount(); + } + + //if current membershipType is The Lowest Membership or Next of Lowest + if(membershipType == MembershipType.values()[0] || membershipType == MembershipType.values()[1]){ + prevMinPayment = 0; + } else { + MembershipType prevMembershipType = MembershipType.values()[membershipType.ordinal()-1]; + requirement = membershipMap.get(prevMembershipType); + prevMinPayment = (requirement == null) ? 0 : requirement.getMinPaymentAmount(); + } + + + return value <= nextMinPayment && value >= prevMinPayment; + } + } From 24008d56f22aa924cae18c68825ec493ccb4d0a5 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 03:20:47 +0900 Subject: [PATCH 75/79] fix: Fix Bug [ Add Condition When init Membership ] --- .../function/mainmenu/MainMenuFunction.java | 1 + src/com/smartstore/function/mainmenu/SummaryMenu.java | 11 ++++++----- .../function/membership/set/SetMembershipHandler.java | 5 +++-- .../membership/set/SetMembershipRequirement.java | 10 ++++++++-- .../smartstore/function/sorting/SortByMembership.java | 7 +++++-- src/com/smartstore/function/sorting/SortHandler.java | 4 ++++ 6 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 1cc2a531..9eb0cb2e 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -3,6 +3,7 @@ import com.smartstore.function.*; import com.smartstore.util.Function; import com.smartstore.util.Handleable; +import com.smartstore.util.HandleableParam; public enum MainMenuFunction implements Function { MAIN_MENU(0, MainMenu.getInstance(), "Main Menu"), diff --git a/src/com/smartstore/function/mainmenu/SummaryMenu.java b/src/com/smartstore/function/mainmenu/SummaryMenu.java index d45f4062..8bedf55c 100644 --- a/src/com/smartstore/function/mainmenu/SummaryMenu.java +++ b/src/com/smartstore/function/mainmenu/SummaryMenu.java @@ -2,13 +2,10 @@ import com.smartstore.function.sorting.SortFunction; import com.smartstore.function.sorting.SortHandler; -import com.smartstore.util.Function; -import com.smartstore.util.Handler; -import com.smartstore.util.Printer; -import com.smartstore.util.Validator; +import com.smartstore.util.*; -public class SummaryMenu implements SortHandler, Handler { +public class SummaryMenu implements SortHandler, Handler, HandleableParam { private static SummaryMenu instance; @@ -48,4 +45,8 @@ public void run(){ } + @Override + public void run(T value) { + run(); + } } diff --git a/src/com/smartstore/function/membership/set/SetMembershipHandler.java b/src/com/smartstore/function/membership/set/SetMembershipHandler.java index e8c57f6b..3f6b6d48 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipHandler.java +++ b/src/com/smartstore/function/membership/set/SetMembershipHandler.java @@ -1,6 +1,7 @@ package com.smartstore.function.membership.set; import com.smartstore.customer.Customers; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; @@ -25,9 +26,9 @@ default void setMembershipRequirement(MembershipType membershipType, boolean isU boolean isValidPaymentAmount; while (true) { - minUsageTime = isUpdateUsageTime ? Validator.getInteger("Input minUsageTime : ") : Memberships.getInstance().findByType(membershipType).getMinUsageTime(); + minUsageTime = Memberships.getInstance().findByType(membershipType) == null && isUpdateUsageTime ? Validator.getInteger("Input minUsageTime : ") : Memberships.getInstance().findByType(membershipType).getMinUsageTime(); isValidUsage = Validator.isValidMinUsage(membershipType, minUsageTime); - minPaymentAmount = isUpdatePaymentAmount ? Validator.getInteger("Input minPaymentAmount : ") : Memberships.getInstance().findByType(membershipType).getMinPaymentAmount(); + minPaymentAmount = Memberships.getInstance().findByType(membershipType) == null && isUpdatePaymentAmount ? Validator.getInteger("Input minPaymentAmount : ") : Memberships.getInstance().findByType(membershipType).getMinPaymentAmount(); isValidPaymentAmount = Validator.isValidMinPayment(membershipType, minPaymentAmount); if(membershipType != MembershipType.values()[0] && membershipType != MembershipType.values()[1]){ diff --git a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java index ad803a43..44876ce3 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipRequirement.java +++ b/src/com/smartstore/function/membership/set/SetMembershipRequirement.java @@ -1,10 +1,11 @@ package com.smartstore.function.membership.set; +import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; -public class SetMembershipRequirement implements SetMembershipHandler { +public class SetMembershipRequirement implements MembershipMenuHandler, SetMembershipHandler { private static SetMembershipRequirement instance; private SetMembershipRequirement(){ @@ -32,7 +33,7 @@ public void run(T value) { MembershipRequirement requirement = Memberships.getInstance().getMembershipMap().get(membershipType); if(requirement == null){ if(isPrevMembershipExist(membershipType)){ - setMembershipRequirement(membershipType); + setMembershipRequirement(membershipType,true,true); System.out.printf("Set %s Successfully\n\n\n",membershipType.name()); } else { @@ -43,4 +44,9 @@ public void run(T value) { System.out.printf("Membership '%s' Already Defined\n", membershipType.name()); } } + + @Override + public void run() { + MembershipMenuHandler.super.run(); + } } diff --git a/src/com/smartstore/function/sorting/SortByMembership.java b/src/com/smartstore/function/sorting/SortByMembership.java index b8abd42c..98e2a802 100644 --- a/src/com/smartstore/function/sorting/SortByMembership.java +++ b/src/com/smartstore/function/sorting/SortByMembership.java @@ -44,8 +44,11 @@ public void updateSortedData() { } //copy and add to list of Customers Group by membership } - - sortedCustomerMap.put(membershipType, Arrays.copyOfRange(customersSortByMembership,0, index != 0 ? index-1 : customersSortByMembership.length-1)); + if(index == 0){ + sortedCustomerMap.put(membershipType, customersSortByMembership); + break; + } + sortedCustomerMap.put(membershipType, Arrays.copyOfRange(customersSortByMembership,0, index-1)); //resize sorted Arr customersSortByMembership = Arrays.copyOfRange(customersSortByMembership, index, customersSortByMembership.length-1); index=0; diff --git a/src/com/smartstore/function/sorting/SortHandler.java b/src/com/smartstore/function/sorting/SortHandler.java index f5cf4e05..463b05b5 100644 --- a/src/com/smartstore/function/sorting/SortHandler.java +++ b/src/com/smartstore/function/sorting/SortHandler.java @@ -11,6 +11,10 @@ public interface SortHandler extends EnumValueProvider, Handleable, MergeSort { @Override default void run() { CustomList customerList = Customers.getInstance().getCustomerList(); + if(customerList.size() == 0){ + System.out.println("There is No Data Yet"); + return; + } Customer[] customerArr = customerList.toArray(new Customer[customerList.size()]); for(MembershipType membershipType : MembershipType.values()){ System.out.println(membershipType.toString()); From 4f3ae62d1eba3770f818ab070780968ebd889ac6 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 03:57:09 +0900 Subject: [PATCH 76/79] refactor: Clean Up code & Add Test Code [Clean Up code, Add Test Code, Add Some Color To menu] --- src/com/smartstore/Test.java | 37 +++++++++++++++++++ .../customer/view/ViewCustomerByPaging.java | 7 +--- .../function/mainmenu/CustomerMenu.java | 2 - .../function/mainmenu/MainMenu.java | 2 + .../function/mainmenu/MainMenuFunction.java | 1 - .../membership/set/SetMembershipHandler.java | 2 - src/com/smartstore/util/Define.java | 2 +- src/com/smartstore/util/PrettyTerminal.java | 22 +---------- src/com/smartstore/util/Printer.java | 6 +-- 9 files changed, 47 insertions(+), 34 deletions(-) create mode 100644 src/com/smartstore/Test.java diff --git a/src/com/smartstore/Test.java b/src/com/smartstore/Test.java new file mode 100644 index 00000000..328bab91 --- /dev/null +++ b/src/com/smartstore/Test.java @@ -0,0 +1,37 @@ +package com.smartstore; + +import com.smartstore.customer.Customer; +import com.smartstore.customer.Customers; +import com.smartstore.function.membership.set.SetMembershipHandler; +import com.smartstore.membership.MembershipType; +import com.smartstore.util.CustomList; + +import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; + +public class Test { + public static void run() { + SetMembershipHandler setMembershipHandler = new SetMembershipHandler() { + @Override + public void run(T value) { + + } + }; + setMembershipHandler.setMembershipRequirement(MembershipType.GENERAL,3,5); + setMembershipHandler.setMembershipRequirement(MembershipType.VIP,3,10); + setMembershipHandler.setMembershipRequirement(MembershipType.VVIP,20,20); + + CustomList customerList = Customers.getInstance().getCustomerList(); + Random random = new Random(); + + for(int i = 0 ; i < 28 ; i++ ){ + String name = String.valueOf(((char)(ThreadLocalRandom.current().nextInt(97, 122+1)))); + String id = "id"+random.nextInt(100)+1; + customerList.add(new Customer(name, id, random.nextInt(28)+1, random.nextInt(28)+1)); + } + System.out.println(customerList); + + + SmartStore.run(); + } +} diff --git a/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java index 8c284d5f..ca9521fd 100644 --- a/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java +++ b/src/com/smartstore/function/customer/view/ViewCustomerByPaging.java @@ -2,10 +2,7 @@ import com.smartstore.customer.Customer; import com.smartstore.customer.Customers; -import com.smartstore.util.Define; -import com.smartstore.util.Handleable; -import com.smartstore.util.List; -import com.smartstore.util.Validator; +import com.smartstore.util.*; public class ViewCustomerByPaging implements Handleable { @@ -57,6 +54,6 @@ public void run() { System.out.print(customerList); } - System.out.println("======================================"); + System.out.println("======================================\n\n"); } } diff --git a/src/com/smartstore/function/mainmenu/CustomerMenu.java b/src/com/smartstore/function/mainmenu/CustomerMenu.java index ed2738c7..ff955d21 100644 --- a/src/com/smartstore/function/mainmenu/CustomerMenu.java +++ b/src/com/smartstore/function/mainmenu/CustomerMenu.java @@ -2,7 +2,6 @@ import com.smartstore.util.Function; import com.smartstore.function.customer.CustomerFunction; -import com.smartstore.util.PrettyTerminal; import com.smartstore.util.Printer; import com.smartstore.util.Validator; @@ -29,7 +28,6 @@ public void run() { @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == CustomerFunction.BACK.getMenuNumber()) { - PrettyTerminal.cls(); return true; } Function.of(Integer.parseInt(menuNumber), CustomerFunction.class).run(); diff --git a/src/com/smartstore/function/mainmenu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java index 3059f5b8..9389feca 100644 --- a/src/com/smartstore/function/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -2,6 +2,7 @@ import com.smartstore.util.Define; import com.smartstore.util.Function; +import com.smartstore.util.PrettyTerminal; public class MainMenu implements MainMenuHandler { private static MainMenu instance; @@ -27,6 +28,7 @@ public boolean handleChoice(String menuNumber) { } //call Menu with menuNumber Function.of(Integer.parseInt(menuNumber), MainMenuFunction.class).run(Integer.parseInt(menuNumber)); + PrettyTerminal.cls(); return false; } diff --git a/src/com/smartstore/function/mainmenu/MainMenuFunction.java b/src/com/smartstore/function/mainmenu/MainMenuFunction.java index 9eb0cb2e..1cc2a531 100644 --- a/src/com/smartstore/function/mainmenu/MainMenuFunction.java +++ b/src/com/smartstore/function/mainmenu/MainMenuFunction.java @@ -3,7 +3,6 @@ import com.smartstore.function.*; import com.smartstore.util.Function; import com.smartstore.util.Handleable; -import com.smartstore.util.HandleableParam; public enum MainMenuFunction implements Function { MAIN_MENU(0, MainMenu.getInstance(), "Main Menu"), diff --git a/src/com/smartstore/function/membership/set/SetMembershipHandler.java b/src/com/smartstore/function/membership/set/SetMembershipHandler.java index 3f6b6d48..f5a8d83c 100644 --- a/src/com/smartstore/function/membership/set/SetMembershipHandler.java +++ b/src/com/smartstore/function/membership/set/SetMembershipHandler.java @@ -1,7 +1,6 @@ package com.smartstore.function.membership.set; import com.smartstore.customer.Customers; -import com.smartstore.function.membership.MembershipMenuHandler; import com.smartstore.membership.MembershipRequirement; import com.smartstore.membership.MembershipType; import com.smartstore.membership.Memberships; @@ -61,7 +60,6 @@ default void setMembershipRequirement(MembershipType membershipType, boolean isU System.out.printf("isValidUsage & isValidPaymentAmount Must Satisfy the AND Operation. Current Situation : %s, %s\n",isValidUsage, isValidPaymentAmount); } setMembershipRequirement(membershipType, minUsageTime, minPaymentAmount); - // TODO: 2023-05-15 check minUsage, minPayment Bigger than prev Membership } default void setMembershipRequirement(MembershipType membershipType, int minUsage, int minPaymentAmount){ diff --git a/src/com/smartstore/util/Define.java b/src/com/smartstore/util/Define.java index 833a1c24..9c31b6b4 100644 --- a/src/com/smartstore/util/Define.java +++ b/src/com/smartstore/util/Define.java @@ -21,5 +21,5 @@ public class Define { ".   l   \ |     l:::::::::::::::::l.  \___/ |/   ヽ\n" + "   L.____ハ   o|::::::::::::::::::ヽ.-      |___,.. イ\n" + ".   |  _ l }     l:::::::::::::::::::::::\ __    |     |\n"+ -"By JY_B" + PrettyTerminal.RESET.getAttribute(); +"By JY_B\n\n" + PrettyTerminal.RESET.getAttribute(); } diff --git a/src/com/smartstore/util/PrettyTerminal.java b/src/com/smartstore/util/PrettyTerminal.java index de0bba20..1b8659b2 100644 --- a/src/com/smartstore/util/PrettyTerminal.java +++ b/src/com/smartstore/util/PrettyTerminal.java @@ -17,26 +17,8 @@ public enum PrettyTerminal { this.attribute = attribute; } public static void cls(){ - - String osName = System.getProperty("os.name"); - try{ - if (osName.contains("Windows")) { - String terminal = System.getenv("TERM"); - if (terminal != null && terminal.contains("xterm")) { - System.out.print("\033[H\033[2J"); - System.out.flush(); - } else if (osName.contains("Windows 10")) { - new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); - } else { - new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor(); - } - } else { - System.out.print("\033[H\033[2J"); - System.out.flush(); - } - } - - catch (Exception e){ + for (int i = 0; i < 15; i++) { + System.out.println(); } } diff --git a/src/com/smartstore/util/Printer.java b/src/com/smartstore/util/Printer.java index 77a59f98..1614a517 100644 --- a/src/com/smartstore/util/Printer.java +++ b/src/com/smartstore/util/Printer.java @@ -4,13 +4,13 @@ public class Printer { public static void printMenu(String[] menus){ for(int i = 0 ; i < menus.length ; i++){ - System.out.printf("%d. %s\n",i + 1,menus[i]); + System.out.printf(PrettyTerminal.BOLD.getAttribute() + "%d. %s\n",i + 1,menus[i] + PrettyTerminal.RESET.getAttribute()); } } public static void printSelectable(String[] menus){ for (String menu : menus) { - System.out.printf("| %s ", menu); + System.out.printf("| " + PrettyTerminal.PURPLE.getAttribute() + "%s " + PrettyTerminal.RESET.getAttribute(), menu); } - System.out.println("| or 'end'"); + System.out.println("| or " + PrettyTerminal.RED.getAttribute() + "end" + PrettyTerminal.RESET.getAttribute()); } } From 578e9522935c16c3eeb8267f90adf48ab687e5f6 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 05:00:02 +0900 Subject: [PATCH 77/79] feat: Feat : Sort Customers by ASC, DESC [ New Feat : sort as ASC, DESC Feat ] --- src/com/smartstore/Test.java | 4 +--- .../function/mainmenu/MainMenu.java | 1 + .../function/sorting/SortByMembership.java | 2 ++ .../function/sorting/SortHandler.java | 12 ++++++++++-- src/com/smartstore/util/Validator.java | 19 +++++++++++++++++++ 5 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/com/smartstore/Test.java b/src/com/smartstore/Test.java index 328bab91..70fa4bc9 100644 --- a/src/com/smartstore/Test.java +++ b/src/com/smartstore/Test.java @@ -19,7 +19,7 @@ public void run(T value) { }; setMembershipHandler.setMembershipRequirement(MembershipType.GENERAL,3,5); setMembershipHandler.setMembershipRequirement(MembershipType.VIP,3,10); - setMembershipHandler.setMembershipRequirement(MembershipType.VVIP,20,20); + setMembershipHandler.setMembershipRequirement(MembershipType.VVIP,10,15); CustomList customerList = Customers.getInstance().getCustomerList(); Random random = new Random(); @@ -29,8 +29,6 @@ public void run(T value) { String id = "id"+random.nextInt(100)+1; customerList.add(new Customer(name, id, random.nextInt(28)+1, random.nextInt(28)+1)); } - System.out.println(customerList); - SmartStore.run(); } diff --git a/src/com/smartstore/function/mainmenu/MainMenu.java b/src/com/smartstore/function/mainmenu/MainMenu.java index 9389feca..b0a9b73b 100644 --- a/src/com/smartstore/function/mainmenu/MainMenu.java +++ b/src/com/smartstore/function/mainmenu/MainMenu.java @@ -24,6 +24,7 @@ private void printSplashScreen(){ @Override public boolean handleChoice(String menuNumber) { if(Integer.parseInt(menuNumber) == MainMenuFunction.QUIT.getMenuNumber()) { + System.out.println("Okay By...e"); return true; } //call Menu with menuNumber diff --git a/src/com/smartstore/function/sorting/SortByMembership.java b/src/com/smartstore/function/sorting/SortByMembership.java index 98e2a802..82b6c880 100644 --- a/src/com/smartstore/function/sorting/SortByMembership.java +++ b/src/com/smartstore/function/sorting/SortByMembership.java @@ -6,6 +6,7 @@ import com.smartstore.util.CustomEnumMap; import com.smartstore.util.CustomList; import com.smartstore.util.MergeSort; +import com.smartstore.util.Validator; import java.util.Arrays; @@ -34,6 +35,7 @@ public void updateSortedData() { if(customerList.size() == 0){ return; } + Customer[] customersSortByMembership = mergeSort(customerList.toArray(new Customer[customerList.size()])); int index = 0; for(MembershipType membershipType : MembershipType.values()){ diff --git a/src/com/smartstore/function/sorting/SortHandler.java b/src/com/smartstore/function/sorting/SortHandler.java index 463b05b5..660702de 100644 --- a/src/com/smartstore/function/sorting/SortHandler.java +++ b/src/com/smartstore/function/sorting/SortHandler.java @@ -10,16 +10,24 @@ public interface SortHandler extends EnumValueProvider, Handleable, MergeSort { @Override default void run() { + String answer = "A"; CustomList customerList = Customers.getInstance().getCustomerList(); + + if(! (this instanceof SortByMembership)){ + answer = Validator.isAscendingOrEnd(); + } + + if("end".equalsIgnoreCase(answer)){ + return; + } if(customerList.size() == 0){ System.out.println("There is No Data Yet"); return; } - Customer[] customerArr = customerList.toArray(new Customer[customerList.size()]); for(MembershipType membershipType : MembershipType.values()){ System.out.println(membershipType.toString()); System.out.println("=========================="); - System.out.println(Arrays.toString(mergeSort(SortByMembership.getInstance().getSortedCustomersMap().get(membershipType)))); + System.out.println(Arrays.toString(mergeSort(SortByMembership.getInstance().getSortedCustomersMap().get(membershipType),"A".equalsIgnoreCase(answer)))); } diff --git a/src/com/smartstore/util/Validator.java b/src/com/smartstore/util/Validator.java index f41e62f7..6b4cd92c 100644 --- a/src/com/smartstore/util/Validator.java +++ b/src/com/smartstore/util/Validator.java @@ -194,4 +194,23 @@ public static boolean isValidMinPayment(MembershipType membershipType, int value return value <= nextMinPayment && value >= prevMinPayment; } + public static String isAscendingOrEnd(){ + System.out.println(PrettyTerminal.BLUE.getAttribute() + "Ascending" + PrettyTerminal.RESET.getAttribute() + " or " + PrettyTerminal.RED.getAttribute() +"Descending?" + PrettyTerminal.RESET.getAttribute()); + String value = ""; + while (true){ + try { + System.out.print("Wait for Input A or D " + PrettyTerminal.RED.getAttribute() + "end" + PrettyTerminal.RESET.getAttribute() + " to exit :"); + value = br.readLine(); + } catch (IOException e) { + System.out.println("Please Input A or D"); + } + + if("A".equalsIgnoreCase(value) || "D".equalsIgnoreCase(value) || "end".equalsIgnoreCase(value)){ + return value; + } + + System.out.println("Please Input A or D or end"); + } + } + } From 36c0475c4e8ceb22ad89693f079b8ee96075fce9 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 05:15:47 +0900 Subject: [PATCH 78/79] refactor: edit README.md [edit README.md] --- README.md | 30 +++--------------------------- 1 file changed, 3 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index b0eb52bb..7725294a 100644 --- a/README.md +++ b/README.md @@ -1,33 +1,9 @@
### 자바 토이프로젝트

-> 제출자 - 최은빈 +> 제출자 - 배종윤 > 출시일 - 23.04.27. -> 제출일 - 23.05.10. - -- [프로젝트 설명서](https://echoiing-fastcampus.notion.site/Smart-Store-47ea8a0b4b084301bd1eefbabe3426af)를 풀어서 제출하시오. 💻 - -- 파일 이름 작성법 📂 - - ````me.smartstore```` 패키지 생성 -- 제출방법 - - 본인의 이름으로 ````branch````를 생성하여 ````push````후 ````pull request```` 작성 - - 예시 - - branch 이름 - ````FirstNameLastName```` - - commit 메시지 (멘토 리뷰 이전) - [1차 VER1.0...] Java ToyProject upload by FirstNameLastName (labeling도 가능: ````first````) - - commit 메시지 (멘토 리뷰 이전) - [1차 VER2.0...] Java ToyProject upload by FirstNameLastName (labeling도 가능: ````second````) - - commit 메시지 (멘토 리뷰 이후) - [2차] Java ToyProject upload by FirstNameLastName (labeling도 가능: ````resubmit````) - - PR 메시지는 본인이 하고 싶은 말이나 질문을 적어주세요. - - ````코드리뷰 빡세게 부탁드립니다.```` ````클린한 코드인지 봐주세요.```` ````이 코드의 조금 더 나은 방법이 있을까요.```` - - ````~~번 문제 풀지 못했습니다.```` ````~~번 문제 풀이 방법을 알려주시면 감사하겠습니다.```` - - ````결과는 나왔는데 맞는지 모르겠습니다.```` -- 리뷰관련 [프로세스 🔖](https://quickest-asterisk-75d.notion.site/a8d233d87f0945cbaa8f71300515587d?p=b658d277f52843dd9e1e8322233c9006&pm=s) - - ```PEER REVIEW``` - 과제 기간동안 본인 과제 완료 후, 다른 수강생들의 PR을 보며 피어리뷰 가능 (댓글 이용) - - ```MENTOR REVIEW``` - 과제 기간 이후에 멘토진 코드 리뷰 (댓글 이용) - - 멘토님이 작성한 댓글 이후에는 수강생이 댓글 자제 (혼선 막기 위함) -- 주의사항 🔥 - - 본인 ```branch``` -> ```main branch``` PR 상태로 제출부탁드립니다. - - ```main branch```에 본인 ```branch```의 ```commit```을 ```merge``` 하지 마시기 바랍니다. - - ```git ignore``` 활용 적극 권장 ‼ - - 문제풀이 코드가 아닌 .idea, out과 같은 파일은 제출 하지 마세요 🥲 +> 제출일 - 23.05.15.
+
From 48b67f4d2c92e9d9824e326e34ea093cddcb0768 Mon Sep 17 00:00:00 2001 From: jy-b Date: Tue, 16 May 2023 05:19:46 +0900 Subject: [PATCH 79/79] refactor: edit README.md [edit README.md] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7725294a..53d0ef47 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ > 제출자 - 배종윤 > 출시일 - 23.04.27. > 제출일 - 23.05.15.
- +