본문 바로가기
공부기록/Java

4월 12일 (1) Java - 데이터 관리 프로그램

by project100 2023. 4. 12.
통합개발환경 (IDE, Integrated Development Environment)
코드 편집기 + 컴파일러(빌더) + 디버거(Debugger)

디버거 : 프로그램 버그를 잡기 위한 도구, 디버깅을 위한 도구
버그 - 논리적인 오류(1+12가 나오지 않는 현상)
디버깅 - 코드를 한줄 씩 실행하여 그 때 그 때의 결과를 확인하면서 로직의 오류를 찾고 수정하는 과정

모든 프로그래밍 언어는 디버깅이 필요하다.

 

두번째 벌레 모양 - 디버그

브레이크 포인트 : 일시정지, 바이트코드로 실행

 

코드를 처리하고 있는 내용적인 모습을 볼 수 있다. 파란색은 실행되지 않은 부분을 나타낸다.

 

스킵 F8, 진입 F7 : 메서드 내용확인, 메서드 벗어나기(점프) shitf + F8, 커서에서 멈추기  

예) 변수처리

기본데이터 타입은 값을 볼 수 있다, 인스턴스의 경우 주소의 모습과 안에 들어간 값을 확인할 수 있다.

인터럽트 : 코드가 강제로 중단된 상태, 입력받을 값이 있을 경우

 

값이 제대로 들어가는지 디버깅을 계속적으로 활용해야 한다.

 

단축키 

ctrl + 메소드 : 해당 메소드로 이동

Navigate - back : 이동하기 전으로 돌아가기

 

프로그램에 임시로 저장할 때에는 데이터가 다 사라진다.

매번 실행할 때마다 데이터가 없기 때문에 데이터의 값을 보존하기 위해서는 DB와 연동해야 한다.

 


데이터 삭제 

검색 -> 검색 결과가 있을 경우 -> 결과 출력 -> 삭제의사 확인

             검색 결과가 없을 경우 - 메시지 출력 - 종료

삭제 확정 -> yes 삭제 - 삭제 후 종료

                     no 삭제 취소 - 종료

 

데이터수정

데이터 삭제와 유사한 과정을 거침

수정 의사 (삭제 의사)확인까지는 동일함

수정 확정 -> yes -> 변경할 데이터 입력 -> 해당 데이터 변경(set) -> 수정완료

 

정수를 제외한 나머지를 수정대상으로 하여 수정 기능을 구현

 

package controller;

import dto.DataDto;

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

public class DataController {
    // 제공기능 : 입력, 출력, 검색, 삭제
    Scanner scan = new Scanner(System.in);
    // 공용부품(입력장치) - 모든 메소드에서 사용가능

    // 데이터 저장 공간 ArrayList
    ArrayList<DataDto> datas = new ArrayList<>();

    public void run(){
        String menu = null; //초기화

        System.out.println("데이터 관리 프로그램");
        System.out.println("=================");

        while (true){
            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.print("입력> ");
            menu = scan.nextLine();

            // 종료처리
            if (menu.equals("0")){
                System.out.println("프로그램 종료");
                break;
            } // if end

            switch (menu){
                case "1" :
                   inputData();
                    break;
                case "2" :
                    outputData();
                    break;
                case "3" :
                    searchData();
                    break;
                case "4" :
                    deleteData();
                    break;
                case"5" :

                    break;
                default:
                    System.out.println("0~4번 중 하나를 입력하세요.");
            }

        } // while end
    }// run method end

    private void deleteData() {
        System.out.println("4. 데이터 삭제");
        System.out.println("-------------");

        // 데이터 유무 확인
        if(datas.size() == 0){
            // 여기서 출력 메소드 종료
            System.out.println("데이터가 없습니다. 이전 문구로 돌아갑니다.");
            return; // 메소드 종료
        } // if end

        // 삭제 = 검색 + 삭제
        // 삭제의 기준이 되는 값 받기
        System.out.print("삭제할 정수 : ");
        String search = scan.nextLine();
        int snum = Integer.parseInt(search);

        DataDto temp = null; // d는 for문 안에서만 사용 가능, d를 저장할 수 있는 임시변수
        for(DataDto d : datas){
            if(snum == d.getNumber()){
                // 삭제할 값과 같으면 출력, 찾고자 하는 데이터
                System.out.println("검색 결과>");
                System.out.println("정수 : " + d.getNumber() + ",");
                System.out.println("문자열 : " + d.getStr() + ",");
                System.out.println("실수 : " + d.getFnumber());
                System.out.println("---------------------------- ");
                temp = d; // 임시공간에 검색한 데이터를 저장
                break; // 검색 작업만 종료
            } // if end
        } // for end

       // 검색할 결과가 있을 경우
        if(temp != null){
            System.out.print("삭제하시겠습니까?(y/n) ");
            search = scan.nextLine();
            if(search.equals("y")){
                datas.remove(temp);
                System.out.println("삭제 되었습니다.");
            } else {
                System.out.println("취소합니다.");
                return; // 메소드 종료
            }
        }
        // 검색 결과가 없을 경우
        else {
            System.out.println("삭제할 데이터가 없습니다.");
        }
    } // deleteData end

    private void searchData() {
        System.out.println("3. 데이터 검색");
        System.out.println("-------------");

        // 데이터 유무 확인
        if(datas.size() == 0){
            // 여기서 출력 메소드 종료
            System.out.println("데이터가 없습니다. 이전 문구로 돌아갑니다.");
            return; // 메소드 종료
        } // if end

        // 검색 기준 - 정수, DB로 봤을 때 기본키, 설계 시 미리 정해야 한다.
        System.out.print("검색할 정수 : ");
        String search = scan.nextLine();
        int snum = Integer.parseInt(search);

        // 감추어져 있기 때문에 하나씩 꺼내어 비교해야 한다.
        // data를 하나씩 꺼내어 number 필드를 확인

        // 1. 중복된 정수 값은 없다고 가정
        for(DataDto d : datas){
            if(snum == d.getNumber()){
                // 찾는 값과 같으면 출력, 찾고자 하는 데이터
                System.out.println("검색 결과>");
                System.out.println("정수 : " + d.getNumber() + ",");
                System.out.println("문자열 : " + d.getStr() + ",");
                System.out.println("실수 : " + d.getFnumber());
                System.out.println("---------------------------- ");
                return;// 검색 기능 종료
            } // if end
        } // for end
        System.out.println("검색 결과가 없습니다.");
    } // serchData end

    //순서는 크게 중요하지 않다.
    private void outputData() {
        // 모든 입력된 데이터를 출력한다.
        System.out.println("2. 데이터 출력");
        System.out.println("-------------");

        // 데이터 유무 확인
        if(datas.size() == 0){
            // 여기서 출력 메소드 종료
            System.out.println("데이터가 없습니다. 이전 문구로 돌아갑니다.");
            return; // 메소드 종료
        } // if end

        // 데이터 저장 개수만큼 반복 출력(여러개일 것을 가정하고 프로그램을 짠다.)
        // 1. for문 사용
//        for(int i = 0; i < datas.size(); i++){
//            DataDto d = datas.get(i); // 묶음으로 꺼내오기
//            System.out.println("정수 : " + d.getNumber() + ",");
//            System.out.println("문자열 : " + d.getStr() + ",");
//            System.out.println("실수 : " + d.getFnumber());
//            System.out.println("---------------------------- ");
//        }
        // 2. for edch문 사용
          for(DataDto d : datas){
              System.out.println("정수 : " + d.getNumber() + ",");
              System.out.println("문자열 : " + d.getStr() + ",");
              System.out.println("실수 : " + d.getFnumber());
              System.out.println("---------------------------- ");
          }

    } // outputData end

    private void inputData(){
    // 기능 구현 : 출력문구 -> 입력 -> 변환 -> dto에 담기 -> dto를 ArrayList에 담기
        System.out.println("1. 데이터 입력");
        System.out.println("-------------");

        // 입력 받을 변수 초기화
        int num = 0;
        String s = null;
        float fnum = 0.0f;
        // dto 형태로 만든 ArrayList에는 각각의 dto로 묶인 데이터가 들어갈 공간이 생성된다.
        // dto로 묶인 데이터가 들어갈 수 있도록 인스턴스 생성하기
        DataDto data = new DataDto();

        // 정수 문자열 입력
        System.out.print("정수 입력 : ");
        s = scan.nextLine();
        // 정수문자열 -> 정수
        num = Integer.parseInt(s);
        // dto에 담기
        data.setNumber(num);

        // 문자열 입력
        System.out.print("문자열 입력 : ");
        s = scan.nextLine();
        data.setStr(s);

        // 실수 문자열 입력
        System.out.print("실수 입력 : ");
        s = scan.nextLine();
        // 실수문자열 -> 실수
        fnum = Float.parseFloat(s);
        data.setFnumber(fnum);

        // ArrayLIst datas에 data 한 묶음 넣기
        datas.add(data);
    }
}//class end

실습) 데이터 수정 만들기