Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1차 VER1.0...] Java ToyProject upload by JongYoon BAE #37

Open
wants to merge 80 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
80 commits
Select commit Hold shift + click to select a range
b383d98
refactor: Init project
jy-b Apr 29, 2023
3aeee9e
refactor: Change Package Structure
jy-b May 1, 2023
58fbf2e
refactor: Add CustomHashMap.java
jy-b May 1, 2023
8d6de95
refactor: Add Map Interface, modify CustomHashMap Class
jy-b May 1, 2023
a4514b9
refactor: Add functions
jy-b May 1, 2023
227a1ad
refactor: Add Collections Interface, List Class
jy-b May 1, 2023
3da6fd3
refactor: Delete Already Moved Files
jy-b May 1, 2023
41bb573
style: edit Comments
jy-b May 1, 2023
8019861
refactor: modify CustomHashMap Class
jy-b May 1, 2023
ceead4f
style: edit Comments
jy-b May 1, 2023
4090f3e
style: edit Comments
jy-b May 1, 2023
29ba7bc
refactor: modify CustomHashMap Class
jy-b May 2, 2023
b3aac5a
refactor: modify CustomHashMap Class
jy-b May 2, 2023
5e14099
refactor: modify CustomHashMap Class
jy-b May 2, 2023
6080690
refactor: Add CustomEnumMap Class
jy-b May 2, 2023
b842415
refactor: Modify CustomEnumMap Class
jy-b May 4, 2023
ef59133
refactor: Modify Collections Interface
jy-b May 4, 2023
2da57c6
refactor: Rename List Class
jy-b May 4, 2023
09cc1c6
refactor: Modify CustomEnumMap Class
jy-b May 4, 2023
a538aac
refactor: Modify CustomList Class
jy-b May 4, 2023
7e9a227
refactor: Rename Collections Class
jy-b May 4, 2023
1490a32
refactor: Modify Structure
jy-b May 8, 2023
c5be8db
refactor: Rename Classes
jy-b May 8, 2023
5f1fa2f
refactor: Modify MainMenu
jy-b May 8, 2023
1eb1f1a
refactor: Modify Screen Enum
jy-b May 8, 2023
cc0cd66
refactor: Modify MainMenu
jy-b May 8, 2023
091880b
refactor: Rename MainMenu
jy-b May 8, 2023
8fc68fe
refactor: Modify Menu Structure
jy-b May 8, 2023
c003db5
refactor: Modify smartstore class
jy-b May 8, 2023
de43b91
refactor: Rename package
jy-b May 8, 2023
d105a61
refactor: Rename value
jy-b May 8, 2023
1f54679
refactor: Clean UP code
jy-b May 8, 2023
918972f
refactor: Clean UP code
jy-b May 8, 2023
aa99df9
refactor: Add MembershipFunction class
jy-b May 8, 2023
87d674a
refactor: Modify CustomList
jy-b May 8, 2023
9a6ff09
refactor: Modify Menu Interface
jy-b May 8, 2023
1ae1734
refactor: Modify MembershipType
jy-b May 8, 2023
ecf680c
refactor: Modify return type of method
jy-b May 8, 2023
9fc04e7
refactor: Add method
jy-b May 8, 2023
4c80868
refactor: Modify method
jy-b May 8, 2023
2849423
refactor: Modify Access Modifier
jy-b May 8, 2023
30869a2
feat: New Feat CustomList
jy-b May 9, 2023
5306bf6
feat: Back to PrevMenu
jy-b May 9, 2023
85a1730
feat: Set MembershipRequirement
jy-b May 9, 2023
c1ca6b5
refactor: Add MembershipMenuController
jy-b May 9, 2023
1c581db
feat: Update MembershipRequirement
jy-b May 9, 2023
7fa307f
feat: View MembershipRequirement
jy-b May 9, 2023
e745485
refactor: Change package structure
jy-b May 9, 2023
df47525
refactor: Rename
jy-b May 9, 2023
1f9a6b5
refactor: Clean up code
jy-b May 9, 2023
2136497
refactor: Rename
jy-b May 9, 2023
5d9667e
refactor: Clean Up code & Add Classes for Customer function
jy-b May 9, 2023
d5a64b9
fix: Fix Submenu looping problem
jy-b May 10, 2023
3face8b
refactor: ref
jy-b May 10, 2023
3f30633
fix: Change proj Structure, Fix bug
jy-b May 10, 2023
0bdac57
fix: Change proj Structure, Fix bug
jy-b May 10, 2023
ec3dca4
refactor: ref
jy-b May 10, 2023
80c0465
feat: Feat : Add Customer
jy-b May 13, 2023
0d8d121
feat: Feat : Add Customer
jy-b May 13, 2023
1a7d32a
refactor: ref
jy-b May 13, 2023
c3a6925
refactor: ref
jy-b May 13, 2023
6b4219c
feat: Feat : get subList
jy-b May 13, 2023
aa9584d
feat: Feat : View Customer List
jy-b May 14, 2023
567b7c7
feat: Feat : Update Customer
jy-b May 14, 2023
6f12cf9
feat: Feat : Delete Customer
jy-b May 14, 2023
8f05049
feat: refresh
jy-b May 14, 2023
aa19608
refactor: ref
jy-b May 14, 2023
deacce7
refactor: fix bug, delete unnecessary file
jy-b May 15, 2023
7de77dc
refactor: add @todo
jy-b May 15, 2023
8957c4f
feat: Feat : Sort Customers
jy-b May 15, 2023
145731c
refactor: Clean Up code
jy-b May 15, 2023
57ef5b8
refactor: Clean Up code
jy-b May 15, 2023
bf02214
ref
jy-b May 15, 2023
a5dedf5
fix: Fix Bug
jy-b May 15, 2023
24008d5
fix: Fix Bug
jy-b May 15, 2023
a6c3170
Merge remote-tracking branch 'origin/JONGYOON_BAE' into JONGYOON_BAE
jy-b May 15, 2023
4f3ae62
refactor: Clean Up code & Add Test Code
jy-b May 15, 2023
578e952
feat: Feat : Sort Customers by ASC, DESC
jy-b May 15, 2023
36c0475
refactor: edit README.md
jy-b May 15, 2023
48b67f4
refactor: edit README.md
jy-b May 15, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
/out/
/.idea/
30 changes: 3 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,33 +1,9 @@
<br/>

### 자바 토이프로젝트 <br/><br/>
> 제출자 - 최은빈
> 제출자 - 배종윤
> 출시일 - 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. <br>
<img src="https://i.redd.it/rskneik2r4h41.jpg">

<br/>
8 changes: 8 additions & 0 deletions src/com/smartstore/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.smartstore;

public class Main {
public static void main(String[] args) {
SmartStore.run();
//Test.run();
}
}
11 changes: 11 additions & 0 deletions src/com/smartstore/SmartStore.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.smartstore;

import com.smartstore.util.Function;
import com.smartstore.function.mainmenu.MainMenuFunction;

public class SmartStore {
public static void run(){
//Load Initial Screen
Function.of(0, MainMenuFunction.class).run();
}
}
35 changes: 35 additions & 0 deletions src/com/smartstore/Test.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
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 <T> void run(T value) {

}
};
setMembershipHandler.setMembershipRequirement(MembershipType.GENERAL,3,5);
setMembershipHandler.setMembershipRequirement(MembershipType.VIP,3,10);
setMembershipHandler.setMembershipRequirement(MembershipType.VVIP,10,15);

CustomList<Customer> 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));
}

SmartStore.run();
}
}
111 changes: 111 additions & 0 deletions src/com/smartstore/customer/Customer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
package com.smartstore.customer;

import com.smartstore.membership.MembershipRequirement;
import com.smartstore.membership.MembershipType;
import com.smartstore.membership.Memberships;
import com.smartstore.util.CustomEnumMap;

public class Customer {
private String customerId;
private String customerName;

private int usageTime;
private int paymentAmount;
private MembershipType membership;

public Customer() {
}

public Customer(String customerName, String customerId, int usageTime, int paymentAmount) {
this.customerId = customerId;
this.customerName = customerName;
this.usageTime = usageTime;
this.paymentAmount = paymentAmount;
setMembership(usageTime, paymentAmount);
}

public void setMembership(int usageTime, int paymentAmount) {
Memberships memberships = Memberships.getInstance();
MembershipType membership = MembershipType.NONE;
//Map is CustomMap
CustomEnumMap<MembershipType, MembershipRequirement> membershipList = memberships.getMembershipMap();
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;
isPaymentLowerThenCurrent = paymentAmount < currentPaymentTime;

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 = MembershipType.NONE;
}

}
this.membership = membership;
}

public void updateMembership(){
setMembership(usageTime, paymentAmount);
}

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 + '\'' +
", customerName='" + customerName + '\'' +
", usageTime=" + usageTime +
", paymentAmount=" + paymentAmount +
", membership=" + membership +
"\n";
}
}
47 changes: 47 additions & 0 deletions src/com/smartstore/customer/Customers.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.smartstore.customer;

import com.smartstore.util.CustomList;

import java.util.Arrays;
import java.util.Optional;

public class Customers {
private static Customers instance;

private Customers() {

}

public static Customers getInstance(){
if(instance == null){
instance = new Customers();
}
return instance;
}
private final CustomList<Customer> customerList = new CustomList();

public CustomList<Customer> getCustomerList() {
return customerList;
}

public Customer getCustomerById(String id){
if(customerList.size() == 0){
return null;
}
Optional<Customer> customerOptional = Arrays.stream(customerList.toArray(new Customer[customerList.size()]))
.filter(customer -> id.equals(customer.getCustomerId()))
.findFirst();
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());
}
}

}
41 changes: 41 additions & 0 deletions src/com/smartstore/function/Back.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.smartstore.function;


import com.smartstore.util.Handleable;
import com.smartstore.util.HandleableParam;
import com.smartstore.util.Handler;

public class Back implements Handler, HandleableParam, Handleable {
private static Back instance;

private Back(){

}

public static Back getInstance() {
if(instance == null){
instance = new Back();
}
return instance;
}

@Override
public void run() {

}

@Override
public boolean handleChoice(String menuNumber) {
return false;
}

@Override
public int getCurrentMenuNumber() {
return 0;
}

@Override
public <T> void run(T value) {

}
}
43 changes: 43 additions & 0 deletions src/com/smartstore/function/customer/CustomerFunction.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package com.smartstore.function.customer;

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;
import com.smartstore.function.customer.update.UpdateCustomer;
import com.smartstore.function.customer.view.ViewCustomer;

public enum CustomerFunction implements Function<Handleable> {
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;

private final 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
public int getMenuNumber() {
return this.menuNumber;
}

@Override
public Handleable getMenuHandler() {
return this.handler;
}

}
50 changes: 50 additions & 0 deletions src/com/smartstore/function/customer/CustomerMenuHandler.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package com.smartstore.function.customer;

import com.smartstore.customer.Customer;
import com.smartstore.customer.Customers;
import com.smartstore.function.customer.update.UpdateCustomerFunction;
import com.smartstore.function.mainmenu.MainMenuFunction;
import com.smartstore.membership.MembershipType;
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, Handler {

default void run() {
boolean isExit = false;
while (!isExit){
//get values from enum by string array
Printer.printMenu(getMenuListFromEnum(MembershipType.class));

isExit = handleChoice(Validator.getMenuNumber(new String[]{}));
}
}

@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){
Printer.printMenu(getMenuListFromEnum(UpdateCustomerFunction.class));
//get menu number from user until valid menu number
isExit = handleChoice(Validator.getMenuNumber(getMenuListFromEnum(UpdateCustomerFunction.class)));
}
}
return true;
}

@Override
default int getCurrentMenuNumber(){
return MainMenuFunction.CUSTOMER_MANAGEMENT.getMenuNumber();
}
}
Loading