연락처 명부(Contact) 클래스를 구현하고 Main에서 명부 등록, 연락처 전체 검색, 연락처 상세 검색, 명부 수정, 종료가 수행되도록 만들어보자.
클래스 조건
연락처 명부 (Contact) 클래스
멤버변수 : 이름, 전화번호, 이메일
매개변수 생성자, 기본 생성자
getter,setter 메소드
Main
등록, 삭제, 수정, 검색 기능 메소드 구현
public static final int MENU_QUIT = 0; // 종료
public static final int MENU_INSERT = 1; // 등록
public static final int MENU_INSERT = 2; // 전체 검색
public static final int MENU_INSERT = 3; // 상세 검색
public static final int MENU_INSERT = 4; // 수정
접근 방법
1. 연락처 명부 클래스를 조건에 맞춰서 만든다.
2. Main에서 연락처를 저장할 배열을 생성한다.
3. 프로그램이 반복되도록 한다.
4. 각 메뉴 기능을 구현한다.
연락처 명부 클래스 (Contact.java)
// 데이터 클래스(이름, 전화번호, 이메일)
public class Contact {
//1. 연락처 명부 클래스를 조건에 맞춰서 만든다.
// 멤버 변수(필드, 프로퍼티)
private String name;//이름
private String phone;//전화번호
private String email;//이메일
// 기본 생성자
public Contact() {
}
// 매개변수가 있는 생성자
public Contact(String name, String phone, String email) {
this.name = name;
this.phone = phone;
this.email = email;
}
// getter, setter 메소드
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
Main
import java.util.Scanner;
public class Main {
public static final int MENU_QUIT = 0; // 종료
public static final int MENU_INSERT = 1; // 등록
public static final int MENU_SELECT_ALL = 2;// 전체 검색
public static final int MENU_SELECT = 3; // 상세 검색
public static final int MENU_UPDATE = 4; // 수정
public static final int MAX = 100;// 연락처 최대 저장 개수
// 2.Main에서 연락처를 저장할 배열을 생성한다.
// 연락처 저장 배열
public static Contact[] contactList = new Contact[MAX];
public static int count = 0; // 배열에 명부정보를 저장하면 증가하는 count
public static Scanner sc = new Scanner(System.in);
public static void main(String[] args) {
System.out.println("연락처 프로그램 ");
// 3. 프로그램이 반복되도록 한다.
boolean run = true; // 반복문 종료용
int select = 0;
//3. 프로그램이 반복되도록 한다.
while (run) {
//4. 각 메뉴 기능을 구현한다.
System.out.println("-------------------------------------------------");
System.out.println("1. 등록 | 2. 전체 검색 | 3. 상세 검색 | 4. 수정 | 0. 종료");
System.out.println("-------------------------------------------------");
System.out.println("선택 :");
select = sc.nextInt();
switch (select) {
case MENU_INSERT:// 숫자 1 입력 시 명부 등록이 진행된다.
System.out.println("----------------------------");
System.out.println("이름: ");
String name = sc.next();
System.out.println("전화번호: ");
String phone = sc.next();
System.out.println("이메일: ");
String email = sc.next();
contactList[count] = new Contact(name, phone, email);// 매개변수가 있는 생성자를 활용해 인스턴스에 명부 정보를 입력한다.
count++; // 명부 등록을 카운트한다.
break;
case MENU_SELECT_ALL:// 숫자 2 입력 시 전체 검색이 진행된다.
if (count == 0) {// 명부가 하나라도 등록되지 않은 경우 메뉴 창으로 돌아간다.
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
for (int i = 0; i < count; i++) {// 총 연락처 명부를 출력한다.
System.out.println(contactList[i]);
}
break;
case MENU_SELECT: // 숫자 3 입력 시 상세 검색이 진행된다.
if (count == 0) {// 명부가 하나라도 등록되지 않은 경우 메뉴 창으로 돌아간다.
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
for (int i = 0; i < count; i++) { // 존재하는 인덱스를 알려준다.
System.out.println("인덱스 [" + i + "]");
}
System.out.println("인덱스 :");
int idx = sc.nextInt();
if (idx > count || idx < 0) {// 잘못된 인덱스 값을 입력하면 메뉴창으로 돌아간다.
System.out.println("잘못된 입력입니다.");
break;
}
// getter 메소드로 해당 인덱스의 명부를 보여준다.
System.out.println("이름: " + contactList[idx].getName());
System.out.println("전화번호: " + contactList[idx].getPhone());
System.out.println("이메일: " + contactList[idx].getEmail());
break;
case MENU_UPDATE: // 숫자 4 입력시 명부 수정이 진행된다.
if (count == 0) {// 명부가 하나라도 등록되지 않은 경우 메뉴 창으로 돌아간다.
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
for (int i = 0; i < count; i++) {// 존재하는 인덱스를 알려준다.
System.out.println("인덱스 [" + i + "]");
}
System.out.println("인덱스 :");
int idx1 = sc.nextInt();
if (idx1 > count || idx1 < 0) {// 잘못된 인덱스 값을 입력하면 메뉴창으로 돌아간다.
System.out.println("잘못된 입력입니다.");
break;
}
// setter 메소드를 통해 명부 정보를 수정한다.
System.out.println("이름: ");
String nameUp = sc.next();
System.out.println("전화번호: ");
String phoneUp = sc.next();
System.out.println("이메일: ");
String emailUp = sc.next();
contactList[idx1].setName(nameUp);
contactList[idx1].setPhone(phoneUp);
contactList[idx1].setEmail(emailUp);
break;
case MENU_QUIT:// 숫자 0 입력 시 프로그램이 종료된다.
run = false;
break;
default: // 이외의 숫자를 입력 시 메뉴창으로 돌아간다.
System.out.println("잘못된 입력 입니다. 다시 입력해 주세요.");
break;
}
}
}
}
Main 명부 등록, 연락처 전체 검색, 연락처 상세 검색, 명부 수정 기능 메소드 화하기
import java.util.Scanner;
public class Main {
public static final int MENU_QUIT = 0; // 종료
public static final int MENU_INSERT = 1; // 등록
public static final int MENU_SELECT_ALL = 2;// 전체 검색
public static final int MENU_SELECT = 3; // 상세 검색
public static final int MENU_UPDATE = 4; // 수정
public static final int MAX = 100;// 연락처 최대 저장 개수
// 연락처 저장 배열
public static Contact[] contactList = new Contact[MAX];
public static int count = 0; // 배열에 데이터를 저장하면 증가하는 count
public static int idx=0;//입력할 인덱스 값
public static boolean check=false; // 참, 거짓
public static Scanner sc = new Scanner(System.in);
private static void showMainMenu() { //메뉴 선택 창 출력
System.out.println("-------------------------------------------------");
System.out.println("1. 등록 | 2. 전체 검색 | 3. 상세 검색 | 4. 수정 | 0. 종료");
System.out.println("-------------------------------------------------");
System.out.println("선택 :");
}
private static void insertContact() { //명부 등록
System.out.println("----------------------------");
System.out.println("이름: ");
String name = sc.next();
System.out.println("전화번호: ");
String phone = sc.next();
System.out.println("이메일: ");
String email = sc.next();
contactList[count] = new Contact(name, phone, email);
count++;
}
private static boolean checkInsertFirst() { //등록이 먼저 진행되었는지 확인
if (count == 0) {
check = true;
} else
check = false;
return check;
}
private static void printContactList() { // 연락처 총 출력
for (int i = 0; i < count; i++) {
System.out.println(contactList[i]);
}
}
private static void findContactIndex() {//연락처 인덱스 찾기
for (int i = 0; i < count; i++) {
System.out.println("인덱스 [" + i + "]");
}
System.out.println("인덱스 :");
idx = sc.nextInt();
}
private static boolean checkContactIndex() {// 연락처 인덱스 존재 유무 판단
if(idx>=count || idx<0) {
check =true;
}
else check =false;
return check;
}
private static void printContact() { //해당 연락처 출력
System.out.println("이름: " + contactList[idx].getName());
System.out.println("전화번호: " + contactList[idx].getPhone());
System.out.println("이메일: " + contactList[idx].getEmail());
}
private static void modifyContact() {// 해당 연락처 수정
System.out.println("이름: ");
String nameUp = sc.next();
System.out.println("전화번호: ");
String phoneUp = sc.next();
System.out.println("이메일: ");
String emailUp = sc.next();
contactList[idx].setName(nameUp);
contactList[idx].setPhone(phoneUp);
contactList[idx].setEmail(emailUp);
}
public static void main(String[] args) {
System.out.println("연락처 프로그램 version 0.1");
boolean run = true; // 반복문 종료용
int select = 0;
while (run) {
showMainMenu();
select = sc.nextInt();
switch (select) {
case MENU_INSERT:
insertContact();
break;
case MENU_SELECT_ALL:
if (checkInsertFirst() == true) {
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
printContactList();
break;
case MENU_SELECT:
if (checkInsertFirst() == true) {
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
findContactIndex();
if (checkContactIndex()==true) {
System.out.println("잘못된 입력입니다.");
break;
}
printContact();
break;
case MENU_UPDATE:
if (checkInsertFirst() == true) {
System.out.println("먼저 연락처 등록을 하세요.");
break;
}
findContactIndex();
if (checkContactIndex()==true) {
System.out.println("잘못된 입력입니다.");
break;
}
modifyContact();
break;
case MENU_QUIT:
run = false;
break;
default:
System.out.println("잘못된 입력 입니다. 다시 입력해 주세요.");
break;
}
}
}
}