diff --git a/BookCart/src/BookMain.java b/BookCart/src/BookMain.java index 11d63ba..475a5e3 100644 --- a/BookCart/src/BookMain.java +++ b/BookCart/src/BookMain.java @@ -4,7 +4,7 @@ import service.BookService; import service.UserService; import vo.CartElement; -import vo.User; +import entity.User; public class BookMain { static Scanner sc = new Scanner(System.in); @@ -14,15 +14,7 @@ public static void main(String[] args) { BookService bookService = new BookService(); AdminService adminService = new AdminService(); - //고객 정보 입력 - System.out.print("당신의 이름을 입력하세요 : "); - String name = sc.nextLine(); - System.out.print("연락처를 입력하세요 : "); - String phoneNumber = sc.nextLine(); - - //customer1 고객 객체 생성 & 기입 - User user1 = new User(name, phoneNumber); - userService.join(user1); + String user1 = userService.join(); // 실행 문구 printWelcome(); @@ -37,18 +29,12 @@ public static void main(String[] args) { case 1 -> //고객 정보 확인하기 userService.menuGuestInfo(user1); case 2 -> //장바구니 상품 목록 보기 - { - List list1 = bookService.getUserCart(user1.getId()); - for (CartElement cartElement : list1) { - System.out.println(cartElement); - } - - } + bookService.getUserCart(user1); case 3 -> // 장바구니 항목 비우기 - bookService.clearAll(user1.getId()); + bookService.clearAll(user1); case 4 -> { //바구니에 항목 추가하기 bookService.getAllBooks(); - bookService.addBook(user1.getId()); + bookService.addBook(user1); } case 5 -> System.out.println("장바구니 수량 줄이기"); case 6 -> System.out.println("장바구니 항목 삭제하기"); diff --git a/BookCart/src/vo/Admin.java b/BookCart/src/entity/Admin.java similarity index 55% rename from BookCart/src/vo/Admin.java rename to BookCart/src/entity/Admin.java index c1887e5..584fc20 100644 --- a/BookCart/src/vo/Admin.java +++ b/BookCart/src/entity/Admin.java @@ -1,10 +1,11 @@ -package vo; +package entity; public class Admin extends Person{ private String id = "Admin"; private String password = "Admin1234"; - public Admin(String name, String phoneNumber) { - super(name, phoneNumber); + + public Admin(Builder builder) { + super(builder); } } diff --git a/BookCart/src/vo/Book.java b/BookCart/src/entity/Book.java similarity index 98% rename from BookCart/src/vo/Book.java rename to BookCart/src/entity/Book.java index 2200eca..98d76b9 100644 --- a/BookCart/src/vo/Book.java +++ b/BookCart/src/entity/Book.java @@ -1,4 +1,4 @@ -package vo; +package entity; public class Book { private String bookId; diff --git a/BookCart/src/entity/Person.java b/BookCart/src/entity/Person.java new file mode 100644 index 0000000..84c5eb7 --- /dev/null +++ b/BookCart/src/entity/Person.java @@ -0,0 +1,54 @@ +package entity; + +public class Person { + private final String id; + private final String password; + private final String name; + private final String phoneNumber; + private final String address; + + public Person(Builder builder) { + this.id = builder.id; + this.password = builder.password; + this.name = builder.name; + this.phoneNumber = builder.phoneNumber; + this.address = builder.address; + } + + public static class Builder { + private String id; + private String password; + private final String name; + private final String phoneNumber; + + private String address; + + public Builder(String id, String password, String name, String phoneNumber) { + this.id = id; + this.password = password; + this.name = name; + this.phoneNumber = phoneNumber; + } + + public Builder address(String val) { + address=val; + return this; + } + + public Person build() { + return new Person(this); + } + } + + public String getId() { + return id; + } + public String getName() { + return name; + } + public String getPhoneNumber() { + return phoneNumber; + } + public String getPassword() { return password; } + public String getAddress() { return address; } +} diff --git a/BookCart/src/entity/User.java b/BookCart/src/entity/User.java new file mode 100644 index 0000000..656304b --- /dev/null +++ b/BookCart/src/entity/User.java @@ -0,0 +1,8 @@ +package entity; + +public class User extends Person { + + public User(Builder builder) { + super(builder); + } +} diff --git a/BookCart/src/mapper/BookMapper.java b/BookCart/src/mapper/BookMapper.java index c00b492..85f5ee5 100644 --- a/BookCart/src/mapper/BookMapper.java +++ b/BookCart/src/mapper/BookMapper.java @@ -1,63 +1,24 @@ package mapper; -import java.util.ArrayList; -import java.util.HashMap; +import entity.Book; +import vo.CartElement; + import java.util.List; import java.util.Map; -import vo.Book; -import vo.CartElement; -public class BookMapper { - private Map books = new HashMap<>(); - private Map> cart = new HashMap<>(); - - public BookMapper() { - books.put("ISBN1234", new Book("ISBN1234", "쉽게 배우는 JSP 웹 프로그래밍", 27000, "송미영", "단계별로 쇼핑몰을 구현하며 배우는 JSP 웹 프로그래밍", "IT전문서", "2018/10/08")); - books.put("ISBN1235", new Book("ISBN1235", "안드로이드 프로그래밍", 33000, "우재남", "실습 단계별 명쾌한 멘토링!", "IT전문서", "2022/01/22")); - books.put("ISBN1236", new Book("ISBN1236", "스크래치", 22000, "고광일", "컴퓨팅 사고력을 키우는 블록 코딩", "컴퓨터 입문", "2019/06/10")); - } - - // 장바구니에 도서 담기 - public void save(String userId, String bookId) { - List userCart = cart.get(userId); - boolean flag = false; - - if (userCart == null) { - userCart = new ArrayList<>(); - cart.put(userId, userCart); - } - for (int i = 0; i < userCart.size(); i++) { - if(userCart.get(i).getBook().getBookId().equals(bookId)) - { - flag = true; - cart.get(userId).get(i).plusAmount(); - break; - } - } - if(flag == false) - { - cart.get(userId).add(new CartElement(books.get(bookId))); - } - } - - // 모든 도서 조회 - public List findAll() { - return new ArrayList<>(books.values()); - } - - // bookId로 Book 객체 찾아서 반환 - public Book findByBookId(String bookId) { - return books.get(bookId); - } - - // userId로 User 장바구니 조회 - public List findCartByUserId(String userId) { - return cart.get(userId); - } - - public void clear(String userId) - { - List userCart = cart.get(userId); - userCart.clear(); - } +public interface BookMapper { + + // C + void save(String userId, CartElement element); + + // R + List findAll(); + Book findByBookId(String bookId); + Map findCartByUserId(String userId); + + // U + + // D + void clear(String userId); + } diff --git a/BookCart/src/mapper/BookMapperImpl.java b/BookCart/src/mapper/BookMapperImpl.java new file mode 100644 index 0000000..c32d955 --- /dev/null +++ b/BookCart/src/mapper/BookMapperImpl.java @@ -0,0 +1,50 @@ +package mapper; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import entity.Book; +import vo.CartElement; + +public class BookMapperImpl implements BookMapper{ + private Map books = new HashMap<>(); + private static final Map> cart = new HashMap<>(); + + public BookMapperImpl() { + books.put("ISBN1234", new Book("ISBN1234", "쉽게 배우는 JSP 웹 프로그래밍", 27000, "송미영", "단계별로 쇼핑몰을 구현하며 배우는 JSP 웹 프로그래밍", "IT전문서", "2018/10/08")); + books.put("ISBN1235", new Book("ISBN1235", "안드로이드 프로그래밍", 33000, "우재남", "실습 단계별 명쾌한 멘토링!", "IT전문서", "2022/01/22")); + books.put("ISBN1236", new Book("ISBN1236", "스크래치", 22000, "고광일", "컴퓨팅 사고력을 키우는 블록 코딩", "컴퓨터 입문", "2019/06/10")); + } + + // 장바구니에 도서 담기 + public void save(String userId, CartElement element) { + Map userCart = cart.get(userId); + userCart.put(element.getBookId(), element.getAmount()); + } + + // 모든 도서 조회 + public List findAll() { + return new ArrayList<>(books.values()); + } + + // bookId로 Book 객체 찾아서 반환 + public Book findByBookId(String bookId) { + return books.get(bookId); + } + + // userId로 User 장바구니 조회 + public Map findCartByUserId(String userId) { + return cart.get(userId); + } + + // 장바구니 비우기 + public void clear(String userId) { + cart.get(userId).clear(); + } + + public void insertCart(String userId) { + Map newCart = new HashMap<>(); + cart.put(userId, newCart); + } +} diff --git a/BookCart/src/mapper/PersonMapper.java b/BookCart/src/mapper/PersonMapper.java index ef716fb..7834b35 100644 --- a/BookCart/src/mapper/PersonMapper.java +++ b/BookCart/src/mapper/PersonMapper.java @@ -1,19 +1,8 @@ package mapper; -import java.util.HashMap; -import java.util.Map; -import vo.Person; +import entity.Person; -public class PersonMapper { - private Map store = new HashMap<>(); - - // 회원가입 - public void save(Person person) { - store.put(person.getId(), person); - } - - // 사용자 조회 - public Person findById(String id) { - return store.get(id); - } +public interface PersonMapper { + void save(Person person); + Person findById(String id); } diff --git a/BookCart/src/mapper/PersonMapperImpl.java b/BookCart/src/mapper/PersonMapperImpl.java new file mode 100644 index 0000000..1e80e40 --- /dev/null +++ b/BookCart/src/mapper/PersonMapperImpl.java @@ -0,0 +1,19 @@ +package mapper; + +import java.util.HashMap; +import java.util.Map; +import entity.Person; + +public class PersonMapperImpl implements PersonMapper{ + private final Map store = new HashMap<>(); + + // 회원가입 + public void save(Person person) { + store.put(person.getId(), person); + } + + // 사용자 조회 + public Person findById(String id) { + return store.get(id); + } +} diff --git a/BookCart/src/service/AdminService.java b/BookCart/src/service/AdminService.java index 6246ff1..d7fd39e 100644 --- a/BookCart/src/service/AdminService.java +++ b/BookCart/src/service/AdminService.java @@ -1,7 +1,8 @@ package service; import java.util.Scanner; -import vo.Admin; +import entity.Admin; +import entity.Person; public class AdminService{ @@ -15,7 +16,7 @@ public void menuAdminLogin() { System.out.print("비밀번호 : "); String adminPw = sc.next(); - Admin admin = new Admin("jang", "01012346578"); + Person admin = new Admin.Builder("Admin", "Admin1234", "jang", "01012345678").build(); if (adminId.equals(admin.getId()) && adminPw.equals(admin.getPassword())) { System.out.println("\n로그인 성공"); diff --git a/BookCart/src/service/BookService.java b/BookCart/src/service/BookService.java index cd9bec2..8a013f1 100644 --- a/BookCart/src/service/BookService.java +++ b/BookCart/src/service/BookService.java @@ -1,15 +1,15 @@ package service; -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; +import java.util.*; + import mapper.BookMapper; -import vo.Book; +import entity.Book; +import mapper.BookMapperImpl; import vo.CartElement; public class BookService { - private BookMapper bookMapper = new BookMapper(); + private BookMapperImpl bookMapper = new BookMapperImpl(); // 장바구니에 도서 추가 public void addBook(String userId) { @@ -18,8 +18,8 @@ public void addBook(String userId) { System.out.println("장바구니에 추가할 도서의 ID를 입력하세요 :"); String bookId = sc.next(); - if (!findBookById(bookId)) { - System.out.printf("%s는 도서 목록에 없습니다.\n", bookId); + if (findByBookId(bookId) == null) { + System.out.println(bookId + "는 도서 목록에 없습니다."); return; } @@ -27,16 +27,37 @@ public void addBook(String userId) { String confirm = sc.next(); if (confirm.equals("Y") || confirm.equals("y")) { - bookMapper.save(userId, bookId); + int amount = findBookInCart(userId, bookId); + CartElement element = new CartElement(bookId, amount+1); + bookMapper.save(userId, element); System.out.printf("%s 도서가 장바구니에 추가되었습니다.\n", bookId); + } else { System.out.println("장바구니 추가를 취소하였습니다."); } } - // bookId가 도서 리스트에 존재하는지 확인 - public boolean findBookById(String bookId) { - return bookMapper.findByBookId(bookId) != null; + // user의 장바구니에 특정 책이 담겨있는지 확인 + private int findBookInCart(String userId, String bookId) { + Map element = bookMapper.findCartByUserId(userId); + + if (element.containsKey(bookId)) + return element.get(bookId); + else + return 0; + } + + // book이 마켓에 존재하는지 확인 +// private void verifyBookInList(String bookId) { +// if (findByBookId(bookId) == null) { +// System.out.println(bookId + "는 도서 목록에 없습니다."); +// return; +// } +// } + + // book을 찾아서 객체 반환 + public Book findByBookId(String bookId) { + return bookMapper.findByBookId(bookId); } // 모든 도서 조회 @@ -46,21 +67,16 @@ public List getAllBooks() { } // User 장바구니 조회 - public List getUserCart(String userId) { - List bookList = bookMapper.findCartByUserId(userId); + public void getUserCart(String userId) { + Map userCart = bookMapper.findCartByUserId(userId); - if (bookList == null) { - System.out.println("장바구니가 비어있습니다."); - return new ArrayList<>(); + try { + userCart.entrySet() + .stream() + .forEach(i-> System.out.println(findByBookId(i.getKey()) + " " + i.getValue())); + } catch (NullPointerException e) { + throw new NullPointerException("장바구니가 비어있습니다."); } - - List returnBookList = new ArrayList<>(); - for (CartElement book: bookList) - { - returnBookList.add(book); - } - - return returnBookList; } public void clearAll(String userId) @@ -68,4 +84,8 @@ public void clearAll(String userId) bookMapper.clear(userId); System.out.println("장바구니를 비웠습니다."); } + + public void createUserBookCart(String userId) { + bookMapper.insertCart(userId); + } } \ No newline at end of file diff --git a/BookCart/src/service/UserService.java b/BookCart/src/service/UserService.java index 28b3af8..5b9c35a 100644 --- a/BookCart/src/service/UserService.java +++ b/BookCart/src/service/UserService.java @@ -1,21 +1,45 @@ package service; -import mapper.PersonMapper; -import vo.Person; +import entity.Person; +import mapper.PersonMapperImpl; + +import java.util.Scanner; public class UserService{ - private PersonMapper personMapper = new PersonMapper(); + private PersonMapperImpl personMapper = new PersonMapperImpl(); + private BookService bookService = new BookService(); + + static Scanner sc = new Scanner(System.in); // 회원가입 (성공시 1 반환) - public int join(Person person) { - if (checkPersonInfo(person)) { - personMapper.save(person); - return 1; + public String join() { + Person user = inputSignInForm(); + + if (checkPersonInfo(user)) { + personMapper.save(user); + bookService.createUserBookCart(user.getId()); + System.out.println("회원가입 성공"); + return user.getId(); } else { - return 0; + System.out.println("회원가입 실패"); + return null; } } + private Person inputSignInForm() { + //고객 정보 입력 + System.out.print("당신의 이름을 입력하세요 : "); + String name = sc.nextLine(); + System.out.print("연락처를 입력하세요 : "); + String phoneNumber = sc.nextLine(); + System.out.print("아이디를 입력하세요 : "); + String id = sc.nextLine(); + System.out.print("비밀번호를 입력하세요 : "); + String password = sc.nextLine(); + + return new Person.Builder(id, password, name, phoneNumber).build(); + } + // 사용자 정보 유효성 검사 public boolean checkPersonInfo(Person person) { if (personMapper.findById(person.getId()) == null) { @@ -28,8 +52,11 @@ public boolean checkPersonInfo(Person person) { } // 사용자 정보 출력 - public void menuGuestInfo(Person person) { + public void menuGuestInfo(String userId) { + Person person = personMapper.findById(userId); System.out.println("현재 고객 정보 : "); - System.out.println("이름 " + person.getName() + "연락처 " + person.getPhoneNumber()); + System.out.println("이름 " + person.getName() + + " 연락처 " + person.getPhoneNumber() + + " 아이디 " + person.getId()); } } diff --git a/BookCart/src/vo/CartElement.java b/BookCart/src/vo/CartElement.java index 1e5ee09..22ce707 100644 --- a/BookCart/src/vo/CartElement.java +++ b/BookCart/src/vo/CartElement.java @@ -1,28 +1,18 @@ package vo; public class CartElement { - private Book book; + private String bookId; private int amount; - public CartElement(Book book) { - this.book = book; - this.amount++; + public CartElement(String bookId, int amount) { + this.bookId = bookId; + this.amount = amount; } - public Book getBook() { - return book; + public String getBookId() { + return bookId; } - public int getAmount() { return amount; } - - public void plusAmount() - { - this.amount++; - } - - public String toString() { - return (getBook() + "" + getAmount() + "권"); - } } diff --git a/BookCart/src/vo/Person.java b/BookCart/src/vo/Person.java deleted file mode 100644 index a1549f3..0000000 --- a/BookCart/src/vo/Person.java +++ /dev/null @@ -1,34 +0,0 @@ -package vo; - -public class Person { - private String id; - private String password; - private String name; - private String phoneNumber; - private String address; - - public Person() {} - - public Person(String name, String phoneNumber) { - this.name = name; - this.phoneNumber = phoneNumber; - } - - public Person(String name, String phoneNumber, String address) { - this.name = name; - this.phoneNumber = phoneNumber; - this.address = address; - } - - public String getId() { - return id; - } - public String getName() { - return name; - } - public String getPhoneNumber() { - return phoneNumber; - } - public String getPassword() { return password; } - public String getAddress() { return address; } -} diff --git a/BookCart/src/vo/User.java b/BookCart/src/vo/User.java deleted file mode 100644 index 38e72ed..0000000 --- a/BookCart/src/vo/User.java +++ /dev/null @@ -1,11 +0,0 @@ -package vo; - -public class User extends Person { - public User(String name, String phoneNumber) { - super(name, phoneNumber); - } - - public User(String username, String phoneNumber, String address) { - super(username, phoneNumber, address); - } -}