Java/study

MVC 모델을 이용한 자판기 프로그램

Clearing 2022. 7. 13. 00:45
728x90

Model 

package model;

public class AlcVO { // 술 클래스 ex) 참이슬, 처음처럼, 테라
	private int num; // PK
	private String name; // 이름
	private int price; // 가격
	private int cnt; // 재고
	private double abv; // 도수
	private String category; // 카테고리

	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;
	}
	public double getAbv() {
		return abv;
	}
	public void setAbv(double abv) {
		this.abv = abv;
	}
	public String getCategory() {
		return category;
	}
	public void setCategory(String category) {
		this.category = category;
	}
	@Override
	public String toString() {
		return "AlcVO [num=" + num + ", name=" + name + ", price=" + price + ", cnt=" + cnt + ", abv=" + abv
				+ ", category=" + category + "]";
	}

}
package model;

public class CategoryVO { // 술 종류 클래스 ex)소주,맥주,막걸리
	private String name; // 술 종류
	private int num; // 카테고리 pk

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	@Override
	public String toString() {
		return "CategoryVO [name=" + name + "]";
	}

}
package model;

import java.util.ArrayList;

public class AlcDAO {
	ArrayList<AlcVO> datas = new ArrayList<AlcVO>(); // 전체배열
	ArrayList<CategoryVO> category = new ArrayList<CategoryVO>(); // 주종배열(부분배열)
	int pk = 101; // Primary Key
	int cpk = 1; // 카테고리에 대한 pk , ex) 소주는 1 , 맥주는 2 , 막걸리 3

	// 샘플데이터
	AlcVO vo1 = new AlcVO();
	{
		vo1.setName("참이슬");
		vo1.setPrice(2000);
		vo1.setCnt(10);
		vo1.setCategory("소주");
		vo1.setAbv(16.9);
		vo1.setNum(pk++);
		datas.add(vo1);
	}
	AlcVO vo2 = new AlcVO();
	{
		vo2.setName("처음처럼");
		vo2.setPrice(2000);
		vo2.setCnt(20);
		vo2.setCategory("소주");
		vo2.setAbv(16.0);
		vo2.setNum(pk++);
		datas.add(vo2);
	}
	AlcVO vo3 = new AlcVO();
	{
		vo3.setName("시원");
		vo3.setPrice(2000);
		vo3.setCnt(10);
		vo3.setCategory("소주");
		vo3.setAbv(16.9);
		vo3.setNum(pk++);
		datas.add(vo3);
	}
	AlcVO vo4 = new AlcVO();
	{
		vo4.setName("테라");
		vo4.setPrice(3000);
		vo4.setCnt(10);
		vo4.setCategory("맥주");
		vo4.setAbv(5.6);
		vo4.setNum(pk++);
		datas.add(vo4);
	}
	AlcVO vo5 = new AlcVO();
	{
		vo5.setName("카스");
		vo5.setPrice(3000);
		vo5.setCnt(15);
		vo5.setCategory("맥주");
		vo5.setAbv(5.5);
		vo5.setNum(pk++);
		datas.add(vo5);
	}
	AlcVO vo6 = new AlcVO();
	{
		vo6.setName("하이트");
		vo6.setPrice(3000);
		vo6.setCnt(20);
		vo6.setCategory("맥주");
		vo6.setAbv(5.8);
		vo6.setNum(pk++);
		datas.add(vo6);
	}
	AlcVO vo7 = new AlcVO();
	{
		vo7.setName("원막걸리");
		vo7.setPrice(3000);
		vo7.setCnt(10);
		vo7.setCategory("막걸리");
		vo7.setAbv(6.0);
		vo7.setNum(pk++);
		datas.add(vo7);
	}
	AlcVO vo8 = new AlcVO();
	{
		vo8.setName("장수막걸리");
		vo8.setPrice(3000);
		vo8.setCnt(10);
		vo8.setCategory("막걸리");
		vo8.setAbv(6.5);
		vo8.setNum(pk++);
		datas.add(vo8);
	}
	AlcVO vo9 = new AlcVO();
	{
		vo9.setName("밤막걸리");
		vo9.setPrice(3000);
		vo9.setCnt(10);
		vo9.setCategory("막걸리");
		vo9.setAbv(9.6);
		vo9.setNum(pk++);
		datas.add(vo9);
	}
	CategoryVO cvo1 = new CategoryVO();
	{
		cvo1.setName("소주");
		cvo1.setNum(cpk++);
		category.add(cvo1);
	}
	CategoryVO cvo2 = new CategoryVO();
	{
		cvo2.setName("맥주");
		cvo2.setNum(cpk++);
		category.add(cvo2);
	}
	CategoryVO cvo3 = new CategoryVO();
	{
		cvo3.setName("막걸리");
		cvo3.setNum(cpk++);
		category.add(cvo3);
	}


	public ArrayList<AlcVO> selectAll(AlcVO vo) { // AlcVO에 있는 값들 전체 리턴
		if(vo.getName()!=null) {
			// 검색 
			ArrayList<AlcVO> datas=new ArrayList<AlcVO>(); 
			for(int i=0;i<this.datas.size();i++) { // datas의 크기만큼 반복해서 
				if(this.datas.get(i).getName().equals(vo.getName())) { // 인자로 들어온 vo의 이름이 같다면
					datas.add(this.datas.get(i)); // 같은 그 객체를 datas에 넣는다.
				}
			}
			return datas;
		}
		return datas;
	}
	public AlcVO selectOne(AlcVO vo) { // AlcVO에서 들어온 값을 비교하여 리턴
		for (AlcVO data : datas) {
			if (data.getName().equals(vo.getName())) { // 이름으로 비교해서 해당 객체 리턴
				return data;
			}
		}
		return null;
	}

	public ArrayList<CategoryVO> categoryAll(CategoryVO cate) { // category(대분류) 배열리턴
		return category;
	}

	public CategoryVO categoryOne(CategoryVO cate) { // category의 selectOne
		for (CategoryVO data : category) { // data라는 객체에 category의 값을 넣는다
			if (data.getName().equals(cate.getName())) { // 만약 들어온 이름과 data의 이름이 같다면
				return data; // data를 리턴한다.
			}
		}
		return null;
	}

	public boolean update(AlcVO vo) { // cnt 값 수정을 위한 메서드
		for (AlcVO data : datas) {
			if (data.getName().equals(vo.getName())) { // 만약 이름이 같다면 > 구매자에서 사용
				if (data.getCnt() - vo.getCnt() < 0) { // 유효성검사 기존cnt보다 들어온cnt는 높을 수 없다
					return false; // 실패
				} else {
					data.setCnt(data.getCnt() - vo.getCnt()); // vo 객체에 들어온 cnt 값을 기존에 cnt에서 빼준다.
				}
			}
			if (data.getNum()==vo.getNum()) { // 만약 pk 값이 같다면 > 관리자에서 사용
				if (data.getCnt() - vo.getCnt() < 0) { // 유효성검사 기존cnt보다 들어온cnt는 높을 수 없다
					return false; // 실패
				} else {
					data.setCnt(data.getCnt() - vo.getCnt()); // vo 객체에 들어온 cnt 값을 기존에 cnt에서 빼준다.
				}
			}
		}
		return true;
	}

	public boolean insert(AlcVO vo) { // 추가 메서드
		try {
			vo.setNum(pk++); // 재고가 추가됨에 따라 pk 매핑
			datas.add(vo); // 받아온 객체에 대한 정보를 datas에 추가
			return true; // 재고 추가 성공
		} catch (Exception e) {
			return false;
		}

	}

	public boolean delete(AlcVO vo) { // 제품 삭제 메서드
		for (int i = 0; i < datas.size(); i++) {
			if(datas.get(i).getNum() == vo.getNum()) { // 객체로 들어온 vo의 pk 가 기존 데이터의 pk와 같다면
				datas.remove(i); // 해당 객체 삭제
				return true;
			} 
		}
		return false;
	}

}

 

View

package view;

import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.Scanner;
import model.AlcVO;
import model.CategoryVO;

public class AlcView {
   public int action;
   public int age;
   Scanner sc = new Scanner(System.in);
   int min = 1;
   int max = 4; // 메뉴 추가 시 max 값 변경해주세요.

   public boolean userAge() { // 나이인증 및 유효성검사
      while (true) {
         System.out.println("안녕하세요.");
         System.out.println("귀하의 나이를 입력해주세요.");
         System.out.print("나이 입력) ");
         try {
            age = sc.nextInt();
            if (age == 1234) {
               return false;
            }
            if (age < 20 || age > 100) {
               System.out.println("인증에 실패하였습니다.");
               System.out.println(" ");
               continue;
            } else if (age >= 20 && age <= 100) {
               System.out.println("인증에 성공하였습니다.");
               System.out.println(" ");
               return true;
            }
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
         }
      }
   }

   public void user_startView() { // 인증 성공 후 자판기 메뉴실행
      while (true) {
         System.out.println("===========주류 자판기===========");
         System.out.println("[ 1.메뉴확인 2.구매 3.검색 4.종료 ]");
         System.out.print("정수 입력) ");
         try {
            action = sc.nextInt();
            System.out.println();

            if (min <= action && action <= max) { // 유지보수 min, max사용하여 자판기 실행번호 설정
               break;
            }
            System.out.println("범위 외 입력입니다!");
         } catch (Exception e) {
            sc.nextLine(); // 문자열이 들어올 경우 버퍼를 비우기 위해  
            System.out.println("숫자를 입력해주세요.");
         }
         System.out.println(min + "에서 " + max + "사이를 입력해주세요.");
      }
   }

   public void menu(ArrayList<AlcVO> datas) { // 전체메뉴 출력
      int num = 1;
      if (datas.size() == 0) { //datas에 아무것도 존재 하지 않을 때
         System.out.println("해당 종류의 술이 존재하지 않습니다.");
      }
      for (AlcVO vo : datas) { // 전체메뉴 출력
         System.out.println(num++ + "번 " + vo.getCategory() + " " + vo.getName() + " " + vo.getPrice() + "원 "
               + vo.getCnt() + "개 " + vo.getAbv() + "도 ");
      }
      System.out.println();
   }

   public int categoryMenu(ArrayList<CategoryVO> cate) { // 대분류 카테고리 출력
      while(true) {

         for(int i=0; i<cate.size();i++) {
            System.out.println(i+1+"." + cate.get(i).getName()); 
         }

         System.out.println("원하시는 카테고리를 입력해주세요.");
         System.out.print("번호 입력) ");
         try {
            int num=sc.nextInt();
            System.out.println();

            if(num<=0 || num>cate.size()) { // 유효성검사 > 0이하 또는 카테고리 개수보다 높은 값을 입력하면 다시 입력 받기
               System.out.println("1부터 "+cate.size()+"까지 입력해주세요.");
               continue;
            }
            return num;
         }catch (InputMismatchException e) {
            sc.nextLine(); // 문자열이 들어올 경우 버퍼를 비우기 위해  
            System.out.println("숫자를 입력해주세요.");
            System.out.println(" ");
         }

      }
   }

   public void sool(ArrayList<AlcVO> datas, CategoryVO vo) { // 대분류 카테고리 선택 후 보여질 소분류 출력 메서드
      System.out.println("========== "+vo.getName()+" =========="); // 카테고리vo(대분류)의 이름 가져온다.
      int num = 1; // 넘버링
      for (int i = 0; i < datas.size(); i++) {
         if (datas.get(i).getCategory().equals(vo.getName())) { // AlcVO의 요소 중 카테고리이름과 CategoryVO의 요소의 이름이 같으면  
            System.out.println(num++ + "." + datas.get(i).getName() + " 가격(" + datas.get(i).getPrice() + ") 재고("
                  + datas.get(i).getCnt() + ") 도수(" + datas.get(i).getAbv() + ")");
         }
      }
      return;
   }


   public String inputString() {
      System.out.print("이름 입력) ");
      String str = sc.next();
      System.out.println();
      return str;
   }

   public int inputInt() {
      int i = 0;
      while (true) {
         System.out.print("정수 입력) ");
         try {
            i = sc.nextInt();
            System.out.println();
            if (i<=0) { // 0또는 음수 입력 시
               System.out.println("양수만 입력해주세요");
               continue;
            }

         } catch (InputMismatchException e) { // 문자열 입력 시
            sc.nextLine();
            System.out.println("정수만 입력해주세요.");
            continue;
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("또다른 오류 발생");
            continue;
         }
         return i;
      }
   }


   public void buyName() {
      System.out.println("구매하실 술 이름을 입력해주세요.");
   }
   public void buyNameFail() {
      System.out.println("술의 이름을 다시 한번 확인해주세요.");
   }

   public void buyCnt() {
      System.out.println("구매하실 수량을 입력해주세요.");
   }

   public void buyCntFail() {
      System.out.println("재고가 부족합니다. 현재 재고를 다시 한번 확인해주세요.");
   }

   public void searchName() {
      System.out.println("검색할 술 이름을 입력해주세요.");
   }

   public void success() {
      System.out.println("구매에 성공하였습니다!");
   }

   public void fail() {
      System.out.println("구매에 실패하였습니다...");
   }

   public void total(int total) {
      System.out.println("총 결제하실 금액은 " + total + "원 입니다. ");
   }



   public void money() {
      System.out.println("투입 금액을 입력해주세요. ");
   }
   public void moneyAdd() {
      System.out.println("추가로 투입할 금액을 입력해주세요.");
   }
   // 누적 금액 추가
   public void moneyIn(int money) {
      System.out.println("누적 금액 : " + money);
   }

   public void balT(int balance) { // 잔돈출력
      System.out.println("잔돈이 " + -1*balance + "원 있습니다.");
   }

   public void balF(int balance) {
      System.out.println("금액이 " + -1*balance + "원 부족합니다.");
   }

   public void off() {
      System.out.println("이용이 종료됩니다.");
   }

   public boolean receipt() { // 영수증 출력
      while (true) {
         try {
            System.out.println("영수증을 받으시겠습니까?");
            System.out.println("1.YES 2.No");
            System.out.print("입력) ");
            action = sc.nextInt();
            System.out.println(" ");
            if (action == 1) {
               return true;
            } else if (action == 2) {
               return false;
            } else {
               System.out.println("범위 외 입력입니다. 1.(Yes)/2.(No) 만 입력가능");
               continue;
            }
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
         }
      }
   }

   public void show_receipt(AlcVO vo) { // 영수증 모양
      System.out.println("============영수증============");
      System.out.println("품명 : " + vo.getName());
      System.out.println("가격 : " + vo.getPrice());
      System.out.println("구매수량 : " + vo.getCnt());
      System.out.println("총 구매가격: " + vo.getPrice() * vo.getCnt());  
      System.out.println("반환금액 : " + vo.getNum());
      System.out.println("=============================");
      System.out.println(" ");
   }
   public void thanks() { 
      System.out.println("이용해주셔서 감사합니다!");
      System.out.println(" ");
   }
   public void admin_startView() { // 관리자모드
      while (true) {
         System.out.println("=====관리자모드=====");
         System.out.println("1.술 종류 추가 2.재고추가 3.술 삭제 4.관리자모드 종료");
         System.out.print("정수 입력) ");
         try {
            action = sc.nextInt();
            if (1 <= action && action <= 4) {
               break;
            }
            System.out.println("범위 외 입력입니다!");
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
         }
      }
   }
   public void admin_success() {
      System.out.println("수행성공");
   }
   public void admin_fail() {
      System.out.println("수행실패");
   }
   public void addDrink() { // 술 추가
      System.out.println("술 추가 메뉴입니다.");
   }
   public void category() { // 관리자1 : 종류 추가
      System.out.println("추가하실 술의 종류를 입력해주세요.");
   }
   public void cnt() { // 관리자2 : 재고 설정 
      System.out.println("추가하실 수량을 입력해주세요.");
   }
   public void delete() { // 관리자3 : 음료삭제
      System.out.println("음료를 삭제합니다.");
   }
   public void soolpk() { // 재고추가/삭제할 술 번호(pk) 입력
      System.out.println("술의 번호를 입력해주세요.");
   }
   public void name() { // 술 이름
      System.out.println("술의 이름을 입력해주세요.");
   }
   public int price() { // 술 가격 + 유효성검사
      System.out.println("술의 가격을 입력해주세요.");
      System.out.print("가격 입력) ");
      while (true) {
         try {
            int price = sc.nextInt();
            System.out.println();

            if (price >= 1000) {
               return price;
            } else {
               System.out.println("1000원 이상부터 입력해주세요.");
               System.out.print("가격 입력) ");
               continue;
            }
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
            continue;
         }
      }
   }
   public double abv() { // 술 도수 + 유효성검사
      System.out.println("술의 도수를 입력해주세요.");
      System.out.print("도수 입력) ");
      while (true) {
         try {
            double abv = sc.nextDouble();
            System.out.println();
            if (abv > 0 && abv < 100) {
               return abv;
            } else {
               System.out.println("0~100사이의 값을 입력해주세요");
               System.out.print("도수 입력) ");
               continue;
            }
         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
            continue;
         }
      }
   }


   public void admin_off() {
      System.out.println("관리자모드 종료합니다.");
   }

   public boolean buyAgain() {
      while (true) {
         try {
            System.out.println("추가 구매 하시겠습니까?");
            System.out.println("1.YES 2.NO");
            System.out.print("정수 입력) ");
            action = sc.nextInt();
            if (action == 1) {
               return true;
            } else if (action == 2) {
               return false;
            } else {
               System.out.println("범위 외 입력입니다.");
               continue;
            }

         } catch (Exception e) {
            sc.nextLine();
            System.out.println("숫자를 입력해주세요.");
         }
      }
   }
}

 

Controller

package controller;

import java.util.ArrayList;

import model.AlcDAO;
import model.AlcVO;
import model.CategoryVO;
import view.AlcView;

public class AlcController {

   AlcDAO model = new AlcDAO();
   AlcView view = new AlcView();

   public void startApp() {
      while (true) {

         if (view.userAge()) { // 시작시 나이 인증
            while (true) {
               view.user_startView(); // 자판기 실행메뉴 선택

               if (view.action == 1) { // 메뉴확인
                  AlcVO vo = new AlcVO();
                  view.menu(model.selectAll(vo)); // 전체메뉴 출력

               } else if (view.action == 2) { // 구매하기
                  AlcVO vo = new AlcVO();
                  CategoryVO cate = new CategoryVO();
                  ArrayList<AlcVO> datas = model.selectAll(vo);
                  ArrayList<CategoryVO> catedatas = model.categoryAll(cate);

                  int choose = view.categoryMenu(catedatas); // 대분류 카테고리 출력 & 원하는 카테고리 선택

                  cate.setName(catedatas.get(choose - 1).getName());

                  if (model.categoryOne(cate) == null) { // 대분류 선택 시 없는 카테고리를 입력할 경우
                     view.fail();
                     continue;
                  }

                  view.sool(datas, cate); // 전체 배열에서 이름이 일치하는 소분류 카테고리 출력

                  // 구매할 술 이름 입력받기
                  while (true) {
                     view.buyName(); // 소분류 카테고리에서 술 이름 입력 받기
                     vo.setName(view.inputString()); // 구매할 술이름 입력
                     AlcVO vo2 =model.selectOne(vo);
                     
                     if (vo2 == null) { // 이름이 없을 때
                        view.buyNameFail();
                        continue;
                     } 
                     if (vo2.getCnt() == 0) { // 재고가 없을 때
                        view.buyCntFail();
                        continue;
                     } 
                     break;

                  }

                  // 재고 확인하기
                  while (true) {
                     view.buyCnt(); // 이름이 있다면 재고 입력 받기
                     vo.setCnt(view.inputInt()); // 구매할 수량 입력
                     boolean flag2 = model.update(vo); // 구매 재고 확인
                     if (flag2 == false) { // false 반환 받으면
                        view.buyCntFail();// 재고 부족 출력
                        continue; // 다시 입력 받을 수 있게 한다.
                     }

                     break;
                  }

                  // 결제하기
                  AlcVO vo2 = new AlcVO(); // 객체 하나 더 만든 이유(price가져오기 위해서) 
                  vo2 = model.selectOne(vo); // 현재 vo에는 이름/수량 담겨있음, selcetOne(이름 비교해서 같으면 객체 반환)
                  vo.setPrice(vo2.getPrice()); // 현재 vo2에는 모든 정보가 들어있음, 가격 가져와서 다시 vo에 set

                  int total = vo.getCnt() * vo.getPrice();
                  view.total(total);
                  int balance = 0;

                  while (true) {

                     view.money(); // 돈 입력 받기
                     int money = view.inputInt();
                     balance = money - total; // 투입금액 - 총 합계금액 = 잔돈
                     vo.setNum(balance);

                     while (true) {
                        if (total > money) { // 돈이 부족할때
                           view.balF(balance); // 부족한금액 출력
                           view.moneyAdd();
                           money += view.inputInt();
                           view.moneyIn(money);
                           balance = money - total;
                           vo.setNum(balance); // vo에 int로 받을 수 있는 num이 비어있기 때문에
                                          // num에 잔돈을 넣은 후 view의 영수증출력 메서드 인자로 vo만 넣을 예정
                        }
                        if (money >= total) { // 돈이 초과되거나 같으면 stop
                           break;
                        }
                     }

                     view.success();
                     view.balT(total - money); // 잔돈 출력
                     break;
                  }

                  boolean flag3 = view.receipt(); // 영수증 출력 여부 확인
                  if (flag3) {
                     view.show_receipt(vo); // 영수증 출력
                     if(view.buyAgain()==true) { // 추가구매 한다면
                        continue; // 자판기 메뉴출력(나이입력 진행 x)
                     }
                     else { // 추가구매 안한다면
                        view.thanks();
                        break; // 처음 실행부분(나이입력)으로 이동
                     }

                  }
                  if(view.buyAgain()==false) { // 영수증 x 추가구매 x
                     view.thanks(); // 구매 종료
                     break;
                  }
                  continue;
               }


               else if (view.action == 3) { // 검색 (술이름으로 검색)
                  AlcVO vo = new AlcVO();
                  view.searchName();
                  vo.setName(view.inputString());
                  ArrayList<AlcVO> datas = model.selectAll(vo); // selectAll의 검색 기능
                  view.menu(datas);

               } else if (view.action == 4) { // 프로그램 종료
                  view.off();
                  break;
               }

            }

         } else if (view.age == 1234) { // 관리자 모드
            while (true) {
               view.admin_startView();

               if (view.action == 1) { // 술 추가 메뉴
                  view.addDrink(); // 술 추가 메뉴입니다.

                  AlcVO vo = new AlcVO(); // 세팅할 객체 생성
                  CategoryVO cvo = new CategoryVO(); // 카테고리가 없는 종류는 추가를 할 수가 없어서 검사 진행을 위해
                  ArrayList<CategoryVO> catedatas = model.categoryAll(cvo);
                  ArrayList<AlcVO> datas = model.selectAll(vo);

                  while (true) {
                     view.category(); // 추가할 카테고리 입력해주세요

                     int choice = view.categoryMenu(catedatas); // 대분류 카테고리 출력 후 int 반환
                     vo.setCategory(catedatas.get(choice - 1).getName());
                     if (datas != null) {
                        break; // 카테고리가 있다면, 유효성검사 while문 탈출
                     }
                     else {
                        view.admin_fail();
                        continue; // 다시 입력 받도록 함
                     }

                  }

                  while(true) { // 원래있는 음료를 추가하려고 하는 경우

                     view.name();
                     String name = view.inputString();  // 이름 입력
                     vo.setName(name);

                     ArrayList<AlcVO> datas1 = model.selectAll(vo);

                     if(datas1.size() != 0) {
                        view.admin_fail();
                        continue;
                     }

                     break;
                  }

                  view.cnt(); 
                  int cnt = view.inputInt(); // 재고입력
                  vo.setCnt(cnt); 
                  int price = view.price(); // 가격입력, 음수이거나 1000원 이하는 입력불가
                  vo.setPrice(price);
                  double abv = view.abv(); // 도수 입력, 음수이거나 100도 이상은 입력불가
                  vo.setAbv(abv);


                  if (model.insert(vo)) { // 술 추가
                     view.admin_success();
                     view.menu(datas);
                  } else {
                     view.admin_fail();
                  }

               } else if (view.action == 2) { // 재고추가 메뉴
                  AlcVO vo = new AlcVO();
                  ArrayList<AlcVO> datas = model.selectAll(vo);
                  view.menu(datas); // 전체메뉴 출력

                  while (true) {

                     view.soolpk(); // 술 번호 입력 받기
                     int num = view.inputInt();
                     if (datas.size() < num) { // 해당 인덱스의 값이 없으면
                        view.admin_fail();
                        continue; // 다시 입력 받도록 함
                     }
                     vo.setNum(datas.get(num - 1).getNum()); // 재고추가할 술의 pk 대입

                     break;
                  }

                  view.cnt(); // 재고입력 받기
                  vo.setCnt(-view.inputInt()); // 추가할 재고 입력 - 재고추가시에는 음수로 들어가야함
                  if (model.update(vo)) { // 재고 추가
                     view.admin_success();
                     view.menu(datas);
                  } else {
                     view.admin_fail();
                  }


               } else if (view.action == 3) { // 술 삭제 메뉴
                  AlcVO vo = new AlcVO();
                  ArrayList<AlcVO> datas = model.selectAll(vo);
                  view.menu(datas); // 전체메뉴 출력

                  while (true) {

                     view.soolpk();
                     int num = view.inputInt();
                     if (datas.size() < num) { // 해당 인덱스의 값이 없으면
                        view.admin_fail();
                        continue; // 다시 입력 받도록 함
                     }
                     vo.setNum(datas.get(num - 1).getNum()); // 삭제할 술의 pk 대입
                     break;
                  }

                  if (model.delete(vo)) { // 술 삭제
                     view.admin_success();
                     view.menu(datas);
                  } else {
                     view.admin_fail();
                     view.menu(datas);
                  }
               } else if (view.action == 4) {
                  view.admin_off();
                  break;
               }

               else {
                  return;
               }
            }
         }
      }
   }
}
728x90

'Java > study' 카테고리의 다른 글

웹크롤링하여 DB에 데이터 넣기  (0) 2022.07.14
SQL을 활용하여 MVC 응용  (0) 2022.07.14
PrepareStatement 이용하기  (0) 2022.07.05
JAVA에 DB연동하기  (0) 2022.07.04
DDL / DML / DCL  (0) 2022.07.03