재밌고 어려운 IT를 이해해보자~!

MVC Pattern Self Practice 본문

교육전 개인공부

MVC Pattern Self Practice

언제나즐거운IT 2023. 12. 18. 03:26

뭔가 알 것 같으면서도 백지에서 작성하려고하니 너무어려워서 연습이 많이 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