Christmas Pikachu MVC 패턴 활용한 자판기 프로그램 ver.2
개발일지/복습

MVC 패턴 활용한 자판기 프로그램 ver.2

ZI_CO 2023. 12. 13.

클라이언트 클래스

package client;

import ctrl.Ctrl2;

public class Client {
	public static void main(String[] args) {

		// 설치
		Ctrl2 app=new Ctrl2();
		
		// 실행
		app.start();
		
	}
}

 

 

 

 

 

 

뷰 클래스

package view;

import java.util.ArrayList;
import java.util.Scanner;

import model.ProductDTO;

public class View2 {

	private Scanner sc;
	private int userMAX;
	private int adminMAX;
	public View2() {
		this.sc=new Scanner(System.in);
		this.userMAX=2;
		this.adminMAX=3;
	}

	public void printMenu() {
		System.out.println("=== 자 판 기 ===");
		System.out.println("1. 메뉴목록출력");
		System.out.println("2. 메뉴선택");
		System.out.println("0. 종료");
	}
	public int inputInteger() {
		System.out.print("번호입력 >> ");
		int integer=sc.nextInt();
		return integer;
	}
	public void printAdminMenu() {
		System.out.println("=== 관 리 자 ===");
		System.out.println("1. 메뉴추가");
		System.out.println("2. 메뉴재고변경");
		System.out.println("3. 메뉴삭제");
		System.out.println("0. 관리자모드 종료");
	}
	public int inputNum() {
		System.out.print("메뉴번호입력 >> ");
		int num=sc.nextInt();
		return num;
	}
	public void printDeleteData01() {
		System.out.println("메뉴가 삭제되었습니다!");
	}
	public void printDeleteData02() {
		System.out.println("메뉴삭제에 실패했습니다...");
	}
	public String inputName() {
		System.out.print("메뉴이름입력 >> ");
		String name=sc.next();
		return name;
	}
	public int inputPrice() {
		System.out.print("메뉴가격입력 >> ");
		int price=sc.nextInt();
		return price;
	}
	public int inputCnt() {
		System.out.print("메뉴재고입력 >> ");
		int cnt=sc.nextInt();
		return cnt;
	}
	public void printInsertData(ProductDTO data) {
		System.out.println(data.getName()+"이(가) 추가되었습니다! :D");
	}
	public void printDatas(ArrayList<ProductDTO> datas) {
		if(datas.size()<=0) {
			System.out.println("출력할 메뉴가 없습니다...");
			return;
		}
		for(ProductDTO data:datas) {
			if(data.getCnt()<=0) {
				System.out.println("재고없음!");
				continue;
			}
			System.out.println(data);
		}
	}
	public void printNoData() {
		System.out.println("해당 데이터는 없습니다...");
	}
	public void printData(ProductDTO data) {
		if(data==null) {
			System.out.println("출력할 데이터가 없습니다...");
			return;
		}
		if(data.getCnt()<=0) {
			System.out.println(data.getName()+"는(은) 재고가 없습니다...");
			return;
		}
		System.out.println(data);
		System.out.println("구매완료!");
	}
}

 

 

 

 

모델DTO 클래스

package model;

public class ProductDTO {

	private int num; // PK
	private String name;
	private int price;
	private int cnt;
	
	private String searchConditon; // JAVA 로직에서만 사용하는 변수
	
	// 웹 개발에서는,
	// 기본 생성자를 사용하는 것을 원칙으로 한다!!!!!
	//  : new할때 생성자의 인자로 넣는 값중에서,
	//    어떤 값이 정말 유효한 값인지 파악하는 시간을 줄이기위함!
	
	public String getSearchConditon() {
		return searchConditon;
	}
	public void setSearchConditon(String searchConditon) {
		this.searchConditon = searchConditon;
	}
	
	public int getNum() {
		return num;
	}
	public void setNum(int num) {
		this.num = num;
	}
	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() {
		if(this.cnt<=0) {
			return this.num+"번 상품 품절";
		}
		return "ProductDTO [num=" + num + ", name=" + name + ", price=" + price + ", cnt=" + cnt + "]";
	}
	
}

 

 

 

 

모델DAO 클래스

package model;

import java.util.ArrayList;

public class ProductDAO2 {

	private ArrayList<ProductDTO> datas; // DB

	public ProductDAO2() {
		datas = new ArrayList<ProductDTO>();

		// 샘플 데이터 추가
		ProductDTO sample01 = new ProductDTO();
		sample01.setNum(1001);
		sample01.setName("콜라");
		sample01.setPrice(1200);
		sample01.setCnt(3);
		datas.add(sample01);
		ProductDTO sample02 = new ProductDTO();
		sample02.setNum(1002);
		sample02.setName("사이다");
		sample02.setPrice(1100);
		sample02.setCnt(0);
		datas.add(sample02);
	}

	public ArrayList<ProductDTO> selectAll(ProductDTO productDTO) {
		return datas;
	}

	public ProductDTO selectOne(ProductDTO productDTO) {
		boolean flag = false;
		int i;
		for (i = 0; i < this.datas.size(); i++) {
			if (this.datas.get(i).getNum() == productDTO.getNum()) {
				flag = true;
				break;
			}
		}
		if (!flag) {
			return null;
		}
		return this.datas.get(i);
	}

	public boolean insert(ProductDTO productDTO) {
		try {
			ProductDTO data = new ProductDTO();
			data.setNum(productDTO.getNum());
			data.setName(productDTO.getName());
			data.setPrice(productDTO.getPrice());
			data.setCnt(productDTO.getCnt());
			this.datas.add(data);
		} catch (Exception e) {
			System.out.println("[로그] 알수없는 이슈발생!");
			return false;
		}
		return true;
	}

	public boolean update(ProductDTO productDTO) {
		if (productDTO.getSearchConditon().equals("구매")) {
			productDTO.setCnt(productDTO.getCnt() - 1);
		} else if (productDTO.getSearchConditon().equals("재고변경")) {
			productDTO.setCnt(productDTO.getCnt());
		} else {
			return false;
		}
		return true;
	}

	public boolean delete(ProductDTO productDTO) {
		try {
			int i;
			for (i = 0; i < this.datas.size(); i++) {
				if (this.datas.get(i).getNum() == productDTO.getNum()) {
					break;
				}
			}
			this.datas.remove(i);
		} catch (Exception e) {
			return false;
		}
		return true;
	}

}

 

 

 

 

컨트롤러 클래스

package ctrl;

import java.util.ArrayList;

import model.ProductDAO2;
import model.ProductDTO;
import view.View2;

public class Ctrl2 {

	private ProductDAO2 productDAO; // MODEL
	private View2 view;
	private int PK;
	public Ctrl2() {
		this.productDAO=new ProductDAO2();
		this.view=new View2();
		this.PK=1003;
	}

	public void start() {
		while(true) {
			view.printMenu();
			int action=view.inputInteger();
			if(action==0) {
				break;
			}
			else if(action==1234) {
				while(true) {
					view.printAdminMenu();
					action=view.inputInteger();
					if(action==0) {
						break;
					}
					else if(action==1) {
						String name=view.inputName();
						int price=view.inputPrice();
						int cnt=view.inputCnt();
						
						ProductDTO productDTO=new ProductDTO();
						productDTO.setNum(PK++);
						productDTO.setName(name);
						productDTO.setPrice(price);
						productDTO.setCnt(cnt);
						
						productDAO.insert(productDTO);
					}
					else if(action==2) {
						int num=view.inputNum();
						
						ProductDTO productDTO=new ProductDTO();
						productDTO.setNum(num);
						productDTO=productDAO.selectOne(productDTO);
						if(productDTO==null) {
							view.printNoData();
							continue;
						}
						
						int cnt=view.inputCnt();
						productDTO.setCnt(cnt);
						productDTO.setSearchConditon("재고변경");
						boolean flag=productDAO.update(productDTO);
						if(flag){
							view.printDeleteData01(); // update 성공 !
						}
						else {
							view.printDeleteData02(); // update 실패 ...
						}
					}
					else if(action==3) {
						int num=view.inputNum();
						
						ProductDTO productDTO=new ProductDTO();
						productDTO.setNum(num);
						
						productDTO=productDAO.selectOne(productDTO);
						if(productDTO == null) {
							view.printNoData();
							continue;
						}
						
						boolean flag=productDAO.delete(productDTO);
						if(flag) {
							view.printDeleteData01();
						}
						else {
							view.printDeleteData02();
						}
					}
				}
			}
			else if(action==1) {
				ProductDTO productDTO=new ProductDTO();
				ArrayList<ProductDTO> datas=productDAO.selectAll(productDTO);
				view.printDatas(datas);
			}
			else if(action==2) {
				int num=view.inputInteger();
				ProductDTO productDTO=new ProductDTO();
				productDTO.setNum(num);
				ProductDTO data=productDAO.selectOne(productDTO);
				view.printData(data);
				if(data!=null && data.getCnt()>0) { // 구매성공이라면
					data.setSearchConditon("구매");
					productDAO.update(data);
				}
			}
		}		
	}

}

 

'개발일지 > 복습' 카테고리의 다른 글

MVC 패턴 활용한 미니 쇼핑몰 프로그램  (0) 2023.12.18
자바 기본 정리  (0) 2023.12.17
MVC 패턴 활용한 자판기 프로그램 ver.1  (0) 2023.12.13
DAO, DTO 활용 예시 [학생부 프로그램]  (0) 2023.12.12
DAO란  (0) 2023.12.12

댓글