자바기초) 클래스, getter, setter 활용 퀴즈 : 연락처 프로그램

박대현·2023년 1월 30일
0

자바 기초 활용

목록 보기
14/22

연락처 명부(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;
			}
		} 
	}
}

0개의 댓글