Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Tags
more
Archives
Today
Total
관리 메뉴

노승현

DTO,DAO 를 이용한 자판기 프로그램 본문

JAVA/문제풀이

DTO,DAO 를 이용한 자판기 프로그램

nsh95 2023. 12. 14. 17:19

 

 

 

View

 

package view;

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

import model.ProductDTO;

public class View3 {

	private Scanner sc;
	private int userMAX;
	private int adminMAX;
	public View3() {
		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("3. 메뉴검색");
		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("4. 메뉴재고추가");
		System.out.println("5. 가격변경");
		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("구매완료!");
	}
}

 

 

 

M

 

DTO

 

package model;

public class ProductDTO {

	private int num; // PK
	private String name;
	private int price;
	private int cnt;
	
	private String searchConditon; // JAVA 로직에서만 사용하는 변수
	private int addCnt;
	
	// 웹 개발에서는,
	// 기본 생성자를 사용하는 것을 원칙으로 한다!!!!!
	//  : new할때 생성자의 인자로 넣는 값중에서,
	//    어떤 값이 정말 유효한 값인지 파악하는 시간을 줄이기위함!

	public int getAddCnt() {
		return addCnt;
	}
	public void setAddCnt(int addCnt) {
		this.addCnt = addCnt;
	}
	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 ProductDAO3 {

	private ArrayList<ProductDTO> datas; // DB

	public ProductDAO3() {
		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) {
//		if(productDTO.getSearchConditon().equals("이름검색")) {
//			ArrayList<ProductDTO> datas = new ArrayList<ProductDTO>();
//			for(int i=0; i<this.datas.size();i++) {
//				if(this.datas.get(i).getName().contains(productDTO.getName())) {
//					datas.add(this.datas.get(i));
//				}
//			}
//			return datas;
//		}
//		else {
//			return this.datas;	// 전체 목록 
//		}
		if (productDTO.getSearchConditon() == null) {	// NPE 주어를 만들어주는 
			return this.datas;
		}
			if (productDTO.getSearchConditon().equals("이름검색")) {
				ArrayList<ProductDTO> datas = new ArrayList<ProductDTO>();

				for (int i = 0; i < this.datas.size(); i++) {
					if (this.datas.get(i).getName().contains(productDTO.getName())) {
						datas.add(this.datas.get(i));
					}
				}
				return datas;
			}
			return null;	// 검색 정보가 없다면 null 리턴해줘야된다.
	}

	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) {
		if (productDTO.getSearchConditon().equals("구매")) {
			productDTO.setCnt(productDTO.getCnt() - 1);
		} else if (productDTO.getSearchConditon().equals("재고변경")) {
			productDTO.setCnt(productDTO.getCnt());
		} else if (productDTO.getSearchConditon().equals("재고추가")) {
			// "재고"라는 속성의 값을 "변경"하는 것이므로 "U"에 해당함!
			productDTO.setCnt(productDTO.getCnt() + productDTO.getAddCnt());
			// "추가할 값"이라는 속성은,
			// 제품의 속성이 아님!
			// "U" 기능을 수행할때 필요한 속성일뿐임!
			// "searchCondition"같은 속성이라는뜻!
		} else if (productDTO.getSearchConditon().equals("가격변경")) {
			productDTO.setPrice(productDTO.getPrice());

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

}

 

 

 

Controller

 

package ctrl;

import java.util.ArrayList;

import model.ProductDAO3;
import model.ProductDTO;
import view.View3;

public class Ctrl3 {

	private ProductDAO3 productDAO; // MODEL
	private View3 view;
	private int PK;

	public Ctrl3() {
		this.productDAO = new ProductDAO3();
		this.view = new View3();
		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 == 4) {
						int num = view.inputNum();

						ProductDTO productDTO = new ProductDTO();
						productDTO.setNum(num);
						productDTO = productDAO.selectOne(productDTO);
						if (productDTO == null) {
							view.printNoData();
							continue;
						}

						int addCnt = view.inputCnt();
						productDTO.setAddCnt(addCnt);
						productDTO.setSearchConditon("재고추가");
						boolean flag = productDAO.update(productDTO);
						if (flag) {
							view.printDeleteData01();
						} else {
							view.printDeleteData02();
						}
					} else if (action == 5) {

						int num = view.inputNum();	// 하나의 작업을 종료하고
						ProductDTO productDTO = new ProductDTO();
						productDTO.setNum(num);
						productDTO = productDAO.selectOne(productDTO);
						if (productDTO == null) {
							view.printNoData();
							continue;
						}
						int price = view.inputPrice(); // 다음 작업을 한다.
						productDTO.setPrice(price);
						productDTO.setSearchConditon("가격변경");
						productDAO.update(productDTO);

					}
				}
			}

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


				String name = view.inputName();
				ProductDTO productDTO = new ProductDTO();
				productDTO.setName(name);
				productDTO.setSearchConditon("이름검색");
				ArrayList<ProductDTO> datas = productDAO.selectAll(productDTO);
				view.printDatas(datas);
			}
		}
	}
}

 

 

Main

 

package client;

import ctrl.Ctrl3;

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

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

 

 

'JAVA > 문제풀이' 카테고리의 다른 글

능단평 오답노트(2)  (1) 2023.12.22
능단평 문제 오답노트  (1) 2023.12.22
MVC 이용한 학생부 프로그램 1단계  (1) 2023.12.11
도서 판매 프로그램(검색)  (0) 2023.12.10
음료수 자판기 프로그램  (0) 2023.12.09