JAVA/JAVA_복습문제
JAVA_MVC_#3_자판기.ver3 (DAO,DTO 2개 / VIEW 多 / 장바구니)_수정중...........................
onivv
2023. 12. 18. 17:27
CRUD
1. R 상품목록전체출력
2. R 가격검색출력
3. R 상품선택
4. U 상품구매
5. U 재고추가
6. C 회원가입
7. ? 로그인
8. ? 로그아웃
9. U 비밀번호 변경
10. D 회원탈퇴
VIEW 틀 - ★ 응집도를 높이기 위해 VIEW를 쪼갬 ★
adminVIEW
재고추가
userView
가격검색출력
상품선택
장바구니에 저장된 상품 구매
commonView
상품목록전체출력
상품번호 입력
상품번호 유효성검사
없는상품 안내
재고 입력
재고 유효성검사
성공!
실패...
번호 입력
번호 유효성검사
가격 입력
가격 유효성검사
상품리스트출력
리스트.size()<=0 : 사용자편의성
상품출력
상품없을때 안내 : 사용자편의성
loginView
로그아웃
비밀번호변경
회원탈퇴
logoutView
회원가입
로그인
ProductDTO
package model;
public class ProductDTO {
private int pid;
private String name;
private int price;
private int cnt;
// JAVA 로직에서만 사용할 멤버변수
private int minPrice;
private int maxPrice;
private String searchCondition;
private int addCnt;
public int getPid() {
return pid;
}
public void setPid(int pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public int getCnt() {
return cnt;
}
public void setCnt(int cnt) {
this.cnt = cnt;
}
public int getMinPrice() {
return minPrice;
}
public void setMinPrice(int minPrice) {
this.minPrice = minPrice;
}
public int getMaxPrice() {
return maxPrice;
}
public void setMaxPrice(int maxPrice) {
this.maxPrice = maxPrice;
}
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
public int getAddCnt() {
return addCnt;
}
public void setAddCnt(int addCnt) {
this.addCnt = addCnt;
}
@Override
public String toString() {
return "ProductDTO [pid=" + pid + ", name=" + name + ", price=" + price + ", cnt=" + cnt + "]";
}
}
ProductDAO
package model;
import java.util.ArrayList;
public class ProductDAO {
private ArrayList<ProductDTO> pdatas;
public ProductDAO() {
this.pdatas = new ArrayList<ProductDTO>();
// 재고 10개 sample
ProductDTO sample01 = new ProductDTO();
sample01.setPid(1001);
sample01.setName("치토스");
sample01.setPrice(1500);
sample01.setCnt(10);
pdatas.add(sample01);
// 재고 1개 sample
ProductDTO sample02 = new ProductDTO();
sample02.setPid(1002);
sample02.setName("홈런볼");
sample02.setPrice(2000);
sample02.setCnt(1);
pdatas.add(sample02);
// 재고 0개 sample
ProductDTO sample03 = new ProductDTO();
sample03.setPid(1003);
sample03.setName("다이제");
sample03.setPrice(2500);
sample03.setCnt(0);
pdatas.add(sample03);
}
// R - 전체출력
public ArrayList<ProductDTO> selectAll(ProductDTO pDTO) {
// [상품목록전체출력] --> 이거 없으면 nullpointException
if (pDTO.getSearchCondition() == null) {
return pdatas;
}
// [가격검색출력]
else {
ArrayList<ProductDTO> selectDatas = new ArrayList<ProductDTO>();
for (int i = 0; i < this.pdatas.size(); i++) {
// pDTO의 최대가격보다 작거나 같고, pDTO의 최소 가격보다 같거나 큰 배열의 객체만 출력
if (pDTO.getMinPrice() <= this.pdatas.get(i).getPrice()
&& this.pdatas.get(i).getPrice() <= pDTO.getMaxPrice()) {
// [1] 객체 복사본을 만들어서 배열에 넣기 --> 원본 손실 없음!
ProductDTO data = new ProductDTO();
data.setPid(this.pdatas.get(i).getPid());
data.setName(this.pdatas.get(i).getName());
data.setPrice(this.pdatas.get(i).getPrice());
data.setCnt(this.pdatas.get(i).getCnt());
selectDatas.add(data);
// [2] 원본 객체를 배열에 넣기
// selectDatas.add(this.pdatas.get(i));
}
}
return selectDatas;
}
}
// R - 1개출력
public ProductDTO selectOne(ProductDTO pDTO) {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return null;
}
return this.pdatas.get(i);
}
// C - 상품추가
// 사용 x --> private
private boolean insert(ProductDTO pDTO) {
return false;
}
// U - 구매 후 재고 차감, 재고 추가
public boolean update(ProductDTO pDTO) {
// [구매]
// selectOne기능이 포함된것이 아니라 정확하게 하고싶어서 로직 넣어주기!
if (pDTO.getSearchCondition().equals("구매")) {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
// 1개 구매 : 배열객체i의 재고 = 배열객체i의 재고 -1
// pdatas.get(i).setCnt(pdatas.get(i).getCnt() - 1);
// n개 구매 : 배열객체i의 재고 = 배열객체i의 재고 - pDTO의 재고
this.pdatas.get(i).setCnt(this.pdatas.get(i).getCnt() - pDTO.getCnt());
return true;
}
// [재고추가]
// selectOne기능이 포함된것이 아니라 정확하게 하고싶어서 로직 넣어주기!
else {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
// 배열객체i의 재고 = 배열객체i의 재고 + pDTO의 추가재고
this.pdatas.get(i).setCnt(this.pdatas.get(i).getCnt() + pDTO.getAddCnt());
return true;
}
}
// D - 상품삭제
// 사용 x --> private
private boolean delete(ProductDTO pDTO) {
return false;
}
}
MemberDTO
package model;
public class MemberDTO {
private String mid;
private String mpw;
private String name;
private String grade;
private String searchCondition;
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMpw() {
return mpw;
}
public void setMpw(String mpw) {
this.mpw = mpw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
@Override
public String toString() {
return "MemberDTO [mid=" + mid + ", mpw=" + mpw + ", name=" + name + ", grade=" + grade + "]";
}
}
MemberDAO
package model;
import java.util.ArrayList;
public class ProductDAO {
private ArrayList<ProductDTO> pdatas;
public ProductDAO() {
this.pdatas = new ArrayList<ProductDTO>();
// 재고 10개 sample
ProductDTO sample01 = new ProductDTO();
sample01.setPid(1001);
sample01.setName("치토스");
sample01.setPrice(1500);
sample01.setCnt(10);
pdatas.add(sample01);
// 재고 1개 sample
ProductDTO sample02 = new ProductDTO();
sample02.setPid(1002);
sample02.setName("홈런볼");
sample02.setPrice(2000);
sample02.setCnt(1);
pdatas.add(sample02);
// 재고 0개 sample
ProductDTO sample03 = new ProductDTO();
sample03.setPid(1003);
sample03.setName("다이제");
sample03.setPrice(2500);
sample03.setCnt(0);
pdatas.add(sample03);
}
// R - 전체출력
public ArrayList<ProductDTO> selectAll(ProductDTO pDTO) {
// [상품목록전체출력] --> 이거 없으면 nullpointException
if (pDTO.getSearchCondition() == null) {
return pdatas;
}
// [가격검색출력]
else {
ArrayList<ProductDTO> selectDatas = new ArrayList<ProductDTO>();
for (int i = 0; i < this.pdatas.size(); i++) {
// pDTO의 최대가격보다 작거나 같고, pDTO의 최소 가격보다 같거나 큰 배열의 객체만 출력
if (pDTO.getMinPrice() <= this.pdatas.get(i).getPrice()
&& this.pdatas.get(i).getPrice() <= pDTO.getMaxPrice()) {
// [1] 객체 복사본을 만들어서 배열에 넣기 --> 원본 손실 없음!
ProductDTO data = new ProductDTO();
data.setPid(this.pdatas.get(i).getPid());
data.setName(this.pdatas.get(i).getName());
data.setPrice(this.pdatas.get(i).getPrice());
data.setCnt(this.pdatas.get(i).getCnt());
selectDatas.add(data);
// [2] 원본 객체를 배열에 넣기
// selectDatas.add(this.pdatas.get(i));
}
}
return selectDatas;
}
}
// R - 1개출력
public ProductDTO selectOne(ProductDTO pDTO) {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return null;
}
return this.pdatas.get(i);
}
// C - 상품추가
// 사용 x --> private
private boolean insert(ProductDTO pDTO) {
return false;
}
// U - 구매 후 재고 차감, 재고 추가
public boolean update(ProductDTO pDTO) {
// [구매]
// selectOne기능이 포함된것이 아니라 정확하게 하고싶어서 로직 넣어주기!
if (pDTO.getSearchCondition().equals("구매")) {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
// 1개 구매 : 배열객체i의 재고 = 배열객체i의 재고 -1
// pdatas.get(i).setCnt(pdatas.get(i).getCnt() - 1);
// n개 구매 : 배열객체i의 재고 = 배열객체i의 재고 - pDTO의 재고
this.pdatas.get(i).setCnt(this.pdatas.get(i).getCnt() - pDTO.getCnt());
return true;
}
// [재고추가]
// selectOne기능이 포함된것이 아니라 정확하게 하고싶어서 로직 넣어주기!
else {
boolean flag = false;
int i;
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return false;
}
// 배열객체i의 재고 = 배열객체i의 재고 + pDTO의 추가재고
this.pdatas.get(i).setCnt(this.pdatas.get(i).getCnt() + pDTO.getAddCnt());
return true;
}
}
// D - 상품삭제
// 사용 x --> private
private boolean delete(ProductDTO pDTO) {
return false;
}
}
VIEW
- VIEW 추상클래스는 객체를 생성하려는 목표를 가지고 있지 않음!
- VIEW류의 클래스들을 정의하려는 목표를 가지고 있음!
- VIEW라면 Scanner 꼭 가지고 있어야해! --> 모~~든 VIEW는 Scanner가짐!
- protected 접근 제어자 : 나와 내 자식까지 사용가능!
- 메서드를 강제로 정의(오버라이딩 강제)하고 싶다면, "인터페이스"를 사용했겠지만
- 지금은 sc라는 '멤버변수'를 가져야한다는 것을 정의하고 싶었기에 "추상클래스"
package view;
import java.util.Scanner;
public abstract class VIEW {
protected Scanner sc;
public VIEW() {
this.sc = new Scanner(System.in);
}
}
CommonVIEW
package view;
import java.util.ArrayList;
import model.ProductDTO;
public class CommonVIEW extends VIEW {
public void printMenu() {
System.out.println("0. 프로그램종료");
System.out.println("1. 상품목록전체출력");
System.out.println("3. 상품선택");
}
public int inputPid() {
int pid;
while (true) {
System.out.print("상품번호입력 >> ");
pid = sc.nextInt();
if (1001 <= pid && pid <= 2000) {
break;
}
System.out.println("제대로 입력해주세요!");
}
return pid;
}
public void printNoData() {
System.out.println("해당 정보는 없습니다...");
}
public int inputCnt() {
int cnt;
while (true) {
System.out.print("재고입력 >> ");
cnt = sc.nextInt();
if (1 <= cnt && cnt <= 100) {
break;
}
System.out.println("제대로 입력해주세요!");
}
return cnt;
}
public int inputAction() {
int action;
while (true) {
System.out.print("번호입력 >> ");
action = sc.nextInt();
if (1 <= action && action <= 10) {
break;
}
System.out.println("제대로 입력해주세요!");
}
return action;
}
public int inputPrice() {
int price;
while (true) {
System.out.print("가격입력 >> ");
price = sc.nextInt();
if (1 <= price && price <= 1000000) {
break;
}
System.out.println("제대로 입력해주세요!");
}
return price;
}
public void printInfo() {
System.out.println("해당 메뉴는 로그인후에 이용하실수있습니다! :D");
}
public void printTrue() {
System.out.println("성공!");
}
public void printFalse() {
System.out.println("실패...");
}
public void printDatas(ArrayList<ProductDTO> datas) {
if (datas == null || datas.size() <= 0) {
System.out.println("출력할 데이터가 없습니다!");
}
for (ProductDTO data : datas) {
// 재고가 없는 상품은 없다고 출력
if (data.getCnt() <= 0) {
System.out.println(data.getPid() + "는 재고가 없습니다.");
}
System.out.println(data);
}
}
public void printData(ProductDTO data) {
if (data == null || data.getPid() == 0) {
System.out.println("출력할 데이터가 없습니다!");
}
System.out.println(data);
}
}
UserVIEW
package view;
import java.util.ArrayList;
import model.ProductDTO;
public class UserVIEW extends VIEW {
public void printMenu(int cnt) {
System.out.println("2. 가격검색출력");
if (cnt > 0) {
// 장바구니에 상품이 1개 이상일때만 보이는 메뉴
System.out.println("4. 장바구니에 저장된 상품 구매");
}
}
public void printTotalPrice(ArrayList<ProductDTO> cart) {
int total = 0;
for (ProductDTO data : cart) {
total += data.getPrice() * data.getCnt();
}
System.out.println("총 구매 금액: " + total + "원 입니다.");
}
}
AdminVIEW
package view;
import model.ProductDTO;
public class AdminVIEW extends VIEW {
public void printMenu() {
System.out.println("5. 재고추가");
}
public void printCnt(ProductDTO pDTO) {
System.out.println("[" + pDTO.getPid() + "] 의 현 재고: " + pDTO.getCnt());
}
}
LogoutVIEW
package view;
public class LogoutVIEW extends VIEW {
public void printMenu() {
System.out.println("6. 회원가입");
System.out.println("7. 로그인");
}
public String inputID() {
System.out.println("ID 입력 >> ");
String mid = sc.next();
return mid;
}
public String inputPW() {
System.out.println("PW 입력 >> ");
String mpw = sc.next();
return mpw;
}
public String inputName() {
System.out.println("이름 입력 >> ");
String name = sc.next();
return name;
}
public String inputGrade() {
// 기본등급은 USER로 설정
String result = "USER";
System.out.println("1. 사용자");
System.out.println("2. 관리자");
System.out.println("번호 입력 >> ");
int action = sc.nextInt();
if (action == 2) {
System.out.println("관리자 회원가입을 위한 비밀번호를 입력.");
int num = sc.nextInt();
if (num == 7777) {
result = "ADMIN";
}
}
return result;
}
public void printSignUpFalse() {
System.out.println("중복된 ID가 있습니다.");
}
}
LoginVIEW
package view;
import model.MemberDTO;
public class LoginVIEW extends VIEW {
public void printMenu() {
System.out.println("8. 로그아웃");
System.out.println("9. 비밀번호변경");
System.out.println("10. 회원탈퇴");
}
public void hello(MemberDTO data) {
System.out.println(data.getName() + "님, 안녕하세요! :D");
}
}
Ctrl
한글코딩
// 현재 로그아웃 상태
if 로그아웃 상태니? --> common, logout VIEW
else 로그인 상태니? --> common, login VIEW
1) admin 모드 강조하고 싶으면
2) admin 모드 바로 돌입하면
++ 기능을 성공하면 맨 처음으로 돌아감
프로그램을 종료 or 상품목록출력
if (loginINFO의 등급이 관리자면)
--> 관리자모드로 돌입
-->
3) 일반회원 로그인
가격검색, 상품선택, 구매
[3] 상품선택
if 로그인 안했다면
"해당 메뉴는 로그인후에 이용하실수있음" 출력; commonVIEW
로그인하고 다시 올수있게 유도
로그인로직 넣기 --> [모듈화] - continue가 return 으로 바뀜.
continue;
//상품번호를 입력
//selectOne으로 있는지 없는지 확인
// 상품이 ㅇ아예없을때
// 그런 데이터는 없다.
// 다시 위로가
// 상품이 있긴한데 품절이야
// 1 -> 장바구니로 들어는 가는데 구매가 안됨 (틀린게 아니라 프로그램 로직 차이!)
// 2 -> 장바구니로 안들어갈수도있음 (이거 선택해서 코딩)
재고가 없으면 장바구니에 아예 안들어감
사용자에게 얼마나 살지 입력받기
if(품절이거나) (존재하는 재고보다 <입력한 값이 클때)
continue; // 품절이면 아예 장바구니에 못들어가게
품절이 아니면
if(카트가 null이야?)
이때 처음 만들어지는거니까 이때 new 장바구니 만들기
(맨위에 선언해도 틀린건 아니지만 여기서 new하는게 경제적)
나만의 새로운 데이터 newProduct
id, 이름, 재고, 가격 set
장바구니 newProduct에 넣기
< 이건 바프처럼 같은 상품이지만 다르게 담김 >
< 장바구니에 없던 상품이라면 >
-------------------------------------------------------------
장바구닌 Ctrl가 담당. DB에 하는게 아님..!
나 이거살거야
selectOne했을때 없으면 구매 X
있을때 재고 있어야함
cart 처음 만드는거면 이때 new
객체를 넣어
--------------------------------------------------------------
if 만약에 장바구니에 없던 상품이라면
new ProductDTO
else 장바구니에 있던 상품이라면
cart의 위치를 찾았을테니..
cart.get
장바구니에 있는지 없는지 확인해주는 logic
boolean flag = false;
if(cart!=null)//.....
[1] 상품목록전체출력
selectAll로 전체목록 가져와 배열에 저장; model
받아온 것을 출력; view
[2] 가격검색출력
사용자에게 최대값, 최저값 받기; view
new 객체에 최대값, 최저값, "가격검색" 저장
selectAll로 가격검색목록 가져와 배열에 저장; model
받아온 것을 출력; view
[3] 상품선택
사용자에게 PK 받기; view
new 객체에 PK 저장
selectOne으로 배열에 일치하는 객체 가져와 저장; model
if (객체가 있고 && 재고가 있으면)
사용자에게 구매 성공 출력; view
객체의 searchCondition "구매" set
재고 update; model
[4] 장바구니에 저장된 상품 구매
전체금액 출력 userVIEW
for (cart안에 상품만큼)
돌릴때마다 객체에 "구매" set
if update????
구매 했으니 장바구니 비워주기
[5] 재고추가
사용자에게 PK 받기; view
new 객체에 PK저장
selectOne으로 배열에 일치하는 객체 가져와 저장; model
if (객체가 있으면)
사용자에게 추가할 재고 받기; view
객체에 추가할재고 저장
객체의 searchCondition "재고추가" set
재고 update; model
[6] 회원가입
// 몇번만에 중복검사 합격할지 모르니 while(true)
사용자에게 ID 받기; view
selectOne으로 ID 중복검사; model
if (객체가 없으면)
회원가입 가능!
//객체가 null인 상태로 반환됐으니까
//new 객체 선언하기
PW, 이름, 받기; view
new 객체에 저장;
회원가입 insert; model
성공 or 실패 화면 출력; view
[7] 로그인
사용자에게 ID,PW 받기; view
new 객체에 ID,PW,"로그인" 저장
selectOne으로 '로그인'검사; model
if (객체가 없으면)
로그인 실패
다시 돌아가기
객체를 사용자에 저장하고,
로그인 성공! 출력; view
[8] 로그아웃
로그인정보 비워주기
장바구니 비워주기
로그아웃성공출력
[9] 비밀번호변경
사용자에게 PW 받기; view
selectOne으로 현재 사용자의 로그인 정보와 일치하는지 확인
if (일치하는 객체가 없으면)
실패 출력
일치하는 객체가 있으면 바꿀 PW 받기
그 객체에 PW 저장 //별도의 new객체는 필요없음
update()
로그아웃 시켜주기
장바구니 비워주기
[10] 회원탈퇴
if (delete(로그인한사람)이 실패하면)
실패 출력;
다시 돌아가기
로그아웃 시켜주기
장바구니 비워주기
코드
package ctrl;
/*
로그인 사용자 정보 --> Ctrl에서 관리
장바구니 배열 --> Ctrl에서 관리
웹에서 new하는게 아니라 null로 처리
--> 장바구니 역할을하는 애들이 많아서 모두 new하지 않고 null로 처리.. 모두 new하면 느려짐
*/
import java.util.ArrayList;
import model.MemberDAO;
import model.MemberDTO;
import model.ProductDAO;
import model.ProductDTO;
import view.AdminVIEW;
import view.CommonVIEW;
import view.LoginVIEW;
import view.LogoutVIEW;
import view.UserVIEW;
public class CTRL {
private MemberDAO mDAO;
private ProductDAO pDAO;
private AdminVIEW adminVIEW;
private UserVIEW userVIEW;
private CommonVIEW commonVIEW;
private LoginVIEW loginVIEW;
private LogoutVIEW logoutVIEW;
private MemberDTO loginINFO;
private ArrayList<ProductDTO> cart;
public CTRL() {
this.mDAO = new MemberDAO();
this.pDAO = new ProductDAO();
this.adminVIEW = new AdminVIEW();
this.userVIEW = new UserVIEW();
this.commonVIEW = new CommonVIEW();
this.loginVIEW = new LoginVIEW();
this.logoutVIEW = new LogoutVIEW();
this.loginINFO = null;
this.cart = null;
}
public void start() {
while (true) {
// [공통 VIEW]
commonVIEW.printMenu(); // 공통 메뉴 출력 (0.프로그램종료, 1.상품목록전체출력, 3.상품선택)
if(loginINFO == null) { // 로그아웃 상태면
logoutVIEW.printMenu(); // 로그아웃 메뉴 출력 (6.회원가입, 7.로그인)
}
// [관리자 VIEW]
else if(loginINFO.getGrade().equals("ADMIN")) { // 로그인 정보의 등급이 관리자면
adminVIEW.printMenu(); // 관리자 메뉴 출력 (5.재고추가)
loginVIEW.printMenu(); // 로그인뷰 출력 (8.로그아웃, 9.비밀번호변경, 10,회원탈퇴)
loginVIEW.hello(loginINFO); // 안내 인사 출력
}
// [사용자 VIEW]
else {
if(cart != null) { // 장바구니가 비워있지 않으면
userVIEW.printMenu(cart.size());// 사용자 메뉴 출력 (2.가격검색, 4.장바구니 물품 구매)
}
else { // 장바구니가 비워져 있으면
userVIEW.printMenu(0); // 사용자 메뉴 출력 (2.가격검색)
}
loginVIEW.printMenu(); // 로그인뷰 출력 (8.로그아웃, 9.비밀번호변경, 10,회원탈퇴)
loginVIEW.hello(loginINFO); // 안내 인사 출력
}
// ※ 모든 action 수행은 자격이 있다고 가정.
// ※ 즉, 별도의 인증 작업을 생략. (ex_너 로그인했어? 너 관리자야? ...)
int action = commonVIEW.inputAction();
// [0. 프로그램종료]
if (action == 0) {
break;
}
// [1. 상품목록전체출력]
else if (action == 1) {
// model아, 전체목록 줘! == selectAll
// 받아온 것을 view에서 출력
commonVIEW.printDatas(pDAO.selectAll(new ProductDTO()));
/*
* 아래 풀어서 쓴것 ProductDTO pDTO = new ProductDTO(); ArrayList<ProductDTO> datas =
* pDAO.selectAll(pDTO); commonVIEW.printDatas(datas);
*/
}
// [2. 가격검색출력]
else if (action == 2) {
// ※ 최저 → 최고 가격 순서로 입력을 잘 했다고 가정하고 하겠습니다.
// 최저가격입력
// 최고가격입력
// 모델아, 가격검색목록주라! == selectAll
// 받은것들 뷰에서 출력
/*
* 한글코딩 int 최저가격=commonVIEW.inputPrice(); int 최고가격=commonVIEW.inputPrice();
* commonVIEW.printDatas(pDAO.selectAll(new ProductDTO()));
*
* int 최저가격=commonVIEW.inputPrice(); int 최고가격=commonVIEW.inputPrice();
* ProductDTO pDTO=new ProductDTO(); pDTO.setPrice(최저가격); pDTO.setPrice(최고가격);
* //최저최고를 하나의 Price에 담을 수는 없잖아..? 아래로가기
* commonVIEW.printDatas(pDAO.selectAll(pDTO));
*/
int minPrice = commonVIEW.inputPrice();
int maxPrice = commonVIEW.inputPrice();
ProductDTO pDTO = new ProductDTO();
pDTO.setMinPrice(minPrice); // searchConditoin의 역할
pDTO.setMaxPrice(maxPrice); // JAVA 로직에서만 활용되는 DTO의 멤버변수
pDTO.setSearchCondition("가격검색");
ArrayList<ProductDTO> datas = pDAO.selectAll(pDTO);
commonVIEW.printDatas(datas);
// commonVIEW.printDatas(pDAO.selectAll(pDTO));
// entity엔티티라 안불리고 DTO라 불리는 이유. 온전한 DB는 아니라서
}
// [3. 상품선택]
else if (action == 3) {
int pid = commonVIEW.inputPid();
ProductDTO data = new ProductDTO();
data.setPid(pid);
data = pDAO.selectOne(data);
if(data != null && data.getCnt() > 0) {
userVIEW.printTrue(data);
data.setSearchCondition("구매");
pDAO.update(data);
}
}
// [4. 장바구니에 저장된 상품 구매]
else if (action == 4) {
}
// [5. 재고추가]
else if (action == 5) {
int pid = commonVIEW.inputPid();
ProductDTO data = new ProductDTO();
data.setPid(pid);
data = pDAO.selectOne(data);
if(data != null) {
int addCnt = commonVIEW.inputCnt();
data.setAddCnt(addCnt);
data.setSearchCondition("재고추가");
pDAO.update(data);
adminVIEW.printTrue(data);
}
}
// [6. 회원가입]
else if (action == 6) {
MemberDTO data = new MemberDTO();
String mid;
while(true) {
mid = logoutVIEW.inputID();
data.setMid(mid);
data.setSearchCondition("ID중복검사");
data = mDAO.selectOne(data);
if(data == null) {
break;
}
logoutVIEW.printSignUpFalse();
}
String mpw = logoutVIEW.inputPW();
String name = logoutVIEW.inputName();
//new MemberDTO 선언 필수
//위에서 null일때 합격해서 객체가 null인 상태로 나오니까
MemberDTO memberDTO = new MemberDTO();
memberDTO.setMid(mid);
memberDTO.setMpw(mpw);
memberDTO.setName(name);
memberDTO.setGrade("사용자");
boolean flag = mDAO.insert(memberDTO);
if(!flag) {
commonVIEW.printFalse();
continue;
}
logoutVIEW.printSignUpTrue();
}
// [7. 로그인]
else if (action == 7) {
String mid = logoutVIEW.inputID();
String mpw = logoutVIEW.inputPW();
MemberDTO data = new MemberDTO();
data.setMid(mid);
data.setMpw(mpw);
data.setSearchCondition("로그인");
loginINFO = mDAO.selectOne(data);
if(data == null) {
logoutVIEW.printLoginFalse();
continue;
}
loginVIEW.hello(data);
}
// [8. 로그아웃]
else if (action == 8) {
loginINFO = null;
cart = null;
//매번 new하는 로직은 cart.clear(); 해도 됨.
logoutVIEW.printLogoutTrue();
}
// [9. 비밀번호변경]
else if (action == 9) {
//별도의 new가 필요없다...
}
// [10. 회원탈퇴]
else if (action == 10) {
}
}
}
}