4월 19일 Java – 게임 액세서리 정보 관리 프로그램

연습 문제)

컨택트 프로그램을 이용한 XX 관리 프로그램 제작
주제
1. 가계부
2. 상품관리 프로그램
3. 예약 프로그램
4. 기타 무료 테마

메인클래스 – 실행

패키지 만들기

보기 – AccView, InOutClass, 화면 I/O

서비스 – AccService

Dto – AccInfoDto

다오 – AccDao

컨트롤러 – AccController

package controller;

import dto.AccInfoDto;
import service.AccService;
import view.AccView;

import java.util.ArrayList;
import java.util.List;

// 프로그램 전체 제어용 메소드
public class AccController {//public 제일 광범위한
    // 화면 처리용 부품 객체 사용
    private AccView av = new AccView();//private 접근제어자

    //서비스 객체 사용
    private AccService aSev = new AccService();

    //상수 정의
    private final int MAIN_MENU = 1;
    private final int SEARCH_MENU = 2;
    private final int UPDATAE_MENU = 3;

    //프로그램 전체 제어용 메소드
    public void run() {//void 참조변수를 바로 사용할 수 있게해줌.
        int a = -1;//초기값 -1 초기값으로 사용안할 값. 임의 -1아니여도 됩니다.
//타이틀 출력 av.viewTitle("게임 액세서리 정보"); while (true){ //메뉴 출력과 메뉴 번호 입력 a = av.showMenu(MAIN_MENU); //종료 처리 if(a == 0){ //종료 메시지 출력 av.aMsg("프로그램 종료"); break; } //나머지 메뉴 처리 switch (a) { case 1: inputAccInfo(); break; case 2: outputList(); break; case 3: searchMain(); break; case 4: updateMain(); break; case 5: deleteAccInfo(); break; default: av.aMsg("0~5번까지만 입력하세요."); } } } private void deleteAccInfo() { av.viewTitle("아이템 삭제"); //데이터 유무 확인 if(aSev.getList().size() == 0){ av.aMsg("삭제할 데이터가 없습니다.
"); return; } String skey = av.searchInput("아이템명 : "); List<AccInfoDto> rList = aSev.getNames(skey); av.outputLists(rList); if(rList.size() == 0){ av.aMsg("아이템 삭제 종료."); return;// } int aNum = av.updateNumber("삭제 번호 : "); String msg = null; if(av.isOk("삭제할까요?")){ msg = aSev.deleteAInfo(aNum); } else{ msg = "삭제작업을 취소합니다.
"; } av.aMsg(msg); } private void updateMain() { int um = -1; av.viewTitle("아이템 정보 수정"); //데이터 유무 확인 if(aSev.getList().size() == 0){ av.aMsg("수정할 데이터가 없습니다.
"); return; } while (true){ um = av.showMenu(UPDATAE_MENU); if(um == 0){ av.aMsg("상위 메뉴로 돌아갑니다.
"); return; } switch (um){ case 1: updateName(); break; case 2: updatePrice(); break; case 3: updateRate(); break; default: av.aMsg("0~2번까지만 입력하세요."); } }//while end }//method end private void updateRate() { av.viewTitle("평점 수정"); float rrate = Float.parseFloat(av.searchInput("평점 : ")); List<AccInfoDto> rList = aSev.getRate(rrate); av.outputLists(rList); if(rList.size() == 0){ av.aMsg("평점 수정 종료"); return;//검색결과가 없을 때는 수정작업 종료. } int aNum = av.updateNumber("수정 번호 : "); AccInfoDto aInfo = aSev.getAInfo(aNum); if(aInfo !
= null){ av.outputaccNum(aInfo); } else { av.aMsg("수정할 데이터가 없습니다.
"); return;//수정 기능 종료. } // 수정할 데이터 입력 av.updateInput(aInfo); //수정 처리 완료 } private void updatePrice() { av.viewTitle("가격 수정"); int aprice = Integer.parseInt(av.searchInput("가격 : ")); List<AccInfoDto> pList = aSev.getPrice(aprice); av.outputLists(pList); if(pList.size() == 0){ av.aMsg("가격 수정 종료"); return;//검색결과가 없을 때는 수정작업 종료. } int aNum = av.updateNumber("수정 번호 : "); AccInfoDto aInfo = aSev.getAInfo(aNum); if(aInfo !
= null){ av.outputaccNum(aInfo); } else { av.aMsg("수정할 데이터가 없습니다.
"); return;//수정 기능 종료. } // 수정할 데이터 입력 av.updateInput(aInfo); //수정 처리 완료 } private void updateName() { av.viewTitle("아이템명 수정"); String akey = av.searchInput("아이템명 : "); List<AccInfoDto> aList = aSev.getNames(akey); av.outputLists(aList); if(aList.size() == 0){ av.aMsg("아이템명 수정 종료"); return;//검색결과가 없을 때는 수정작업 종료. } int aNum = av.updateNumber("수정 번호 : "); AccInfoDto aInfo = aSev.getAInfo(aNum); if(aInfo !
= null){ av.outputaccNum(aInfo); } else { av.aMsg("수정할 데이터가 없습니다.
"); return;//수정 기능 종료. } // 수정할 데이터 입력 av.updateInput(aInfo); //수정 처리 완료 } private void searchMain() {//run메소드와 유사함. int sm = -1; av.viewTitle("아이템 검색"); if(aSev.getList().size() == 0){ av.aMsg("데이터가 없습니다.
"); return; } while (true){ sm = av.showMenu(SEARCH_MENU); //서브 메뉴 종료 처리 if(sm == 0){ av.aMsg("상위 메뉴로 돌아갑니다.
"); break;//또는 return; } switch (sm){ case 1://이름 검색 nameSearch(); break; case 2://가격 검색 priceSearch(); break; case 3://평점 검색 rateSearch(); break; default: av.aMsg("0~3번까지만 입력하세요."); } } } private void rateSearch() { //타이틀 출력 av.viewTitle("평점 검색"); float rrate = Float.parseFloat(av.searchInput("평점 : ")); ArrayList<AccInfoDto> rList = aSev.getRate(rrate); av.outputLists(rList); } private void priceSearch() { av.viewTitle("가격 검색"); int aprice = Integer.parseInt(av.searchInput("가격 : ")); ArrayList<AccInfoDto> pList = aSev.getPrice(aprice); av.outputLists(pList); } private void nameSearch() { av.viewTitle("아이템 검색"); String aKeyword = av.searchInput("아이템명 : "); ArrayList<AccInfoDto> aList = aSev.getNames(aKeyword); av.outputLists(aList); } private void outputList() { av.viewTitle("아이템 출력"); av.outputLists(aSev.getList()); } private void inputAccInfo() { //서브 타이틀 출력 av.viewTitle("아이템 입력"); AccInfoDto aInfo = new AccInfoDto(); av.inputAccInfo(aInfo); //아이템 정보 저장 -> service String msg = aSev.addAccInfo(aInfo); //메시지 출력 -> view av.aMsg(msg); } }
package view;

import dto.AccInfoDto;

import java.util.List;

public class AccView {
    private InOutClass ioc = new InOutClass();

    //타이틀 출력 메소드
    public void viewTitle(String title){
        ioc.tlPrint(
                "⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n" +
                    "⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n" +
                    "⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜\n" +
                    "⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜\n" +
                    "⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜\n" +
                    "⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜\n" +
                    "⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬛⬜⬜\n" +
                    "⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜\n" +
                    "⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬛\n" +
                    "⬜⬜⬛⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛\n" +
                    "⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛\n" +
                    "⬜⬜⬜⬛⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜\n" +
                    "⬜⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜\n" +
                    "⬜⬜⬜⬜⬛⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬛⬛⬛⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜⬜⬛⬜⬜⬛⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬛⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬛⬜⬛⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜\n" +
                    "⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜");
        ioc.tlPrint("♣" + title + "♣");
        ioc.tlPrint("-----------------");
    }

    //메뉴 출력 메소드
    public int showMenu(int aNum){//변수는 앞에 대문자 안함
        int menu = -1;

        ioc.tlPrint("");//메뉴 출력전 한 줄 추가.
        ioc.tlPrint("메뉴>");

        switch(aNum){//switch는 선택
            case 1: //주 메뉴 출력
                ioc.tlPrint("1. 아이템 입력");
                ioc.tlPrint("2. 아이템 출력");
                ioc.tlPrint("3. 아이템 검색");
                ioc.tlPrint("4. 아이템 정보 수정");
                ioc.tlPrint("5. 아이템 정보 삭제");
                ioc.tlPrint("0. 종료");
                break;//break를 걸어주지 않으면 무한으로 반복됨.
            case 2: //보조 메뉴 출력(검색)
                ioc.tlPrint("1. 아이템명 검색");
                ioc.tlPrint("2. 가격 검색");
                ioc.tlPrint("3. 평점 검색");
                ioc.tlPrint("0. 돌아가기");
                break;
            case 3: //보조 메뉴 출력(수정)
                ioc.tlPrint("1. 아이템명 수정");
                ioc.tlPrint("2. 가격 수정");
                ioc.tlPrint("3. 평점 수정");
                ioc.tlPrint("0. 돌아가기");
                break;
        }//switch end
        menu = ioc.inNum("선택>");
        return menu;//입력받은 메뉴 번호 전달.
    }
    //메시지 출력용 메소드
    public void aMsg(String str) { ioc.tlPrint(str); }

    //입력화면 처리 메소드
    public void inputAccInfo(AccInfoDto aInfo){//입력받아야 하니 input 사용
        aInfo.setAccName(ioc.inStr("아이템명 :"));
        aInfo.setAccPrice(ioc.inNum("가격 :"));
        aInfo.setAccRate(ioc.inFloat("평점 :"));
        aInfo.setAccDate(ioc.inStr("등록일 :"));
    }//inputAccInfo end

    public void outputLists(List<AccInfoDto> alist) {
        if(alist.size() == 0){
            ioc.tlPrint("출력할 데이터가 없습니다.
"); return; } for(AccInfoDto aInfo : alist){ ioc.tlPrint(aInfo.toString()); ioc.tlPrint("♣♣♣♣♣♣♣♣♣♣♣"); } } public String searchInput(String name) { String s = ioc.inStr(name); ioc.tlPrint("♣♣♣♣♣♣♣♣♣♣♣"); return s; } public int updateNumber(String comment) { int num = ioc.inNum(comment); ioc.tlPrint("------------------"); return num; } public void outputaccNum(AccInfoDto aInfo) { ioc.tlPrint(aInfo.toString()); } public void updateInput(AccInfoDto aInfo) { viewTitle("수정 데이터 입력"); String str = ioc.inStr("아이템명 : "); if(str !
= ""){//새로운 값 입력하면 새 값으로 변경 aInfo.setAccName(str); } int aprice = Integer.parseInt(ioc.inStr("가격")); if(aprice == 0){ aInfo.setAccPrice(aprice); } float arate = ioc.inFloat("평점 : "); } //사용자에게 진행여부를 물어보는 메소드 public boolean isOk(String str) { String yn = ioc.inStr(str + "(y/n) "); return (yn.equals("y")?true:false); } }//class end