본문 바로가기
공부기록/실습

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

by project100 2023. 4. 19.

실습문제) 

연락처 프로그램을 활용한 XX관리프로그램 제작
주제
1. 가계부
2. 제품관리 프로그램
3. 예약 프로그램
4. 그 밖의 자유 주제

 

⬜⬜⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬛🟥⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬛🟥🟥⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬛🟥🟥⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬛⬜⬜⬜⬜
⬛🟥🟨🟨🟥⬛⬜⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧⬛⬜⬜⬜
⬛🟥🟨🟨🟥⬛⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧🟧🟧⬛⬜⬜
⬛🟥🟨🟨🟥⬛⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧🟧🟧⬛⬜⬜
⬜⬛🟥🟥⬛⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧🟧🟧🟧🟧⬛⬜
⬜⬜⬛🟧⬛⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧⬛⬜🟧🟧🟧⬛
⬜⬜⬛🟧🟧⬛⬜⬜⬜⬜⬛🟧🟧🟧🟧🟧⬛⬛🟧🟧🟧⬛
⬜⬜⬛🟧🟧⬛⬜⬜⬜⬜⬛🟧🟧🟧🟧🟧⬛⬛🟧🟧🟧⬛
⬜⬜⬜⬛🟧🟧⬛⬜⬜⬛🟧🟧🟧🟧🟧🟧🟧🟧🟧🟧⬛⬜
⬜⬜⬜⬛🟧🟧🟧⬛⬛🟧🟧🟧🟧🟧🟧🟧🟧🟧⬛⬛⬜⬜
⬜⬜⬜⬜⬛🟧🟧⬛⬛🟧🟧🟧⬛🟧🟧⬛⬛⬛⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬛🟧⬛🟧🟧🟧🟧🟧⬛🟧🟨⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬛⬛🟧🟧🟧⬛⬛🟨🟨🟨⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬛🟧🟧🟧🟧🟨🟨🟨⬛⬜⬛⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬛⬛🟧🟧🟧🟧🟧⬛⬛⬛⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛🟧⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬛⬜🟧⬜⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜
⬜⬜⬜⬜⬜⬜⬜⬜⬜⬛⬛⬛⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜

 

MainClass - 실행

 

package만들기

View - AccView, InOutClass, 화면 입출력

Service - AccService 

Dto - AccInfoDto

Dao - AccDao

Controller - 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