최원종의 개발 블로그

전화번호 관리하는 프로그램 만들기 본문

Java/Java 객체지향

전화번호 관리하는 프로그램 만들기

chl6698 2026. 2. 27. 16:04

-연습문제-

전화번호부에 저장된 연락처 정보 CRUD 기능 구현

 

요구 사항

  • 저장: 사용자가 이름과 전화번호를 입력하여 전화번호부에 저장할 수 있어야 합니다.
  • 조회: 전체 연락처 목록을 조회하거나, 특정 이름으로 연락처를 검색하여 조회할 수 있어야 합니다.
  • 수정: 기존 연락처의 전화번호를 변경할 수 있어야 합니다.
  • 삭제: 전화번호부에서 연락처를 삭제할 수 있어야 합니다.
  • 선택 조회 : 이름을 입력하면 해당 전화번호가 출력 되어야 합니다.
  • Scanner 활용, 입력 받는 데이터 타입은 전부 String 으로 처리
  • 전화번호 저장은 100까지 한정.

전화번호 관리하는 프로그램 코드

 

설계하는 측 코드

package com.tenco.array;

public class Phone {
    private String name;
    private String phoneNumber;

    public Phone(String name, String phoneNumber) {
        this.name = name;
        this.phoneNumber = phoneNumber;
    }

    public String getName() {
        return name;
    }

    public String getPhoneNumber() {
        return phoneNumber;
    }
}

 

실행하는 측 코드

package com.tenco.array;

import java.util.Scanner;

/**
 * - **저장**: 사용자가 이름과 전화번호를 입력하여 전화번호부에 저장할 수 있어야 합니다.
 * - **조회**: 전체 연락처 목록을 조회하거나, 특정 이름으로 연락처를 검색하여 조회할 수 있어야 합니다.
 * - **수정**: 기존 연락처의 전화번호를 변경할 수 있어야 합니다.
 * - **삭제**: 전화번호부에서 연락처를 삭제할 수 있어야 합니다.
 * - **선택 조회** : 이름을 입력하면 해당 전화번호가 출력 되어야 합니다.
 * - **Scanner 활용, 입력 받는 데이터 타입은 전부 String 으로 처리**
 * - **전화번호 저장은 100까지 한정.**
 */

public class MyPhoneTest {

    //현재 저장된 실제 데이터의 개수를 추적하는 공유 변수
    static int LAST_INDEX_NUMBER = 0;

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        //100개의 Book 객체를 담을 수 있는 메모리 공간(Heap)확보
        Phone[] phones = new Phone[100]; //n -1크기 (99)

        //샘플 데이터 초기화
        phones[0] = new Phone("최원종", "010-0000-0000");
        phones[1] = new Phone("홍길동", "010-1111-1111");
        phones[2] = new Phone("유재석", "010-2222-2222");
        phones[3] = new Phone("강호동", "010-3333-3333");
        phones[4] = new Phone("지디", "010-4444-4444");


        //샘플 데이터가 5개이므로 인덱스 관리 변수 (동기화)
        LAST_INDEX_NUMBER = 5;

        //메뉴 선택을 위한 상수 선언(가독성 향상)
        final String SAVE = "1";
        final String SEARCH_ALL = "2";
        final String SEARCH_BY_NUMBER = "3";
        final String DELETE = "4";
        final String UPDATE = "5";
        final String END = "6";

        while (true) {
            System.out.println("\n** 메뉴 선택 **");
            System.out.println("1.저장 2.전체조회 3.선택조회 4.삭제 5.전화번호 수정 6.프로그램 종료 ");

            //엔터키(개행문자)까지 읽어서 버퍼를 깨끗하게 비워줌
            String selectedNumber = sc.nextLine();

            //문자열 비교는 equals사용
            if (selectedNumber.equals(SAVE)) {
                save(phones, sc);
            } else if (selectedNumber.equals(SEARCH_ALL)) {
                readAll(phones);

            } else if (selectedNumber.equals(SEARCH_BY_NUMBER)) {
                readByNumber(sc, phones);

            } else if (selectedNumber.equals(DELETE)) {
                deleteAll(phones);

            } else if (selectedNumber.equals(UPDATE)) {
                upDate(phones, sc);
            } else if (selectedNumber.equals(END)) {
                System.out.println(">>프로그램을 종료합니다<<");
                break; //while문 종료
            } else {
                System.out.println(" >>잘못된 선택입니다. 다시 입력해 주세요<<");
            }
        }//end of while

        System.out.println("정상적인 시스템 종료");
    }//end of main

    /**
     * 저장기능 (Create)
     */
    public static void save(Phone[] phones, Scanner sc) {
        System.out.println("------[휴대폰 번호 저장하기]------");
        //저장 전 공간 확인
        if (LAST_INDEX_NUMBER >= phones.length) {
            System.out.println("저장 공간이 가득 찼습니다");
            return;
        }
        System.out.print("이름 : ");
        String name = sc.next();
        System.out.print("전화번호 : ");
        String phoneNumber = sc.next();

        for (int i = 0; i < phones.length; i++) {
            if (phones[i] == null) {
                phones[i] = new Phone(name.trim(), phoneNumber.trim());
                LAST_INDEX_NUMBER++;
                System.out.println(name + " 전화번호가 성공적으로 저장되었습니다.");
                break;
            }
        }

    }

    /**
     * 전체 조회 기능(Read)
     */
    public static void readAll(Phone[] phones) {
        System.out.println("------[전체 조회하기]------");
        // [주소][주소][주소][주소][주소][null][][][][]...
        boolean isFind = false;
        for (int i = 0; i < phones.length; i++) {
            if (phones[i] != null) {
                System.out.println((i + 1) + "." + phones[i].getName() + " - " + phones[i].getPhoneNumber());
                isFind = true;
            }
        }

        if (isFind == false) {
            System.out.println("저장된 전화번호가 없습니다"); //전체 삭제 후 조회했을 때 번호 없음 출력
        }

    }

    /**
     * 선택 조회 (title 기준)
     */
    public static void readByNumber(Scanner sc, Phone[] phones) {
        System.out.println("-------[선택 조회하기(name)]-------");
        System.out.print("조회할 사람을 입력하세요: ");
        String targetNumber = sc.nextLine();
        boolean isFind = false;
        for (int i = 0; i < phones.length; i++) {

            if (phones[i] != null) {
                if (phones[i].getName().equals(targetNumber.trim())) {
                    System.out.println("[검색결과]" + phones[i].getName() + "," + phones[i].getPhoneNumber());
                    isFind = true;
                    break;
                }
            } else {
                System.out.println("전화번호에 없는 사람입니다");
                return;
            }
        }
    }

    /**
     * 전체 삭제 (delete)
     */
    public static void deleteAll(Phone[] phones) {
        System.out.println("------[전체 삭제하기]------");
        for (int i = 0; i < phones.length; i++) {
            phones[i] = null;
        }
        LAST_INDEX_NUMBER = 0;
        System.out.println("모든 전화번호 정보가 삭제되었습니다.");
    }

    /**
     * 수정하기 (기존 전화번호 수정)
     */
    public static void upDate(Phone[] phones, Scanner sc) {
        System.out.println("------[전화번호 수정하기]-------");
        System.out.println("수정할 전화번호 이름을 입력해 주세요 : ");
        String tarGetUpDateName = sc.nextLine();
        boolean isFind = false;
        for (int i = 0; i < phones.length; i++) {
            if (phones[i] != null) {
                if (phones[i].getName().equals(tarGetUpDateName)) {
                    System.out.print("기존 이름 : " + tarGetUpDateName + " 수정할 이름 : ");
                    String upDateName = sc.next();
                    System.out.print(" 전화번호 수정 : ");
                    String upDateNumber = sc.next();
                    phones[i] = new Phone(upDateName.trim(), upDateNumber.trim());
                    isFind = true;
                    break;
                }
            } else {
                System.out.println("전화번호부에 없는 사람입니다");
            }
        }

    }
}//end of class

 

결과 출력 화면

'Java > Java 객체지향' 카테고리의 다른 글

상속(Inheritance)  (0) 2026.03.04
메서드 오버로딩  (0) 2026.03.03
Array(배열)  (0) 2026.02.27
static함수  (1) 2026.02.26
static키워드 이해  (0) 2026.02.26