자바를 이용하여 가입(사용자정보 저장), 상품 조회, 장바구니 담기, 구매하기(구매목록 저장), 구매내역 조회 를 할 수 있는 어플리케이션을 만든다.
Store
클래스: 키보드 입력을 통해 사용자로부터 정보를 받아 다른 클래스에 제공, 데이터베이스로부터 정보를 받아 화면에 출력User, Product, CartItem, OrderItem
클래스: 각 데이터에 필요한 속성들(필드)을 정의한다. 예를 들어 Product의 필드로는 상품명, 가격 등이 있다. ...Repository
클래스는 b에 나열한 각 타입의 객체들을 데이터베이스로서 저장하고, 그와 관련된 메소드를 통해 기능을 지원하도록 한다.가입하기
-Store클래스에서 사용자명을 입력받는다.
-Stor클래스에서 사용자명을 필드 name에 저장하는 User 객체를 생성한다.
-생성된 사용자의 포인트 초기값은 10점이다.
-생성된 User정보를 UserRepository에 전달하여 db에 저장한다. 이 때 UserRepository의 saveUser 메소드를 이용한다.
상품조회
-해당 애플리케이션에서 상품정보의 모음(데이터베이스)은 ProductRepository에서 정의한 Product 객체의 배열이다.
-ProductRepository 객체가 생성될 때 데이터베이스 내 상품목록이 자동으로 저장되도록, 생성자메소드를 작성한다.
-ProductRepository에 db를 반환하는 메소드를 정의한다.
-Store 클래스에서 db를 받아서 이를 for문으로 모두 출력한다.
장바구니 담기
-Store클래스에서 사용자명을 입력받는다.
-Store클래스에서 상품명을 입력받는다.
-Product db에서 동일한 상품명의 Product 객체를 찾는다. 이는 ProductRepository의 메소드를 호출하여 product객체로 반환하는 방식이다.
-입력받은 사용자명, 찾은 product의 상품명, 상품가격을 인자값으로 하는 cartrItem 객체를 생성한다.
-속성들이 저장된 CartItem 객체를 CartItem db에 저장시킨다.
구매하기(구매목록 저장)
-Store클래스에서 사용자명을 입력받는다.
-Product db에서 동일한 상품명의 Product 객체를 찾는다. 이는 ProductRepository의 메소드를 호출하여 product객체로 반환하는 방식이다.
-Store클래스에서 수량을 입력받는다.
-입력받은 사용자명, 찾은 product의 상품명, 상품가격, 주문량을 인자값으로 하는 OrderItem 객체를 생성한다.
-생성된 OrderItem 객체를 OrderItem db에 저장시킨다.
-User db에 동명의 사용자가 있을 경우 해당 user 객체에 포인트를 적립시킨다. 등록된 사용자가 없을 경우 안내메시지를 띄운다.
장바구니 조회
-Store클래스에서 조회할 사용자명을 입력받는다.
-Store클래스에서 CartItemRepository에 있는, CartItem db에서 동일한 사용자명의 구매정보를 반환하는 메소드를 호출한다.
-이때, 해당 메소드는 찾는 구매정보가 여러 개 있을 경우 모두 반환할 수 있도록 한다. 즉 검색 결과 또한 배열 객체로 반환된다.
-Store클래스에서 검색결과를 for문으로 모두 출력한다.
구매내역 조회
5번과 같은 방식으로, OrderItemRepository를 이용한다.
package app1;
public class Store {
public static void main(String[] args) {
KeyboardReader reader = new KeyboardReader();
ProductRepository productRepo = new ProductRepository();
UserRepository userRepo = new UserRepository();
CartItemRepository cartItemRepo = new CartItemRepository();
OrderItemRepository orderItemRepo = new OrderItemRepository();
while (true) {
System.out.println("\n\n");
System.out.println("--------------------------------------------------------------");
System.out.println("1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료");
System.out.print("메뉴를 선택하세요: ");
int menuNo = reader.readInt();
if (menuNo == 1) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<사용자등록>>");
System.out.print("이름을 입력하세요: ");
String username = reader.readString();
User user = new User(username);
userRepo.saveUser(user);
System.out.println();
System.out.println("["+ user.name + "]님 사용자등록되었습니다.");
} else if (menuNo == 2) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<상품조회>>");
System.out.println();
System.out.println("상품명\t제조사\t가격\t재고량\t판매여부\t");
Product[] products = productRepo.getAllProducts();
for(Product product: products) {
System.out.print(product.name + "\t");
System.out.print(product.maker + "\t");
System.out.print(product.price + "\t");
System.out.print(product.stock + "\t");
System.out.println(product.onSell);
}
} else if (menuNo == 3) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<장바구니 담기>>");
System.out.println();
System.out.print("사용자명을 입력하세요: ");
String username = reader.readString();
System.out.print("장바구니에 담을 상품명을 입력하세요: ");
String productName = reader.readString();
Product productForCart = productRepo.getProductByName(productName);
if (productForCart == null) {
System.out.println("잘못된 상품명입니다.");
break;
}
CartItem item = new CartItem(username, productForCart.name, productForCart.price);
cartItemRepo.saveCartItem(item);
System.out.println("장바구니에 상품이 추가되었습니다.");
} else if (menuNo == 4) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<구매하기>>");
System.out.println();
System.out.print("사용자명을 입력하세요: ");
String username = reader.readString();
System.out.print("구매할 상품명을 입력하세요: ");
String productName = reader.readString();
Product productForOrder = productRepo.getProductByName(productName);
if (productForOrder == null) {
System.out.println("잘못된 상품명입니다.");
break;
}
System.out.print("구매 수량을 입력하세요: ");
int productQuantity = reader.readInt();
OrderItem item = new OrderItem(username, productForOrder.name, productForOrder.price, productQuantity);
orderItemRepo.saveOrderItem(item);
System.out.println();
System.out.println("상품 구매가 완료되었습니다.");
User orderUser = userRepo.getUserByName(username);
if (orderUser == null) {
System.out.println("비회원 구매로 포인트가 적립되지 않았습니다.");
} else {
orderUser.point += (int)(item.orderPrice * 0.001);
System.out.println("현재 적립포인트는 [" + orderUser.point + "] 점입니다.");
}
} else if (menuNo == 5) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<장바구니조회>>");
System.out.println();
System.out.print("사용자명을 입력하세요: ");
String username = reader.readString();
System.out.println();
System.out.println("상품명\t가격");
CartItem[] cartItems = cartItemRepo.getCartItemsByUsername(username);
for (CartItem item : cartItems) {
if (item == null) {
break;
}
System.out.print(item.name + "\t");
System.out.println(item.price);
}
if (cartItems[0] == null) {
System.out.println("등록된 장바구니 내역이 상품이 없습니다.");
}
} else if (menuNo == 6) {
System.out.println("--------------------------------------------------------------");
System.out.println("<<주문내역조회>>");
System.out.println();
System.out.print("사용자명을 입력하세요: ");
String username = reader.readString();
System.out.println();
System.out.println("상품명\t가격\t구매수량\t총구매금액");
OrderItem[] orderItems = orderItemRepo.getOrderItemsByUsername(username);
for (OrderItem item : orderItems) {
if (item == null) {
break;
}
System.out.print(item.name + "\t");
System.out.print(item.price+ "\t");
System.out.print(item.quantity+ "\t");
System.out.println(item.orderPrice+ "\t");
}
if (orderItems[0] == null) {
System.out.println("등록된 주문 내역이 없습니다.");
}
} else if (menuNo == -1) {
System.out.println("[프로그램을 종료합니다.]");
break;
} else {
System.out.print("[경고] 잘못된 번호입니다. 다시 입력하세요.");
}
}
}
}
package app1;
public class OrderItemRepository {
OrderItem[] db = new OrderItem[20];
int savePosition = 0;
// OrderItem객체를 전달받아서 저장하는 기능
void saveOrderItem(OrderItem item) {
db[savePosition] = item;
savePosition ++;
}
// 사용자이름을 전달받아서 그 사용자가 등록한 OrderItem을 반환하는 기능
OrderItem[] getOrderItemsByUsername(String nameforSearch) {
OrderItem[] result = new OrderItem[10];
int resultPosition = 0;
for (OrderItem item : db) {
if (item == null) {
break;
}
if (item.username.equals(nameforSearch)) {
result[resultPosition] = item;
resultPosition++;
}
}
return result;
}
}
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: 2
-----------------------------------------------------------------
<<상품조회>>
상품명 제조사 가격 재고량 판매여부
볼펜 흑 모나미 1000 10 true
볼펜 빨 모나미 1000 10 true
볼펜 파 모나미 1000 10 true
볼펜 초 모나미 1000 10 true
볼펜 노 모나미 1000 10 true
볼펜 3색 모나미 3000 10 true
컴퓨터펜 모나미 800 10 true
연필 모나미 4000 10 true
샤프 모나미 1500 10 true
지우개 모나미 500 10 true
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: 1
-----------------------------------------------------------------
<<사용자등록>>
이름을 입력하세요: 김철수
[김철수]님 사용자등록되었습니다.
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: 4
-----------------------------------------------------------------
<<구매하기>>
사용자명을 입력하세요: 김철수
구매할 상품명을 입력하세요: 연필
구매 수량을 입력하세요: 10
상품 구매가 완료되었습니다.
현재 적립포인트는 [50] 점입니다.
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: 4
-----------------------------------------------------------------
<<구매하기>>
사용자명을 입력하세요: 김철수
구매할 상품명을 입력하세요: 샤프
구매 수량을 입력하세요: 1
상품 구매가 완료되었습니다.
현재 적립포인트는 [51] 점입니다.
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: 6
-----------------------------------------------------------------
<<주문내역조회>>
사용자명을 입력하세요: 김철수
상품명 가격 구매수량 총구매금액
연필 4000 10 40000
샤프 1500 1 1500
-----------------------------------------------------------------
1.사용자등록 2.상품조회 3.장바구니담기 4.구매하기 5.장바구니조회 6.구매내역조회 -1.종료
메뉴를 선택하세요: -1
[프로그램을 종료합니다.]