spring_2기[사전캠프]

[과제]동물 관리 시스템

minwoo95 2025. 11. 26. 17:12

https://github.com/MinWoo1995/-/tree/main

 

main

package Task.animalcaresysteom.lavel1;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int age1=0;
        String kind="";
        int number6=0;

        System.out.println("=== 동물원 관리 시스템 ===");
        System.out.println("1. 동물 등록\n2. 동물 목록 보기\n3. 동물과 놀기\n4. 먹이주기\n5. 동물 상태 확인\n6. 울음소리 듣기\n7. 종료");

        Scanner sc = new Scanner(System.in);
        Zoo zoo = new Zoo();//객체 생성

        while(true){
            System.out.print("메뉴를 선택하세요:");
            String input1 = sc.nextLine();//사용자 입력

            boolean condtion1 = true;
            int dotCount1 = 0;

            if (input1.length() == 0) { // 빈 문자열 검사
                condtion1 = false;
            } else {
                for (int i = 0; i < input1.length(); i++) {
                    char c = input1.charAt(i);

                    if (c >= '1' && c <= '7') {
                        continue; // 숫자는 OK
                    } else if (c == '.') {
                        dotCount1++;
                        if (dotCount1 > 0) { // 소수점이 1개 이상이면 오류 출력
                            System.out.println("0과 문자 특수문자는 입력이 불가합니다");
                            System.out.println("1부터 7까지 메뉴 번호만 입력하세요");
                            break;
                        }
                    } else if (c == '-') {
                        if (i != input1.length()) { // '-'가 있다면 오류 출력
                            System.out.println("0과 문자 특수문자는 입력이 불가합니다");
                            System.out.println("1부터 7까지 메뉴 번호만 입력하세요");
                            break;
                        }
                    } else {
                        System.out.println("0과 문자 특수문자는 입력이 불가합니다");
                        System.out.println("1부터 7까지 메뉴 번호만 입력하세요");
                        break;
                    }
                }
            }



            if (input1.equals("1")) {//1.동물등록
                System.out.print("동물의 이름을 입력하세요:");
                String name = sc.nextLine();//사용자 입력

                while(true){
                    System.out.print("동물 나이를 입력하세요:");
                    String input3 = sc.nextLine();//사용자 입력
                    boolean condtion = true;
                    int dotCount = 0;

                    if (input3.length() == 0) { // 빈 문자열 검사
                        condtion = false;
                    } else {
                        for (int i = 0; i < input3.length(); i++) {
                            char c = input3.charAt(i);

                            if (c >= '0' && c <= '9') {
                                continue; // 숫자는 OK
                            } else if (c == '.') {
                                dotCount++;
                                if (dotCount > 0) { // 소수점이 1개 이상이면 오류 출력
                                    condtion = false;
                                    break;
                                }
                            } else if (c == '-') {
                                if (i != input3.length()) { // '-'가 있다면 오류 출력
                                    condtion = false;
                                    break;
                                }
                            } else {
                                condtion = false; // 숫자, '.', '-' 외 문자 존재 오류출력
                                break;
                            }
                        }
                    }

                    if (condtion) {
                        int number = Integer.parseInt(input3);//모든 유효성 검사를 통과한 입력값을 int형을 변환
                        age1=number;//변환된 값을 저장
                        break;
                    } else {
                        System.out.println("0과 문자 특수문자는 입력이 불가합니다");
                        System.out.println("0을 초과하는 정수로 입력 하세요");
                    }


                }


                while(true){
                    System.out.print("동물의 종류를 선택하세요(1.강아지 2.고양이):");
                    String input4 = sc.nextLine();//사용자 입력
                    if (input4.equals("1")) {
                        kind="강아지";//변환된 값을 저장
                        break;
                    }else if (input4.equals("2")) {
                        kind="고양이";//변환된 값을 저장
                        break;
                    }else {
                        System.out.println("0과 문자 특수문자는 입력이 불가합니다");
                        System.out.println("1과 2 둘중에 하나만 입력하세요");
                    }



                }
                zoo.addAnimal(name,age1,kind);//호출





            }else if (input1.equals("2")) {//2.동물 목록 보기
                System.out.println("=======등록된 동물의 목록입니다=======");
                zoo.showAnimals();

            }else if (input1.equals("3")) {//3.동물과 놀기
                System.out.println("=======등록된 동물의 목록입니다=======");
                zoo.showAnimals();
                while (true) {
                    if (zoo.getAnimalCount() == 0) {
                        System.out.println("등록된 동물이 없습니다!");
                        break;
                    }

                    System.out.println("놀고자 하는 동물의 번호를 입력하세요:");
                    System.out.print("선택: ");
                    String input5 = sc.nextLine();

                    boolean isValid = true;

                    // 빈 입력 체크
                    if (input5.length() == 0) {
                        isValid = false;
                    } else {
                        // 숫자 여부 체크 (문자 길이만큼 탐색)
                        for (int i = 0; i < input5.length(); i++) {
                            char c = input5.charAt(i);
                            if (!(c >= '0' && c <= '9')) { // 숫자가 아니면
                                isValid = false;
                                break;
                            }
                        }
                    }

                    if (!isValid) {
                        System.out.println("숫자만 입력하세요!");
                        continue;
                    }

                    number6 = Integer.parseInt(input5);

                    // 범위 체크
                    if (number6 < 1 || number6 > zoo.getAnimalCount()) {
                        System.out.println("등록된 동물 번호만 입력하세요!");
                        System.out.println("현재 동물 수: " + zoo.getAnimalCount() + "마리");
                        continue;
                    }

                    // 여기까지 통과 → 놀아난 동물의 행복감 출력 + 반복 종료
                    zoo.playAnimal(number6 - 1);
                    break;
                }

            }else if (input1.equals("4")) {//4.먹이주기
                while (true) {
                    if (zoo.getAnimalCount() == 0) {
                        System.out.println("등록된 동물이 없습니다!");
                        break;
                    }

                    System.out.println("먹이를 주는고자 하는 동물의 번호를 입력하세요:");
                    zoo.showAnimals();
                    System.out.print("선택: ");
                    String input5 = sc.nextLine();

                    boolean isValid = true;

                    // 빈 입력 체크
                    if (input5.length() == 0) {
                        isValid = false;
                    } else {
                        // 숫자 여부 체크 (문자 길이만큼 탐색)
                        for (int i = 0; i < input5.length(); i++) {
                            char c = input5.charAt(i);
                            if (!(c >= '0' && c <= '9')) { // 숫자가 아니면
                                isValid = false;
                                break;
                            }
                        }
                    }

                    if (!isValid) {
                        System.out.println("숫자만 입력하세요!");
                        continue;
                    }

                    number6 = Integer.parseInt(input5);

                    // 범위 체크
                    if (number6 < 1 || number6 > zoo.getAnimalCount()) {
                        System.out.println("등록된 동물 번호만 입력하세요!");
                        System.out.println("현재 동물 수: " + zoo.getAnimalCount() + "마리");
                        continue;
                    }

                    // 여기까지 통과 → 먹이를 먹은 동물의 포만감 출력 + 반복 종료
                    zoo.eatAnimal(number6 - 1);
                    break;
                }

            }else if (input1.equals("5")) {//5.동물 상태 확인
                while (true) {
                    if (zoo.getAnimalCount() == 0) {
                        System.out.println("등록된 동물이 없습니다!");
                        break;
                    }

                    System.out.println("동물의 상태를 확인하세요");
                    zoo.showAnimalsCondition();
                    break;
                }

            }else if (input1.equals("6")) {//6.울음소리 듣기

                while (true) {
                    if (zoo.getAnimalCount() == 0) {
                        System.out.println("등록된 동물이 없습니다!");
                        break;
                    }

                    System.out.println("울음소리를 들을 동물을 선택하세요:");
                    zoo.showAnimals();
                    System.out.print("선택: ");
                    String input5 = sc.nextLine();

                    boolean isValid = true;

                    // 빈 입력 체크
                    if (input5.length() == 0) {
                        isValid = false;
                    } else {
                        // 숫자 여부 체크 (문자 길이만큼 탐색)
                        for (int i = 0; i < input5.length(); i++) {
                            char c = input5.charAt(i);
                            if (!(c >= '0' && c <= '9')) { // 숫자가 아니면
                                isValid = false;
                                break;
                            }
                        }
                    }

                    if (!isValid) {
                        System.out.println("숫자만 입력하세요!");
                continue;
            }

            number6 = Integer.parseInt(input5);

            // 범위 체크
            if (number6 < 1 || number6 > zoo.getAnimalCount()) {
                System.out.println("등록된 동물 번호만 입력하세요!");
                System.out.println("현재 동물 수: " + zoo.getAnimalCount() + "마리");
                continue;
            }

            // 여기까지 통과 → 울음소리 출력 + 반복 종료
            zoo.playSound(number6 - 1);
            break;
        }


            }else if (input1.equals("7")) {//7.종료
                System.out.println("=== 프로그램을 종료합니다. ===");
                System.exit(0);//프로그램 종료
            }

        }





    }
}

zoo클래스

package Task.animalcaresysteom.lavel1;
import java.util.ArrayList;

public class Zoo {
    /*
        -List~Animal~ animals
        +addAnimal(Animal a)
        +showAllAnimals()
        +feedAnimal(int index)
        +playWithAnimal(int index)
        +playSound(int index)*/
    private ArrayList<Animal> animals = new ArrayList<>();

    public void addAnimal(String name, int age, String kind) {
        Animal newAnimal = new Animal(name, age, kind);
        animals.add(newAnimal);
        System.out.println(name+"("+kind+", "+age+")"+"가 등록되었습니다.");
    }
    public void showAnimals() {
        if(animals.isEmpty()) {
            System.out.println("등록된 동물이 없습니다.");
            return;
        }

        for(int i = 0; i < animals.size(); i++) {
            Animal a = animals.get(i);
            System.out.println((i + 1) + ". " + a.getName() + " (" + a.getKind() + ", " + a.getAge() + "살)");
        }
    }
    public void showAnimalsCondition() {
        if(animals.isEmpty()) {
            System.out.println("등록된 동물이 없습니다.");
            return;
        }

        for(int i = 0; i < animals.size(); i++) {
            Animal a = animals.get(i);
            System.out.println((i + 1) + ". " + a.getName() + " (" + a.getKind() + ", " + a.getAge() + "살)"+"포만감: "+a.gethappiness()+"행복감: "+a.gethunger());
        }
    }
    public void playAnimal(int index) {
        // 유효한 인덱스인지 확인
        if (index < 0 || index >= animals.size()) {
            System.out.println("잘못된 번호입니다. 다시 선택해주세요!");
            return;
        }

        // 선택된 동물 가져오기
        Animal animal = animals.get(index);

        // 놀아주기 출력
        System.out.println(animal.getName() + "와(과) 즐겁게 놀아주었습니다!");

        // 행복감 10 증가
        animal.increaseHappiness(10);

        // 현재 행복감 출력
        System.out.println(animal.getName() + "의 현재 행복감: " + animal.gethappiness());
    }
    public void eatAnimal(int index) {
        // 유효한 인덱스인지 확인
        if (index < 0 || index >= animals.size()) {
            System.out.println("잘못된 번호입니다. 다시 선택해주세요!");
            return;
        }

        // 선택된 동물 가져오기
        Animal animal = animals.get(index);

        // 먹이를 주었다 출력
        System.out.println(animal.getName() + "에게 먹이를 주었습니다.!");

        // 포만감 10 증가
        animal.increasehunger(10);

        // 현재 포만감 출력
        System.out.println(animal.getName() + "의 현재 포만감: " + animal.gethunger());
    }
    public int getAnimalCount() {
        return animals.size();
    }
    public void playSound(int index) {
        Animal a = animals.get(index);
        System.out.println(a.getName() + ":" + a.getSound());
    }
    public void playSound(){

    }

}

 

Animal클래스

package Task.animalcaresysteom.lavel1;

public class Animal {
    private String name;
    private int age;
    private String kind;
    int hunger = 0;
    int happiness = 0;
    String sound;

    //생성자
    public Animal(String name, int age, String kind) {
        this.name = name;
        this.age = age;
        this.kind = kind;
        if(kind == "강아지"){
            this.sound = "멍멍!";
        }else if(kind == "고양이"){
            this.sound = "야옹!";
        }
    }
    public void increaseHappiness(int amount) {
        this.happiness += amount;
    }
    public void increasehunger(int amount) {
        this.hunger += amount;
    }
    // getter
    public String getName() { return name; }
    public int getAge() { return age; }
    public String getKind() { return kind; }
    public int gethappiness() { return happiness; }
    public int gethunger() { return hunger; }


    @Override
    public String toString() {
        return "Animal [name=" + name + ", age=" + age + ", kind=" + kind + "]";
    }
    public String getSound() {
        return sound;
    }





}

[문제]클래스와 객체 개념의 혼돈으로 각클래스를 오가며 작성간 오류가 발생

[해결]개념정리와 각 클래스별 명칭과 코딩 정리와 주석처리로 문제 해결

 

 

동물 관리 시스템(동물 관리 시스템) – 레벨 1

OOP(개념을 바탕으로 동물을 등록하고, 울음 소리를 듣고, 놀아줌으로써 행복감을 높이는 기능을 제공하는 콘솔 기반 프로그램입니다.

😀 프로젝트 개요

이 프로그램은 Java로 제작된 기본 관리 시스템으로 다음 기능을 제공합니다.

등록된 이름(이름 / 나이 / 종류)

등록된 목록 조회

특정 동물의 울음소리 듣기

특정 동물과 놀아주기 → 행복감 10 증가

사용자 입력 기반 메뉴 시스템

OOP의 생성자, 패치 설계 및 ArrayList를 활용해 형태를 구현했습니다.

*프로젝트 구조 src/ ├── Main.java // 메인 실행 파일 ├── Zoo.java // 동물리스트 관리, CRUD 및 놀이 기능 제공 └── Animal.java // 동물 집단 존재(이름, 나이, 종류, 행복감 등)

주요 기능 설명

  1. 등록된 제품

사용자가 입력한 이름, 나이, 종류(강아지/고양이)에 따라 동물을 생성한 후 동물원에 저장합니다.

  1. 동물 목록 조회

사용자가 등록된 모든 동물의 번호와 함께 출력됩니다.

  1. 울음소리 듣는데

동물의 종류에 따라 자동으로 지정된 울음소리를 출력합니다.

일종의 울음소리 강아지 멍멍! 고양이야옹! 4. 놀아주기 (playAnimal)

선택한 행복의 동물감이 10 증가하며, 울음소리와 함께 행복감을 느끼게 됩니다.

🛠 핵심 코드 Animal.java public class Animal { private String name; private int age; private String kind; private int happiness = 0; private String sound;

public Animal(String name, int age, String kind) {
    this.name = name;
    this.age = age;
    this.kind = kind;

    if(kind.equals("강아지")) this.sound = "멍멍!";
    else if(kind.equals("고양이")) this.sound = "야옹!";
}

public void increaseHappiness(int amount) {
    this.happiness += amount;
}

public int getHappiness() { return happiness; }
public String getSound() { return sound; }
public String getName() { return name; }
 

}

Zoo.java (playAnimal 핵심) public void playAnimal(int index) { if (index < 0 || index >= Animals.size()) { System.out.println("잘 못된 번호입니다."); 반품; }

Animal animal = animals.get(index);

System.out.println(animal.getName() + "와(과) 즐겁게 놀아주었습니다!");
System.out.println("울음소리: " + animal.getSound());

animal.increaseHappiness(10);

System.out.println("현재 행복감: " + animal.getHappiness());
 

}

▶ 연습 예시

  1. 등록된 제품
  2. 동물 목록 보기
  3. 울음소리 듣는데
  4. 놀아주기
  5. 종료

선택: 1 입력: 뽀삐 나이 입력: 3 종류 입력(강아지/고양이): 강아지 등록 완료!

4번 선택 → 놀아주기 활동 동물 번호 선택: 1 뽀삐와(과) 놀아요! 울음소리: 멍멍! 현재 행복감 : 10

💡 개선 가능성 (선택 사항)

행복감/배고결정 부분을 추가로 제한

classDiagram 클래스 Animal { - 문자열 이름 - int 나이 - 문자열 종류 - int 행복 - 문자열 소리 + Animal(문자열 이름, int 나이, 문자열 종류) + 문자열 getName() + int getAge() + 문자열 getKind() + int getHappiness() + 문자열 getSound() + void increaseHappiness(int amount) + 문자열 toString() }

class Zoo {
    - List~Animal~ animals
    + void addAnimal(Animal animal)
    + void showAnimals()
    + void playAnimal(int index)
    + void playSound(int index)
    + int getAnimalCount()
}

class Main {
    + main(String[] args)
}

Main --> Zoo
Zoo --> Animal