Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 생성자
- 상수
- Java데이터 타입
- for문
- 메서드
- 접근제어지시자
- 연관관계
- IntelliJ IDEA
- 시스템 환경 변수 편집
- 인텔리제이 기초 설정
- 컴파일
- JAVA객체지향
- java변수
- Java
- 인텔리제이 한글 깨짐 해결법
- 메서드 오버로딩
- Thread
- function
- JAVA기초
- 자바 멀티스레딩
- 반복문
- continue문
- 형 변환
- multi-threading
- this예약어
- break문
- While
- 포함관계
- 집합관계
- OPP개념
Archives
- Today
- Total
최원종의 개발 블로그
전화번호 관리하는 프로그램 만들기 본문
-연습문제-
전화번호부에 저장된 연락처 정보 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 |


