재밌고 어려운 IT를 이해해보자~!
MVC Pattern Self Practice 본문
뭔가 알 것 같으면서도 백지에서 작성하려고하니 너무어려워서 연습이 많이 MVC패턴 연습이 많이 필요하다고 느껴 강사님께서 주신 틀로 미리 한번 연습을 해보았다!
틀을 완전 잘 짜주셔서 연습하기 편했고 한번에 정답을 봐버리면 그틀에서 못벗어 나는 편인데 미리 짜보면 더 좋은방법이 있다는 것을 알 수 있어서 좋다. 뭔가 생각이 유연해지는 기분이다.
강의를 들으며 부족한 점을 찾아봐야겠으며...아쉬운점은 유효성검사, 예외처리를 직접 한건 하나도없고 유저 등급활용을 못했다. 틀을 안짜주셨으면 오늘 잠은 못잤다. ~_~
ALL VIEWS
package view;
import java.util.Scanner;
public abstract class VIEW {
protected Scanner sc;
public VIEW() {
sc=new Scanner(System.in);
}
}
//////////////////////////////////////
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. 상품목록전체출력");
}
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 void printTrue() {
System.out.println("성공!");
}
public void printFalse() {
System.out.println("실패...");
}
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 printDatas(ArrayList<ProductDTO> datas) {
if(datas==null || datas.size()<=0) {
System.out.println("출력할 데이터가 없습니다!");
}
for(ProductDTO data:datas) {
System.out.println(data);
}
}
public void printData(ProductDTO data) {
if(data==null || data.getPid()==0) {
System.out.println("출력할 데이터가 없습니다!");
}
System.out.println(data);
}
}
//////////////////////////////////////
package view;
public class UserVIEW extends VIEW {
public void printMenu() {
System.out.println("2. 가격검색출력");
System.out.println("3. 상품선택");
System.out.println("4. 장바구니에 저장된 상품 구매");
}
}
//////////////////////////////////////
package view;
public class AdminVIEW extends VIEW {
public void printMenu() {
System.out.println("5. 재고추가");
}
}
//////////////////////////////////////
package view;
import model.MemberDTO;
public class LogoutVIEW extends VIEW {
public void printMenu() {
System.out.println("6. 회원가입");
System.out.println("7. 로그인");
}
public String inputIdnPw() {
System.out.println("ID & PW 입력 >>");
String idNPw = sc.next();
return idNPw;
}
public String inputNamenGrade() {
System.out.println("이름 & 등급 입력 >>");
String nameNGrade = sc.next();
return nameNGrade;
}
public void goodBye(MemberDTO data) {
System.out.println(data.getName()+"님, 잘 가세요 :D");
}
}
//////////////////////////////////////
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");
}
}
ProductDTO
package model;
public class ProductDTO {
private int pid;
private String name;
private int price;
private int cnt;
private int minPrice;
private int maxPrice;
private String searchCondition;
public String getSearchCondition() {
return searchCondition;
}
public void setSearchCondition(String searchCondition) {
this.searchCondition = searchCondition;
}
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 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;
}
@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() {
pdatas = new ArrayList<ProductDTO>();
ProductDTO sample01 = new ProductDTO();
sample01.setPid(1001);
sample01.setName("콜라");
sample01.setPrice(1000);
sample01.setCnt(5);
pdatas.add(sample01);
ProductDTO sample02 = new ProductDTO();
sample02.setPid(1002);
sample02.setName("사이다");
sample02.setPrice(1200);
sample02.setCnt(4);
pdatas.add(sample02);
ProductDTO sample03 = new ProductDTO();
sample03.setPid(1003);
sample03.setName("웰치스");
sample03.setPrice(1500);
sample03.setCnt(6);
pdatas.add(sample03);
}
public ArrayList<ProductDTO> selectAll(ProductDTO pDTO) {
if (pDTO.getSearchCondition() == null) {
return this.pdatas;
}
else if (pDTO.getSearchCondition().equals("가격검색")) {
int i;
int min = -1;
ArrayList<ProductDTO> datas = new ArrayList<ProductDTO>();
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPrice() >= pDTO.getMinPrice()) {
min = i;
break;
}
}
for (i = 0; i < this.pdatas.size(); i++) {
if (this.pdatas.get(i).getPrice() > pDTO.getMaxPrice()) {
break;
}
}
for (int a = min; a < i; a++) {
datas.add(this.pdatas.get(a));
}
// 상품목록전체출력
// 가격검색출력
return datas;
}
return null;
}
public ProductDTO selectOne(ProductDTO pDTO) {
boolean flag = false;
int i;
for (i = 0; i < pdatas.size(); i++) {
if (pdatas.get(i).getPid() == pDTO.getPid()) {
flag = true;
break;
}
}
if (!flag) {
return null;
}
return this.pdatas.get(i);
// 상품선택
}
private boolean insert(ProductDTO pDTO) {
return false;
}
public boolean update(ProductDTO pDTO) {
// 구매
// 재고추가
if (pDTO.getSearchCondition().equals("장바구니")) {
for (int i = 0; i < pdatas.size(); i++) {
if (pdatas.get(i).getPid() == pDTO.getPid()) {
pdatas.get(i).setCnt(pdatas.get(i).getCnt() - 1);
}
}
} else if (pDTO.getSearchCondition().equals("재고추가")) {
for (int i = 0; i < pdatas.size(); i++) {
if (pdatas.get(i).getPid() == pDTO.getPid()) {
pdatas.get(i).setCnt(pdatas.get(i).getCnt() + pDTO.getCnt());
}
}
}
else {
return false;
}
return true;
}
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 MemberDAO {
private ArrayList<MemberDTO> mdatas;
public MemberDAO() {
mdatas = new ArrayList<MemberDTO>();
}
// ※ 사용하지않는 DAO의 CRUD(비즈니스 메서드,핵심 관심,핵심 로직)는
// private으로 은닉했습니다.
private ArrayList<MemberDTO> selectAll(MemberDTO mDTO) {
return mdatas;
}
public MemberDTO selectOne(MemberDTO mDTO) {
// 로그인
// ID 중복 검사
if (mDTO.getSearchCondition().equals("중복검사")) {
boolean flag = false;
int i;
for (i = 0; i < mdatas.size(); i++) {
if (mdatas.get(i).getMid().equals(mDTO.getMid())) {
flag = true;
break;
}
}
if (!flag) {
return null;
}
MemberDTO data = new MemberDTO();
data.setMid(this.mdatas.get(i).getMid());
data.setMpw(this.mdatas.get(i).getMpw());
data.setName(this.mdatas.get(i).getName());
data.setGrade(this.mdatas.get(i).getGrade());
return data;
} else if (mDTO.getSearchCondition().equals("로그인")) {
boolean flag = false;
int i;
for (i = 0; i < mdatas.size(); i++) {
if (mdatas.get(i).getMid().equals(mDTO.getMid())) {
if (mdatas.get(i).getMpw().equals(mDTO.getMpw())) {
flag = true;
break;
}
}
}
if (!flag) {
return null;
}
MemberDTO data = new MemberDTO();
data.setMid(this.mdatas.get(i).getMid());
data.setMpw(this.mdatas.get(i).getMpw());
data.setName(this.mdatas.get(i).getName());
data.setGrade(this.mdatas.get(i).getGrade());
return data;
}
return null;
}
public boolean insert(MemberDTO mDTO) {
// 회원가입
this.mdatas.add(mDTO);
return false;
}
public boolean update(MemberDTO mDTO) {
// 비밀번호변경
boolean flag = false;
for (int i = 0; i < mdatas.size(); i++) {
if (mdatas.get(i).getMid().equals(mDTO.getMid())) {
mdatas.get(i).setMpw(mDTO.getMpw());
flag = true;
break;
}
}
if (!flag) {
return false;
}
return true;
}
public boolean delete(MemberDTO mDTO) {
// 회원탈퇴
boolean flag = false;
int i;
for (i = 0; i < mdatas.size(); i++) {
if (mdatas.get(i).getMid().equals(mDTO.getMid())) {
flag = true;
break;
}
}
mdatas.remove(i);
if (!flag) {
return false;
}
return true;
}
}
CTRL
package ctrl;
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 ProductDTO pDTO;
private ArrayList<ProductDTO> pDTOarr;
private MemberDTO presentUser;
public CTRL() {
mDAO = new MemberDAO();
pDAO = new ProductDAO();
adminVIEW = new AdminVIEW();
userVIEW = new UserVIEW();
commonVIEW = new CommonVIEW();
loginVIEW = new LoginVIEW();
logoutVIEW = new LogoutVIEW();
pDTO = new ProductDTO();
pDTOarr = new ArrayList<ProductDTO>();
presentUser = null;
}
public void start() {
while (true) {
commonVIEW.printMenu();
userVIEW.printMenu();
adminVIEW.printMenu();
logoutVIEW.printMenu();
loginVIEW.printMenu();
int action = commonVIEW.inputAction();
// ※ 모든 action 수행은 자격이 있다고 가정하고 하겠습니다.
// ※ 즉, 별도의 인증 작업을 생략하겠습니다.
if (action == 0) {
break;
} else if (action == 1) {
// 모델아, 전체목록주라!
// 받은것들 뷰에서 출력
commonVIEW.printDatas(pDAO.selectAll(new ProductDTO()));
} else if (action == 2) {
ArrayList<ProductDTO> datas = new ArrayList<ProductDTO>();
ProductDTO pDTO = new ProductDTO();
pDTO.setSearchCondition("가격검색");
pDTO.setMinPrice(commonVIEW.inputPrice());
pDTO.setMaxPrice(commonVIEW.inputPrice());
datas = pDAO.selectAll(pDTO);
commonVIEW.printDatas(datas);
// ※ 최저 → 최고 가격 순서로 입력을 잘 했다고 가정하고 하겠습니다.
// 최저가격입력
// 최고가격입력
// 모델아, 가격검색목록주라!
// 받은것들 뷰에서 출력
/*
* 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(최고가격);
* commonVIEW.printDatas(pDAO.selectAll(pDTO));
*/
} else if (action == 3) {
ProductDTO pDTO = new ProductDTO();
int num = commonVIEW.inputPid();
pDTO.setPid(num);
this.pDTOarr.add(pDAO.selectOne(pDTO));
} else if (action == 4) {
ProductDTO pDTO = new ProductDTO();
pDTO.setSearchCondition("장바구니");
for (int i = 0; i < this.pDTOarr.size(); i++) {
pDTO.setPid(pDTOarr.get(i).getPid());
pDAO.update(pDTO);
}
pDTOarr.clear();
} else if (action == 5) {
ProductDTO pDTO = new ProductDTO();
pDTO.setSearchCondition("재고추가");
pDTO.setPid(commonVIEW.inputPid());
pDTO.setCnt(commonVIEW.inputCnt());
pDAO.update(pDTO);
} else if (action == 6) {
if (presentUser != null) {
continue;
}
MemberDTO mDTO = new MemberDTO();
mDTO.setSearchCondition("중복검사");
String mid;
while (true) {
mid = logoutVIEW.inputIdnPw();
mDTO.setMid(mid);
mDTO = mDAO.selectOne(mDTO);
if (mDTO == null) {
break;
}
commonVIEW.printFalse();
}
mDTO = new MemberDTO();
mDTO.setMid(mid);
mDTO.setMpw(logoutVIEW.inputIdnPw());
mDTO.setName(logoutVIEW.inputNamenGrade());
mDTO.setGrade(logoutVIEW.inputNamenGrade());
mDAO.insert(mDTO);
commonVIEW.printTrue();
} else if (action == 7) {
if (presentUser != null) {
continue;
}
MemberDTO mDTO = new MemberDTO();
mDTO.setMid(logoutVIEW.inputIdnPw());
mDTO.setMpw(logoutVIEW.inputIdnPw());
mDTO.setSearchCondition("로그인");
mDTO = mDAO.selectOne(mDTO);
if (mDTO == null) {
commonVIEW.printFalse();
} else {
presentUser = mDTO;
commonVIEW.printTrue();
loginVIEW.hello(presentUser);
}
} else if (action == 8) {
logoutVIEW.goodBye(presentUser);
presentUser = null;
} else if (action == 9) {
if (presentUser == null) {
continue;
}
MemberDTO mDTO = new MemberDTO();
mDTO.setMid(presentUser.getMid());
mDTO.setMpw(logoutVIEW.inputIdnPw());
mDTO.setSearchCondition("로그인");
mDTO = mDAO.selectOne(mDTO);
if (mDTO == null) {
commonVIEW.printFalse();
} else {
mDTO.setMpw(logoutVIEW.inputIdnPw());
mDAO.update(mDTO);
commonVIEW.printTrue();
presentUser = null;
}
} else if (action == 10) {
if (presentUser == null) {
continue;
}
mDAO.delete(presentUser);
presentUser = null;
commonVIEW.printTrue();
}
}
}
}
'교육전 개인공부' 카테고리의 다른 글
문자 API [TEAM PROJECT] (0) | 2024.02.20 |
---|---|
CSS, HTML (2) | 2023.12.28 |
리스트로 수정해보는 로또 (1) | 2023.10.29 |
파일 입출력 (0) | 2023.10.28 |
쓰레드 (0) | 2023.10.26 |
Comments