Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
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
Tags
more
Archives
Today
Total
관리 메뉴

Full-Stack 개발자가 되려는 작은 개발자의 블로그

물품 관리 프로그램(Homeminus) 본문

강의 정리/Java

물품 관리 프로그램(Homeminus)

jhjin 2020. 4. 1. 16:19

Data Transfer Object

- Product > 가장 상위 분류

package com.homeminus.dto;

public class Product {
	private String name; //제품명
	private int price; //가격
	private int amount; //수량
	private String made; //원산지
	private String mDay; //제조일자
	
	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 getAmount() {
		return amount;
	}
	public void setAmount(int amount) {
		this.amount = amount;
	}
	public String getMade() {
		return made;
	}
	public void setMade(String made) {
		this.made = made;
	}
	public String getmDay() {
		return mDay;
	}
	public void setmDay(String mDay) {
		this.mDay = mDay;
	}
	
	public String toString() {
		//제품 클랫의 필드들 출력하도록 작성
		String str="=========================\n"
				+ "제품명 : "+this.name+"\n"
				+ "가격 : "+this.price+"\n"
				+ "수량 : "+this.amount+"\n"
				+ "국가 : "+this.made+"\n"
				+ "일자 : "+this.mDay+"\n";
		return str;
	}
}

- ElectProduct 

package com.homeminus.dto;

public class ElectProduct extends Product {
	private String maker; //제조사
	private int guarantee; //품질 보증 기간
	private int grade; // 효율 등급 1~5
	
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public int getGuarantee() {
		return guarantee;
	}
	public void setGuarantee(int guarantee) {
		this.guarantee = guarantee;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	@Override
	public String toString() {
		String str="제조사 : "+this.maker+"\n"
				+"보증기간 : "+this.guarantee+"\n"
				+"등급 : "+this.grade+"\n";
		return super.toString()+str;
	}
}

- LifeProduct 

package com.homeminus.dto;

public class LifeProduct extends Product{
	private String maker; //제조사
	private String usage; //용도
	private boolean recycle; //재활용여부
	
	public String getMaker() {
		return maker;
	}
	public void setMaker(String maker) {
		this.maker = maker;
	}
	public String getUsage() {
		return usage;
	}
	public void setUsage(String usage) {
		this.usage = usage;
	}
	public boolean isRecycle() {
		return recycle;
	}
	public void setRecycle(boolean recycle) {
		this.recycle = recycle;
	}
	@Override
	public String toString() {
		String rec;
		if(this.recycle) {
			rec="가능";
		}else {
			rec="불가능";
		}
		//조건 연산
		//rec=(recycle)?"가능":"불가능";
		String str="제조사 : "+this.maker+"\n"
				+"용도 : "+this.usage+"\n"
				+"재활용여부 : "+rec+"\n";
		return super.toString()+str;
	}
}

- ElectProduct 

package com.homeminus.dto;

public class FoodProduct extends Product{
	private String origin;//생산지
	private String period; //유통기한
	private String kind; //종류
	
	public String getOrigin() {
		return origin;
	}
	public void setOrigin(String origin) {
		this.origin = origin;
	}
	public String getPeriod() {
		return period;
	}
	public void setPeriod(String period) {
		this.period = period;
	}
	public String getKind() {
		return kind;
	}
	public void setKind(String kind) {
		this.kind = kind;
	}
	@Override
	public String toString() {
		String str="생산지 : "+this.origin+"\n"
				+"유통기한 : "+this.period+"\n"
				+"종류 : "+this.kind+"\n";
		return super.toString()+str;
	}
}

Controller

- mainController

package com.homeminus.controller;

import java.awt.event.FocusEvent;
import java.util.*;

import com.homeminus.dto.ElectProduct;
import com.homeminus.dto.FoodProduct;
import com.homeminus.dto.LifeProduct;
import com.homeminus.dto.Product;
import com.homeminus.service.ProductService;
import com.homeminus.view.ProductView;

public class MainController {
	//서비스, 뷰(화면 처리)용 인스턴스 생성
	ProductView pv=new ProductView();
	ProductService ps = new ProductService();
	
	public void control() {
		//더미 데이터 추가(모든 프로그램이 작성이 완료되면 삭제)
		ps.startPs();
		
		//메뉴 입력용 변수
		int menu=0;
		
		//프로그램 무한 반복
		while(true) {
			//타이틀과 메뉴 출력하는 메소드 호출
			pv.showMainMenu();
			//메뉴 번호 입력 받는 메소드 호출
			menu=pv.inputMenu();
			
			//종료 처리
			if(menu==0) {
				pv.alertMessage(0);
				break;
			}
			//메뉴 분기 처리
			switch(menu) {
			case 1: //제품 등록
				regProduct();
				break;
			case 2: //제품 출력
				prtProduct();
				break;
			case 3: //제품 검색
				break;
			case 4: //제품 수정
				break;
			case 5: //제품 삭제
				break;
			default:
				pv.alertMessage(2);
				break;
			}
		}
	}
	
	
	//제품 등록용 메소드
	private void regProduct() {
		Product product=null;
		int menu=0;
		boolean result;
		//돌아가기 메뉴가 선택되기 전까지 무한반복
		while(true) {
			pv.showSubMenu("제품 등록", 1);
			menu=pv.inputMenu();
			if(menu==0) {
				pv.alertMessage(1);
				break;
			}
			switch(menu) {
			case 1: //가전제품 등록
				product=new ElectProduct();
				break;
			case 2: //생필품 등록
				product=new LifeProduct();
				break;
			case 3: //식품 등록
				product=new FoodProduct();
				break;
			default : 
				pv.alertMessage(2);
				break;
			}
			//View 클래스에서 데이터 입력
			pv.inputProduct(product);
			//Service 클래스에서 데이터 저장
			result=ps.registProd(product);
			if(result) {
				pv.alertMessage(4);
			}else {
				pv.alertMessage(7);
			}
		}
	}
	private void regElectProduct() {
		 
	}
	//제품 출력 메소드
	/*
	 * 2가지 출력 형태
	 *  - 전체 출력
	 *  - 카테고리별 출력 
	 */
	private void prtProduct() {
		int menu=0;
		//저장된 목록에 제품이 들어있는지 확인
		//서비스 클래스로부터 제품 목록을 받아와서 확인
		ArrayList<Product> pList = ps.getProductList();
		if(pList.isEmpty()) { //isEmpty() > ArrayList에 저장된 데이터가 없으면 true
			//View 클래스의 메시지 출력
			pv.alertMessage(3);
			return;
		}
		
		while(true) {
			//서브메뉴 출력
			pv.showSubMenu("제품 출력", 2);
			//메뉴 받기
			menu=pv.inputMenu();
			
			if(menu==0) {
				pv.alertMessage(1);
				break;
			}
			switch (menu) {
			case 1: //전체 출력
				//전체 목록을 View클래스의 출력 메소드로 전달
				pv.printProduct(pList, 0);
				break;
			case 2: //카테고리별 출력 > 카테고리 서브메뉴
				prtCategoryProduct(pList);
				break;
			default:
				pv.alertMessage(2);
				break;
			}
		}
	}
	private void prtCategoryProduct(ArrayList<Product> pList) {
		int menu=0;
		
		while(true) {
			//서브메뉴 출력
			pv.showSubMenu("카테고리별 출력", 1);
			//메뉴 받기
			menu=pv.inputMenu();
			
			if(menu==0) {
				pv.alertMessage(1);
				break;
			}
			//뷰 클래스의 카테고리별 출력 메소드 사용
			//카테고리 선택 번호(서브메뉴번호)를 출력 메소드에 전달
			pv.printProduct(pList, menu);
		}
	}
	//제품 검색용 메소드(전체 검색)
	private void selectProduct() {
		//저장된 목록에 제품이 들어있는지 확인
		//서비스 클래스로부터 제품 목록을 받아와서 확인
		ArrayList<Product> pList = ps.getProductList();
		if(pList.isEmpty()) { //isEmpty() > ArrayList에 저장된 데이터가 없으면 true
			//View 클래스의 메시지 출력
			pv.alertMessage(3);
			return;
		}
	}
	//제품 수정용 메소드 (이름으로 검색)
	private void modifyProduct() {
		
	}
	//제품 삭제용 메소드(1.전체 2.검색)
	private void deleteProduct() {
		//저장된 목록에 제품이 들어있는지 확인
		//서비스 클래스로부터 제품 목록을 받아와서 확인
		ArrayList<Product> pList = ps.getProductList();
		if(pList.isEmpty()) { //isEmpty() > ArrayList에 저장된 데이터가 없으면 true
			//View 클래스의 메시지 출력
			pv.alertMessage(3);
			return;
		}
		int menu;
		
		while(true) {
			menu = pv.inputMenu();
			
			if(menu==0) {
				pv.alertMessage(1);
				break;
			}
			switch(menu) {
			case 1: 
				
				break;
			case 2:
				
				break;
			default : 
				pv.alertMessage(2);
				break;
			}
		}
	}
}

View

- ProductView

package com.homeminus.view;

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

import com.homeminus.dto.ElectProduct;
import com.homeminus.dto.FoodProduct;
import com.homeminus.dto.LifeProduct;
import com.homeminus.dto.Product;

//입력, 출력 작업은 모두 이 클래스에서 처리
public class ProductView {
	Scanner scan=new Scanner(System.in);
	
	//////////////////////////////////////////////출력 처리
	public void alertMessage(int menu) {
		switch(menu) {
		case 0 : //프로그램 종료
			System.out.println("프로그램을 종료합니다.");
			break;
		case 1 : //이전 메뉴
			System.out.println("이전 메뉴로 돌아갑니다.");
			break;
		case 2 : //메뉴 입력 오류
			System.out.println("메뉴 입력 오류 발생! 다시 입력해주세요.");
			break;
		case 3 : //데이터 없음
			System.out.println("등록 된 상품이 없습니다.");
			break;
		case 4 : //저장 완료
			System.out.println("상품 등록이 완료되었습니다.");
			break;
		case 5 : //삭제 완료
			System.out.println("상품 삭제가 완료되었습니다.");
			break;
		case 6 : //검색 결과 없음
			System.out.println("검색 된 상품이 없습니다.");
			break;
		case 7 : //저장 실패
			System.out.println("상품 등록의 실패하였습니다.");
			break;
		case 8 : //삭제 실패
			System.out.println("상품이 삭제되지 않았습니다.");
			break;
			
		}
	}
	//타이틀 및 메인 메뉴를 출력하는 메소드
	public void showMainMenu() {
		System.out.println("<< 홈마이너스 마트 제품 관리 프로그램 >>");
		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.종료");
		System.out.println("================================");
		System.out.print("선택 >> ");
	}
	
	//서브 타이틀과 서브 메뉴를 출력하는 메소드
	public void showSubMenu(String title,int menu) {
		System.out.println("<< "+title+" >>");
		System.out.println("================================");
		switch(menu) {
		case 1://카체고리 서브 메뉴
			System.out.println("1.가전제품");
			System.out.println("2.생필품");
			System.out.println("3.식품");
			System.out.println("0.돌아가기");
			break;
		case 2: //출력 서브 메뉴
			System.out.println("1.전체출력");
			System.out.println("2.카테고리별 출력");
			System.out.println("0.돌아가기");
			break;
		}
		System.out.println("================================");
		System.out.print("선택 >> ");
	}
	//전체 출력 및 카테고리 출력용 메소드
	//파라미터 : 전체 제품 목록, 카테고리 번호
	public void printProduct(ArrayList<Product> pList,int c) {
		int cnt=0; //카테고리별 출력 시 제품갯수 카운트
		
		for(Product p:pList) {
			switch(c) {
			case 0: //전체 출력
			case 1: //가전제품
				if(p instanceof ElectProduct) {
					System.out.println(p);
					cnt++;
				}
				if(c!=0) {
					break;
				}
			case 2: //생필품
				if(p instanceof LifeProduct) {
					System.out.println(p);
					cnt++;
				}
				if(c!=0) {
					break;
				}
			case 3: //식품
				if(p instanceof FoodProduct) {
					System.out.println(p);
					cnt++;
				}
				if(c!=0) {
					break;
				}
			}
		}
		if(cnt==0) {
			alertMessage(3);
		}
	}
	
	//////////////////////////////////////////////입력 처리
	//메뉴 입력을 위한 메소드
	public int inputMenu() {
		String str=scan.nextLine();
		int menu=-1;
		//숫자를 입력하지 않고 엔터를 쳤을때의 예외사항 막기.
		if(!str.equals("")) {
			menu=Integer.parseInt(str);
		}
		return menu;
	}
	
	//제품 등록을 위한 입력 메소드
	public void inputProduct(Product p) {
		//공통 입력 처리
		System.out.print("제품명 : ");
		p.setName(scan.nextLine());
		System.out.print("가격 : ");
		p.setPrice(inputMenu()); //숫자문자열 -> 숫자로
		System.out.print("수량 : ");
		p.setAmount(inputMenu());
		System.out.print("생산지 : ");
		p.setMade(scan.nextLine());
		System.out.print("생산일 : ");
		p.setmDay(scan.nextLine());
		
		//각 카테고리 제품별 입력처리
		if(p instanceof ElectProduct) {
			ElectProduct ep=(ElectProduct)p;
			System.out.print("제조사 : ");
			ep.setMaker(scan.nextLine());
			System.out.print("보증기간 : ");
			ep.setGuarantee(inputMenu());
			System.out.print("등급 : ");
			ep.setGrade(inputMenu());
		}else if(p instanceof LifeProduct) {
			LifeProduct lp=(LifeProduct)p;
			System.out.print("제조사 : ");
			lp.setMaker(scan.nextLine());
			System.out.print("용도 : ");
			lp.setUsage(scan.nextLine());
			System.out.print("재활용여부(y/n) : ");
			String yesno=scan.nextLine();
			if(yesno.equals("y")) {
				lp.setRecycle(true);
			}else {
				lp.setRecycle(false);
			}
			
		}else if(p instanceof FoodProduct) {
			FoodProduct fp=(FoodProduct)p;
			System.out.print("원산지 : ");
			fp.setOrigin(scan.nextLine());
			System.out.print("유통기한 : ");
			fp.setPeriod(scan.nextLine());
			System.out.print("종류 : ");
			fp.setKind(scan.nextLine());
		}
	}
}

Service

- ProductService

package com.homeminus.service;

import java.util.ArrayList;

import com.homeminus.dto.Product;
import com.homeminus.util.TestDataInput;

public class ProductService {
	//전체 제품 저장 공간. ArrayList로 구성.
	private ArrayList<Product> pList=new ArrayList<>();
	
	//더미 데이터 추가용 메소드(테스트용)
	public void startPs() {
		TestDataInput tdi =new TestDataInput();
		tdi.addTestData(pList);
	}
	
	//제품 저장용 메소드
	//반환형이 boolean인 이유는 저장 결과에 따른 출력값을 주기 위해서
	public boolean registProd(Product p) {
		//전체 제품 목록에 넘어온 제품 인스턴스 추가
		pList.add(p);
		
		//정상적으로 추가되었다고 가정하고 true 리턴
		return true;
	}
	
	//제품 목록을 전달하는 메소드
	public ArrayList<Product> getProductList(){
		return pList;
	}
}

'강의 정리 > Java' 카테고리의 다른 글

객체 지향 실습 4  (0) 2020.04.07
객체 지향 실습2  (0) 2020.04.01
가계부 프로그램  (0) 2020.03.26
객체 지향 실습3  (0) 2020.03.19
객체 지향 실습1  (0) 2020.03.16
Comments