노승현
DTO,DAO 를 이용한 자판기 프로그램 본문
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 |