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

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

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 View {

	private Scanner sc;
	private int userMAX;
	private int adminMAX;
	public View() {
		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 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 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 ProductDAO {

	private ArrayList<ProductDTO> datas; // DB

	public ProductDAO() {
		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++) {
			// this.datas.get(i).getNum()
			// 내꺼.DB.요소 == 상품
			// 상품.pk()
			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) {
		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 false;
		}
		
		if(productDTO.getSearchConditon().equals("구매")) {
			this.datas.get(i).setCnt(this.datas.get(i).getCnt()-1);
		}
		else if(productDTO.getSearchConditon().equals("재고변경")) {
			this.datas.get(i).setCnt(productDTO.getCnt());
		}
		
		return true;
	}
	public boolean delete(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 false;
		}
		this.datas.remove(i);
		return true;
	}

}

 

 

컨트롤러 클래스

package ctrl;

import java.util.ArrayList;

import model.ProductDAO;
import model.ProductDTO;
import view.View;

public class Ctrl {

	private ProductDAO productDAO; // MODEL
	private View view;
	public Ctrl() {
		this.productDAO=new ProductDAO();
		this.view=new View();
	}

	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) {
						
					}
					else if(action==2) {

					}
					else if(action==3) {

					}
				}
			}
			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);
				}
			}
		}		
	}

}

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

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

댓글